public class org.bouncycastle.crypto.generators.DSAParametersGenerator
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.crypto.generators.DSAParametersGenerator
  super_class: java.lang.Object
{
  private int L;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

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

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

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

  private static final java.math.BigInteger ZERO;
    descriptor: Ljava/math/BigInteger;
    flags: (0x001a) ACC_PRIVATE, 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 24
            lconst_0
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
            putstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ZERO:Ljava/math/BigInteger;
         1: .line 25
            lconst_1
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
            putstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
         2: .line 26
            ldc 2
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
            putstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.TWO:Ljava/math/BigInteger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

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

  public void init(int, int, java.security.SecureRandom);
    descriptor: (IILjava/security/SecureRandom;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
        start local 1 // int size
        start local 2 // int certainty
        start local 3 // java.security.SecureRandom random
         0: .line 40
            aload 0 /* this */
            iload 1 /* size */
            iload 1 /* size */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.getDefaultN:(I)I
            iload 2 /* certainty */
            aload 3 /* random */
            invokevirtual org.bouncycastle.crypto.generators.DSAParametersGenerator.init:(IIILjava/security/SecureRandom;)V
         1: .line 41
            return
        end local 3 // java.security.SecureRandom random
        end local 2 // int certainty
        end local 1 // int size
        end local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/bouncycastle/crypto/generators/DSAParametersGenerator;
            0    2     1       size  I
            0    2     2  certainty  I
            0    2     3     random  Ljava/security/SecureRandom;
    MethodParameters:
           Name  Flags
      size       
      certainty  
      random     

  private void init(int, int, int, java.security.SecureRandom);
    descriptor: (IIILjava/security/SecureRandom;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
        start local 1 // int L
        start local 2 // int N
        start local 3 // int certainty
        start local 4 // java.security.SecureRandom random
         0: .line 53
            aload 0 /* this */
            iload 1 /* L */
            putfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
         1: .line 54
            aload 0 /* this */
            iload 2 /* N */
            putfield org.bouncycastle.crypto.generators.DSAParametersGenerator.N:I
         2: .line 55
            aload 0 /* this */
            iload 3 /* certainty */
            putfield org.bouncycastle.crypto.generators.DSAParametersGenerator.certainty:I
         3: .line 56
            aload 0 /* this */
            aload 4 /* random */
            putfield org.bouncycastle.crypto.generators.DSAParametersGenerator.random:Ljava/security/SecureRandom;
         4: .line 57
            return
        end local 4 // java.security.SecureRandom random
        end local 3 // int certainty
        end local 2 // int N
        end local 1 // int L
        end local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lorg/bouncycastle/crypto/generators/DSAParametersGenerator;
            0    5     1          L  I
            0    5     2          N  I
            0    5     3  certainty  I
            0    5     4     random  Ljava/security/SecureRandom;
    MethodParameters:
           Name  Flags
      L          
      N          
      certainty  
      random     

  public org.bouncycastle.crypto.params.DSAParameters generateParameters();
    descriptor: ()Lorg/bouncycastle/crypto/params/DSAParameters;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
         0: .line 67
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            sipush 1024
            if_icmple 2
         1: .line 68
            aload 0 /* this */
            invokevirtual org.bouncycastle.crypto.generators.DSAParametersGenerator.generateParameters_FIPS186_3:()Lorg/bouncycastle/crypto/params/DSAParameters;
            goto 3
         2: .line 69
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.bouncycastle.crypto.generators.DSAParametersGenerator.generateParameters_FIPS186_2:()Lorg/bouncycastle/crypto/params/DSAParameters;
         3: .line 67
      StackMap locals:
      StackMap stack: org.bouncycastle.crypto.params.DSAParameters
            areturn
        end local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/bouncycastle/crypto/generators/DSAParametersGenerator;

  private org.bouncycastle.crypto.params.DSAParameters generateParameters_FIPS186_2();
    descriptor: ()Lorg/bouncycastle/crypto/params/DSAParameters;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=15, args_size=1
        start local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
         0: .line 74
            bipush 20
            newarray 8
            astore 1 /* seed */
        start local 1 // byte[] seed
         1: .line 75
            bipush 20
            newarray 8
            astore 2 /* part1 */
        start local 2 // byte[] part1
         2: .line 76
            bipush 20
            newarray 8
            astore 3 /* part2 */
        start local 3 // byte[] part2
         3: .line 77
            bipush 20
            newarray 8
            astore 4 /* u */
        start local 4 // byte[] u
         4: .line 78
            new org.bouncycastle.crypto.digests.SHA1Digest
            dup
            invokespecial org.bouncycastle.crypto.digests.SHA1Digest.<init>:()V
            astore 5 /* sha1 */
        start local 5 // org.bouncycastle.crypto.digests.SHA1Digest sha1
         5: .line 79
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            iconst_1
            isub
            sipush 160
            idiv
            istore 6 /* n */
        start local 6 // int n
         6: .line 80
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            bipush 8
            idiv
            newarray 8
            astore 7 /* w */
        start local 7 // byte[] w
         7: .line 84
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator byte[] byte[] byte[] byte[] org.bouncycastle.crypto.digests.SHA1Digest int byte[]
      StackMap stack:
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.random:Ljava/security/SecureRandom;
            aload 1 /* seed */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         8: .line 86
            aload 5 /* sha1 */
            aload 1 /* seed */
            aload 2 /* part1 */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
         9: .line 87
            aload 1 /* seed */
            iconst_0
            aload 3 /* part2 */
            iconst_0
            aload 1 /* seed */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        10: .line 88
            aload 3 /* part2 */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.inc:([B)V
        11: .line 89
            aload 5 /* sha1 */
            aload 3 /* part2 */
            aload 3 /* part2 */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
        12: .line 91
            iconst_0
            istore 8 /* i */
        start local 8 // int i
        13: goto 16
        14: .line 93
      StackMap locals: int
      StackMap stack:
            aload 4 /* u */
            iload 8 /* i */
            aload 2 /* part1 */
            iload 8 /* i */
            baload
            aload 3 /* part2 */
            iload 8 /* i */
            baload
            ixor
            i2b
            bastore
        15: .line 91
            iinc 8 /* i */ 1
      StackMap locals:
      StackMap stack:
        16: iload 8 /* i */
            aload 4 /* u */
            arraylength
            if_icmpne 14
        end local 8 // int i
        17: .line 96
            aload 4 /* u */
            iconst_0
            dup2
            baload
            bipush -128
            ior
            i2b
            bastore
        18: .line 97
            aload 4 /* u */
            bipush 19
            dup2
            baload
            iconst_1
            ior
            i2b
            bastore
        19: .line 99
            new java.math.BigInteger
            dup
            iconst_1
            aload 4 /* u */
            invokespecial java.math.BigInteger.<init>:(I[B)V
            astore 8 /* q */
        start local 8 // java.math.BigInteger q
        20: .line 101
            aload 8 /* q */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.certainty:I
            invokevirtual java.math.BigInteger.isProbablePrime:(I)Z
            ifne 22
        21: .line 103
            goto 7
        22: .line 106
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator byte[] byte[] byte[] byte[] org.bouncycastle.crypto.digests.SHA1Digest int byte[] java.math.BigInteger
      StackMap stack:
            aload 1 /* seed */
            invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
            astore 9 /* offset */
        start local 9 // byte[] offset
        23: .line 107
            aload 9 /* offset */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.inc:([B)V
        24: .line 109
            iconst_0
            istore 10 /* counter */
        start local 10 // int counter
        25: goto 46
        26: .line 111
      StackMap locals: byte[] int
      StackMap stack:
            iconst_0
            istore 11 /* k */
        start local 11 // int k
        27: goto 32
        28: .line 113
      StackMap locals: int
      StackMap stack:
            aload 9 /* offset */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.inc:([B)V
        29: .line 114
            aload 5 /* sha1 */
            aload 9 /* offset */
            aload 2 /* part1 */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
        30: .line 115
            aload 2 /* part1 */
            iconst_0
            aload 7 /* w */
            aload 7 /* w */
            arraylength
            iload 11 /* k */
            iconst_1
            iadd
            aload 2 /* part1 */
            arraylength
            imul
            isub
            aload 2 /* part1 */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        31: .line 111
            iinc 11 /* k */ 1
      StackMap locals:
      StackMap stack:
        32: iload 11 /* k */
            iload 6 /* n */
            if_icmplt 28
        end local 11 // int k
        33: .line 118
            aload 9 /* offset */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.inc:([B)V
        34: .line 119
            aload 5 /* sha1 */
            aload 9 /* offset */
            aload 2 /* part1 */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
        35: .line 120
            aload 2 /* part1 */
            aload 2 /* part1 */
            arraylength
            aload 7 /* w */
            arraylength
            iload 6 /* n */
            aload 2 /* part1 */
            arraylength
            imul
            isub
            isub
            aload 7 /* w */
            iconst_0
            aload 7 /* w */
            arraylength
            iload 6 /* n */
            aload 2 /* part1 */
            arraylength
            imul
            isub
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        36: .line 122
            aload 7 /* w */
            iconst_0
            dup2
            baload
            bipush -128
            ior
            i2b
            bastore
        37: .line 124
            new java.math.BigInteger
            dup
            iconst_1
            aload 7 /* w */
            invokespecial java.math.BigInteger.<init>:(I[B)V
            astore 11 /* x */
        start local 11 // java.math.BigInteger x
        38: .line 126
            aload 11 /* x */
            aload 8 /* q */
            iconst_1
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 12 /* c */
        start local 12 // java.math.BigInteger c
        39: .line 128
            aload 11 /* x */
            aload 12 /* c */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 13 /* p */
        start local 13 // java.math.BigInteger p
        40: .line 130
            aload 13 /* p */
            invokevirtual java.math.BigInteger.bitLength:()I
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            if_icmpeq 42
        41: .line 132
            goto 45
        42: .line 135
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator byte[] byte[] byte[] byte[] org.bouncycastle.crypto.digests.SHA1Digest int byte[] java.math.BigInteger byte[] int java.math.BigInteger java.math.BigInteger java.math.BigInteger
      StackMap stack:
            aload 13 /* p */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.certainty:I
            invokevirtual java.math.BigInteger.isProbablePrime:(I)Z
            ifeq 45
        43: .line 137
            aload 13 /* p */
            aload 8 /* q */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.random:Ljava/security/SecureRandom;
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.calculateGenerator_FIPS186_2:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
            astore 14 /* g */
        start local 14 // java.math.BigInteger g
        44: .line 139
            new org.bouncycastle.crypto.params.DSAParameters
            dup
            aload 13 /* p */
            aload 8 /* q */
            aload 14 /* g */
            new org.bouncycastle.crypto.params.DSAValidationParameters
            dup
            aload 1 /* seed */
            iload 10 /* counter */
            invokespecial org.bouncycastle.crypto.params.DSAValidationParameters.<init>:([BI)V
            invokespecial org.bouncycastle.crypto.params.DSAParameters.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Lorg/bouncycastle/crypto/params/DSAValidationParameters;)V
            areturn
        end local 14 // java.math.BigInteger g
        end local 13 // java.math.BigInteger p
        end local 12 // java.math.BigInteger c
        end local 11 // java.math.BigInteger x
        45: .line 109
      StackMap locals:
      StackMap stack:
            iinc 10 /* counter */ 1
      StackMap locals:
      StackMap stack:
        46: iload 10 /* counter */
            sipush 4096
            if_icmplt 26
        end local 10 // int counter
        end local 9 // byte[] offset
        end local 8 // java.math.BigInteger q
        47: .line 82
            goto 7
        end local 7 // byte[] w
        end local 6 // int n
        end local 5 // org.bouncycastle.crypto.digests.SHA1Digest sha1
        end local 4 // byte[] u
        end local 3 // byte[] part2
        end local 2 // byte[] part1
        end local 1 // byte[] seed
        end local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   48     0     this  Lorg/bouncycastle/crypto/generators/DSAParametersGenerator;
            1   48     1     seed  [B
            2   48     2    part1  [B
            3   48     3    part2  [B
            4   48     4        u  [B
            5   48     5     sha1  Lorg/bouncycastle/crypto/digests/SHA1Digest;
            6   48     6        n  I
            7   48     7        w  [B
           13   17     8        i  I
           20   47     8        q  Ljava/math/BigInteger;
           23   47     9   offset  [B
           25   47    10  counter  I
           27   33    11        k  I
           38   45    11        x  Ljava/math/BigInteger;
           39   45    12        c  Ljava/math/BigInteger;
           40   45    13        p  Ljava/math/BigInteger;
           44   45    14        g  Ljava/math/BigInteger;

  private static java.math.BigInteger calculateGenerator_FIPS186_2(java.math.BigInteger, java.math.BigInteger, java.security.SecureRandom);
    descriptor: (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=7, args_size=3
        start local 0 // java.math.BigInteger p
        start local 1 // java.math.BigInteger q
        start local 2 // java.security.SecureRandom r
         0: .line 147
            aload 0 /* p */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 1 /* q */
            invokevirtual java.math.BigInteger.divide:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 3 /* e */
        start local 3 // java.math.BigInteger e
         1: .line 148
            aload 0 /* p */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.TWO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 4 /* pSub2 */
        start local 4 // java.math.BigInteger pSub2
         2: .line 152
      StackMap locals: java.math.BigInteger java.math.BigInteger
      StackMap stack:
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.TWO:Ljava/math/BigInteger;
            aload 4 /* pSub2 */
            aload 2 /* r */
            invokestatic org.bouncycastle.util.BigIntegers.createRandomInRange:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
            astore 5 /* h */
        start local 5 // java.math.BigInteger h
         3: .line 153
            aload 5 /* h */
            aload 3 /* e */
            aload 0 /* p */
            invokevirtual java.math.BigInteger.modPow:(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 6 /* g */
        start local 6 // java.math.BigInteger g
         4: .line 154
            aload 6 /* g */
            invokevirtual java.math.BigInteger.bitLength:()I
            iconst_1
            if_icmple 2
         5: .line 156
            aload 6 /* g */
            areturn
        end local 6 // java.math.BigInteger g
        end local 5 // java.math.BigInteger h
        end local 4 // java.math.BigInteger pSub2
        end local 3 // java.math.BigInteger e
        end local 2 // java.security.SecureRandom r
        end local 1 // java.math.BigInteger q
        end local 0 // java.math.BigInteger p
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0      p  Ljava/math/BigInteger;
            0    6     1      q  Ljava/math/BigInteger;
            0    6     2      r  Ljava/security/SecureRandom;
            1    6     3      e  Ljava/math/BigInteger;
            2    6     4  pSub2  Ljava/math/BigInteger;
            3    6     5      h  Ljava/math/BigInteger;
            4    6     6      g  Ljava/math/BigInteger;
    MethodParameters:
      Name  Flags
      p     
      q     
      r     

  private org.bouncycastle.crypto.params.DSAParameters generateParameters_FIPS186_3();
    descriptor: ()Lorg/bouncycastle/crypto/params/DSAParameters;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=18, args_size=1
        start local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
         0: .line 169
            new org.bouncycastle.crypto.digests.SHA256Digest
            dup
            invokespecial org.bouncycastle.crypto.digests.SHA256Digest.<init>:()V
            astore 1 /* d */
        start local 1 // org.bouncycastle.crypto.Digest d
         1: .line 170
            aload 1 /* d */
            invokeinterface org.bouncycastle.crypto.Digest.getDigestSize:()I
            bipush 8
            imul
            istore 2 /* outlen */
        start local 2 // int outlen
         2: .line 178
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.N:I
            istore 3 /* seedlen */
        start local 3 // int seedlen
         3: .line 179
            iload 3 /* seedlen */
            bipush 8
            idiv
            newarray 8
            astore 4 /* seed */
        start local 4 // byte[] seed
         4: .line 182
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            iconst_1
            isub
            iload 2 /* outlen */
            idiv
            istore 5 /* n */
        start local 5 // int n
         5: .line 185
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            iconst_1
            isub
            iload 2 /* outlen */
            irem
            istore 6 /* b */
        start local 6 // int b
         6: .line 187
            aload 1 /* d */
            invokeinterface org.bouncycastle.crypto.Digest.getDigestSize:()I
            newarray 8
            astore 7 /* output */
        start local 7 // byte[] output
         7: .line 191
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator org.bouncycastle.crypto.Digest int int byte[] int int byte[]
      StackMap stack:
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.random:Ljava/security/SecureRandom;
            aload 4 /* seed */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         8: .line 194
            aload 1 /* d */
            aload 4 /* seed */
            aload 7 /* output */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
         9: .line 195
            new java.math.BigInteger
            dup
            iconst_1
            aload 7 /* output */
            invokespecial java.math.BigInteger.<init>:(I[B)V
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.N:I
            iconst_1
            isub
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 8 /* U */
        start local 8 // java.math.BigInteger U
        10: .line 198
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.N:I
            iconst_1
            isub
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            aload 8 /* U */
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 8 /* U */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.TWO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 9 /* q */
        start local 9 // java.math.BigInteger q
        11: .line 202
            aload 9 /* q */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.certainty:I
            invokevirtual java.math.BigInteger.isProbablePrime:(I)Z
            ifne 13
        12: .line 205
            goto 7
        13: .line 210
      StackMap locals: java.math.BigInteger java.math.BigInteger
      StackMap stack:
            aload 4 /* seed */
            invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
            astore 10 /* offset */
        start local 10 // byte[] offset
        14: .line 213
            iconst_4
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            imul
            istore 11 /* counterLimit */
        start local 11 // int counterLimit
        15: .line 214
            iconst_0
            istore 12 /* counter */
        start local 12 // int counter
        16: goto 38
        17: .line 220
      StackMap locals: byte[] int int
      StackMap stack:
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ZERO:Ljava/math/BigInteger;
            astore 13 /* W */
        start local 13 // java.math.BigInteger W
        18: .line 221
            iconst_0
            istore 14 /* j */
        start local 14 // int j
        19: iconst_0
            istore 15 /* exp */
        start local 15 // int exp
        20: goto 28
        21: .line 223
      StackMap locals: java.math.BigInteger int int
      StackMap stack:
            aload 10 /* offset */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.inc:([B)V
        22: .line 224
            aload 1 /* d */
            aload 10 /* offset */
            aload 7 /* output */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.hash:(Lorg/bouncycastle/crypto/Digest;[B[B)V
        23: .line 226
            new java.math.BigInteger
            dup
            iconst_1
            aload 7 /* output */
            invokespecial java.math.BigInteger.<init>:(I[B)V
            astore 16 /* Vj */
        start local 16 // java.math.BigInteger Vj
        24: .line 227
            iload 14 /* j */
            iload 5 /* n */
            if_icmpne 26
        25: .line 229
            aload 16 /* Vj */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            iload 6 /* b */
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 16 /* Vj */
        26: .line 232
      StackMap locals: java.math.BigInteger
      StackMap stack:
            aload 13 /* W */
            aload 16 /* Vj */
            iload 15 /* exp */
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 13 /* W */
        end local 16 // java.math.BigInteger Vj
        27: .line 221
            iinc 14 /* j */ 1
            iload 15 /* exp */
            iload 2 /* outlen */
            iadd
            istore 15 /* exp */
      StackMap locals:
      StackMap stack:
        28: iload 14 /* j */
            iload 5 /* n */
            if_icmple 21
        end local 15 // int exp
        end local 14 // int j
        29: .line 236
            aload 13 /* W */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            iconst_1
            isub
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 14 /* X */
        start local 14 // java.math.BigInteger X
        30: .line 239
            aload 14 /* X */
            aload 9 /* q */
            iconst_1
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 15 /* c */
        start local 15 // java.math.BigInteger c
        31: .line 242
            aload 14 /* X */
            aload 15 /* c */
            getstatic org.bouncycastle.crypto.generators.DSAParametersGenerator.ONE:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 16 /* p */
        start local 16 // java.math.BigInteger p
        32: .line 245
            aload 16 /* p */
            invokevirtual java.math.BigInteger.bitLength:()I
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.L:I
            if_icmpeq 34
        33: .line 247
            goto 37
        34: .line 252
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator org.bouncycastle.crypto.Digest int int byte[] int int byte[] java.math.BigInteger java.math.BigInteger byte[] int int java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger
      StackMap stack:
            aload 16 /* p */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.certainty:I
            invokevirtual java.math.BigInteger.isProbablePrime:(I)Z
            ifeq 37
        35: .line 265
            aload 16 /* p */
            aload 9 /* q */
            aload 0 /* this */
            getfield org.bouncycastle.crypto.generators.DSAParametersGenerator.random:Ljava/security/SecureRandom;
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.calculateGenerator_FIPS186_3_Unverifiable:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
            astore 17 /* g */
        start local 17 // java.math.BigInteger g
        36: .line 266
            new org.bouncycastle.crypto.params.DSAParameters
            dup
            aload 16 /* p */
            aload 9 /* q */
            aload 17 /* g */
            new org.bouncycastle.crypto.params.DSAValidationParameters
            dup
            aload 4 /* seed */
            iload 12 /* counter */
            invokespecial org.bouncycastle.crypto.params.DSAValidationParameters.<init>:([BI)V
            invokespecial org.bouncycastle.crypto.params.DSAParameters.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Lorg/bouncycastle/crypto/params/DSAValidationParameters;)V
            areturn
        end local 17 // java.math.BigInteger g
        end local 16 // java.math.BigInteger p
        end local 15 // java.math.BigInteger c
        end local 14 // java.math.BigInteger X
        end local 13 // java.math.BigInteger W
        37: .line 214
      StackMap locals: org.bouncycastle.crypto.generators.DSAParametersGenerator org.bouncycastle.crypto.Digest int int byte[] int int byte[] java.math.BigInteger java.math.BigInteger byte[] int int
      StackMap stack:
            iinc 12 /* counter */ 1
      StackMap locals:
      StackMap stack:
        38: iload 12 /* counter */
            iload 11 /* counterLimit */
            if_icmplt 17
        end local 12 // int counter
        end local 11 // int counterLimit
        end local 10 // byte[] offset
        end local 9 // java.math.BigInteger q
        end local 8 // java.math.BigInteger U
        39: .line 188
            goto 7
        end local 7 // byte[] output
        end local 6 // int b
        end local 5 // int n
        end local 4 // byte[] seed
        end local 3 // int seedlen
        end local 2 // int outlen
        end local 1 // org.bouncycastle.crypto.Digest d
        end local 0 // org.bouncycastle.crypto.generators.DSAParametersGenerator this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   40     0          this  Lorg/bouncycastle/crypto/generators/DSAParametersGenerator;
            1   40     1             d  Lorg/bouncycastle/crypto/Digest;
            2   40     2        outlen  I
            3   40     3       seedlen  I
            4   40     4          seed  [B
            5   40     5             n  I
            6   40     6             b  I
            7   40     7        output  [B
           10   39     8             U  Ljava/math/BigInteger;
           11   39     9             q  Ljava/math/BigInteger;
           14   39    10        offset  [B
           15   39    11  counterLimit  I
           16   39    12       counter  I
           18   37    13             W  Ljava/math/BigInteger;
           19   29    14             j  I
           20   29    15           exp  I
           24   27    16            Vj  Ljava/math/BigInteger;
           30   37    14             X  Ljava/math/BigInteger;
           31   37    15             c  Ljava/math/BigInteger;
           32   37    16             p  Ljava/math/BigInteger;
           36   37    17             g  Ljava/math/BigInteger;

  private static java.math.BigInteger calculateGenerator_FIPS186_3_Unverifiable(java.math.BigInteger, java.math.BigInteger, java.security.SecureRandom);
    descriptor: (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // java.math.BigInteger p
        start local 1 // java.math.BigInteger q
        start local 2 // java.security.SecureRandom r
         0: .line 281
            aload 0 /* p */
            aload 1 /* q */
            aload 2 /* r */
            invokestatic org.bouncycastle.crypto.generators.DSAParametersGenerator.calculateGenerator_FIPS186_2:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/SecureRandom;)Ljava/math/BigInteger;
            areturn
        end local 2 // java.security.SecureRandom r
        end local 1 // java.math.BigInteger q
        end local 0 // java.math.BigInteger p
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     p  Ljava/math/BigInteger;
            0    1     1     q  Ljava/math/BigInteger;
            0    1     2     r  Ljava/security/SecureRandom;
    MethodParameters:
      Name  Flags
      p     
      q     
      r     

  private static void hash(org.bouncycastle.crypto.Digest, byte[], byte[]);
    descriptor: (Lorg/bouncycastle/crypto/Digest;[B[B)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.bouncycastle.crypto.Digest d
        start local 1 // byte[] input
        start local 2 // byte[] output
         0: .line 315
            aload 0 /* d */
            aload 1 /* input */
            iconst_0
            aload 1 /* input */
            arraylength
            invokeinterface org.bouncycastle.crypto.Digest.update:([BII)V
         1: .line 316
            aload 0 /* d */
            aload 2 /* output */
            iconst_0
            invokeinterface org.bouncycastle.crypto.Digest.doFinal:([BI)I
            pop
         2: .line 317
            return
        end local 2 // byte[] output
        end local 1 // byte[] input
        end local 0 // org.bouncycastle.crypto.Digest d
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0       d  Lorg/bouncycastle/crypto/Digest;
            0    3     1   input  [B
            0    3     2  output  [B
    MethodParameters:
        Name  Flags
      d       
      input   
      output  

  private static int getDefaultN(int);
    descriptor: (I)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // int L
         0: .line 321
            iload 0 /* L */
            sipush 1024
            if_icmple 1
            sipush 256
            goto 2
      StackMap locals:
      StackMap stack:
         1: sipush 160
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 0 // int L
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0     L  I
    MethodParameters:
      Name  Flags
      L     

  private static void inc(byte[]);
    descriptor: ([B)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // byte[] buf
         0: .line 326
            aload 0 /* buf */
            arraylength
            iconst_1
            isub
            istore 1 /* i */
        start local 1 // int i
         1: goto 7
         2: .line 328
      StackMap locals: int
      StackMap stack:
            aload 0 /* buf */
            iload 1 /* i */
            baload
            iconst_1
            iadd
            sipush 255
            iand
            i2b
            istore 2 /* b */
        start local 2 // byte b
         3: .line 329
            aload 0 /* buf */
            iload 1 /* i */
            iload 2 /* b */
            bastore
         4: .line 331
            iload 2 /* b */
            ifeq 6
         5: .line 333
            goto 8
        end local 2 // byte b
         6: .line 326
      StackMap locals:
      StackMap stack:
            iinc 1 /* i */ -1
      StackMap locals:
      StackMap stack:
         7: iload 1 /* i */
            ifge 2
        end local 1 // int i
         8: .line 336
      StackMap locals:
      StackMap stack:
            return
        end local 0 // byte[] buf
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0   buf  [B
            1    8     1     i  I
            3    6     2     b  B
    MethodParameters:
      Name  Flags
      buf   
}
SourceFile: "DSAParametersGenerator.java"