public class org.apache.catalina.authenticator.DigestAuthenticator extends org.apache.catalina.authenticator.AuthenticatorBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.authenticator.DigestAuthenticator
  super_class: org.apache.catalina.authenticator.AuthenticatorBase
{
  private final org.apache.juli.logging.Log log;
    descriptor: Lorg/apache/juli/logging/Log;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  protected static final java.lang.String QOP;
    descriptor: Ljava/lang/String;
    flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
    ConstantValue: "auth"

  protected java.util.Map<java.lang.String, org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo> nonces;
    descriptor: Ljava/util/Map;
    flags: (0x0004) ACC_PROTECTED
    Signature: Ljava/util/Map<Ljava/lang/String;Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;>;

  protected long lastTimestamp;
    descriptor: J
    flags: (0x0004) ACC_PROTECTED

  protected final java.lang.Object lastTimestampLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected int nonceCacheSize;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected int nonceCountWindowSize;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String key;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected long nonceValidity;
    descriptor: J
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String opaque;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected boolean validateUri;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 62
            aload 0 /* this */
            invokespecial org.apache.catalina.authenticator.AuthenticatorBase.<init>:()V
         1: .line 48
            aload 0 /* this */
            ldc Lorg/apache/catalina/authenticator/DigestAuthenticator;
            invokestatic org.apache.juli.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/juli/logging/Log;
            putfield org.apache.catalina.authenticator.DigestAuthenticator.log:Lorg/apache/juli/logging/Log;
         2: .line 79
            aload 0 /* this */
            lconst_0
            putfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestamp:J
         3: .line 80
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestampLock:Ljava/lang/Object;
         4: .line 87
            aload 0 /* this */
            sipush 1000
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCacheSize:I
         5: .line 94
            aload 0 /* this */
            bipush 100
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCountWindowSize:I
         6: .line 99
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.authenticator.DigestAuthenticator.key:Ljava/lang/String;
         7: .line 106
            aload 0 /* this */
            ldc 300000
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceValidity:J
         8: .line 119
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.authenticator.DigestAuthenticator.validateUri:Z
         9: .line 63
            aload 0 /* this */
            iconst_0
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.setCache:(Z)V
        10: .line 64
            return
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public int getNonceCountWindowSize();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 124
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCountWindowSize:I
            ireturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setNonceCountWindowSize(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // int nonceCountWindowSize
         0: .line 129
            aload 0 /* this */
            iload 1 /* nonceCountWindowSize */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCountWindowSize:I
         1: .line 130
            return
        end local 1 // int nonceCountWindowSize
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    2     0                  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1  nonceCountWindowSize  I
    MethodParameters:
                      Name  Flags
      nonceCountWindowSize  

  public int getNonceCacheSize();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 134
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCacheSize:I
            ireturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setNonceCacheSize(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // int nonceCacheSize
         0: .line 139
            aload 0 /* this */
            iload 1 /* nonceCacheSize */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceCacheSize:I
         1: .line 140
            return
        end local 1 // int nonceCacheSize
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1  nonceCacheSize  I
    MethodParameters:
                Name  Flags
      nonceCacheSize  

  public java.lang.String getKey();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 144
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.key:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setKey(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // java.lang.String key
         0: .line 149
            aload 0 /* this */
            aload 1 /* key */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.key:Ljava/lang/String;
         1: .line 150
            return
        end local 1 // java.lang.String key
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1   key  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      key   

  public long getNonceValidity();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 154
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonceValidity:J
            lreturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setNonceValidity(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // long nonceValidity
         0: .line 159
            aload 0 /* this */
            lload 1 /* nonceValidity */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonceValidity:J
         1: .line 160
            return
        end local 1 // long nonceValidity
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1  nonceValidity  J
    MethodParameters:
               Name  Flags
      nonceValidity  

  public java.lang.String getOpaque();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 164
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.opaque:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setOpaque(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // java.lang.String opaque
         0: .line 169
            aload 0 /* this */
            aload 1 /* opaque */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.opaque:Ljava/lang/String;
         1: .line 170
            return
        end local 1 // java.lang.String opaque
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1  opaque  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      opaque  

  public boolean isValidateUri();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 174
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.validateUri:Z
            ireturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  public void setValidateUri(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // boolean validateUri
         0: .line 179
            aload 0 /* this */
            iload 1 /* validateUri */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.validateUri:Z
         1: .line 180
            return
        end local 1 // boolean validateUri
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0    2     1  validateUri  Z
    MethodParameters:
             Name  Flags
      validateUri  

  protected boolean doAuthenticate(org.apache.catalina.connector.Request, jakarta.servlet.http.HttpServletResponse);
    descriptor: (Lorg/apache/catalina/connector/Request;Ljakarta/servlet/http/HttpServletResponse;)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=8, locals=7, args_size=3
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // jakarta.servlet.http.HttpServletResponse response
         0: .line 208
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            iconst_0
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.checkForCachedAuthentication:(Lorg/apache/catalina/connector/Request;Ljakarta/servlet/http/HttpServletResponse;Z)Z
            ifeq 2
         1: .line 209
            iconst_1
            ireturn
         2: .line 213
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* principal */
        start local 3 // java.security.Principal principal
         3: .line 214
            aload 1 /* request */
            ldc "authorization"
            invokevirtual org.apache.catalina.connector.Request.getHeader:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* authorization */
        start local 4 // java.lang.String authorization
         4: .line 215
            new org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo
            dup
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getOpaque:()Ljava/lang/String;
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getNonceValidity:()J
         5: .line 216
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getKey:()Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonces:Ljava/util/Map;
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.isValidateUri:()Z
         6: .line 215
            invokespecial org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.<init>:(Ljava/lang/String;JLjava/lang/String;Ljava/util/Map;Z)V
            astore 5 /* digestInfo */
        start local 5 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo digestInfo
         7: .line 217
            aload 4 /* authorization */
            ifnull 17
         8: .line 218
            aload 5 /* digestInfo */
            aload 1 /* request */
            aload 4 /* authorization */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.parse:(Lorg/apache/catalina/connector/Request;Ljava/lang/String;)Z
            ifeq 17
         9: .line 219
            aload 5 /* digestInfo */
            aload 1 /* request */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.validate:(Lorg/apache/catalina/connector/Request;)Z
            ifeq 11
        10: .line 220
            aload 5 /* digestInfo */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.context:Lorg/apache/catalina/Context;
            invokeinterface org.apache.catalina.Context.getRealm:()Lorg/apache/catalina/Realm;
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.authenticate:(Lorg/apache/catalina/Realm;)Ljava/security/Principal;
            astore 3 /* principal */
        11: .line 223
      StackMap locals: java.security.Principal java.lang.String org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo
      StackMap stack:
            aload 3 /* principal */
            ifnull 17
            aload 5 /* digestInfo */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.isNonceStale:()Z
            ifne 17
        12: .line 224
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            aload 3 /* principal */
        13: .line 225
            ldc "DIGEST"
        14: .line 226
            aload 5 /* digestInfo */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.getUsername:()Ljava/lang/String;
            aconst_null
        15: .line 224
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.register:(Lorg/apache/catalina/connector/Request;Ljakarta/servlet/http/HttpServletResponse;Ljava/security/Principal;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        16: .line 227
            iconst_1
            ireturn
        17: .line 236
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* request */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.generateNonce:(Lorg/apache/catalina/connector/Request;)Ljava/lang/String;
            astore 6 /* nonce */
        start local 6 // java.lang.String nonce
        18: .line 238
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            aload 6 /* nonce */
        19: .line 239
            aload 3 /* principal */
            ifnull 20
            aload 5 /* digestInfo */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo.isNonceStale:()Z
            ifeq 20
            iconst_1
            goto 21
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator org.apache.catalina.connector.Request jakarta.servlet.http.HttpServletResponse java.security.Principal java.lang.String org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo java.lang.String
      StackMap stack: org.apache.catalina.authenticator.DigestAuthenticator org.apache.catalina.connector.Request jakarta.servlet.http.HttpServletResponse java.lang.String
        20: iconst_0
        21: .line 238
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator org.apache.catalina.connector.Request jakarta.servlet.http.HttpServletResponse java.security.Principal java.lang.String org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo java.lang.String
      StackMap stack: org.apache.catalina.authenticator.DigestAuthenticator org.apache.catalina.connector.Request jakarta.servlet.http.HttpServletResponse java.lang.String int
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.setAuthenticateHeader:(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;Ljava/lang/String;Z)V
        22: .line 240
            aload 2 /* response */
            sipush 401
            invokeinterface jakarta.servlet.http.HttpServletResponse.sendError:(I)V
        23: .line 241
            iconst_0
            ireturn
        end local 6 // java.lang.String nonce
        end local 5 // org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo digestInfo
        end local 4 // java.lang.String authorization
        end local 3 // java.security.Principal principal
        end local 2 // jakarta.servlet.http.HttpServletResponse response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   24     0           this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0   24     1        request  Lorg/apache/catalina/connector/Request;
            0   24     2       response  Ljakarta/servlet/http/HttpServletResponse;
            3   24     3      principal  Ljava/security/Principal;
            4   24     4  authorization  Ljava/lang/String;
            7   24     5     digestInfo  Lorg/apache/catalina/authenticator/DigestAuthenticator$DigestInfo;
           18   24     6          nonce  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      request   
      response  

  protected java.lang.String getAuthMethod();
    descriptor: ()Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 247
            ldc "DIGEST"
            areturn
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;

  protected static java.lang.String removeQuotes(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)Ljava/lang/String;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.lang.String quotedString
        start local 1 // boolean quotesRequired
         0: .line 265
            aload 0 /* quotedString */
            invokevirtual java.lang.String.length:()I
            ifle 3
            aload 0 /* quotedString */
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            bipush 34
            if_icmpeq 3
         1: .line 266
            iload 1 /* quotesRequired */
            ifne 3
         2: .line 267
            aload 0 /* quotedString */
            areturn
         3: .line 268
      StackMap locals:
      StackMap stack:
            aload 0 /* quotedString */
            invokevirtual java.lang.String.length:()I
            iconst_2
            if_icmple 5
         4: .line 269
            aload 0 /* quotedString */
            iconst_1
            aload 0 /* quotedString */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            areturn
         5: .line 271
      StackMap locals:
      StackMap stack:
            ldc ""
            areturn
        end local 1 // boolean quotesRequired
        end local 0 // java.lang.String quotedString
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    6     0    quotedString  Ljava/lang/String;
            0    6     1  quotesRequired  Z
    MethodParameters:
                Name  Flags
      quotedString    
      quotesRequired  

  protected static java.lang.String removeQuotes(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String quotedString
         0: .line 282
            aload 0 /* quotedString */
            iconst_0
            invokestatic org.apache.catalina.authenticator.DigestAuthenticator.removeQuotes:(Ljava/lang/String;Z)Ljava/lang/String;
            areturn
        end local 0 // java.lang.String quotedString
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    1     0  quotedString  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      quotedString  

  protected java.lang.String generateNonce(org.apache.catalina.connector.Request);
    descriptor: (Lorg/apache/catalina/connector/Request;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=9, args_size=2
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // org.apache.catalina.connector.Request request
         0: .line 295
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 2 /* currentTime */
        start local 2 // long currentTime
         1: .line 297
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestampLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         2: .line 298
            lload 2 /* currentTime */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestamp:J
            lcmp
            ifle 5
         3: .line 299
            aload 0 /* this */
            lload 2 /* currentTime */
            putfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestamp:J
         4: .line 300
            goto 6
         5: .line 301
      StackMap locals: long java.lang.Object
      StackMap stack:
            aload 0 /* this */
            dup
            getfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestamp:J
            lconst_1
            ladd
            dup2_x1
            putfield org.apache.catalina.authenticator.DigestAuthenticator.lastTimestamp:J
            lstore 2 /* currentTime */
         6: .line 297
      StackMap locals:
      StackMap stack:
            aload 4
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 4
            monitorexit
         9: athrow
        10: .line 306
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRemoteAddr:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            lload 2 /* currentTime */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getKey:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 305
            astore 4 /* ipTimeKey */
        start local 4 // java.lang.String ipTimeKey
        12: .line 308
            iconst_1
            anewarray byte[]
            dup
            iconst_0
        13: .line 309
            aload 4 /* ipTimeKey */
            getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            aastore
        14: .line 308
            invokestatic org.apache.tomcat.util.security.ConcurrentMessageDigest.digestMD5:([[B)[B
            astore 5 /* buffer */
        start local 5 // byte[] buffer
        15: .line 310
            new java.lang.StringBuilder
            dup
            lload 2 /* currentTime */
            invokestatic java.lang.String.valueOf:(J)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 5 /* buffer */
            invokestatic org.apache.tomcat.util.security.MD5Encoder.encode:([B)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 6 /* nonce */
        start local 6 // java.lang.String nonce
        16: .line 312
            new org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo
            dup
            lload 2 /* currentTime */
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getNonceCountWindowSize:()I
            invokespecial org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo.<init>:(JI)V
            astore 7 /* info */
        start local 7 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
        17: .line 313
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonces:Ljava/util/Map;
            dup
            astore 8
            monitorenter
        18: .line 314
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.nonces:Ljava/util/Map;
            aload 6 /* nonce */
            aload 7 /* info */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        19: .line 313
            aload 8
            monitorexit
        20: goto 23
      StackMap locals: org.apache.catalina.authenticator.DigestAuthenticator org.apache.catalina.connector.Request long java.lang.String byte[] java.lang.String org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo java.util.Map
      StackMap stack: java.lang.Throwable
        21: aload 8
            monitorexit
        22: athrow
        23: .line 317
      StackMap locals:
      StackMap stack:
            aload 6 /* nonce */
            areturn
        end local 7 // org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo info
        end local 6 // java.lang.String nonce
        end local 5 // byte[] buffer
        end local 4 // java.lang.String ipTimeKey
        end local 2 // long currentTime
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   24     0         this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0   24     1      request  Lorg/apache/catalina/connector/Request;
            1   24     2  currentTime  J
           12   24     4    ipTimeKey  Ljava/lang/String;
           15   24     5       buffer  [B
           16   24     6        nonce  Ljava/lang/String;
           17   24     7         info  Lorg/apache/catalina/authenticator/DigestAuthenticator$NonceInfo;
      Exception table:
        from    to  target  type
           2     7       8  any
           8     9       8  any
          18    20      21  any
          21    22      21  any
    MethodParameters:
         Name  Flags
      request  

  protected void setAuthenticateHeader(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, java.lang.String, boolean);
    descriptor: (Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;Ljava/lang/String;Z)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=7, args_size=5
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
        start local 1 // jakarta.servlet.http.HttpServletRequest request
        start local 2 // jakarta.servlet.http.HttpServletResponse response
        start local 3 // java.lang.String nonce
        start local 4 // boolean isNonceStale
         0: .line 352
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.context:Lorg/apache/catalina/Context;
            invokestatic org.apache.catalina.authenticator.DigestAuthenticator.getRealmName:(Lorg/apache/catalina/Context;)Ljava/lang/String;
            astore 5 /* realmName */
        start local 5 // java.lang.String realmName
         1: .line 355
            iload 4 /* isNonceStale */
            ifeq 7
         2: .line 356
            new java.lang.StringBuilder
            dup
            ldc "Digest realm=\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* realmName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         3: .line 357
            ldc "qop=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "auth"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", nonce=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 3 /* nonce */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "opaque=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 358
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getOpaque:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", stale=true"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         5: .line 356
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 6 /* authenticateHeader */
        start local 6 // java.lang.String authenticateHeader
         6: .line 359
            goto 11
        end local 6 // java.lang.String authenticateHeader
         7: .line 360
      StackMap locals: java.lang.String
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "Digest realm=\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* realmName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         8: .line 361
            ldc "qop=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "auth"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", nonce=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 3 /* nonce */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "opaque=\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         9: .line 362
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getOpaque:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        10: .line 360
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 6 /* authenticateHeader */
        start local 6 // java.lang.String authenticateHeader
        11: .line 365
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* response */
            ldc "WWW-Authenticate"
            aload 6 /* authenticateHeader */
            invokeinterface jakarta.servlet.http.HttpServletResponse.setHeader:(Ljava/lang/String;Ljava/lang/String;)V
        12: .line 367
            return
        end local 6 // java.lang.String authenticateHeader
        end local 5 // java.lang.String realmName
        end local 4 // boolean isNonceStale
        end local 3 // java.lang.String nonce
        end local 2 // jakarta.servlet.http.HttpServletResponse response
        end local 1 // jakarta.servlet.http.HttpServletRequest request
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0                this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
            0   13     1             request  Ljakarta/servlet/http/HttpServletRequest;
            0   13     2            response  Ljakarta/servlet/http/HttpServletResponse;
            0   13     3               nonce  Ljava/lang/String;
            0   13     4        isNonceStale  Z
            1   13     5           realmName  Ljava/lang/String;
            6    7     6  authenticateHeader  Ljava/lang/String;
           11   13     6  authenticateHeader  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      request       
      response      
      nonce         
      isNonceStale  

  protected synchronized void startInternal();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
         0: .line 374
            aload 0 /* this */
            invokespecial org.apache.catalina.authenticator.AuthenticatorBase.startInternal:()V
         1: .line 377
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getKey:()Ljava/lang/String;
            ifnonnull 3
         2: .line 378
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.sessionIdGenerator:Lorg/apache/catalina/util/SessionIdGeneratorBase;
            invokevirtual org.apache.catalina.util.SessionIdGeneratorBase.generateSessionId:()Ljava/lang/String;
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.setKey:(Ljava/lang/String;)V
         3: .line 382
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.getOpaque:()Ljava/lang/String;
            ifnonnull 5
         4: .line 383
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.authenticator.DigestAuthenticator.sessionIdGenerator:Lorg/apache/catalina/util/SessionIdGeneratorBase;
            invokevirtual org.apache.catalina.util.SessionIdGeneratorBase.generateSessionId:()Ljava/lang/String;
            invokevirtual org.apache.catalina.authenticator.DigestAuthenticator.setOpaque:(Ljava/lang/String;)V
         5: .line 386
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new org.apache.catalina.authenticator.DigestAuthenticator$1
            dup
            aload 0 /* this */
            invokespecial org.apache.catalina.authenticator.DigestAuthenticator$1.<init>:(Lorg/apache/catalina/authenticator/DigestAuthenticator;)V
            putfield org.apache.catalina.authenticator.DigestAuthenticator.nonces:Ljava/util/Map;
         6: .line 412
            return
        end local 0 // org.apache.catalina.authenticator.DigestAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/apache/catalina/authenticator/DigestAuthenticator;
    Exceptions:
      throws org.apache.catalina.LifecycleException
}
SourceFile: "DigestAuthenticator.java"
NestMembers:
  org.apache.catalina.authenticator.DigestAuthenticator$1  org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo  org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo
InnerClasses:
  org.apache.catalina.authenticator.DigestAuthenticator$1
  public DigestInfo = org.apache.catalina.authenticator.DigestAuthenticator$DigestInfo of org.apache.catalina.authenticator.DigestAuthenticator
  public NonceInfo = org.apache.catalina.authenticator.DigestAuthenticator$NonceInfo of org.apache.catalina.authenticator.DigestAuthenticator