diff options
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.java | 145 |
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(); |