public class org.bouncycastle.math.ec.ECAlgorithms
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.math.ec.ECAlgorithms
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.math.ec.ECAlgorithms this
         0: .line 5
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.bouncycastle.math.ec.ECAlgorithms this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/math/ec/ECAlgorithms;

  public static org.bouncycastle.math.ec.ECPoint sumOfTwoMultiplies(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger, org.bouncycastle.math.ec.ECPoint, java.math.BigInteger);
    descriptor: (Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // org.bouncycastle.math.ec.ECPoint P
        start local 1 // java.math.BigInteger a
        start local 2 // org.bouncycastle.math.ec.ECPoint Q
        start local 3 // java.math.BigInteger b
         0: .line 10
            aload 0 /* P */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getCurve:()Lorg/bouncycastle/math/ec/ECCurve;
            astore 4 /* c */
        start local 4 // org.bouncycastle.math.ec.ECCurve c
         1: .line 11
            aload 4 /* c */
            aload 2 /* Q */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getCurve:()Lorg/bouncycastle/math/ec/ECCurve;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 3
         2: .line 13
            new java.lang.IllegalArgumentException
            dup
            ldc "P and Q must be on same curve"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 17
      StackMap locals: org.bouncycastle.math.ec.ECCurve
      StackMap stack:
            aload 4 /* c */
            instanceof org.bouncycastle.math.ec.ECCurve$F2m
            ifeq 7
         4: .line 19
            aload 4 /* c */
            checkcast org.bouncycastle.math.ec.ECCurve$F2m
            astore 5 /* f2mCurve */
        start local 5 // org.bouncycastle.math.ec.ECCurve$F2m f2mCurve
         5: .line 20
            aload 5 /* f2mCurve */
            invokevirtual org.bouncycastle.math.ec.ECCurve$F2m.isKoblitz:()Z
            ifeq 7
         6: .line 22
            aload 0 /* P */
            aload 1 /* a */
            invokevirtual org.bouncycastle.math.ec.ECPoint.multiply:(Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            aload 2 /* Q */
            aload 3 /* b */
            invokevirtual org.bouncycastle.math.ec.ECPoint.multiply:(Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            invokevirtual org.bouncycastle.math.ec.ECPoint.add:(Lorg/bouncycastle/math/ec/ECPoint;)Lorg/bouncycastle/math/ec/ECPoint;
            areturn
        end local 5 // org.bouncycastle.math.ec.ECCurve$F2m f2mCurve
         7: .line 26
      StackMap locals:
      StackMap stack:
            aload 0 /* P */
            aload 1 /* a */
            aload 2 /* Q */
            aload 3 /* b */
            invokestatic org.bouncycastle.math.ec.ECAlgorithms.implShamirsTrick:(Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            areturn
        end local 4 // org.bouncycastle.math.ec.ECCurve c
        end local 3 // java.math.BigInteger b
        end local 2 // org.bouncycastle.math.ec.ECPoint Q
        end local 1 // java.math.BigInteger a
        end local 0 // org.bouncycastle.math.ec.ECPoint P
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    8     0         P  Lorg/bouncycastle/math/ec/ECPoint;
            0    8     1         a  Ljava/math/BigInteger;
            0    8     2         Q  Lorg/bouncycastle/math/ec/ECPoint;
            0    8     3         b  Ljava/math/BigInteger;
            1    8     4         c  Lorg/bouncycastle/math/ec/ECCurve;
            5    7     5  f2mCurve  Lorg/bouncycastle/math/ec/ECCurve$F2m;
    MethodParameters:
      Name  Flags
      P     
      a     
      Q     
      b     

  public static org.bouncycastle.math.ec.ECPoint shamirsTrick(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger, org.bouncycastle.math.ec.ECPoint, java.math.BigInteger);
    descriptor: (Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.bouncycastle.math.ec.ECPoint P
        start local 1 // java.math.BigInteger k
        start local 2 // org.bouncycastle.math.ec.ECPoint Q
        start local 3 // java.math.BigInteger l
         0: .line 51
            aload 0 /* P */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getCurve:()Lorg/bouncycastle/math/ec/ECCurve;
            aload 2 /* Q */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getCurve:()Lorg/bouncycastle/math/ec/ECCurve;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 2
         1: .line 53
            new java.lang.IllegalArgumentException
            dup
            ldc "P and Q must be on same curve"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 56
      StackMap locals:
      StackMap stack:
            aload 0 /* P */
            aload 1 /* k */
            aload 2 /* Q */
            aload 3 /* l */
            invokestatic org.bouncycastle.math.ec.ECAlgorithms.implShamirsTrick:(Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            areturn
        end local 3 // java.math.BigInteger l
        end local 2 // org.bouncycastle.math.ec.ECPoint Q
        end local 1 // java.math.BigInteger k
        end local 0 // org.bouncycastle.math.ec.ECPoint P
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0     P  Lorg/bouncycastle/math/ec/ECPoint;
            0    3     1     k  Ljava/math/BigInteger;
            0    3     2     Q  Lorg/bouncycastle/math/ec/ECPoint;
            0    3     3     l  Ljava/math/BigInteger;
    MethodParameters:
      Name  Flags
      P     
      k     
      Q     
      l     

  private static org.bouncycastle.math.ec.ECPoint implShamirsTrick(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger, org.bouncycastle.math.ec.ECPoint, java.math.BigInteger);
    descriptor: (Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=8, args_size=4
        start local 0 // org.bouncycastle.math.ec.ECPoint P
        start local 1 // java.math.BigInteger k
        start local 2 // org.bouncycastle.math.ec.ECPoint Q
        start local 3 // java.math.BigInteger l
         0: .line 62
            aload 1 /* k */
            invokevirtual java.math.BigInteger.bitLength:()I
            aload 3 /* l */
            invokevirtual java.math.BigInteger.bitLength:()I
            invokestatic java.lang.Math.max:(II)I
            istore 4 /* m */
        start local 4 // int m
         1: .line 63
            aload 0 /* P */
            aload 2 /* Q */
            invokevirtual org.bouncycastle.math.ec.ECPoint.add:(Lorg/bouncycastle/math/ec/ECPoint;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 5 /* Z */
        start local 5 // org.bouncycastle.math.ec.ECPoint Z
         2: .line 64
            aload 0 /* P */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getCurve:()Lorg/bouncycastle/math/ec/ECCurve;
            invokevirtual org.bouncycastle.math.ec.ECCurve.getInfinity:()Lorg/bouncycastle/math/ec/ECPoint;
            astore 6 /* R */
        start local 6 // org.bouncycastle.math.ec.ECPoint R
         3: .line 66
            iload 4 /* m */
            iconst_1
            isub
            istore 7 /* i */
        start local 7 // int i
         4: goto 15
         5: .line 68
      StackMap locals: org.bouncycastle.math.ec.ECPoint java.math.BigInteger org.bouncycastle.math.ec.ECPoint java.math.BigInteger int org.bouncycastle.math.ec.ECPoint org.bouncycastle.math.ec.ECPoint int
      StackMap stack:
            aload 6 /* R */
            invokevirtual org.bouncycastle.math.ec.ECPoint.twice:()Lorg/bouncycastle/math/ec/ECPoint;
            astore 6 /* R */
         6: .line 70
            aload 1 /* k */
            iload 7 /* i */
            invokevirtual java.math.BigInteger.testBit:(I)Z
            ifeq 12
         7: .line 72
            aload 3 /* l */
            iload 7 /* i */
            invokevirtual java.math.BigInteger.testBit:(I)Z
            ifeq 10
         8: .line 74
            aload 6 /* R */
            aload 5 /* Z */
            invokevirtual org.bouncycastle.math.ec.ECPoint.add:(Lorg/bouncycastle/math/ec/ECPoint;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 6 /* R */
         9: .line 75
            goto 14
        10: .line 78
      StackMap locals:
      StackMap stack:
            aload 6 /* R */
            aload 0 /* P */
            invokevirtual org.bouncycastle.math.ec.ECPoint.add:(Lorg/bouncycastle/math/ec/ECPoint;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 6 /* R */
        11: .line 80
            goto 14
        12: .line 83
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            iload 7 /* i */
            invokevirtual java.math.BigInteger.testBit:(I)Z
            ifeq 14
        13: .line 85
            aload 6 /* R */
            aload 2 /* Q */
            invokevirtual org.bouncycastle.math.ec.ECPoint.add:(Lorg/bouncycastle/math/ec/ECPoint;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 6 /* R */
        14: .line 66
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ -1
      StackMap locals:
      StackMap stack:
        15: iload 7 /* i */
            ifge 5
        end local 7 // int i
        16: .line 90
            aload 6 /* R */
            areturn
        end local 6 // org.bouncycastle.math.ec.ECPoint R
        end local 5 // org.bouncycastle.math.ec.ECPoint Z
        end local 4 // int m
        end local 3 // java.math.BigInteger l
        end local 2 // org.bouncycastle.math.ec.ECPoint Q
        end local 1 // java.math.BigInteger k
        end local 0 // org.bouncycastle.math.ec.ECPoint P
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   17     0     P  Lorg/bouncycastle/math/ec/ECPoint;
            0   17     1     k  Ljava/math/BigInteger;
            0   17     2     Q  Lorg/bouncycastle/math/ec/ECPoint;
            0   17     3     l  Ljava/math/BigInteger;
            1   17     4     m  I
            2   17     5     Z  Lorg/bouncycastle/math/ec/ECPoint;
            3   17     6     R  Lorg/bouncycastle/math/ec/ECPoint;
            4   16     7     i  I
    MethodParameters:
      Name  Flags
      P     
      k     
      Q     
      l     
}
SourceFile: "ECAlgorithms.java"
InnerClasses:
  public F2m = org.bouncycastle.math.ec.ECCurve$F2m of org.bouncycastle.math.ec.ECCurve