public class org.bouncycastle.crypto.signers.ECNRSigner implements org.bouncycastle.crypto.DSA
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: org.bouncycastle.crypto.signers.ECNRSigner
super_class: java.lang.Object
{
private boolean forSigning;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private org.bouncycastle.crypto.params.ECKeyParameters key;
descriptor: Lorg/bouncycastle/crypto/params/ECKeyParameters;
flags: (0x0002) ACC_PRIVATE
private java.security.SecureRandom random;
descriptor: Ljava/security/SecureRandom;
flags: (0x0002) ACC_PRIVATE
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/signers/ECNRSigner;
public void init(boolean, org.bouncycastle.crypto.CipherParameters);
descriptor: (ZLorg/bouncycastle/crypto/CipherParameters;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
putfield org.bouncycastle.crypto.signers.ECNRSigner.forSigning:Z
1: iload 1
ifeq 10
2: aload 2
instanceof org.bouncycastle.crypto.params.ParametersWithRandom
ifeq 7
3: aload 2
checkcast org.bouncycastle.crypto.params.ParametersWithRandom
astore 3
start local 3 4: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.ParametersWithRandom.getRandom:()Ljava/security/SecureRandom;
putfield org.bouncycastle.crypto.signers.ECNRSigner.random:Ljava/security/SecureRandom;
5: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.ParametersWithRandom.getParameters:()Lorg/bouncycastle/crypto/CipherParameters;
checkcast org.bouncycastle.crypto.params.ECPrivateKeyParameters
putfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
end local 3 6: goto 11
7: StackMap locals:
StackMap stack:
aload 0
new java.security.SecureRandom
dup
invokespecial java.security.SecureRandom.<init>:()V
putfield org.bouncycastle.crypto.signers.ECNRSigner.random:Ljava/security/SecureRandom;
8: aload 0
aload 2
checkcast org.bouncycastle.crypto.params.ECPrivateKeyParameters
putfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
9: goto 11
10: StackMap locals:
StackMap stack:
aload 0
aload 2
checkcast org.bouncycastle.crypto.params.ECPublicKeyParameters
putfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
11: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lorg/bouncycastle/crypto/signers/ECNRSigner;
0 12 1 forSigning Z
0 12 2 param Lorg/bouncycastle/crypto/CipherParameters;
4 6 3 rParam Lorg/bouncycastle/crypto/params/ParametersWithRandom;
MethodParameters:
Name Flags
forSigning
param
public java.math.BigInteger[] generateSignature(byte[]);
descriptor: ([B)[Ljava/math/BigInteger;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=13, args_size=2
start local 0 start local 1 0: aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.forSigning:Z
ifne 2
1: new java.lang.IllegalStateException
dup
ldc "not initialised for signing"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
checkcast org.bouncycastle.crypto.params.ECPrivateKeyParameters
invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getParameters:()Lorg/bouncycastle/crypto/params/ECDomainParameters;
invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getN:()Ljava/math/BigInteger;
astore 2
start local 2 3: aload 2
invokevirtual java.math.BigInteger.bitLength:()I
istore 3
start local 3 4: new java.math.BigInteger
dup
iconst_1
aload 1
invokespecial java.math.BigInteger.<init>:(I[B)V
astore 4
start local 4 5: aload 4
invokevirtual java.math.BigInteger.bitLength:()I
istore 5
start local 5 6: aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
checkcast org.bouncycastle.crypto.params.ECPrivateKeyParameters
astore 6
start local 6 7: iload 5
iload 3
if_icmple 9
8: new org.bouncycastle.crypto.DataLengthException
dup
ldc "input too large for ECNR key."
invokespecial org.bouncycastle.crypto.DataLengthException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals: org.bouncycastle.crypto.signers.ECNRSigner byte[] java.math.BigInteger int java.math.BigInteger int org.bouncycastle.crypto.params.ECPrivateKeyParameters
StackMap stack:
aconst_null
astore 7
start local 7 10: aconst_null
astore 8
start local 8 11: StackMap locals: java.math.BigInteger java.math.BigInteger
StackMap stack:
new org.bouncycastle.crypto.generators.ECKeyPairGenerator
dup
invokespecial org.bouncycastle.crypto.generators.ECKeyPairGenerator.<init>:()V
astore 10
start local 10 12: aload 10
new org.bouncycastle.crypto.params.ECKeyGenerationParameters
dup
aload 6
invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getParameters:()Lorg/bouncycastle/crypto/params/ECDomainParameters;
aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.random:Ljava/security/SecureRandom;
invokespecial org.bouncycastle.crypto.params.ECKeyGenerationParameters.<init>:(Lorg/bouncycastle/crypto/params/ECDomainParameters;Ljava/security/SecureRandom;)V
invokevirtual org.bouncycastle.crypto.generators.ECKeyPairGenerator.init:(Lorg/bouncycastle/crypto/KeyGenerationParameters;)V
13: aload 10
invokevirtual org.bouncycastle.crypto.generators.ECKeyPairGenerator.generateKeyPair:()Lorg/bouncycastle/crypto/AsymmetricCipherKeyPair;
astore 9
start local 9 14: aload 9
invokevirtual org.bouncycastle.crypto.AsymmetricCipherKeyPair.getPublic:()Lorg/bouncycastle/crypto/CipherParameters;
checkcast org.bouncycastle.crypto.params.ECPublicKeyParameters
astore 11
start local 11 15: aload 11
invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
invokevirtual org.bouncycastle.math.ec.ECPoint.getX:()Lorg/bouncycastle/math/ec/ECFieldElement;
invokevirtual org.bouncycastle.math.ec.ECFieldElement.toBigInteger:()Ljava/math/BigInteger;
astore 12
start local 12 16: aload 12
aload 4
invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
aload 2
invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
astore 7
end local 12 end local 11 end local 10 17: aload 7
getstatic org.bouncycastle.math.ec.ECConstants.ZERO:Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
ifne 11
18: aload 6
invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getD:()Ljava/math/BigInteger;
astore 10
start local 10 19: aload 9
invokevirtual org.bouncycastle.crypto.AsymmetricCipherKeyPair.getPrivate:()Lorg/bouncycastle/crypto/CipherParameters;
checkcast org.bouncycastle.crypto.params.ECPrivateKeyParameters
invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getD:()Ljava/math/BigInteger;
astore 11
start local 11 20: aload 11
aload 7
aload 10
invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
aload 2
invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
astore 8
21: iconst_2
anewarray java.math.BigInteger
astore 12
start local 12 22: aload 12
iconst_0
aload 7
aastore
23: aload 12
iconst_1
aload 8
aastore
24: aload 12
areturn
end local 12 end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lorg/bouncycastle/crypto/signers/ECNRSigner;
0 25 1 digest [B
3 25 2 n Ljava/math/BigInteger;
4 25 3 nBitLength I
5 25 4 e Ljava/math/BigInteger;
6 25 5 eBitLength I
7 25 6 privKey Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
10 25 7 r Ljava/math/BigInteger;
11 25 8 s Ljava/math/BigInteger;
14 25 9 tempPair Lorg/bouncycastle/crypto/AsymmetricCipherKeyPair;
12 17 10 keyGen Lorg/bouncycastle/crypto/generators/ECKeyPairGenerator;
15 17 11 V Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
16 17 12 Vx Ljava/math/BigInteger;
19 25 10 x Ljava/math/BigInteger;
20 25 11 u Ljava/math/BigInteger;
22 25 12 res [Ljava/math/BigInteger;
MethodParameters:
Name Flags
digest
public boolean verifySignature(byte[], java.math.BigInteger, java.math.BigInteger);
descriptor: ([BLjava/math/BigInteger;Ljava/math/BigInteger;)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=14, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.forSigning:Z
ifeq 2
1: new java.lang.IllegalStateException
dup
ldc "not initialised for verifying"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.signers.ECNRSigner.key:Lorg/bouncycastle/crypto/params/ECKeyParameters;
checkcast org.bouncycastle.crypto.params.ECPublicKeyParameters
astore 4
start local 4 3: aload 4
invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getParameters:()Lorg/bouncycastle/crypto/params/ECDomainParameters;
invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getN:()Ljava/math/BigInteger;
astore 5
start local 5 4: aload 5
invokevirtual java.math.BigInteger.bitLength:()I
istore 6
start local 6 5: new java.math.BigInteger
dup
iconst_1
aload 1
invokespecial java.math.BigInteger.<init>:(I[B)V
astore 7
start local 7 6: aload 7
invokevirtual java.math.BigInteger.bitLength:()I
istore 8
start local 8 7: iload 8
iload 6
if_icmple 9
8: new org.bouncycastle.crypto.DataLengthException
dup
ldc "input too large for ECNR key."
invokespecial org.bouncycastle.crypto.DataLengthException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals: org.bouncycastle.crypto.signers.ECNRSigner byte[] java.math.BigInteger java.math.BigInteger org.bouncycastle.crypto.params.ECPublicKeyParameters java.math.BigInteger int java.math.BigInteger int
StackMap stack:
aload 2
getstatic org.bouncycastle.math.ec.ECConstants.ONE:Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
iflt 10
aload 2
aload 5
invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
iflt 11
10: StackMap locals:
StackMap stack:
iconst_0
ireturn
11: StackMap locals:
StackMap stack:
aload 3
getstatic org.bouncycastle.math.ec.ECConstants.ZERO:Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
iflt 12
aload 3
aload 5
invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
iflt 13
12: StackMap locals:
StackMap stack:
iconst_0
ireturn
13: StackMap locals:
StackMap stack:
aload 4
invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getParameters:()Lorg/bouncycastle/crypto/params/ECDomainParameters;
invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getG:()Lorg/bouncycastle/math/ec/ECPoint;
astore 9
start local 9 14: aload 4
invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
astore 10
start local 10 15: aload 9
aload 3
aload 10
aload 2
invokestatic org.bouncycastle.math.ec.ECAlgorithms.sumOfTwoMultiplies:(Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
astore 11
start local 11 16: aload 11
invokevirtual org.bouncycastle.math.ec.ECPoint.getX:()Lorg/bouncycastle/math/ec/ECFieldElement;
invokevirtual org.bouncycastle.math.ec.ECFieldElement.toBigInteger:()Ljava/math/BigInteger;
astore 12
start local 12 17: aload 2
aload 12
invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
aload 5
invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
astore 13
start local 13 18: aload 13
aload 7
invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
ireturn
end local 13 end local 12 end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 19 0 this Lorg/bouncycastle/crypto/signers/ECNRSigner;
0 19 1 digest [B
0 19 2 r Ljava/math/BigInteger;
0 19 3 s Ljava/math/BigInteger;
3 19 4 pubKey Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
4 19 5 n Ljava/math/BigInteger;
5 19 6 nBitLength I
6 19 7 e Ljava/math/BigInteger;
7 19 8 eBitLength I
14 19 9 G Lorg/bouncycastle/math/ec/ECPoint;
15 19 10 W Lorg/bouncycastle/math/ec/ECPoint;
16 19 11 P Lorg/bouncycastle/math/ec/ECPoint;
17 19 12 x Ljava/math/BigInteger;
18 19 13 t Ljava/math/BigInteger;
MethodParameters:
Name Flags
digest
r
s
}
SourceFile: "ECNRSigner.java"