summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java145
1 files changed, 111 insertions, 34 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
index 26811d18..46aeec7e 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
@@ -21,21 +21,18 @@ import org.bouncycastle.crypto.digests.AndroidDigestFactory;
// END android-added
// BEGIN android-removed
// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-// import org.bouncycastle.crypto.digests.SHA1Digest;
-// import org.bouncycastle.crypto.digests.SHA224Digest;
-// import org.bouncycastle.crypto.digests.SHA256Digest;
-// import org.bouncycastle.crypto.digests.SHA384Digest;
-// import org.bouncycastle.crypto.digests.SHA512Digest;
// END android-removed
import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.crypto.signers.ECDSASigner;
// BEGIN android-removed
// import org.bouncycastle.crypto.signers.ECNRSigner;
// import org.bouncycastle.crypto.signers.HMacDSAKCalculator;
+// import org.bouncycastle.crypto.util.DigestFactory;
// END android-removed
import org.bouncycastle.jcajce.provider.asymmetric.util.DSABase;
import org.bouncycastle.jcajce.provider.asymmetric.util.DSAEncoder;
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
+import org.bouncycastle.util.Arrays;
public class SignatureSpi
extends DSABase
@@ -48,7 +45,7 @@ public class SignatureSpi
protected void engineInitVerify(PublicKey publicKey)
throws InvalidKeyException
{
- CipherParameters param = ECUtil.generatePublicKeyParameter(publicKey);
+ CipherParameters param = ECUtils.generatePublicKeyParameter(publicKey);
digest.reset();
signer.init(false, param);
@@ -89,7 +86,7 @@ public class SignatureSpi
// {
// public ecDetDSA()
// {
- // super(new SHA1Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA1Digest())), new StdDSAEncoder());
+ // super(DigestFactory.createSHA1(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA1())), new StdDSAEncoder());
// }
// }
// END android-removed
@@ -120,7 +117,7 @@ public class SignatureSpi
// {
// public ecDetDSA224()
// {
- // super(new SHA224Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA224Digest())), new StdDSAEncoder());
+ // super(DigestFactory.createSHA224(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA224())), new StdDSAEncoder());
// }
// }
// END android-removed
@@ -142,7 +139,7 @@ public class SignatureSpi
// {
// public ecDetDSA256()
// {
- // super(new SHA256Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest())), new StdDSAEncoder());
+ // super(DigestFactory.createSHA256(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA256())), new StdDSAEncoder());
// }
// }
// END android-removed
@@ -164,11 +161,10 @@ public class SignatureSpi
// {
// public ecDetDSA384()
// {
- // super(new SHA384Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA384Digest())), new StdDSAEncoder());
+ // super(DigestFactory.createSHA384(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA384())), new StdDSAEncoder());
// }
// }
// END android-removed
-
static public class ecDSA512
extends SignatureSpi
{
@@ -186,10 +182,82 @@ public class SignatureSpi
// {
// public ecDetDSA512()
// {
- // super(new SHA512Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA512Digest())), new StdDSAEncoder());
+ // super(DigestFactory.createSHA512(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA512())), new StdDSAEncoder());
// }
// }
- //
+
+ // static public class ecDSASha3_224
+ // extends SignatureSpi
+ // {
+ // public ecDSASha3_224()
+ // {
+ // super(DigestFactory.createSHA3_224(), new ECDSASigner(), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDetDSASha3_224
+ // extends SignatureSpi
+ // {
+ // public ecDetDSASha3_224()
+ // {
+ // super(DigestFactory.createSHA3_224(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA3_224())), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDSASha3_256
+ // extends SignatureSpi
+ // {
+ // public ecDSASha3_256()
+ // {
+ // super(DigestFactory.createSHA3_256(), new ECDSASigner(), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDetDSASha3_256
+ // extends SignatureSpi
+ // {
+ // public ecDetDSASha3_256()
+ // {
+ // super(DigestFactory.createSHA3_256(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA3_256())), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDSASha3_384
+ // extends SignatureSpi
+ // {
+ // public ecDSASha3_384()
+ // {
+ // super(DigestFactory.createSHA3_384(), new ECDSASigner(), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDetDSASha3_384
+ // extends SignatureSpi
+ // {
+ // public ecDetDSASha3_384()
+ // {
+ // super(DigestFactory.createSHA3_384(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA3_384())), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDSASha3_512
+ // extends SignatureSpi
+ // {
+ // public ecDSASha3_512()
+ // {
+ // super(DigestFactory.createSHA3_512(), new ECDSASigner(), new StdDSAEncoder());
+ // }
+ // }
+
+ // static public class ecDetDSASha3_512
+ // extends SignatureSpi
+ // {
+ // public ecDetDSASha3_512()
+ // {
+ // super(DigestFactory.createSHA3_512(), new ECDSASigner(new HMacDSAKCalculator(DigestFactory.createSHA3_512())), new StdDSAEncoder());
+ // }
+ // }
+
// static public class ecDSARipeMD160
// extends SignatureSpi
// {
@@ -198,97 +266,97 @@ public class SignatureSpi
// super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecNR
// extends SignatureSpi
// {
// public ecNR()
// {
- // super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
+ // super(DigestFactory.createSHA1(), new ECNRSigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecNR224
// extends SignatureSpi
// {
// public ecNR224()
// {
- // super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
+ // super(DigestFactory.createSHA224(), new ECNRSigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecNR256
// extends SignatureSpi
// {
// public ecNR256()
// {
- // super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
+ // super(DigestFactory.createSHA256(), new ECNRSigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecNR384
// extends SignatureSpi
// {
// public ecNR384()
// {
- // super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
+ // super(DigestFactory.createSHA384(), new ECNRSigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecNR512
// extends SignatureSpi
// {
// public ecNR512()
// {
- // super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
+ // super(DigestFactory.createSHA512(), new ECNRSigner(), new StdDSAEncoder());
// }
// }
- //
+
// static public class ecCVCDSA
// extends SignatureSpi
// {
// public ecCVCDSA()
// {
- // super(new SHA1Digest(), new ECDSASigner(), new PlainDSAEncoder());
+ // super(DigestFactory.createSHA1(), new ECDSASigner(), new PlainDSAEncoder());
// }
// }
- //
+
// static public class ecCVCDSA224
// extends SignatureSpi
// {
// public ecCVCDSA224()
// {
- // super(new SHA224Digest(), new ECDSASigner(), new PlainDSAEncoder());
+ // super(DigestFactory.createSHA224(), new ECDSASigner(), new PlainDSAEncoder());
// }
// }
- //
+
// static public class ecCVCDSA256
// extends SignatureSpi
// {
// public ecCVCDSA256()
// {
- // super(new SHA256Digest(), new ECDSASigner(), new PlainDSAEncoder());
+ // super(DigestFactory.createSHA256(), new ECDSASigner(), new PlainDSAEncoder());
// }
// }
- //
+
// static public class ecCVCDSA384
// extends SignatureSpi
// {
// public ecCVCDSA384()
// {
- // super(new SHA384Digest(), new ECDSASigner(), new PlainDSAEncoder());
+ // super(DigestFactory.createSHA384(), new ECDSASigner(), new PlainDSAEncoder());
// }
// }
- //
+
// static public class ecCVCDSA512
// extends SignatureSpi
// {
// public ecCVCDSA512()
// {
- // super(new SHA512Digest(), new ECDSASigner(), new PlainDSAEncoder());
+ // super(DigestFactory.createSHA512(), new ECDSASigner(), new PlainDSAEncoder());
// }
// }
- //
+
// static public class ecPlainDSARP160
// extends SignatureSpi
// {
@@ -320,6 +388,15 @@ public class SignatureSpi
throws IOException
{
ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(encoding);
+ if (s.size() != 2)
+ {
+ throw new IOException("malformed signature");
+ }
+ if (!Arrays.areEqual(encoding, s.getEncoded(ASN1Encoding.DER)))
+ {
+ throw new IOException("malformed signature");
+ }
+
BigInteger[] sig = new BigInteger[2];
sig[0] = ASN1Integer.getInstance(s.getObjectAt(0)).getValue();