.class Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle; .super Ljava/lang/Object; .source "NTLMEngineImpl.java" # annotations .annotation system Ldalvik/annotation/EnclosingClass; value = Lorg/apache/http/impl/auth/NTLMEngineImpl; .end annotation .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x8 name = "Handle" .end annotation # instance fields .field private final exportedSessionKey:[B .field private final isConnection:Z .field final mode:Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode; .field private final rc4:Ljavax/crypto/Cipher; .field private sealingKey:[B .field sequenceNumber:I .field private signingKey:[B # direct methods .method constructor ([BLorg/apache/http/impl/auth/NTLMEngineImpl$Mode;Z)V .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 780 invoke-direct {p0}, Ljava/lang/Object;->()V const/4 v0, 0x0 .line 775 iput v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I .line 781 iput-object p1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->exportedSessionKey:[B .line 782 iput-boolean p3, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->isConnection:Z .line 783 iput-object p2, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->mode:Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode; .line 786 :try_start_c invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->getMD5()Ljava/security/MessageDigest; move-result-object p3 .line 787 invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->getMD5()Ljava/security/MessageDigest; move-result-object v0 .line 788 invoke-virtual {p3, p1}, Ljava/security/MessageDigest;->update([B)V .line 789 invoke-virtual {v0, p1}, Ljava/security/MessageDigest;->update([B)V .line 790 sget-object p1, Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode;->CLIENT:Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode; if-ne p2, p1, :cond_2d .line 792 # getter for: Lorg/apache/http/impl/auth/NTLMEngineImpl;->SIGN_MAGIC_CLIENT:[B invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1100()[B move-result-object p1 invoke-virtual {p3, p1}, Ljava/security/MessageDigest;->update([B)V .line 793 # getter for: Lorg/apache/http/impl/auth/NTLMEngineImpl;->SEAL_MAGIC_CLIENT:[B invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1200()[B move-result-object p1 invoke-virtual {v0, p1}, Ljava/security/MessageDigest;->update([B)V goto :goto_3b .line 797 :cond_2d # getter for: Lorg/apache/http/impl/auth/NTLMEngineImpl;->SIGN_MAGIC_SERVER:[B invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1300()[B move-result-object p1 invoke-virtual {p3, p1}, Ljava/security/MessageDigest;->update([B)V .line 798 # getter for: Lorg/apache/http/impl/auth/NTLMEngineImpl;->SEAL_MAGIC_SERVER:[B invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1400()[B move-result-object p1 invoke-virtual {v0, p1}, Ljava/security/MessageDigest;->update([B)V .line 800 :goto_3b invoke-virtual {p3}, Ljava/security/MessageDigest;->digest()[B move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->signingKey:[B .line 801 invoke-virtual {v0}, Ljava/security/MessageDigest;->digest()[B move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B :try_end_47 .catch Ljava/lang/Exception; {:try_start_c .. :try_end_47} :catch_4e .line 807 invoke-direct {p0}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->initCipher()Ljavax/crypto/Cipher; move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->rc4:Ljavax/crypto/Cipher; return-void :catch_4e move-exception p1 .line 805 new-instance p2, Lorg/apache/http/impl/auth/NTLMEngineException; invoke-virtual {p1}, Ljava/lang/Exception;->getMessage()Ljava/lang/String; move-result-object p3 invoke-direct {p2, p3, p1}, Lorg/apache/http/impl/auth/NTLMEngineException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p2 .end method .method private advanceMessageSequence()V .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 846 iget-boolean v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->isConnection:Z if-nez v0, :cond_22 .line 848 invoke-static {}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->getMD5()Ljava/security/MessageDigest; move-result-object v0 .line 849 iget-object v1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B invoke-virtual {v0, v1}, Ljava/security/MessageDigest;->update([B)V const/4 v1, 0x4 .line 850 new-array v1, v1, [B .line 851 iget v2, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I const/4 v3, 0x0 invoke-static {v1, v2, v3}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->writeULong([BII)V .line 852 invoke-virtual {v0, v1}, Ljava/security/MessageDigest;->update([B)V .line 853 invoke-virtual {v0}, Ljava/security/MessageDigest;->digest()[B move-result-object v0 iput-object v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B .line 854 invoke-direct {p0}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->initCipher()Ljavax/crypto/Cipher; .line 856 :cond_22 iget v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I add-int/lit8 v0, v0, 0x1 iput v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I return-void .end method .method private computeSignature([B)[B .registers 6 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation const/16 v0, 0x10 .line 871 new-array v0, v0, [B const/4 v1, 0x0 const/4 v2, 0x1 .line 874 aput-byte v2, v0, v1 .line 875 aput-byte v1, v0, v2 const/4 v2, 0x2 .line 876 aput-byte v1, v0, v2 const/4 v2, 0x3 .line 877 aput-byte v1, v0, v2 .line 880 new-instance v2, Lorg/apache/http/impl/auth/NTLMEngineImpl$HMACMD5; iget-object v3, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->signingKey:[B invoke-direct {v2, v3}, Lorg/apache/http/impl/auth/NTLMEngineImpl$HMACMD5;->([B)V .line 881 iget v3, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I # invokes: Lorg/apache/http/impl/auth/NTLMEngineImpl;->encodeLong(I)[B invoke-static {v3}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1500(I)[B move-result-object v3 invoke-virtual {v2, v3}, Lorg/apache/http/impl/auth/NTLMEngineImpl$HMACMD5;->update([B)V .line 882 invoke-virtual {v2, p1}, Lorg/apache/http/impl/auth/NTLMEngineImpl$HMACMD5;->update([B)V .line 883 invoke-virtual {v2}, Lorg/apache/http/impl/auth/NTLMEngineImpl$HMACMD5;->getOutput()[B move-result-object p1 const/16 v2, 0x8 .line 884 new-array v3, v2, [B .line 885 invoke-static {p1, v1, v3, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 886 invoke-direct {p0, v3}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->encrypt([B)[B move-result-object p1 const/4 v3, 0x4 .line 887 invoke-static {p1, v1, v0, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V const/16 p1, 0xc .line 890 iget v1, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sequenceNumber:I # invokes: Lorg/apache/http/impl/auth/NTLMEngineImpl;->encodeLong([BII)V invoke-static {v0, p1, v1}, Lorg/apache/http/impl/auth/NTLMEngineImpl;->access$1600([BII)V return-object v0 .end method .method private decrypt([B)[B .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 866 iget-object v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->rc4:Ljavax/crypto/Cipher; invoke-virtual {v0, p1}, Ljavax/crypto/Cipher;->update([B)[B move-result-object p1 return-object p1 .end method .method private encrypt([B)[B .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 861 iget-object v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->rc4:Ljavax/crypto/Cipher; invoke-virtual {v0, p1}, Ljavax/crypto/Cipher;->update([B)[B move-result-object p1 return-object p1 .end method .method private initCipher()Ljavax/crypto/Cipher; .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 826 const-string v0, "RC4" :try_start_2 invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher; move-result-object v1 .line 827 iget-object v2, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->mode:Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode; sget-object v3, Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode;->CLIENT:Lorg/apache/http/impl/auth/NTLMEngineImpl$Mode; if-ne v2, v3, :cond_18 .line 829 new-instance v2, Ljavax/crypto/spec/SecretKeySpec; iget-object v3, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B invoke-direct {v2, v3, v0}, Ljavax/crypto/spec/SecretKeySpec;->([BLjava/lang/String;)V const/4 v0, 0x1 invoke-virtual {v1, v0, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V goto :goto_23 .line 833 :cond_18 new-instance v2, Ljavax/crypto/spec/SecretKeySpec; iget-object v3, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B invoke-direct {v2, v3, v0}, Ljavax/crypto/spec/SecretKeySpec;->([BLjava/lang/String;)V const/4 v0, 0x2 invoke-virtual {v1, v0, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V :try_end_23 .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_23} :catch_24 :goto_23 return-object v1 :catch_24 move-exception v0 .line 838 new-instance v1, Lorg/apache/http/impl/auth/NTLMEngineException; invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String; move-result-object v2 invoke-direct {v1, v2, v0}, Lorg/apache/http/impl/auth/NTLMEngineException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw v1 .end method .method private validateSignature([B[B)Z .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 897 invoke-direct {p0, p2}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->computeSignature([B)[B move-result-object p2 .line 901 invoke-static {p1, p2}, Ljava/util/Arrays;->equals([B[B)Z move-result p1 return p1 .end method # virtual methods .method public decryptAndVerifySignedMessage([B)[B .registers 7 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation const/16 v0, 0x10 .line 917 new-array v1, v0, [B const/4 v2, 0x0 .line 918 invoke-static {p1, v2, v1, v2, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 919 array-length v3, p1 sub-int/2addr v3, v0 new-array v4, v3, [B .line 920 invoke-static {p1, v0, v4, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 921 invoke-direct {p0, v4}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->decrypt([B)[B move-result-object p1 .line 922 invoke-direct {p0, v1, p1}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->validateSignature([B[B)Z move-result v0 if-eqz v0, :cond_1d .line 926 invoke-direct {p0}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->advanceMessageSequence()V return-object p1 .line 924 :cond_1d new-instance p1, Lorg/apache/http/impl/auth/NTLMEngineException; const-string v0, "Wrong signature" invoke-direct {p1, v0}, Lorg/apache/http/impl/auth/NTLMEngineException;->(Ljava/lang/String;)V throw p1 .end method .method public getSealingKey()[B .registers 2 .line 818 iget-object v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->sealingKey:[B return-object v0 .end method .method public getSigningKey()[B .registers 2 .line 812 iget-object v0, p0, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->signingKey:[B return-object v0 .end method .method public signAndEncryptMessage([B)[B .registers 6 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/impl/auth/NTLMEngineException; } .end annotation .line 906 invoke-direct {p0, p1}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->encrypt([B)[B move-result-object v0 .line 907 invoke-direct {p0, p1}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->computeSignature([B)[B move-result-object p1 .line 908 array-length v1, p1 array-length v2, v0 add-int/2addr v1, v2 new-array v1, v1, [B .line 909 array-length v2, p1 const/4 v3, 0x0 invoke-static {p1, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 910 array-length p1, p1 array-length v2, v0 invoke-static {v0, v3, v1, p1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 911 invoke-direct {p0}, Lorg/apache/http/impl/auth/NTLMEngineImpl$Handle;->advanceMessageSequence()V return-object v1 .end method