public class org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator implements org.bouncycastle.crypto.DerivationFunction
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator
  super_class: java.lang.Object
{
  private org.bouncycastle.crypto.DerivationFunction kdf;
    descriptor: Lorg/bouncycastle/crypto/DerivationFunction;
    flags: (0x0002) ACC_PRIVATE

  private org.bouncycastle.asn1.DERObjectIdentifier algorithm;
    descriptor: Lorg/bouncycastle/asn1/DERObjectIdentifier;
    flags: (0x0002) ACC_PRIVATE

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

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

  public void <init>(org.bouncycastle.crypto.Digest);
    descriptor: (Lorg/bouncycastle/crypto/Digest;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
        start local 1 // org.bouncycastle.crypto.Digest digest
         0: .line 29
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 32
            aload 0 /* this */
            new org.bouncycastle.crypto.generators.KDF2BytesGenerator
            dup
            aload 1 /* digest */
            invokespecial org.bouncycastle.crypto.generators.KDF2BytesGenerator.<init>:(Lorg/bouncycastle/crypto/Digest;)V
            putfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.kdf:Lorg/bouncycastle/crypto/DerivationFunction;
         2: .line 33
            return
        end local 1 // org.bouncycastle.crypto.Digest digest
        end local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lorg/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator;
            0    3     1  digest  Lorg/bouncycastle/crypto/Digest;
    MethodParameters:
        Name  Flags
      digest  

  public void init(org.bouncycastle.crypto.DerivationParameters);
    descriptor: (Lorg/bouncycastle/crypto/DerivationParameters;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
        start local 1 // org.bouncycastle.crypto.DerivationParameters param
         0: .line 37
            aload 1 /* param */
            checkcast org.bouncycastle.crypto.agreement.kdf.DHKDFParameters
            astore 2 /* params */
        start local 2 // org.bouncycastle.crypto.agreement.kdf.DHKDFParameters params
         1: .line 39
            aload 0 /* this */
            aload 2 /* params */
            invokevirtual org.bouncycastle.crypto.agreement.kdf.DHKDFParameters.getAlgorithm:()Lorg/bouncycastle/asn1/DERObjectIdentifier;
            putfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.algorithm:Lorg/bouncycastle/asn1/DERObjectIdentifier;
         2: .line 40
            aload 0 /* this */
            aload 2 /* params */
            invokevirtual org.bouncycastle.crypto.agreement.kdf.DHKDFParameters.getKeySize:()I
            putfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.keySize:I
         3: .line 41
            aload 0 /* this */
            aload 2 /* params */
            invokevirtual org.bouncycastle.crypto.agreement.kdf.DHKDFParameters.getZ:()[B
            putfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.z:[B
         4: .line 42
            return
        end local 2 // org.bouncycastle.crypto.agreement.kdf.DHKDFParameters params
        end local 1 // org.bouncycastle.crypto.DerivationParameters param
        end local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lorg/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator;
            0    5     1   param  Lorg/bouncycastle/crypto/DerivationParameters;
            1    5     2  params  Lorg/bouncycastle/crypto/agreement/kdf/DHKDFParameters;
    MethodParameters:
       Name  Flags
      param  

  public org.bouncycastle.crypto.Digest getDigest();
    descriptor: ()Lorg/bouncycastle/crypto/Digest;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
         0: .line 46
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.kdf:Lorg/bouncycastle/crypto/DerivationFunction;
            invokeinterface org.bouncycastle.crypto.DerivationFunction.getDigest:()Lorg/bouncycastle/crypto/Digest;
            areturn
        end local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator;

  public int generateBytes(byte[], int, int);
    descriptor: ([BII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=5, args_size=4
        start local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
        start local 1 // byte[] out
        start local 2 // int outOff
        start local 3 // int len
         0: .line 54
            new org.bouncycastle.asn1.ASN1EncodableVector
            dup
            invokespecial org.bouncycastle.asn1.ASN1EncodableVector.<init>:()V
            astore 4 /* v */
        start local 4 // org.bouncycastle.asn1.ASN1EncodableVector v
         1: .line 56
            aload 4 /* v */
            new org.bouncycastle.asn1.x509.AlgorithmIdentifier
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.algorithm:Lorg/bouncycastle/asn1/DERObjectIdentifier;
            new org.bouncycastle.asn1.DERNull
            dup
            invokespecial org.bouncycastle.asn1.DERNull.<init>:()V
            invokespecial org.bouncycastle.asn1.x509.AlgorithmIdentifier.<init>:(Lorg/bouncycastle/asn1/DERObjectIdentifier;Lorg/bouncycastle/asn1/DEREncodable;)V
            invokevirtual org.bouncycastle.asn1.ASN1EncodableVector.add:(Lorg/bouncycastle/asn1/DEREncodable;)V
         2: .line 57
            aload 4 /* v */
            new org.bouncycastle.asn1.DERTaggedObject
            dup
            iconst_1
            iconst_2
            new org.bouncycastle.asn1.DEROctetString
            dup
            aload 0 /* this */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.keySize:I
            invokevirtual org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.integerToBytes:(I)[B
            invokespecial org.bouncycastle.asn1.DEROctetString.<init>:([B)V
            invokespecial org.bouncycastle.asn1.DERTaggedObject.<init>:(ZILorg/bouncycastle/asn1/DEREncodable;)V
            invokevirtual org.bouncycastle.asn1.ASN1EncodableVector.add:(Lorg/bouncycastle/asn1/DEREncodable;)V
         3: .line 59
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.kdf:Lorg/bouncycastle/crypto/DerivationFunction;
            new org.bouncycastle.crypto.params.KDFParameters
            dup
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.z:[B
            new org.bouncycastle.asn1.DERSequence
            dup
            aload 4 /* v */
            invokespecial org.bouncycastle.asn1.DERSequence.<init>:(Lorg/bouncycastle/asn1/ASN1EncodableVector;)V
            invokevirtual org.bouncycastle.asn1.DERSequence.getDEREncoded:()[B
            invokespecial org.bouncycastle.crypto.params.KDFParameters.<init>:([B[B)V
            invokeinterface org.bouncycastle.crypto.DerivationFunction.init:(Lorg/bouncycastle/crypto/DerivationParameters;)V
         4: .line 61
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator.kdf:Lorg/bouncycastle/crypto/DerivationFunction;
            aload 1 /* out */
            iload 2 /* outOff */
            iload 3 /* len */
            invokeinterface org.bouncycastle.crypto.DerivationFunction.generateBytes:([BII)I
            ireturn
        end local 4 // org.bouncycastle.asn1.ASN1EncodableVector v
        end local 3 // int len
        end local 2 // int outOff
        end local 1 // byte[] out
        end local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lorg/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator;
            0    5     1     out  [B
            0    5     2  outOff  I
            0    5     3     len  I
            1    5     4       v  Lorg/bouncycastle/asn1/ASN1EncodableVector;
    Exceptions:
      throws org.bouncycastle.crypto.DataLengthException, java.lang.IllegalArgumentException
    MethodParameters:
        Name  Flags
      out     
      outOff  
      len     

  private byte[] integerToBytes(int);
    descriptor: (I)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
        start local 1 // int keySize
         0: .line 66
            iconst_4
            newarray 8
            astore 2 /* val */
        start local 2 // byte[] val
         1: .line 68
            aload 2 /* val */
            iconst_0
            iload 1 /* keySize */
            bipush 24
            ishr
            i2b
            bastore
         2: .line 69
            aload 2 /* val */
            iconst_1
            iload 1 /* keySize */
            bipush 16
            ishr
            i2b
            bastore
         3: .line 70
            aload 2 /* val */
            iconst_2
            iload 1 /* keySize */
            bipush 8
            ishr
            i2b
            bastore
         4: .line 71
            aload 2 /* val */
            iconst_3
            iload 1 /* keySize */
            i2b
            bastore
         5: .line 73
            aload 2 /* val */
            areturn
        end local 2 // byte[] val
        end local 1 // int keySize
        end local 0 // org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator;
            0    6     1  keySize  I
            1    6     2      val  [B
    MethodParameters:
         Name  Flags
      keySize  
}
SourceFile: "ECDHKEKGenerator.java"