package com.beowulfe.hap.impl.crypto; import java.security.MessageDigest; import java.security.PublicKey; import java.security.Signature; import net.i2p.crypto.eddsa.EdDSAEngine; import net.i2p.crypto.eddsa.EdDSAPublicKey; import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable; import net.i2p.crypto.eddsa.spec.EdDSAParameterSpec; import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec; public class EdsaVerifier { private final PublicKey publicKey; public EdsaVerifier(byte[] publicKey) { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512"); EdDSAPublicKeySpec pubKey = new EdDSAPublicKeySpec(publicKey, spec); this.publicKey = new EdDSAPublicKey(pubKey); } public boolean verify(byte[] data, byte[] signature) throws Exception { Signature sgr = new EdDSAEngine(MessageDigest.getInstance("SHA-512")); sgr.initVerify(publicKey); sgr.update(data); return sgr.verify(signature); } }