package net.oauth.jsontoken.crypto; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.Signature; import java.security.SignatureException; public class RsaSHA1Verifier implements Verifier { private final PublicKey verificationKey; private final Signature signer; /** * Public Constructor. * @param verificationKey the key used to verify the signature. */ public RsaSHA1Verifier(PublicKey verificationKey) { this.verificationKey = verificationKey; try { this.signer = Signature.getInstance("SHA1withRSA"); this.signer.initVerify(verificationKey); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("platform is missing RSAwithSHA1 signature alg", e); } catch (InvalidKeyException e) { throw new IllegalStateException("key is invalid", e); } } @Override public void verifySignature(byte[] source, byte[] signature) throws SignatureException { try { signer.initVerify(verificationKey); } catch (InvalidKeyException e) { throw new RuntimeException("key someone become invalid since calling the constructor"); } signer.update(source); if (!signer.verify(signature)) { throw new SignatureException("signature did not verify"); } } }