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 60
            aload 0 /* this */
            invokespecial com.sun.security.sasl.CramMD5Base.<init>:()V
         1: .line 61
            aload 1 /* authID */
            ifnull 2
            aload 2 /* pw */
            ifnonnull 5
         2: .line 62
      StackMap locals: com.sun.security.sasl.CramMD5Client java.lang.String byte[]
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
         3: .line 63
            ldc "CRAM-MD5: authentication ID and password must be specified"
         4: .line 62
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 66
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* authID */
            putfield com.sun.security.sasl.CramMD5Client.username:Ljava/lang/String;
         6: .line 67
            aload 0 /* this */
            aload 2 /* pw */
            putfield com.sun.security.sasl.CramMD5Client.pw:[B
         7: .line 68
            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 74
            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 94
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.completed:Z
            ifeq 4
         1: .line 95
            new java.lang.IllegalStateException
            dup
         2: .line 96
            ldc "CRAM-MD5 authentication already completed"
         3: .line 95
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 99
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.CramMD5Client.aborted:Z
            ifeq 8
         5: .line 100
            new java.lang.IllegalStateException
            dup
         6: .line 101
            ldc "CRAM-MD5 authentication previously aborted due to error"
         7: .line 100
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 106
      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 107
            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 108
            new java.lang.String
            dup
            aload 1 /* challengeData */
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokespecial java.lang.String.<init>:([BLjava/nio/charset/Charset;)V
        11: .line 107
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        12: .line 111
      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 114
            aload 0 /* this */
            invokevirtual com.sun.security.sasl.CramMD5Client.clearPassword:()V
        14: .line 117
            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 119
            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 121
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.CramMD5Client.completed:Z
        17: .line 123
            aload 3 /* resp */
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
        18: areturn
        end local 3 // java.lang.String resp
        end local 2 // java.lang.String digest
        19: .line 124
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 2 /* e */
        start local 2 // java.security.NoSuchAlgorithmException e
        20: .line 125
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.CramMD5Client.aborted:Z
        21: .line 126
            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
        end local 1 // byte[] challengeData
        end local 0 // com.sun.security.sasl.CramMD5Client this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   22     0           this  Lcom/sun/security/sasl/CramMD5Client;
            0   22     1  challengeData  [B
           13   19     2         digest  Ljava/lang/String;
           15   19     3           resp  Ljava/lang/String;
           20   22     2              e  Ljava/security/NoSuchAlgorithmException;
      Exception table:
        from    to  target  type
           8    18      19  Class java.security.NoSuchAlgorithmException
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
               Name  Flags
      challengeData  
}
SourceFile: "CramMD5Client.java"