final class com.sun.security.sasl.digest.DigestMD5Server extends com.sun.security.sasl.digest.DigestMD5Base implements javax.security.sasl.SaslServer
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.security.sasl.digest.DigestMD5Server
  super_class: com.sun.security.sasl.digest.DigestMD5Base
{
  private static final java.lang.String MY_CLASS_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String UTF8_DIRECTIVE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "charset=utf-8,"

  private static final java.lang.String ALGORITHM_DIRECTIVE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "algorithm=md5-sess"

  private static final int NONCE_COUNT_VALUE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final java.lang.String UTF8_PROPERTY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.sun.security.sasl.digest.utf8"

  private static final java.lang.String REALM_PROPERTY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.sun.security.sasl.digest.realm"

  private static final java.lang.String[] DIRECTIVE_KEY;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final int USERNAME;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int REALM;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int NONCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int CNONCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private static final int NONCE_COUNT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final int QOP;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final int DIGEST_URI;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 6

  private static final int RESPONSE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 7

  private static final int MAXBUF;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  private static final int CHARSET;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 9

  private static final int CIPHER;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 10

  private static final int AUTHZID;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 11

  private static final int AUTH_PARAM;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 12

  private java.lang.String specifiedQops;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private byte[] myCiphers;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<java.lang.String> serverRealms;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljava/lang/String;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 87
            ldc Lcom/sun/security/sasl/digest/DigestMD5Server;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            putstatic com.sun.security.sasl.digest.DigestMD5Server.MY_CLASS_NAME:Ljava/lang/String;
         1: .line 107
            bipush 13
            anewarray java.lang.String
            dup
            iconst_0
         2: .line 108
            ldc "username"
            aastore
            dup
            iconst_1
         3: .line 109
            ldc "realm"
            aastore
            dup
            iconst_2
         4: .line 110
            ldc "nonce"
            aastore
            dup
            iconst_3
         5: .line 111
            ldc "cnonce"
            aastore
            dup
            iconst_4
         6: .line 112
            ldc "nonce-count"
            aastore
            dup
            iconst_5
         7: .line 113
            ldc "qop"
            aastore
            dup
            bipush 6
         8: .line 114
            ldc "digest-uri"
            aastore
            dup
            bipush 7
         9: .line 115
            ldc "response"
            aastore
            dup
            bipush 8
        10: .line 116
            ldc "maxbuf"
            aastore
            dup
            bipush 9
        11: .line 117
            ldc "charset"
            aastore
            dup
            bipush 10
        12: .line 118
            ldc "cipher"
            aastore
            dup
            bipush 11
        13: .line 119
            ldc "authzid"
            aastore
            dup
            bipush 12
        14: .line 120
            ldc "auth-param"
            aastore
        15: .line 107
            putstatic com.sun.security.sasl.digest.DigestMD5Server.DIRECTIVE_KEY:[Ljava/lang/String;
        16: .line 136
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(java.lang.String, java.lang.String, java.util.Map<java.lang.String, ?>, javax.security.auth.callback.CallbackHandler);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)V
    flags: (0x0000) 
    Code:
      stack=7, locals=10, args_size=5
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.lang.String protocol
        start local 2 // java.lang.String serverName
        start local 3 // java.util.Map props
        start local 4 // javax.security.auth.callback.CallbackHandler cbh
         0: .line 145
            aload 0 /* this */
            aload 3 /* props */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.MY_CLASS_NAME:Ljava/lang/String;
            iconst_1
         1: .line 146
            new java.lang.StringBuilder
            dup
            aload 1 /* protocol */
            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 /* serverName */
            ifnonnull 2
            ldc "*"
            goto 3
      StackMap locals: uninitialized-this java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack: uninitialized-this java.util.Map java.lang.String int java.lang.StringBuilder
         2: aload 2 /* serverName */
      StackMap locals: uninitialized-this java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack: uninitialized-this java.util.Map java.lang.String int java.lang.StringBuilder java.lang.String
         3: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         4: .line 147
            aload 4 /* cbh */
            invokespecial com.sun.security.sasl.digest.DigestMD5Base.<init>:(Ljava/util/Map;Ljava/lang/String;ILjava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)V
         5: .line 149
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
         6: .line 151
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
         7: .line 153
            aload 3 /* props */
            ifnull 26
         8: .line 154
            aload 0 /* this */
            aload 3 /* props */
            ldc "javax.security.sasl.qop"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.specifiedQops:Ljava/lang/String;
         9: .line 155
            ldc "false"
            aload 3 /* props */
            ldc "com.sun.security.sasl.digest.utf8"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 12
        10: .line 156
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
        11: .line 157
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST80:Server supports ISO-Latin-1"
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;)V
        12: .line 160
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack:
            aload 3 /* props */
            ldc "com.sun.security.sasl.digest.realm"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 5 /* realms */
        start local 5 // java.lang.String realms
        13: .line 161
            aload 5 /* realms */
            ifnull 26
        14: .line 162
            new java.util.StringTokenizer
            dup
            aload 5 /* realms */
            ldc ", \t\n"
            invokespecial java.util.StringTokenizer.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 6 /* parser */
        start local 6 // java.util.StringTokenizer parser
        15: .line 163
            aload 6 /* parser */
            invokevirtual java.util.StringTokenizer.countTokens:()I
            istore 7 /* tokenCount */
        start local 7 // int tokenCount
        16: .line 164
            aconst_null
            astore 8 /* token */
        start local 8 // java.lang.String token
        17: .line 165
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        18: goto 25
        19: .line 166
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler java.lang.String java.util.StringTokenizer int java.lang.String int
      StackMap stack:
            aload 6 /* parser */
            invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
            astore 8 /* token */
        20: .line 167
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST81:Server supports realm {0}"
        21: .line 168
            aload 8 /* token */
        22: .line 167
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        23: .line 169
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 8 /* token */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        24: .line 165
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        25: iload 9 /* i */
            iload 7 /* tokenCount */
            if_icmplt 19
        end local 9 // int i
        end local 8 // java.lang.String token
        end local 7 // int tokenCount
        end local 6 // java.util.StringTokenizer parser
        end local 5 // java.lang.String realms
        26: .line 174
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 27
            ldc "UTF8"
            goto 28
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        27: ldc "8859_1"
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
        28: putfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
        29: .line 177
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 35
        30: .line 178
            aload 2 /* serverName */
            ifnonnull 34
        31: .line 179
            new javax.security.sasl.SaslException
            dup
        32: .line 180
            ldc "A realm must be provided in props or serverName"
        33: .line 179
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        34: .line 182
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 2 /* serverName */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        35: .line 185
      StackMap locals:
      StackMap stack:
            return
        end local 4 // javax.security.auth.callback.CallbackHandler cbh
        end local 3 // java.util.Map props
        end local 2 // java.lang.String serverName
        end local 1 // java.lang.String protocol
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   36     0        this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   36     1    protocol  Ljava/lang/String;
            0   36     2  serverName  Ljava/lang/String;
            0   36     3       props  Ljava/util/Map<Ljava/lang/String;*>;
            0   36     4         cbh  Ljavax/security/auth/callback/CallbackHandler;
           13   26     5      realms  Ljava/lang/String;
           15   26     6      parser  Ljava/util/StringTokenizer;
           16   26     7  tokenCount  I
           17   26     8       token  Ljava/lang/String;
           18   26     9           i  I
    Exceptions:
      throws javax.security.sasl.SaslException
    Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;*>;Ljavax/security/auth/callback/CallbackHandler;)V
    MethodParameters:
            Name  Flags
      protocol    
      serverName  
      props       
      cbh         

  public byte[] evaluateResponse(byte[]);
    descriptor: ([B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // byte[] response
         0: .line 188
            aload 1 /* response */
            arraylength
            sipush 4096
            if_icmple 6
         1: .line 189
            new javax.security.sasl.SaslException
            dup
         2: .line 190
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: Invalid digest response length. Got:  "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 191
            aload 1 /* response */
            arraylength
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " Expected < "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            sipush 4096
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         4: .line 190
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 189
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 195
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.step:I
            tableswitch { // 1 - 3
                    1: 7
                    2: 60
                    3: 38
              default: 60
          }
         7: .line 197
      StackMap locals:
      StackMap stack:
            aload 1 /* response */
            arraylength
            ifeq 11
         8: .line 198
            new javax.security.sasl.SaslException
            dup
         9: .line 199
            ldc "DIGEST-MD5 must not have an initial response"
        10: .line 198
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 203
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* supportedCiphers */
        start local 3 // java.lang.String supportedCiphers
        12: .line 204
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.allQop:B
            iconst_4
            iand
            ifeq 24
        13: .line 205
            aload 0 /* this */
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.getPlatformCiphers:()[B
            putfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
        14: .line 206
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 4 /* sb */
        start local 4 // java.lang.StringBuilder sb
        15: .line 210
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        16: goto 22
        17: .line 211
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[] top java.lang.String java.lang.StringBuilder int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
            iload 5 /* i */
            baload
            ifeq 21
        18: .line 212
            aload 4 /* sb */
            invokevirtual java.lang.StringBuilder.length:()I
            ifle 20
        19: .line 213
            aload 4 /* sb */
            bipush 44
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        20: .line 215
      StackMap locals:
      StackMap stack:
            aload 4 /* sb */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            iload 5 /* i */
            aaload
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        21: .line 210
      StackMap locals:
      StackMap stack:
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        22: iload 5 /* i */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            arraylength
            if_icmplt 17
        end local 5 // int i
        23: .line 218
            aload 4 /* sb */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 3 /* supportedCiphers */
        end local 4 // java.lang.StringBuilder sb
        24: .line 222
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.specifiedQops:Ljava/lang/String;
        25: .line 223
            aload 3 /* supportedCiphers */
        26: .line 222
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateChallenge:(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)[B
            astore 2 /* challenge */
        start local 2 // byte[] challenge
        27: .line 225
            aload 0 /* this */
            iconst_3
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        28: .line 226
            aload 2 /* challenge */
        29: areturn
        end local 2 // byte[] challenge
        30: .line 227
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 4 /* e */
        start local 4 // java.io.UnsupportedEncodingException e
        31: .line 228
            new javax.security.sasl.SaslException
            dup
        32: .line 229
            ldc "DIGEST-MD5: Error encoding challenge"
            aload 4 /* e */
        33: .line 228
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.UnsupportedEncodingException e
        34: .line 230
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 4 /* e */
        start local 4 // java.io.IOException e
        35: .line 231
            new javax.security.sasl.SaslException
            dup
        36: .line 232
            ldc "DIGEST-MD5: Error generating challenge"
            aload 4 /* e */
        37: .line 231
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.IOException e
        end local 3 // java.lang.String supportedCiphers
        38: .line 242
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[]
      StackMap stack:
            aload 1 /* response */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.DIRECTIVE_KEY:[Ljava/lang/String;
        39: .line 243
            aconst_null
            iconst_1
        40: .line 242
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.parseDirectives:([B[Ljava/lang/String;Ljava/util/List;I)[[B
            astore 4 /* responseVal */
        start local 4 // byte[][] responseVal
        41: .line 244
            aload 0 /* this */
            aload 4 /* responseVal */
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.validateClientResponse:([[B)[B
            astore 2 /* challenge */
        end local 4 // byte[][] responseVal
        start local 2 // byte[] challenge
        42: .line 245
            goto 52
        end local 2 // byte[] challenge
      StackMap locals:
      StackMap stack: javax.security.sasl.SaslException
        43: astore 4 /* e */
        start local 4 // javax.security.sasl.SaslException e
        44: .line 246
            aload 4 /* e */
            athrow
        end local 4 // javax.security.sasl.SaslException e
        45: .line 247
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 4 /* e */
        start local 4 // java.io.UnsupportedEncodingException e
        46: .line 248
            new javax.security.sasl.SaslException
            dup
        47: .line 249
            ldc "DIGEST-MD5: Error validating client response"
            aload 4 /* e */
        48: .line 248
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.UnsupportedEncodingException e
        49: .line 250
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 5
        50: .line 251
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        51: .line 252
            aload 5
            athrow
        start local 2 // byte[] challenge
        52: .line 251
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        53: .line 254
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.completed:Z
        54: .line 257
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
            ifeq 57
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            ifeq 57
        55: .line 258
            aload 0 /* this */
            new com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy
            dup
            aload 0 /* this */
            iconst_0
            invokespecial com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy.<init>:(Lcom/sun/security/sasl/digest/DigestMD5Base;Z)V
            putfield com.sun.security.sasl.digest.DigestMD5Server.secCtx:Lcom/sun/security/sasl/digest/SecurityCtx;
        56: .line 259
            goto 59
      StackMap locals:
      StackMap stack:
        57: aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
            ifeq 59
        58: .line 260
            aload 0 /* this */
            new com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity
            dup
            aload 0 /* this */
            iconst_0
            invokespecial com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity.<init>:(Lcom/sun/security/sasl/digest/DigestMD5Base;Z)V
            putfield com.sun.security.sasl.digest.DigestMD5Server.secCtx:Lcom/sun/security/sasl/digest/SecurityCtx;
        59: .line 263
      StackMap locals:
      StackMap stack:
            aload 2 /* challenge */
            areturn
        end local 2 // byte[] challenge
        60: .line 267
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: Server at illegal state"
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // byte[] response
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   61     0              this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   61     1          response  [B
           27   30     2         challenge  [B
           42   43     2         challenge  [B
           52   60     2         challenge  [B
           12   38     3  supportedCiphers  Ljava/lang/String;
           15   24     4                sb  Ljava/lang/StringBuilder;
           16   23     5                 i  I
           31   34     4                 e  Ljava/io/UnsupportedEncodingException;
           35   38     4                 e  Ljava/io/IOException;
           41   42     4       responseVal  [[B
           44   45     4                 e  Ljavax/security/sasl/SaslException;
           46   49     4                 e  Ljava/io/UnsupportedEncodingException;
      Exception table:
        from    to  target  type
          24    29      30  Class java.io.UnsupportedEncodingException
          24    29      34  Class java.io.IOException
          38    42      43  Class javax.security.sasl.SaslException
          38    42      45  Class java.io.UnsupportedEncodingException
          38    49      49  any
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
          Name  Flags
      response  

  private byte[] generateChallenge(java.util.List<java.lang.String>, java.lang.String, java.lang.String);
    descriptor: (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.util.List realms
        start local 2 // java.lang.String qopStr
        start local 3 // java.lang.String cipherStr
         0: .line 297
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            astore 4 /* out */
        start local 4 // java.io.ByteArrayOutputStream out
         1: .line 300
            iconst_0
            istore 5 /* i */
        start local 5 // int i
         2: goto 8
         3: .line 301
      StackMap locals: java.io.ByteArrayOutputStream int
      StackMap stack:
            aload 4 /* out */
            ldc "realm=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
         4: .line 302
            aload 4 /* out */
            aload 1 /* realms */
            iload 5 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
         5: .line 303
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
         6: .line 304
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
         7: .line 300
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: aload 1 /* realms */
            ifnull 9
            iload 5 /* i */
            aload 1 /* realms */
            invokeinterface java.util.List.size:()I
            if_icmplt 3
        end local 5 // int i
         9: .line 308
      StackMap locals:
      StackMap stack:
            aload 4 /* out */
            ldc "nonce=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        10: .line 309
            aload 0 /* this */
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.generateNonce:()[B
            putfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
        11: .line 310
            aload 4 /* out */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        12: .line 311
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        13: .line 312
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        14: .line 316
            aload 2 /* qopStr */
            ifnull 19
        15: .line 317
            aload 4 /* out */
            ldc "qop=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        16: .line 319
            aload 4 /* out */
            aload 2 /* qopStr */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        17: .line 320
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        18: .line 321
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        19: .line 325
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.recvMaxBufSize:I
            ldc 65536
            if_icmpeq 21
        20: .line 326
            aload 4 /* out */
            new java.lang.StringBuilder
            dup
            ldc "maxbuf=\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.recvMaxBufSize:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "\","
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        21: .line 330
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 23
        22: .line 331
            aload 4 /* out */
            ldc "charset=utf-8,"
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        23: .line 334
      StackMap locals:
      StackMap stack:
            aload 3 /* cipherStr */
            ifnull 28
        24: .line 335
            aload 4 /* out */
            ldc "cipher=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        25: .line 337
            aload 4 /* out */
            aload 3 /* cipherStr */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        26: .line 338
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        27: .line 339
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        28: .line 343
      StackMap locals:
      StackMap stack:
            aload 4 /* out */
            ldc "algorithm=md5-sess"
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        29: .line 345
            aload 4 /* out */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 4 // java.io.ByteArrayOutputStream out
        end local 3 // java.lang.String cipherStr
        end local 2 // java.lang.String qopStr
        end local 1 // java.util.List realms
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   30     0       this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   30     1     realms  Ljava/util/List<Ljava/lang/String;>;
            0   30     2     qopStr  Ljava/lang/String;
            0   30     3  cipherStr  Ljava/lang/String;
            1   30     4        out  Ljava/io/ByteArrayOutputStream;
            2    9     5          i  I
    Exceptions:
      throws java.io.UnsupportedEncodingException, java.io.IOException
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;Ljava/lang/String;)[B
    MethodParameters:
           Name  Flags
      realms     
      qopStr     
      cipherStr  

  private byte[] validateClientResponse(byte[][]);
    descriptor: ([[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=18, args_size=2
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // byte[][] responseVal
         0: .line 390
            aload 1 /* responseVal */
            bipush 9
            aaload
            ifnull 6
         1: .line 393
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 3
         2: .line 394
            ldc "utf-8"
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 9
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
         3: .line 395
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Incompatible charset value: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         4: .line 397
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 9
            aaload
            invokespecial java.lang.String.<init>:([B)V
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 395
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 403
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            bipush 8
            aaload
            ifnonnull 7
            ldc 65536
            goto 8
         7: .line 404
      StackMap locals:
      StackMap stack:
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 8
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
         8: .line 402
      StackMap locals:
      StackMap stack: int
            istore 2 /* clntMaxBufSize */
        start local 2 // int clntMaxBufSize
         9: .line 408
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            ifne 10
            iload 2 /* clntMaxBufSize */
            goto 11
        10: .line 409
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            iload 2 /* clntMaxBufSize */
            invokestatic java.lang.Math.min:(II)I
        11: .line 408
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server int
            putfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
        12: .line 413
            aload 1 /* responseVal */
            iconst_0
            aaload
            ifnull 16
        13: .line 414
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_0
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            astore 3 /* username */
        start local 3 // java.lang.String username
        14: .line 415
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST82:Username: {0}"
            aload 3 /* username */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        15: .line 416
            goto 17
        end local 3 // java.lang.String username
        16: .line 417
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing username."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        start local 3 // java.lang.String username
        17: .line 422
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 1 /* responseVal */
            iconst_1
            aaload
            ifnull 19
        18: .line 423
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_1
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 20
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        19: ldc ""
        20: .line 422
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
        21: .line 424
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST83:Client negotiated realm: {0}"
        22: .line 425
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
        23: .line 424
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        24: .line 427
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 28
        25: .line 430
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Nonexistent realm: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        26: .line 431
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        27: .line 430
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 436
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_2
            aaload
            ifnonnull 30
        29: .line 437
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing nonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 440
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_2
            aaload
            astore 4 /* nonceFromClient */
        start local 4 // byte[] nonceFromClient
        31: .line 441
            aload 4 /* nonceFromClient */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifne 33
        32: .line 442
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched nonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        33: .line 447
      StackMap locals: byte[]
      StackMap stack:
            aload 1 /* responseVal */
            iconst_3
            aaload
            ifnonnull 35
        34: .line 448
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing cnonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        35: .line 451
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_3
            aaload
            astore 5 /* cnonce */
        start local 5 // byte[] cnonce
        36: .line 454
            aload 1 /* responseVal */
            iconst_4
            aaload
            ifnull 43
        37: .line 455
            iconst_1
        38: .line 456
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_4
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            bipush 16
        39: .line 455
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;I)I
            if_icmpeq 43
        40: .line 457
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Nonce count does not match: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        41: .line 459
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_4
            aaload
            invokespecial java.lang.String.<init>:([B)V
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        42: .line 457
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        43: .line 463
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            aload 1 /* responseVal */
            iconst_5
            aaload
            ifnull 45
        44: .line 464
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_5
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 46
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        45: ldc "auth"
        46: .line 463
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[]
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
        47: .line 466
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST84:Client negotiated qop: {0}"
        48: .line 467
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
        49: .line 466
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        50: .line 471
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            dup
            astore 7
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 3
              3005864: 51
           1414216745: 52
           1431098954: 53
              default: 64
          }
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] top java.lang.String
      StackMap stack:
        51: aload 7
            ldc "auth"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 54
            goto 64
      StackMap locals:
      StackMap stack:
        52: aload 7
            ldc "auth-conf"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 60
            goto 64
      StackMap locals:
      StackMap stack:
        53: aload 7
            ldc "auth-int"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 56
            goto 64
        54: .line 473
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 6 /* cQop */
        start local 6 // byte cQop
        55: .line 474
            goto 67
        end local 6 // byte cQop
        56: .line 476
      StackMap locals:
      StackMap stack:
            iconst_2
            istore 6 /* cQop */
        start local 6 // byte cQop
        57: .line 477
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
        58: .line 478
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            bipush 16
            isub
            putfield com.sun.security.sasl.digest.DigestMD5Server.rawSendSize:I
        59: .line 479
            goto 67
        end local 6 // byte cQop
        60: .line 481
      StackMap locals:
      StackMap stack:
            iconst_4
            istore 6 /* cQop */
        start local 6 // byte cQop
        61: .line 482
            aload 0 /* this */
            aload 0 /* this */
            iconst_1
            dup_x1
            putfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            putfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
        62: .line 483
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            bipush 26
            isub
            putfield com.sun.security.sasl.digest.DigestMD5Server.rawSendSize:I
        63: .line 484
            goto 67
        end local 6 // byte cQop
        64: .line 486
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Invalid QOP: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        65: .line 487
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        66: .line 486
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        start local 6 // byte cQop
        67: .line 489
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack:
            iload 6 /* cQop */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.allQop:B
            iand
            ifne 71
        68: .line 490
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: server does not support  qop: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        69: .line 491
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        70: .line 490
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        71: .line 494
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            ifeq 104
        72: .line 495
            aload 0 /* this */
            aload 1 /* responseVal */
            bipush 10
            aaload
            ifnull 74
        73: .line 496
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 10
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 75
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        74: aconst_null
        75: .line 495
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
        76: .line 497
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            ifnonnull 78
        77: .line 498
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. No cipher specified."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        78: .line 502
      StackMap locals:
      StackMap stack:
            iconst_m1
            istore 8 /* foundCipher */
        start local 8 // int foundCipher
        79: .line 503
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST85:Client negotiated cipher: {0}"
        80: .line 504
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
        81: .line 503
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        82: .line 507
            iconst_0
            istore 9 /* j */
        start local 9 // int j
        83: goto 89
        84: .line 508
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top int int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            iload 9 /* j */
            aaload
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 88
        85: .line 509
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
            iload 9 /* j */
            baload
            ifeq 88
        86: .line 510
            iload 9 /* j */
            istore 8 /* foundCipher */
        87: .line 511
            goto 90
        88: .line 507
      StackMap locals:
      StackMap stack:
            iinc 9 /* j */ 1
      StackMap locals:
      StackMap stack:
        89: iload 9 /* j */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            arraylength
            if_icmplt 84
        end local 9 // int j
        90: .line 514
      StackMap locals:
      StackMap stack:
            iload 8 /* foundCipher */
            iconst_m1
            if_icmpne 94
        91: .line 515
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: server does not support cipher: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        92: .line 516
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        93: .line 515
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        94: .line 519
      StackMap locals:
      StackMap stack:
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_MASKS:[B
            iload 8 /* foundCipher */
            baload
            iconst_4
            iand
            ifeq 97
        95: .line 520
            aload 0 /* this */
            ldc "high"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
        96: .line 521
            goto 101
      StackMap locals:
      StackMap stack:
        97: getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_MASKS:[B
            iload 8 /* foundCipher */
            baload
            iconst_2
            iand
            ifeq 100
        98: .line 522
            aload 0 /* this */
            ldc "medium"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
        99: .line 523
            goto 101
       100: .line 525
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc "low"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
       101: .line 528
      StackMap locals:
      StackMap stack:
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST86:Negotiated strength: {0}"
       102: .line 529
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
       103: .line 528
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        end local 8 // int foundCipher
       104: .line 533
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack:
            aload 1 /* responseVal */
            bipush 6
            aaload
            ifnull 106
       105: .line 534
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 6
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 107
      StackMap locals:
      StackMap stack:
       106: aconst_null
       107: .line 533
      StackMap locals:
      StackMap stack: java.lang.String
            astore 8 /* digestUriFromResponse */
        start local 8 // java.lang.String digestUriFromResponse
       108: .line 536
            aload 8 /* digestUriFromResponse */
            ifnull 112
       109: .line 537
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST87:digest URI: {0}"
       110: .line 538
            aload 8 /* digestUriFromResponse */
       111: .line 537
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
       112: .line 549
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 8 /* digestUriFromResponse */
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.uriMatches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifeq 115
       113: .line 550
            aload 0 /* this */
            aload 8 /* digestUriFromResponse */
            putfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
       114: .line 551
            goto 119
       115: .line 552
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched URI: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
       116: .line 553
            aload 8 /* digestUriFromResponse */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       117: .line 554
            ldc "; expecting: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       118: .line 552
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       119: .line 558
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            bipush 7
            aaload
            astore 9 /* responseFromClient */
        start local 9 // byte[] responseFromClient
       120: .line 559
            aload 9 /* responseFromClient */
            ifnonnull 122
       121: .line 560
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format  violation. Missing response."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       122: .line 566
      StackMap locals: byte[]
      StackMap stack:
            aload 1 /* responseVal */
            bipush 11
            aaload
            dup
            astore 10 /* authzidBytes */
        start local 10 // byte[] authzidBytes
       123: ifnull 125
       124: .line 567
            new java.lang.String
            dup
            aload 10 /* authzidBytes */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 126
      StackMap locals: byte[]
      StackMap stack:
       125: aload 3 /* username */
       126: .line 566
      StackMap locals:
      StackMap stack: java.lang.String
            astore 11 /* authzidFromClient */
        start local 11 // java.lang.String authzidFromClient
       127: .line 569
            aload 10 /* authzidBytes */
            ifnull 131
       128: .line 570
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST88:Authzid: {0}"
       129: .line 571
            new java.lang.String
            dup
            aload 10 /* authzidBytes */
            invokespecial java.lang.String.<init>:([B)V
       130: .line 570
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
       131: .line 580
      StackMap locals: java.lang.String
      StackMap stack:
            new javax.security.sasl.RealmCallback
            dup
            ldc "DIGEST-MD5 realm: "
       132: .line 581
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
       133: .line 580
            invokespecial javax.security.sasl.RealmCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 13 /* rcb */
        start local 13 // javax.security.sasl.RealmCallback rcb
       134: .line 582
            new javax.security.auth.callback.NameCallback
            dup
            ldc "DIGEST-MD5 authentication ID: "
       135: .line 583
            aload 3 /* username */
       136: .line 582
            invokespecial javax.security.auth.callback.NameCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 14 /* ncb */
        start local 14 // javax.security.auth.callback.NameCallback ncb
       137: .line 587
            new javax.security.auth.callback.PasswordCallback
            dup
            ldc "DIGEST-MD5 password: "
            iconst_0
            invokespecial javax.security.auth.callback.PasswordCallback.<init>:(Ljava/lang/String;Z)V
       138: .line 586
            astore 15 /* pcb */
        start local 15 // javax.security.auth.callback.PasswordCallback pcb
       139: .line 589
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.cbh:Ljavax/security/auth/callback/CallbackHandler;
            iconst_3
            anewarray javax.security.auth.callback.Callback
            dup
            iconst_0
            aload 13 /* rcb */
            aastore
            dup
            iconst_1
            aload 14 /* ncb */
            aastore
            dup
            iconst_2
            aload 15 /* pcb */
            aastore
            invokeinterface javax.security.auth.callback.CallbackHandler.handle:([Ljavax/security/auth/callback/Callback;)V
       140: .line 590
            aload 15 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.getPassword:()[C
            astore 12 /* passwd */
        start local 12 // char[] passwd
       141: .line 591
            aload 15 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.clearPassword:()V
        end local 15 // javax.security.auth.callback.PasswordCallback pcb
        end local 14 // javax.security.auth.callback.NameCallback ncb
        end local 13 // javax.security.sasl.RealmCallback rcb
       142: .line 593
            goto 151
        end local 12 // char[] passwd
      StackMap locals:
      StackMap stack: javax.security.auth.callback.UnsupportedCallbackException
       143: astore 13 /* e */
        start local 13 // javax.security.auth.callback.UnsupportedCallbackException e
       144: .line 594
            new javax.security.sasl.SaslException
            dup
       145: .line 595
            ldc "DIGEST-MD5: Cannot perform callback to acquire password"
            aload 13 /* e */
       146: .line 594
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 13 // javax.security.auth.callback.UnsupportedCallbackException e
       147: .line 597
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 13 /* e */
        start local 13 // java.io.IOException e
       148: .line 598
            new javax.security.sasl.SaslException
            dup
       149: .line 599
            ldc "DIGEST-MD5: IO error acquiring password"
            aload 13 /* e */
       150: .line 598
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 13 // java.io.IOException e
        start local 12 // char[] passwd
       151: .line 602
      StackMap locals: char[]
      StackMap stack:
            aload 12 /* passwd */
            ifnonnull 157
       152: .line 603
            new javax.security.sasl.SaslException
            dup
       153: .line 604
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: cannot acquire password for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       154: .line 605
            ldc " in realm : "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       155: .line 604
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       156: .line 603
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       157: .line 613
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc "AUTHENTICATE"
       158: .line 614
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            aload 3 /* username */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
       159: .line 615
            aload 12 /* passwd */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
       160: .line 616
            aload 5 /* cnonce */
            iconst_1
            aload 10 /* authzidBytes */
       161: .line 613
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseValue:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[C[B[BI[B)[B
            astore 13 /* expectedResponse */
        start local 13 // byte[] expectedResponse
       162: .line 618
            goto 171
        end local 13 // byte[] expectedResponse
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
       163: astore 14 /* e */
        start local 14 // java.security.NoSuchAlgorithmException e
       164: .line 619
            new javax.security.sasl.SaslException
            dup
       165: .line 620
            ldc "DIGEST-MD5: problem duplicating client response"
            aload 14 /* e */
       166: .line 619
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.security.NoSuchAlgorithmException e
       167: .line 621
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 14 /* e */
        start local 14 // java.io.IOException e
       168: .line 622
            new javax.security.sasl.SaslException
            dup
       169: .line 623
            ldc "DIGEST-MD5: problem duplicating client response"
            aload 14 /* e */
       170: .line 622
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.io.IOException e
        start local 13 // byte[] expectedResponse
       171: .line 626
      StackMap locals: byte[]
      StackMap stack:
            aload 9 /* responseFromClient */
            aload 13 /* expectedResponse */
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifne 173
       172: .line 627
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched response."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       173: .line 634
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.AuthorizeCallback
            dup
            aload 3 /* username */
            aload 11 /* authzidFromClient */
            invokespecial javax.security.sasl.AuthorizeCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
       174: .line 633
            astore 14 /* acb */
        start local 14 // javax.security.sasl.AuthorizeCallback acb
       175: .line 635
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.cbh:Ljavax/security/auth/callback/CallbackHandler;
            iconst_1
            anewarray javax.security.auth.callback.Callback
            dup
            iconst_0
            aload 14 /* acb */
            aastore
            invokeinterface javax.security.auth.callback.CallbackHandler.handle:([Ljavax/security/auth/callback/Callback;)V
       176: .line 637
            aload 14 /* acb */
            invokevirtual javax.security.sasl.AuthorizeCallback.isAuthorized:()Z
            ifeq 179
       177: .line 638
            aload 0 /* this */
            aload 14 /* acb */
            invokevirtual javax.security.sasl.AuthorizeCallback.getAuthorizedID:()Ljava/lang/String;
            putfield com.sun.security.sasl.digest.DigestMD5Server.authzid:Ljava/lang/String;
       178: .line 639
            goto 192
       179: .line 640
      StackMap locals: javax.security.sasl.AuthorizeCallback
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       180: .line 641
            ldc " is not authorized to act as "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 11 /* authzidFromClient */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       181: .line 640
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        end local 14 // javax.security.sasl.AuthorizeCallback acb
       182: .line 643
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] byte[]
      StackMap stack: javax.security.sasl.SaslException
            astore 14 /* e */
        start local 14 // javax.security.sasl.SaslException e
       183: .line 644
            aload 14 /* e */
            athrow
        end local 14 // javax.security.sasl.SaslException e
       184: .line 645
      StackMap locals:
      StackMap stack: javax.security.auth.callback.UnsupportedCallbackException
            astore 14 /* e */
        start local 14 // javax.security.auth.callback.UnsupportedCallbackException e
       185: .line 646
            new javax.security.sasl.SaslException
            dup
       186: .line 647
            ldc "DIGEST-MD5: Cannot perform callback to check authzid"
            aload 14 /* e */
       187: .line 646
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // javax.security.auth.callback.UnsupportedCallbackException e
       188: .line 648
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 14 /* e */
        start local 14 // java.io.IOException e
       189: .line 649
            new javax.security.sasl.SaslException
            dup
       190: .line 650
            ldc "DIGEST-MD5: IO error checking authzid"
            aload 14 /* e */
       191: .line 649
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.io.IOException e
       192: .line 653
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* username */
            aload 12 /* passwd */
            aload 5 /* cnonce */
       193: .line 654
            iconst_1
            aload 10 /* authzidBytes */
       194: .line 653
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseAuth:(Ljava/lang/String;[C[BI[B)[B
            astore 16
       195: .line 657
            iconst_0
            istore 17 /* i */
        start local 17 // int i
       196: goto 199
       197: .line 658
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] byte[] top top byte[] int
      StackMap stack:
            aload 12 /* passwd */
            iload 17 /* i */
            iconst_0
            castore
       198: .line 657
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
       199: iload 17 /* i */
            aload 12 /* passwd */
            arraylength
            if_icmplt 197
        end local 17 // int i
       200: .line 653
            aload 16
            areturn
        end local 13 // byte[] expectedResponse
       201: .line 655
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[]
      StackMap stack: java.lang.Throwable
            astore 15
       202: .line 657
            iconst_0
            istore 17 /* i */
        start local 17 // int i
       203: goto 206
       204: .line 658
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] top top java.lang.Throwable top int
      StackMap stack:
            aload 12 /* passwd */
            iload 17 /* i */
            iconst_0
            castore
       205: .line 657
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
       206: iload 17 /* i */
            aload 12 /* passwd */
            arraylength
            if_icmplt 204
        end local 17 // int i
       207: .line 660
            aload 15
            athrow
        end local 12 // char[] passwd
        end local 11 // java.lang.String authzidFromClient
        end local 10 // byte[] authzidBytes
        end local 9 // byte[] responseFromClient
        end local 8 // java.lang.String digestUriFromResponse
        end local 6 // byte cQop
        end local 5 // byte[] cnonce
        end local 4 // byte[] nonceFromClient
        end local 3 // java.lang.String username
        end local 2 // int clntMaxBufSize
        end local 1 // byte[][] responseVal
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0  208     0                   this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0  208     1            responseVal  [[B
            9  208     2         clntMaxBufSize  I
           14   16     3               username  Ljava/lang/String;
           17  208     3               username  Ljava/lang/String;
           31  208     4        nonceFromClient  [B
           36  208     5                 cnonce  [B
           55   56     6                   cQop  B
           57   60     6                   cQop  B
           61   64     6                   cQop  B
           67  208     6                   cQop  B
           79  104     8            foundCipher  I
           83   90     9                      j  I
          108  208     8  digestUriFromResponse  Ljava/lang/String;
          120  208     9     responseFromClient  [B
          123  208    10           authzidBytes  [B
          127  208    11      authzidFromClient  Ljava/lang/String;
          141  143    12                 passwd  [C
          151  208    12                 passwd  [C
          134  142    13                    rcb  Ljavax/security/sasl/RealmCallback;
          137  142    14                    ncb  Ljavax/security/auth/callback/NameCallback;
          139  142    15                    pcb  Ljavax/security/auth/callback/PasswordCallback;
          144  147    13                      e  Ljavax/security/auth/callback/UnsupportedCallbackException;
          148  151    13                      e  Ljava/io/IOException;
          162  163    13       expectedResponse  [B
          171  201    13       expectedResponse  [B
          164  167    14                      e  Ljava/security/NoSuchAlgorithmException;
          168  171    14                      e  Ljava/io/IOException;
          175  182    14                    acb  Ljavax/security/sasl/AuthorizeCallback;
          183  184    14                      e  Ljavax/security/sasl/SaslException;
          185  188    14                      e  Ljavax/security/auth/callback/UnsupportedCallbackException;
          189  192    14                      e  Ljava/io/IOException;
          196  200    17                      i  I
          203  207    17                      i  I
      Exception table:
        from    to  target  type
         131   142     143  Class javax.security.auth.callback.UnsupportedCallbackException
         131   142     147  Class java.io.IOException
         157   162     163  Class java.security.NoSuchAlgorithmException
         157   162     167  Class java.io.IOException
         173   182     182  Class javax.security.sasl.SaslException
         173   182     184  Class javax.security.auth.callback.UnsupportedCallbackException
         173   182     188  Class java.io.IOException
         157   195     201  any
    Exceptions:
      throws javax.security.sasl.SaslException, java.io.UnsupportedEncodingException
    MethodParameters:
             Name  Flags
      responseVal  

  private static boolean uriMatches(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // java.lang.String thisUri
        start local 1 // java.lang.String incomingUri
         0: .line 665
            aload 0 /* thisUri */
            aload 1 /* incomingUri */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 666
            iconst_1
            ireturn
         2: .line 669
      StackMap locals:
      StackMap stack:
            aload 0 /* thisUri */
            ldc "/*"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 7
         3: .line 670
            aload 0 /* thisUri */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            istore 2 /* protoAndSlash */
        start local 2 // int protoAndSlash
         4: .line 671
            aload 0 /* thisUri */
            iconst_0
            iload 2 /* protoAndSlash */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 3 /* thisProtoAndSlash */
        start local 3 // java.lang.String thisProtoAndSlash
         5: .line 672
            aload 1 /* incomingUri */
            iconst_0
            iload 2 /* protoAndSlash */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 4 /* incomingProtoAndSlash */
        start local 4 // java.lang.String incomingProtoAndSlash
         6: .line 673
            aload 3 /* thisProtoAndSlash */
            aload 4 /* incomingProtoAndSlash */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ireturn
        end local 4 // java.lang.String incomingProtoAndSlash
        end local 3 // java.lang.String thisProtoAndSlash
        end local 2 // int protoAndSlash
         7: .line 675
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // java.lang.String incomingUri
        end local 0 // java.lang.String thisUri
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    8     0                thisUri  Ljava/lang/String;
            0    8     1            incomingUri  Ljava/lang/String;
            4    7     2          protoAndSlash  I
            5    7     3      thisProtoAndSlash  Ljava/lang/String;
            6    7     4  incomingProtoAndSlash  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      thisUri      
      incomingUri  

  private byte[] generateResponseAuth(java.lang.String, char[], byte[], int, byte[]);
    descriptor: (Ljava/lang/String;[C[BI[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=8, args_size=6
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.lang.String username
        start local 2 // char[] passwd
        start local 3 // byte[] cnonce
        start local 4 // int nonceCount
        start local 5 // byte[] authzidBytes
         0: .line 698
            aload 0 /* this */
            ldc ""
         1: .line 699
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            aload 1 /* username */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
         2: .line 700
            aload 2 /* passwd */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            aload 3 /* cnonce */
            iload 4 /* nonceCount */
            aload 5 /* authzidBytes */
         3: .line 698
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseValue:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[C[B[BI[B)[B
            astore 6 /* responseValue */
        start local 6 // byte[] responseValue
         4: .line 702
            aload 6 /* responseValue */
            arraylength
            bipush 8
            iadd
            newarray 8
            astore 7 /* challenge */
        start local 7 // byte[] challenge
         5: .line 703
            ldc "rspauth="
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            iconst_0
            aload 7 /* challenge */
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         6: .line 704
            aload 6 /* responseValue */
            iconst_0
            aload 7 /* challenge */
            bipush 8
         7: .line 705
            aload 6 /* responseValue */
            arraylength
         8: .line 704
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         9: .line 707
            aload 7 /* challenge */
        10: areturn
        end local 7 // byte[] challenge
        end local 6 // byte[] responseValue
        11: .line 709
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 6 /* e */
        start local 6 // java.security.NoSuchAlgorithmException e
        12: .line 710
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: problem generating response"
            aload 6 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.security.NoSuchAlgorithmException e
        13: .line 711
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 6 /* e */
        start local 6 // java.io.IOException e
        14: .line 712
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: problem generating response"
            aload 6 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.io.IOException e
        end local 5 // byte[] authzidBytes
        end local 4 // int nonceCount
        end local 3 // byte[] cnonce
        end local 2 // char[] passwd
        end local 1 // java.lang.String username
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   15     0           this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   15     1       username  Ljava/lang/String;
            0   15     2         passwd  [C
            0   15     3         cnonce  [B
            0   15     4     nonceCount  I
            0   15     5   authzidBytes  [B
            4   11     6  responseValue  [B
            5   11     7      challenge  [B
           12   13     6              e  Ljava/security/NoSuchAlgorithmException;
           14   15     6              e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0    10      11  Class java.security.NoSuchAlgorithmException
           0    10      13  Class java.io.IOException
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
              Name  Flags
      username      
      passwd        
      cnonce        
      nonceCount    
      authzidBytes  

  public java.lang.String getAuthorizationID();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
         0: .line 717
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.completed:Z
            ifeq 2
         1: .line 718
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.authzid:Ljava/lang/String;
            areturn
         2: .line 720
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         3: .line 721
            ldc "DIGEST-MD5 server negotiation not complete"
         4: .line 720
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/sun/security/sasl/digest/DigestMD5Server;
}
SourceFile: "DigestMD5Server.java"
InnerClasses:
  DigestIntegrity = com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity of com.sun.security.sasl.digest.DigestMD5Base
  final DigestPrivacy = com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy of com.sun.security.sasl.digest.DigestMD5Base