public class org.bouncycastle.jce.provider.JCEMac extends javax.crypto.MacSpi implements org.bouncycastle.jce.provider.PBE
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.jce.provider.JCEMac
  super_class: javax.crypto.MacSpi
{
  private org.bouncycastle.crypto.Mac macEngine;
    descriptor: Lorg/bouncycastle/crypto/Mac;
    flags: (0x0002) ACC_PRIVATE

  private int pbeType;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int pbeHash;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int keySize;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  protected void <init>(org.bouncycastle.crypto.Mac);
    descriptor: (Lorg/bouncycastle/crypto/Mac;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
        start local 1 // org.bouncycastle.crypto.Mac macEngine
         0: .line 46
            aload 0 /* this */
            invokespecial javax.crypto.MacSpi.<init>:()V
         1: .line 42
            aload 0 /* this */
            iconst_2
            putfield org.bouncycastle.jce.provider.JCEMac.pbeType:I
         2: .line 43
            aload 0 /* this */
            iconst_1
            putfield org.bouncycastle.jce.provider.JCEMac.pbeHash:I
         3: .line 44
            aload 0 /* this */
            sipush 160
            putfield org.bouncycastle.jce.provider.JCEMac.keySize:I
         4: .line 49
            aload 0 /* this */
            aload 1 /* macEngine */
            putfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
         5: .line 50
            return
        end local 1 // org.bouncycastle.crypto.Mac macEngine
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    6     0       this  Lorg/bouncycastle/jce/provider/JCEMac;
            0    6     1  macEngine  Lorg/bouncycastle/crypto/Mac;
    MethodParameters:
           Name  Flags
      macEngine  

  protected void <init>(org.bouncycastle.crypto.Mac, int, int, int);
    descriptor: (Lorg/bouncycastle/crypto/Mac;III)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
        start local 1 // org.bouncycastle.crypto.Mac macEngine
        start local 2 // int pbeType
        start local 3 // int pbeHash
        start local 4 // int keySize
         0: .line 52
            aload 0 /* this */
            invokespecial javax.crypto.MacSpi.<init>:()V
         1: .line 42
            aload 0 /* this */
            iconst_2
            putfield org.bouncycastle.jce.provider.JCEMac.pbeType:I
         2: .line 43
            aload 0 /* this */
            iconst_1
            putfield org.bouncycastle.jce.provider.JCEMac.pbeHash:I
         3: .line 44
            aload 0 /* this */
            sipush 160
            putfield org.bouncycastle.jce.provider.JCEMac.keySize:I
         4: .line 58
            aload 0 /* this */
            aload 1 /* macEngine */
            putfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
         5: .line 59
            aload 0 /* this */
            iload 2 /* pbeType */
            putfield org.bouncycastle.jce.provider.JCEMac.pbeType:I
         6: .line 60
            aload 0 /* this */
            iload 3 /* pbeHash */
            putfield org.bouncycastle.jce.provider.JCEMac.pbeHash:I
         7: .line 61
            aload 0 /* this */
            iload 4 /* keySize */
            putfield org.bouncycastle.jce.provider.JCEMac.keySize:I
         8: .line 62
            return
        end local 4 // int keySize
        end local 3 // int pbeHash
        end local 2 // int pbeType
        end local 1 // org.bouncycastle.crypto.Mac macEngine
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0       this  Lorg/bouncycastle/jce/provider/JCEMac;
            0    9     1  macEngine  Lorg/bouncycastle/crypto/Mac;
            0    9     2    pbeType  I
            0    9     3    pbeHash  I
            0    9     4    keySize  I
    MethodParameters:
           Name  Flags
      macEngine  
      pbeType    
      pbeHash    
      keySize    

  protected void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec);
    descriptor: (Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
        start local 1 // java.security.Key key
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 71
            aload 1 /* key */
            ifnonnull 2
         1: .line 73
            new java.security.InvalidKeyException
            dup
            ldc "key is null"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 76
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof org.bouncycastle.jce.provider.JCEPBEKey
            ifeq 11
         3: .line 78
            aload 1 /* key */
            checkcast org.bouncycastle.jce.provider.JCEPBEKey
            astore 4 /* k */
        start local 4 // org.bouncycastle.jce.provider.JCEPBEKey k
         4: .line 80
            aload 4 /* k */
            invokevirtual org.bouncycastle.jce.provider.JCEPBEKey.getParam:()Lorg/bouncycastle/crypto/CipherParameters;
            ifnull 7
         5: .line 82
            aload 4 /* k */
            invokevirtual org.bouncycastle.jce.provider.JCEPBEKey.getParam:()Lorg/bouncycastle/crypto/CipherParameters;
            astore 3 /* param */
        start local 3 // org.bouncycastle.crypto.CipherParameters param
         6: .line 83
            goto 18
        end local 3 // org.bouncycastle.crypto.CipherParameters param
         7: .line 84
      StackMap locals: org.bouncycastle.jce.provider.JCEMac java.security.Key java.security.spec.AlgorithmParameterSpec top org.bouncycastle.jce.provider.JCEPBEKey
      StackMap stack:
            aload 2 /* params */
            instanceof javax.crypto.spec.PBEParameterSpec
            ifeq 10
         8: .line 86
            aload 4 /* k */
            aload 2 /* params */
            invokestatic org.bouncycastle.jce.provider.PBE$Util.makePBEMacParameters:(Lorg/bouncycastle/jce/provider/JCEPBEKey;Ljava/security/spec/AlgorithmParameterSpec;)Lorg/bouncycastle/crypto/CipherParameters;
            astore 3 /* param */
        start local 3 // org.bouncycastle.crypto.CipherParameters param
         9: .line 87
            goto 18
        end local 3 // org.bouncycastle.crypto.CipherParameters param
        10: .line 90
      StackMap locals:
      StackMap stack:
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "PBE requires PBE parameters to be set."
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // org.bouncycastle.jce.provider.JCEPBEKey k
        11: .line 93
      StackMap locals: org.bouncycastle.jce.provider.JCEMac java.security.Key java.security.spec.AlgorithmParameterSpec
      StackMap stack:
            aload 2 /* params */
            instanceof javax.crypto.spec.IvParameterSpec
            ifeq 14
        12: .line 95
            new org.bouncycastle.crypto.params.ParametersWithIV
            dup
            new org.bouncycastle.crypto.params.KeyParameter
            dup
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            invokespecial org.bouncycastle.crypto.params.KeyParameter.<init>:([B)V
            aload 2 /* params */
            checkcast javax.crypto.spec.IvParameterSpec
            invokevirtual javax.crypto.spec.IvParameterSpec.getIV:()[B
            invokespecial org.bouncycastle.crypto.params.ParametersWithIV.<init>:(Lorg/bouncycastle/crypto/CipherParameters;[B)V
            astore 3 /* param */
        start local 3 // org.bouncycastle.crypto.CipherParameters param
        13: .line 96
            goto 18
        end local 3 // org.bouncycastle.crypto.CipherParameters param
        14: .line 97
      StackMap locals:
      StackMap stack:
            aload 2 /* params */
            ifnonnull 17
        15: .line 99
            new org.bouncycastle.crypto.params.KeyParameter
            dup
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            invokespecial org.bouncycastle.crypto.params.KeyParameter.<init>:([B)V
            astore 3 /* param */
        start local 3 // org.bouncycastle.crypto.CipherParameters param
        16: .line 100
            goto 18
        end local 3 // org.bouncycastle.crypto.CipherParameters param
        17: .line 103
      StackMap locals:
      StackMap stack:
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "unknown parameter type."
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        start local 3 // org.bouncycastle.crypto.CipherParameters param
        18: .line 106
      StackMap locals: org.bouncycastle.crypto.CipherParameters
      StackMap stack:
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            aload 3 /* param */
            invokeinterface org.bouncycastle.crypto.Mac.init:(Lorg/bouncycastle/crypto/CipherParameters;)V
        19: .line 107
            return
        end local 3 // org.bouncycastle.crypto.CipherParameters param
        end local 2 // java.security.spec.AlgorithmParameterSpec params
        end local 1 // java.security.Key key
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   20     0    this  Lorg/bouncycastle/jce/provider/JCEMac;
            0   20     1     key  Ljava/security/Key;
            0   20     2  params  Ljava/security/spec/AlgorithmParameterSpec;
            6    7     3   param  Lorg/bouncycastle/crypto/CipherParameters;
            9   10     3   param  Lorg/bouncycastle/crypto/CipherParameters;
           13   14     3   param  Lorg/bouncycastle/crypto/CipherParameters;
           16   17     3   param  Lorg/bouncycastle/crypto/CipherParameters;
           18   20     3   param  Lorg/bouncycastle/crypto/CipherParameters;
            4   11     4       k  Lorg/bouncycastle/jce/provider/JCEPBEKey;
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      key     
      params  

  protected int engineGetMacLength();
    descriptor: ()I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
         0: .line 111
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            invokeinterface org.bouncycastle.crypto.Mac.getMacSize:()I
            ireturn
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/jce/provider/JCEMac;

  protected void engineReset();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
         0: .line 116
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            invokeinterface org.bouncycastle.crypto.Mac.reset:()V
         1: .line 117
            return
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/bouncycastle/jce/provider/JCEMac;

  protected void engineUpdate(byte);
    descriptor: (B)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
        start local 1 // byte input
         0: .line 122
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            iload 1 /* input */
            invokeinterface org.bouncycastle.crypto.Mac.update:(B)V
         1: .line 123
            return
        end local 1 // byte input
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/bouncycastle/jce/provider/JCEMac;
            0    2     1  input  B
    MethodParameters:
       Name  Flags
      input  

  protected void engineUpdate(byte[], int, int);
    descriptor: ([BII)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
        start local 1 // byte[] input
        start local 2 // int offset
        start local 3 // int len
         0: .line 130
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            aload 1 /* input */
            iload 2 /* offset */
            iload 3 /* len */
            invokeinterface org.bouncycastle.crypto.Mac.update:([BII)V
         1: .line 131
            return
        end local 3 // int len
        end local 2 // int offset
        end local 1 // byte[] input
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/bouncycastle/jce/provider/JCEMac;
            0    2     1   input  [B
            0    2     2  offset  I
            0    2     3     len  I
    MethodParameters:
        Name  Flags
      input   
      offset  
      len     

  protected byte[] engineDoFinal();
    descriptor: ()[B
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.bouncycastle.jce.provider.JCEMac this
         0: .line 135
            aload 0 /* this */
            invokevirtual org.bouncycastle.jce.provider.JCEMac.engineGetMacLength:()I
            newarray 8
            astore 1 /* out */
        start local 1 // byte[] out
         1: .line 137
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JCEMac.macEngine:Lorg/bouncycastle/crypto/Mac;
            aload 1 /* out */
            iconst_0
            invokeinterface org.bouncycastle.crypto.Mac.doFinal:([BI)I
            pop
         2: .line 139
            aload 1 /* out */
            areturn
        end local 1 // byte[] out
        end local 0 // org.bouncycastle.jce.provider.JCEMac this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/bouncycastle/jce/provider/JCEMac;
            1    3     1   out  [B
}
SourceFile: "JCEMac.java"
NestMembers:
  org.bouncycastle.jce.provider.JCEMac$DES  org.bouncycastle.jce.provider.JCEMac$DES9797Alg3  org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4  org.bouncycastle.jce.provider.JCEMac$DESCFB8  org.bouncycastle.jce.provider.JCEMac$GOST28147  org.bouncycastle.jce.provider.JCEMac$MD2  org.bouncycastle.jce.provider.JCEMac$MD4  org.bouncycastle.jce.provider.JCEMac$MD5  org.bouncycastle.jce.provider.JCEMac$OldSHA384  org.bouncycastle.jce.provider.JCEMac$OldSHA512  org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160  org.bouncycastle.jce.provider.JCEMac$PBEWithSHA  org.bouncycastle.jce.provider.JCEMac$PBEWithTiger  org.bouncycastle.jce.provider.JCEMac$RC2  org.bouncycastle.jce.provider.JCEMac$RC2CFB8  org.bouncycastle.jce.provider.JCEMac$RIPEMD128  org.bouncycastle.jce.provider.JCEMac$RIPEMD160  org.bouncycastle.jce.provider.JCEMac$SHA1  org.bouncycastle.jce.provider.JCEMac$SHA224  org.bouncycastle.jce.provider.JCEMac$SHA256  org.bouncycastle.jce.provider.JCEMac$SHA384  org.bouncycastle.jce.provider.JCEMac$SHA512  org.bouncycastle.jce.provider.JCEMac$Tiger
InnerClasses:
  public DES = org.bouncycastle.jce.provider.JCEMac$DES of org.bouncycastle.jce.provider.JCEMac
  public DES9797Alg3 = org.bouncycastle.jce.provider.JCEMac$DES9797Alg3 of org.bouncycastle.jce.provider.JCEMac
  public DES9797Alg3with7816d4 = org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4 of org.bouncycastle.jce.provider.JCEMac
  public DESCFB8 = org.bouncycastle.jce.provider.JCEMac$DESCFB8 of org.bouncycastle.jce.provider.JCEMac
  public GOST28147 = org.bouncycastle.jce.provider.JCEMac$GOST28147 of org.bouncycastle.jce.provider.JCEMac
  public MD2 = org.bouncycastle.jce.provider.JCEMac$MD2 of org.bouncycastle.jce.provider.JCEMac
  public MD4 = org.bouncycastle.jce.provider.JCEMac$MD4 of org.bouncycastle.jce.provider.JCEMac
  public MD5 = org.bouncycastle.jce.provider.JCEMac$MD5 of org.bouncycastle.jce.provider.JCEMac
  public OldSHA384 = org.bouncycastle.jce.provider.JCEMac$OldSHA384 of org.bouncycastle.jce.provider.JCEMac
  public OldSHA512 = org.bouncycastle.jce.provider.JCEMac$OldSHA512 of org.bouncycastle.jce.provider.JCEMac
  public PBEWithRIPEMD160 = org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160 of org.bouncycastle.jce.provider.JCEMac
  public PBEWithSHA = org.bouncycastle.jce.provider.JCEMac$PBEWithSHA of org.bouncycastle.jce.provider.JCEMac
  public PBEWithTiger = org.bouncycastle.jce.provider.JCEMac$PBEWithTiger of org.bouncycastle.jce.provider.JCEMac
  public RC2 = org.bouncycastle.jce.provider.JCEMac$RC2 of org.bouncycastle.jce.provider.JCEMac
  public RC2CFB8 = org.bouncycastle.jce.provider.JCEMac$RC2CFB8 of org.bouncycastle.jce.provider.JCEMac
  public RIPEMD128 = org.bouncycastle.jce.provider.JCEMac$RIPEMD128 of org.bouncycastle.jce.provider.JCEMac
  public RIPEMD160 = org.bouncycastle.jce.provider.JCEMac$RIPEMD160 of org.bouncycastle.jce.provider.JCEMac
  public SHA1 = org.bouncycastle.jce.provider.JCEMac$SHA1 of org.bouncycastle.jce.provider.JCEMac
  public SHA224 = org.bouncycastle.jce.provider.JCEMac$SHA224 of org.bouncycastle.jce.provider.JCEMac
  public SHA256 = org.bouncycastle.jce.provider.JCEMac$SHA256 of org.bouncycastle.jce.provider.JCEMac
  public SHA384 = org.bouncycastle.jce.provider.JCEMac$SHA384 of org.bouncycastle.jce.provider.JCEMac
  public SHA512 = org.bouncycastle.jce.provider.JCEMac$SHA512 of org.bouncycastle.jce.provider.JCEMac
  public Tiger = org.bouncycastle.jce.provider.JCEMac$Tiger of org.bouncycastle.jce.provider.JCEMac
  public Util = org.bouncycastle.jce.provider.PBE$Util of org.bouncycastle.jce.provider.PBE