class org.bouncycastle.crypto.generators.DHKeyGeneratorHelper
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.bouncycastle.crypto.generators.DHKeyGeneratorHelper
  super_class: java.lang.Object
{
  static final org.bouncycastle.crypto.generators.DHKeyGeneratorHelper INSTANCE;
    descriptor: Lorg/bouncycastle/crypto/generators/DHKeyGeneratorHelper;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private static final java.math.BigInteger ONE;
    descriptor: Ljava/math/BigInteger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.math.BigInteger TWO;
    descriptor: Ljava/math/BigInteger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 11
            new org.bouncycastle.crypto.generators.DHKeyGeneratorHelper
            dup
            invokespecial org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.<init>:()V
            putstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.INSTANCE:Lorg/bouncycastle/crypto/generators/DHKeyGeneratorHelper;
         1: .line 13
            lconst_1
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
            putstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.ONE:Ljava/math/BigInteger;
         2: .line 14
            ldc 2
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
            putstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.TWO:Ljava/math/BigInteger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
         0: .line 16
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 18
            return
        end local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/bouncycastle/crypto/generators/DHKeyGeneratorHelper;

  java.math.BigInteger calculatePrivate(org.bouncycastle.crypto.params.DHParameters, java.security.SecureRandom);
    descriptor: (Lorg/bouncycastle/crypto/params/DHParameters;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
        start local 1 // org.bouncycastle.crypto.params.DHParameters dhParams
        start local 2 // java.security.SecureRandom random
         0: .line 22
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getP:()Ljava/math/BigInteger;
            astore 3 /* p */
        start local 3 // java.math.BigInteger p
         1: .line 23
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getL:()I
            istore 4 /* limit */
        start local 4 // int limit
         2: .line 25
            iload 4 /* limit */
            ifeq 4
         3: .line 27
            new java.math.BigInteger
            dup
            iload 4 /* limit */
            aload 2 /* random */
            invokespecial java.math.BigInteger.<init>:(ILjava/util/Random;)V
            iload 4 /* limit */
            iconst_1
            isub
            invokevirtual java.math.BigInteger.setBit:(I)Ljava/math/BigInteger;
            areturn
         4: .line 30
      StackMap locals: java.math.BigInteger int
      StackMap stack:
            getstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.TWO:Ljava/math/BigInteger;
            astore 5 /* min */
        start local 5 // java.math.BigInteger min
         5: .line 31
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getM:()I
            istore 6 /* m */
        start local 6 // int m
         6: .line 32
            iload 6 /* m */
            ifeq 8
         7: .line 34
            getstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.ONE:Ljava/math/BigInteger;
            iload 6 /* m */
            iconst_1
            isub
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            astore 5 /* min */
         8: .line 37
      StackMap locals: java.math.BigInteger int
      StackMap stack:
            aload 3 /* p */
            getstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.TWO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 7 /* max */
        start local 7 // java.math.BigInteger max
         9: .line 38
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getQ:()Ljava/math/BigInteger;
            astore 8 /* q */
        start local 8 // java.math.BigInteger q
        10: .line 39
            aload 8 /* q */
            ifnull 12
        11: .line 41
            aload 8 /* q */
            getstatic org.bouncycastle.crypto.generators.DHKeyGeneratorHelper.TWO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 7 /* max */
        12: .line 44
      StackMap locals: java.math.BigInteger java.math.BigInteger
      StackMap stack:
            aload 5 /* min */
            aload 7 /* max */
            aload 2 /* random */
            invokestatic org.bouncycastle.util.BigIntegers.createRandomInRange:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
            areturn
        end local 8 // java.math.BigInteger q
        end local 7 // java.math.BigInteger max
        end local 6 // int m
        end local 5 // java.math.BigInteger min
        end local 4 // int limit
        end local 3 // java.math.BigInteger p
        end local 2 // java.security.SecureRandom random
        end local 1 // org.bouncycastle.crypto.params.DHParameters dhParams
        end local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   13     0      this  Lorg/bouncycastle/crypto/generators/DHKeyGeneratorHelper;
            0   13     1  dhParams  Lorg/bouncycastle/crypto/params/DHParameters;
            0   13     2    random  Ljava/security/SecureRandom;
            1   13     3         p  Ljava/math/BigInteger;
            2   13     4     limit  I
            5   13     5       min  Ljava/math/BigInteger;
            6   13     6         m  I
            9   13     7       max  Ljava/math/BigInteger;
           10   13     8         q  Ljava/math/BigInteger;
    MethodParameters:
          Name  Flags
      dhParams  
      random    

  java.math.BigInteger calculatePublic(org.bouncycastle.crypto.params.DHParameters, java.math.BigInteger);
    descriptor: (Lorg/bouncycastle/crypto/params/DHParameters;Ljava/math/BigInteger;)Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
        start local 1 // org.bouncycastle.crypto.params.DHParameters dhParams
        start local 2 // java.math.BigInteger x
         0: .line 49
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getG:()Ljava/math/BigInteger;
            aload 2 /* x */
            aload 1 /* dhParams */
            invokevirtual org.bouncycastle.crypto.params.DHParameters.getP:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.modPow:(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
            areturn
        end local 2 // java.math.BigInteger x
        end local 1 // org.bouncycastle.crypto.params.DHParameters dhParams
        end local 0 // org.bouncycastle.crypto.generators.DHKeyGeneratorHelper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/bouncycastle/crypto/generators/DHKeyGeneratorHelper;
            0    1     1  dhParams  Lorg/bouncycastle/crypto/params/DHParameters;
            0    1     2         x  Ljava/math/BigInteger;
    MethodParameters:
          Name  Flags
      dhParams  
      x         
}
SourceFile: "DHKeyGeneratorHelper.java"