final class com.sun.security.sasl.CramMD5Client extends com.sun.security.sasl.CramMD5Base implements javax.security.sasl.SaslClient
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.security.sasl.CramMD5Client
  super_class: com.sun.security.sasl.CramMD5Base
{
  private java.lang.String username;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  void <init>(java.lang.String, byte[]);
    descriptor: (Ljava/lang/String;[B)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.sun.security.sasl.CramMD5Client this
        start local 1 // java.lang.String authID
        start local 2 // byte[] pw
         0: .line 58
            aload 0 /* this */
            invokespecial com.sun.security.sasl.CramMD5Base.<init>:()V
         1: .line 59
            aload 1 /* authID */
            ifnull 2
            aload 2 /* pw */
            ifnonnull 5
         2: .line 60
      StackMap locals: com.sun.security.sasl.CramMD5Client java.lang.String byte[]
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
         3: .line 61
            ldc "CRAM-MD5: authentication ID and password must be specified"
         4: .line 60
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 64
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* authID */
            putfield com.sun.security.sasl.CramMD5Client.username:Ljava/lang/String;
         6: .line 65
            aload 0 /* this */
            aload 2 /* pw */
            putfield com.sun.security.sasl.CramMD5Client.pw:[B
         7: .line 66
            return
        end local 2 // byte[] pw
        end local 1 // java.lang.String authID
        end local 0 // com.sun.security.sasl.CramMD5Client this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    8     0    this  Lcom/sun/security/sasl/CramMD5Client;
            0    8     1  authID  Ljava/lang/String;
            0    8     2      pw  [B
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
        Name  Flags
      authID  
      pw      

  public boolean hasInitialResponse();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.security.sasl.CramMD5Client this
         0: .line 72
            iconst_0
            ireturn
        end local 0 // com.sun.security.sasl.CramMD5Client this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/security/sasl/CramMD5Client;

  public byte[] evaluateChallenge(byte[]);
    descriptor: ([B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=2
        start local 0 // com.sun.security.sasl.CramMD5Client this
        start local 1 // byte[] challengeData
         0: .line 92
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.completed:Z
            ifeq 4
         1: .line 93
            new java.lang.IllegalStateException
            dup
         2: .line 94
            ldc "CRAM-MD5 authentication already completed"
         3: .line 93
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.aborted:Z
            ifeq 8
         5: .line 98
            new java.lang.IllegalStateException
            dup
         6: .line 99
            ldc "CRAM-MD5 authentication previously aborted due to error"
         7: .line 98
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 104
      StackMap locals:
      StackMap stack:
            getstatic com.sun.security.sasl.CramMD5Client.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 12
         9: .line 105
            getstatic com.sun.security.sasl.CramMD5Client.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "CRAMCLNT01:Received challenge: {0}"
        10: .line 106
            new java.lang.String
            dup
            aload 1 /* challengeData */
            ldc "UTF8"
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
        11: .line 105
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        12: .line 109
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.pw:[B
            aload 1 /* challengeData */
            invokestatic com.sun.security.sasl.CramMD5Client.HMAC_MD5:([B[B)Ljava/lang/String;
            astore 2 /* digest */
        start local 2 // java.lang.String digest
        13: .line 112
            aload 0 /* this */
            invokevirtual com.sun.security.sasl.CramMD5Client.clearPassword:()V
        14: .line 115
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.username:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* digest */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 3 /* resp */
        start local 3 // java.lang.String resp
        15: .line 117
            getstatic com.sun.security.sasl.CramMD5Client.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "CRAMCLNT02:Sending response: {0}"
            aload 3 /* resp */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        16: .line 119
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.CramMD5Client.completed:Z
        17: .line 121
            aload 3 /* resp */
            ldc "UTF8"
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
        18: areturn
        end local 3 // java.lang.String resp
        end local 2 // java.lang.String digest
        19: .line 122
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 2 /* e */
        start local 2 // java.security.NoSuchAlgorithmException e
        20: .line 123
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.CramMD5Client.aborted:Z
        21: .line 124
            new javax.security.sasl.SaslException
            dup
            ldc "MD5 algorithm not available on platform"
            aload 2 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.NoSuchAlgorithmException e
        22: .line 125
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 2 /* e */
        start local 2 // java.io.UnsupportedEncodingException e
        23: .line 126
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.CramMD5Client.aborted:Z
        24: .line 127
            new javax.security.sasl.SaslException
            dup
            ldc "UTF8 not available on platform"
            aload 2 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.io.UnsupportedEncodingException e
        end local 1 // byte[] challengeData
        end local 0 // com.sun.security.sasl.CramMD5Client this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   25     0           this  Lcom/sun/security/sasl/CramMD5Client;
            0   25     1  challengeData  [B
           13   19     2         digest  Ljava/lang/String;
           15   19     3           resp  Ljava/lang/String;
           20   22     2              e  Ljava/security/NoSuchAlgorithmException;
           23   25     2              e  Ljava/io/UnsupportedEncodingException;
      Exception table:
        from    to  target  type
           8    18      19  Class java.security.NoSuchAlgorithmException
           8    18      22  Class java.io.UnsupportedEncodingException
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
               Name  Flags
      challengeData  
}
SourceFile: "CramMD5Client.java"