public class org.bouncycastle.crypto.engines.RC2WrapEngine implements org.bouncycastle.crypto.Wrapper
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.crypto.engines.RC2WrapEngine
  super_class: java.lang.Object
{
  private org.bouncycastle.crypto.modes.CBCBlockCipher engine;
    descriptor: Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
    flags: (0x0002) ACC_PRIVATE

  private org.bouncycastle.crypto.CipherParameters param;
    descriptor: Lorg/bouncycastle/crypto/CipherParameters;
    flags: (0x0002) ACC_PRIVATE

  private org.bouncycastle.crypto.params.ParametersWithIV paramPlusIV;
    descriptor: Lorg/bouncycastle/crypto/params/ParametersWithIV;
    flags: (0x0002) ACC_PRIVATE

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

  private boolean forWrapping;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private java.security.SecureRandom sr;
    descriptor: Ljava/security/SecureRandom;
    flags: (0x0002) ACC_PRIVATE

  private static final byte[] IV2;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  org.bouncycastle.crypto.Digest sha1;
    descriptor: Lorg/bouncycastle/crypto/Digest;
    flags: (0x0000) 

  byte[] digest;
    descriptor: [B
    flags: (0x0000) 

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 39
            bipush 8
            newarray 8
            dup
            iconst_0
            bipush 74
            bastore
            dup
            iconst_1
            bipush -35
            bastore
            dup
            iconst_2
            bipush -94
            bastore
            dup
            iconst_3
         1: .line 40
            bipush 44
            bastore
            dup
            iconst_4
            bipush 121
            bastore
            dup
            iconst_5
            bipush -24
            bastore
            dup
            bipush 6
         2: .line 41
            bipush 33
            bastore
            dup
            bipush 7
            iconst_5
            bastore
         3: .line 39
            putstatic org.bouncycastle.crypto.engines.RC2WrapEngine.IV2:[B
         4: .line 41
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
         0: .line 18
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 46
            aload 0 /* this */
            new org.bouncycastle.crypto.digests.SHA1Digest
            dup
            invokespecial org.bouncycastle.crypto.digests.SHA1Digest.<init>:()V
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.sha1:Lorg/bouncycastle/crypto/Digest;
         2: .line 47
            aload 0 /* this */
            bipush 20
            newarray 8
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.digest:[B
         3: .line 18
            return
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;

  public void init(boolean, org.bouncycastle.crypto.CipherParameters);
    descriptor: (ZLorg/bouncycastle/crypto/CipherParameters;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
        start local 1 // boolean forWrapping
        start local 2 // org.bouncycastle.crypto.CipherParameters param
         0: .line 57
            aload 0 /* this */
            iload 1 /* forWrapping */
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.forWrapping:Z
         1: .line 58
            aload 0 /* this */
            new org.bouncycastle.crypto.modes.CBCBlockCipher
            dup
            new org.bouncycastle.crypto.engines.RC2Engine
            dup
            invokespecial org.bouncycastle.crypto.engines.RC2Engine.<init>:()V
            invokespecial org.bouncycastle.crypto.modes.CBCBlockCipher.<init>:(Lorg/bouncycastle/crypto/BlockCipher;)V
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
         2: .line 60
            aload 2 /* param */
            instanceof org.bouncycastle.crypto.params.ParametersWithRandom
            ifeq 7
         3: .line 62
            aload 2 /* param */
            checkcast org.bouncycastle.crypto.params.ParametersWithRandom
            astore 3 /* pWithR */
        start local 3 // org.bouncycastle.crypto.params.ParametersWithRandom pWithR
         4: .line 63
            aload 0 /* this */
            aload 3 /* pWithR */
            invokevirtual org.bouncycastle.crypto.params.ParametersWithRandom.getRandom:()Ljava/security/SecureRandom;
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.sr:Ljava/security/SecureRandom;
         5: .line 64
            aload 3 /* pWithR */
            invokevirtual org.bouncycastle.crypto.params.ParametersWithRandom.getParameters:()Lorg/bouncycastle/crypto/CipherParameters;
            astore 2 /* param */
        end local 3 // org.bouncycastle.crypto.params.ParametersWithRandom pWithR
         6: .line 65
            goto 8
         7: .line 68
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.security.SecureRandom
            dup
            invokespecial java.security.SecureRandom.<init>:()V
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.sr:Ljava/security/SecureRandom;
         8: .line 71
      StackMap locals:
      StackMap stack:
            aload 2 /* param */
            instanceof org.bouncycastle.crypto.params.ParametersWithIV
            ifeq 18
         9: .line 73
            aload 0 /* this */
            aload 2 /* param */
            checkcast org.bouncycastle.crypto.params.ParametersWithIV
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
        10: .line 74
            aload 0 /* this */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
            invokevirtual org.bouncycastle.crypto.params.ParametersWithIV.getIV:()[B
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
        11: .line 75
            aload 0 /* this */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
            invokevirtual org.bouncycastle.crypto.params.ParametersWithIV.getParameters:()Lorg/bouncycastle/crypto/CipherParameters;
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
        12: .line 77
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.forWrapping:Z
            ifeq 15
        13: .line 79
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            ifnull 14
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            arraylength
            bipush 8
            if_icmpeq 23
        14: .line 81
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "IV is not 8 octets"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 86
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
        16: .line 87
            ldc "You should not supply an IV for unwrapping"
        17: .line 86
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 92
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* param */
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
        19: .line 94
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.forWrapping:Z
            ifeq 23
        20: .line 99
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
        21: .line 101
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.sr:Ljava/security/SecureRandom;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
        22: .line 103
            aload 0 /* this */
            new org.bouncycastle.crypto.params.ParametersWithIV
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            invokespecial org.bouncycastle.crypto.params.ParametersWithIV.<init>:(Lorg/bouncycastle/crypto/CipherParameters;[B)V
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
        23: .line 107
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.bouncycastle.crypto.CipherParameters param
        end local 1 // boolean forWrapping
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   24     0         this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;
            0   24     1  forWrapping  Z
            0   24     2        param  Lorg/bouncycastle/crypto/CipherParameters;
            4    6     3       pWithR  Lorg/bouncycastle/crypto/params/ParametersWithRandom;
    MethodParameters:
             Name  Flags
      forWrapping  
      param        

  public java.lang.String getAlgorithmName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
         0: .line 116
            ldc "RC2"
            areturn
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;

  public byte[] wrap(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=17, args_size=4
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
         0: .line 130
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.forWrapping:Z
            ifne 2
         1: .line 132
            new java.lang.IllegalStateException
            dup
            ldc "Not initialized for wrapping"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 135
      StackMap locals:
      StackMap stack:
            iload 3 /* inLen */
            iconst_1
            iadd
            istore 4 /* length */
        start local 4 // int length
         3: .line 136
            iload 4 /* length */
            bipush 8
            irem
            ifeq 5
         4: .line 138
            iload 4 /* length */
            bipush 8
            iload 4 /* length */
            bipush 8
            irem
            isub
            iadd
            istore 4 /* length */
         5: .line 141
      StackMap locals: int
      StackMap stack:
            iload 4 /* length */
            newarray 8
            astore 5 /* keyToBeWrapped */
        start local 5 // byte[] keyToBeWrapped
         6: .line 143
            aload 5 /* keyToBeWrapped */
            iconst_0
            iload 3 /* inLen */
            i2b
            bastore
         7: .line 144
            aload 1 /* in */
            iload 2 /* inOff */
            aload 5 /* keyToBeWrapped */
            iconst_1
            iload 3 /* inLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         8: .line 146
            aload 5 /* keyToBeWrapped */
            arraylength
            iload 3 /* inLen */
            isub
            iconst_1
            isub
            newarray 8
            astore 6 /* pad */
        start local 6 // byte[] pad
         9: .line 148
            aload 6 /* pad */
            arraylength
            ifle 12
        10: .line 150
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.sr:Ljava/security/SecureRandom;
            aload 6 /* pad */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
        11: .line 151
            aload 6 /* pad */
            iconst_0
            aload 5 /* keyToBeWrapped */
            iload 3 /* inLen */
            iconst_1
            iadd
            aload 6 /* pad */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        12: .line 155
      StackMap locals: byte[] byte[]
      StackMap stack:
            aload 0 /* this */
            aload 5 /* keyToBeWrapped */
            invokevirtual org.bouncycastle.crypto.engines.RC2WrapEngine.calculateCMSKeyChecksum:([B)[B
            astore 7 /* CKS */
        start local 7 // byte[] CKS
        13: .line 158
            aload 5 /* keyToBeWrapped */
            arraylength
            aload 7 /* CKS */
            arraylength
            iadd
            newarray 8
            astore 8 /* WKCKS */
        start local 8 // byte[] WKCKS
        14: .line 160
            aload 5 /* keyToBeWrapped */
            iconst_0
            aload 8 /* WKCKS */
            iconst_0
            aload 5 /* keyToBeWrapped */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        15: .line 161
            aload 7 /* CKS */
            iconst_0
            aload 8 /* WKCKS */
            aload 5 /* keyToBeWrapped */
            arraylength
            aload 7 /* CKS */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        16: .line 165
            aload 8 /* WKCKS */
            arraylength
            newarray 8
            astore 9 /* TEMP1 */
        start local 9 // byte[] TEMP1
        17: .line 167
            aload 8 /* WKCKS */
            iconst_0
            aload 9 /* TEMP1 */
            iconst_0
            aload 8 /* WKCKS */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        18: .line 169
            aload 8 /* WKCKS */
            arraylength
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            idiv
            istore 10 /* noOfBlocks */
        start local 10 // int noOfBlocks
        19: .line 170
            aload 8 /* WKCKS */
            arraylength
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            irem
            istore 11 /* extraBytes */
        start local 11 // int extraBytes
        20: .line 172
            iload 11 /* extraBytes */
            ifeq 22
        21: .line 174
            new java.lang.IllegalStateException
            dup
            ldc "Not multiple of block length"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        22: .line 177
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int int byte[] byte[] byte[] byte[] byte[] int int
      StackMap stack:
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            iconst_1
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.init:(ZLorg/bouncycastle/crypto/CipherParameters;)V
        23: .line 179
            iconst_0
            istore 12 /* i */
        start local 12 // int i
        24: goto 28
        25: .line 181
      StackMap locals: int
      StackMap stack:
            iload 12 /* i */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            imul
            istore 13 /* currentBytePos */
        start local 13 // int currentBytePos
        26: .line 183
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            aload 9 /* TEMP1 */
            iload 13 /* currentBytePos */
            aload 9 /* TEMP1 */
            iload 13 /* currentBytePos */
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.processBlock:([BI[BI)I
            pop
        end local 13 // int currentBytePos
        27: .line 179
            iinc 12 /* i */ 1
      StackMap locals:
      StackMap stack:
        28: iload 12 /* i */
            iload 10 /* noOfBlocks */
            if_icmplt 25
        end local 12 // int i
        29: .line 187
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            arraylength
            aload 9 /* TEMP1 */
            arraylength
            iadd
            newarray 8
            astore 12 /* TEMP2 */
        start local 12 // byte[] TEMP2
        30: .line 189
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            iconst_0
            aload 12 /* TEMP2 */
            iconst_0
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        31: .line 190
            aload 9 /* TEMP1 */
            iconst_0
            aload 12 /* TEMP2 */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            arraylength
            aload 9 /* TEMP1 */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        32: .line 193
            aload 12 /* TEMP2 */
            arraylength
            newarray 8
            astore 13 /* TEMP3 */
        start local 13 // byte[] TEMP3
        33: .line 195
            iconst_0
            istore 14 /* i */
        start local 14 // int i
        34: goto 37
        35: .line 197
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int int byte[] byte[] byte[] byte[] byte[] int int byte[] byte[] int
      StackMap stack:
            aload 13 /* TEMP3 */
            iload 14 /* i */
            aload 12 /* TEMP2 */
            aload 12 /* TEMP2 */
            arraylength
            iload 14 /* i */
            iconst_1
            iadd
            isub
            baload
            bastore
        36: .line 195
            iinc 14 /* i */ 1
      StackMap locals:
      StackMap stack:
        37: iload 14 /* i */
            aload 12 /* TEMP2 */
            arraylength
            if_icmplt 35
        end local 14 // int i
        38: .line 204
            new org.bouncycastle.crypto.params.ParametersWithIV
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
            getstatic org.bouncycastle.crypto.engines.RC2WrapEngine.IV2:[B
            invokespecial org.bouncycastle.crypto.params.ParametersWithIV.<init>:(Lorg/bouncycastle/crypto/CipherParameters;[B)V
            astore 14 /* param2 */
        start local 14 // org.bouncycastle.crypto.params.ParametersWithIV param2
        39: .line 206
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            iconst_1
            aload 14 /* param2 */
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.init:(ZLorg/bouncycastle/crypto/CipherParameters;)V
        40: .line 208
            iconst_0
            istore 15 /* i */
        start local 15 // int i
        41: goto 45
        42: .line 210
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int int byte[] byte[] byte[] byte[] byte[] int int byte[] byte[] org.bouncycastle.crypto.params.ParametersWithIV int
      StackMap stack:
            iload 15 /* i */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            imul
            istore 16 /* currentBytePos */
        start local 16 // int currentBytePos
        43: .line 212
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            aload 13 /* TEMP3 */
            iload 16 /* currentBytePos */
            aload 13 /* TEMP3 */
            iload 16 /* currentBytePos */
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.processBlock:([BI[BI)I
            pop
        end local 16 // int currentBytePos
        44: .line 208
            iinc 15 /* i */ 1
      StackMap locals:
      StackMap stack:
        45: iload 15 /* i */
            iload 10 /* noOfBlocks */
            iconst_1
            iadd
            if_icmplt 42
        end local 15 // int i
        46: .line 215
            aload 13 /* TEMP3 */
            areturn
        end local 14 // org.bouncycastle.crypto.params.ParametersWithIV param2
        end local 13 // byte[] TEMP3
        end local 12 // byte[] TEMP2
        end local 11 // int extraBytes
        end local 10 // int noOfBlocks
        end local 9 // byte[] TEMP1
        end local 8 // byte[] WKCKS
        end local 7 // byte[] CKS
        end local 6 // byte[] pad
        end local 5 // byte[] keyToBeWrapped
        end local 4 // int length
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   47     0            this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;
            0   47     1              in  [B
            0   47     2           inOff  I
            0   47     3           inLen  I
            3   47     4          length  I
            6   47     5  keyToBeWrapped  [B
            9   47     6             pad  [B
           13   47     7             CKS  [B
           14   47     8           WKCKS  [B
           17   47     9           TEMP1  [B
           19   47    10      noOfBlocks  I
           20   47    11      extraBytes  I
           24   29    12               i  I
           26   27    13  currentBytePos  I
           30   47    12           TEMP2  [B
           33   47    13           TEMP3  [B
           34   38    14               i  I
           39   47    14          param2  Lorg/bouncycastle/crypto/params/ParametersWithIV;
           41   46    15               i  I
           43   44    16  currentBytePos  I
    MethodParameters:
       Name  Flags
      in     
      inOff  
      inLen  

  public byte[] unwrap(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=12, args_size=4
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
         0: .line 231
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.forWrapping:Z
            ifeq 2
         1: .line 233
            new java.lang.IllegalStateException
            dup
            ldc "Not set for unwrapping"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 236
      StackMap locals:
      StackMap stack:
            aload 1 /* in */
            ifnonnull 4
         3: .line 238
            new org.bouncycastle.crypto.InvalidCipherTextException
            dup
            ldc "Null pointer as ciphertext"
            invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 241
      StackMap locals:
      StackMap stack:
            iload 3 /* inLen */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            irem
            ifeq 8
         5: .line 243
            new org.bouncycastle.crypto.InvalidCipherTextException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Ciphertext not multiple of "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         6: .line 244
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         7: .line 243
            invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 263
      StackMap locals:
      StackMap stack:
            new org.bouncycastle.crypto.params.ParametersWithIV
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
            getstatic org.bouncycastle.crypto.engines.RC2WrapEngine.IV2:[B
            invokespecial org.bouncycastle.crypto.params.ParametersWithIV.<init>:(Lorg/bouncycastle/crypto/CipherParameters;[B)V
            astore 4 /* param2 */
        start local 4 // org.bouncycastle.crypto.params.ParametersWithIV param2
         9: .line 265
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            iconst_0
            aload 4 /* param2 */
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.init:(ZLorg/bouncycastle/crypto/CipherParameters;)V
        10: .line 267
            iload 3 /* inLen */
            newarray 8
            astore 5 /* TEMP3 */
        start local 5 // byte[] TEMP3
        11: .line 269
            aload 1 /* in */
            iload 2 /* inOff */
            aload 5 /* TEMP3 */
            iconst_0
            iload 3 /* inLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        12: .line 271
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        13: goto 17
        14: .line 273
      StackMap locals: org.bouncycastle.crypto.params.ParametersWithIV byte[] int
      StackMap stack:
            iload 6 /* i */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            imul
            istore 7 /* currentBytePos */
        start local 7 // int currentBytePos
        15: .line 275
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            aload 5 /* TEMP3 */
            iload 7 /* currentBytePos */
            aload 5 /* TEMP3 */
            iload 7 /* currentBytePos */
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.processBlock:([BI[BI)I
            pop
        end local 7 // int currentBytePos
        16: .line 271
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 6 /* i */
            aload 5 /* TEMP3 */
            arraylength
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            idiv
            if_icmplt 14
        end local 6 // int i
        18: .line 279
            aload 5 /* TEMP3 */
            arraylength
            newarray 8
            astore 6 /* TEMP2 */
        start local 6 // byte[] TEMP2
        19: .line 281
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        20: goto 23
        21: .line 283
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int org.bouncycastle.crypto.params.ParametersWithIV byte[] byte[] int
      StackMap stack:
            aload 6 /* TEMP2 */
            iload 7 /* i */
            aload 5 /* TEMP3 */
            aload 5 /* TEMP3 */
            arraylength
            iload 7 /* i */
            iconst_1
            iadd
            isub
            baload
            bastore
        22: .line 281
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        23: iload 7 /* i */
            aload 5 /* TEMP3 */
            arraylength
            if_icmplt 21
        end local 7 // int i
        24: .line 288
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
        25: .line 290
            aload 6 /* TEMP2 */
            arraylength
            bipush 8
            isub
            newarray 8
            astore 7 /* TEMP1 */
        start local 7 // byte[] TEMP1
        26: .line 292
            aload 6 /* TEMP2 */
            iconst_0
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        27: .line 293
            aload 6 /* TEMP2 */
            bipush 8
            aload 7 /* TEMP1 */
            iconst_0
            aload 6 /* TEMP2 */
            arraylength
            bipush 8
            isub
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        28: .line 297
            aload 0 /* this */
            new org.bouncycastle.crypto.params.ParametersWithIV
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.param:Lorg/bouncycastle/crypto/CipherParameters;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.iv:[B
            invokespecial org.bouncycastle.crypto.params.ParametersWithIV.<init>:(Lorg/bouncycastle/crypto/CipherParameters;[B)V
            putfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
        29: .line 299
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            iconst_0
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.paramPlusIV:Lorg/bouncycastle/crypto/params/ParametersWithIV;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.init:(ZLorg/bouncycastle/crypto/CipherParameters;)V
        30: .line 301
            aload 7 /* TEMP1 */
            arraylength
            newarray 8
            astore 8 /* LCEKPADICV */
        start local 8 // byte[] LCEKPADICV
        31: .line 303
            aload 7 /* TEMP1 */
            iconst_0
            aload 8 /* LCEKPADICV */
            iconst_0
            aload 7 /* TEMP1 */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        32: .line 305
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        33: goto 39
        34: .line 307
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int org.bouncycastle.crypto.params.ParametersWithIV byte[] byte[] byte[] byte[] int
      StackMap stack:
            iload 9 /* i */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            imul
            istore 10 /* currentBytePos */
        start local 10 // int currentBytePos
        35: .line 309
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            aload 8 /* LCEKPADICV */
            iload 10 /* currentBytePos */
            aload 8 /* LCEKPADICV */
        36: .line 310
            iload 10 /* currentBytePos */
        37: .line 309
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.processBlock:([BI[BI)I
            pop
        end local 10 // int currentBytePos
        38: .line 305
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        39: iload 9 /* i */
            aload 8 /* LCEKPADICV */
            arraylength
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.engine:Lorg/bouncycastle/crypto/modes/CBCBlockCipher;
            invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getBlockSize:()I
            idiv
            if_icmplt 34
        end local 9 // int i
        40: .line 316
            aload 8 /* LCEKPADICV */
            arraylength
            bipush 8
            isub
            newarray 8
            astore 9 /* result */
        start local 9 // byte[] result
        41: .line 317
            bipush 8
            newarray 8
            astore 10 /* CKStoBeVerified */
        start local 10 // byte[] CKStoBeVerified
        42: .line 319
            aload 8 /* LCEKPADICV */
            iconst_0
            aload 9 /* result */
            iconst_0
            aload 8 /* LCEKPADICV */
            arraylength
            bipush 8
            isub
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        43: .line 320
            aload 8 /* LCEKPADICV */
            aload 8 /* LCEKPADICV */
            arraylength
            bipush 8
            isub
            aload 10 /* CKStoBeVerified */
            iconst_0
        44: .line 321
            bipush 8
        45: .line 320
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        46: .line 327
            aload 0 /* this */
            aload 9 /* result */
            aload 10 /* CKStoBeVerified */
            invokevirtual org.bouncycastle.crypto.engines.RC2WrapEngine.checkCMSKeyChecksum:([B[B)Z
            ifne 50
        47: .line 329
            new org.bouncycastle.crypto.InvalidCipherTextException
            dup
        48: .line 330
            ldc "Checksum inside ciphertext is corrupted"
        49: .line 329
            invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
            athrow
        50: .line 333
      StackMap locals: org.bouncycastle.crypto.engines.RC2WrapEngine byte[] int int org.bouncycastle.crypto.params.ParametersWithIV byte[] byte[] byte[] byte[] byte[] byte[]
      StackMap stack:
            aload 9 /* result */
            arraylength
            aload 9 /* result */
            iconst_0
            baload
            sipush 255
            iand
            iconst_1
            iadd
            isub
            bipush 7
            if_icmple 54
        51: .line 335
            new org.bouncycastle.crypto.InvalidCipherTextException
            dup
            new java.lang.StringBuilder
            dup
            ldc "too many pad bytes ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        52: .line 336
            aload 9 /* result */
            arraylength
            aload 9 /* result */
            iconst_0
            baload
            sipush 255
            iand
            iconst_1
            iadd
            isub
            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;
        53: .line 335
            invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
            athrow
        54: .line 340
      StackMap locals:
      StackMap stack:
            aload 9 /* result */
            iconst_0
            baload
            newarray 8
            astore 11 /* CEK */
        start local 11 // byte[] CEK
        55: .line 341
            aload 9 /* result */
            iconst_1
            aload 11 /* CEK */
            iconst_0
            aload 11 /* CEK */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        56: .line 342
            aload 11 /* CEK */
            areturn
        end local 11 // byte[] CEK
        end local 10 // byte[] CKStoBeVerified
        end local 9 // byte[] result
        end local 8 // byte[] LCEKPADICV
        end local 7 // byte[] TEMP1
        end local 6 // byte[] TEMP2
        end local 5 // byte[] TEMP3
        end local 4 // org.bouncycastle.crypto.params.ParametersWithIV param2
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   57     0             this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;
            0   57     1               in  [B
            0   57     2            inOff  I
            0   57     3            inLen  I
            9   57     4           param2  Lorg/bouncycastle/crypto/params/ParametersWithIV;
           11   57     5            TEMP3  [B
           13   18     6                i  I
           15   16     7   currentBytePos  I
           19   57     6            TEMP2  [B
           20   24     7                i  I
           26   57     7            TEMP1  [B
           31   57     8       LCEKPADICV  [B
           33   40     9                i  I
           35   38    10   currentBytePos  I
           41   57     9           result  [B
           42   57    10  CKStoBeVerified  [B
           55   57    11              CEK  [B
    Exceptions:
      throws org.bouncycastle.crypto.InvalidCipherTextException
    MethodParameters:
       Name  Flags
      in     
      inOff  
      inLen  

  private byte[] calculateCMSKeyChecksum(byte[]);
    descriptor: ([B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
        start local 1 // byte[] key
         0: .line 361
            bipush 8
            newarray 8
            astore 2 /* result */
        start local 2 // byte[] result
         1: .line 363
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.sha1:Lorg/bouncycastle/crypto/Digest;
            aload 1 /* key */
            iconst_0
            aload 1 /* key */
            arraylength
            invokeinterface org.bouncycastle.crypto.Digest.update:([BII)V
         2: .line 364
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.sha1:Lorg/bouncycastle/crypto/Digest;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.digest:[B
            iconst_0
            invokeinterface org.bouncycastle.crypto.Digest.doFinal:([BI)I
            pop
         3: .line 366
            aload 0 /* this */
            getfield org.bouncycastle.crypto.engines.RC2WrapEngine.digest:[B
            iconst_0
            aload 2 /* result */
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 368
            aload 2 /* result */
            areturn
        end local 2 // byte[] result
        end local 1 // byte[] key
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;
            0    5     1     key  [B
            1    5     2  result  [B
    MethodParameters:
      Name  Flags
      key   

  private boolean checkCMSKeyChecksum(byte[], byte[]);
    descriptor: ([B[B)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
        start local 1 // byte[] key
        start local 2 // byte[] checksum
         0: .line 381
            aload 0 /* this */
            aload 1 /* key */
            invokevirtual org.bouncycastle.crypto.engines.RC2WrapEngine.calculateCMSKeyChecksum:([B)[B
            aload 2 /* checksum */
            invokestatic org.bouncycastle.util.Arrays.constantTimeAreEqual:([B[B)Z
            ireturn
        end local 2 // byte[] checksum
        end local 1 // byte[] key
        end local 0 // org.bouncycastle.crypto.engines.RC2WrapEngine this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/bouncycastle/crypto/engines/RC2WrapEngine;
            0    1     1       key  [B
            0    1     2  checksum  [B
    MethodParameters:
          Name  Flags
      key       
      checksum  
}
SourceFile: "RC2WrapEngine.java"