jsig.initVerify(pubKey); rv = jsig.verifyOneShot(hash.getData(), sigbytes); } else {
/** * Generic verify any type. * * @throws GeneralSecurityException if algorithm unvailable or on other errors * @since 0.9.9 added off/len 0.9.12 */ private boolean altVerifySig(Signature signature, byte[] data, int offset, int len, SigningPublicKey verifyingKey) throws GeneralSecurityException { SigType type = signature.getType(); if (type != verifyingKey.getType()) throw new IllegalArgumentException("type mismatch sig=" + type + " key=" + verifyingKey.getType()); if (type == SigType.DSA_SHA1) return altVerifySigSHA1(signature, data, offset, len, verifyingKey); PublicKey pubKey = SigUtil.toJavaKey(verifyingKey); byte[] sigbytes = SigUtil.toJavaSig(signature); boolean rv; if (type.getBaseAlgorithm() == SigAlgo.EdDSA) { // take advantage of one-shot mode EdDSAEngine jsig = new EdDSAEngine(type.getDigestInstance()); jsig.initVerify(pubKey); rv = jsig.verifyOneShot(data, offset, len, sigbytes); } else { java.security.Signature jsig = java.security.Signature.getInstance(type.getAlgorithmName()); jsig.initVerify(pubKey); jsig.update(data, offset, len); rv = jsig.verify(sigbytes); } return rv; }
@Test public void testVerifyOneShot() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); EdDSAPublicKeySpec pubKey = new EdDSAPublicKeySpec(TEST_PK, spec); EdDSAEngine sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); PublicKey vKey = new EdDSAPublicKey(pubKey); sgr.initVerify(vKey); assertThat("verifyOneShot() failed", sgr.verifyOneShot(TEST_MSG, TEST_MSG_SIG), is(true)); } }
public boolean isValidSignature(byte[] message, byte[] signature, byte[] publicKey) { try { EdDSANamedCurveSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512"); EdDSAPublicKeySpec edDSAPublicKeySpec = new EdDSAPublicKeySpec(publicKey, spec); EdDSAPublicKey edDSAPublicKey = new EdDSAPublicKey(edDSAPublicKeySpec); mEdDSAEngine.initVerify(edDSAPublicKey); mEdDSAEngine.update(message); return mEdDSAEngine.verify(signature); } catch (Exception e) { throw new IllegalArgumentException(e); } }
@Override public boolean verifySignature(byte[] message, byte[] sigBytes) { try { EdDSAEngine sgr = new EdDSAEngine(MessageDigest.getInstance("SHA-512")); sgr.initVerify(new EdDSAPublicKey(new EdDSAPublicKeySpec(keySpec.getA(), ed25519))); sgr.update(message); return sgr.verify(sigBytes); } catch (Exception e) { throw new RuntimeException(e); } }
/** * Verifies a signature. * * @param message * message * @param signature * signature * @return True if the signature is valid, otherwise false */ public static boolean verify(byte[] message, Signature signature) { if (message != null && signature != null) { // avoid null pointer exception try { if (Native.isEnabled()) { return Native.verify(message, signature.getS(), signature.getA()); } else { EdDSAEngine engine = new EdDSAEngine(); engine.initVerify(PublicKeyCache.computeIfAbsent(signature.getPublicKey())); return engine.verifyOneShot(message, signature.getS()); } } catch (Exception e) { // do nothing } } return false; }