package org.jboss.resteasy.jose.jws.crypto; import org.jboss.resteasy.jose.i18n.Messages; import org.jboss.resteasy.jose.jws.Algorithm; import org.jboss.resteasy.jose.jws.JWSInput; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class RSAProvider { public static String getJavaAlgorithm(Algorithm alg) { switch (alg) { case RS256: return "SHA256withRSA"; case RS384: return "SHA384withRSA"; case RS512: return "SHA512withRSA"; default: throw new IllegalArgumentException(Messages.MESSAGES.notAnRSAalgorithm()); } } public static Signature getSignature(Algorithm alg) { try { return Signature.getInstance(getJavaAlgorithm(alg)); } catch (Exception e) { throw new RuntimeException(e); } } public static byte[] sign(byte[] data, Algorithm algorithm, PrivateKey privateKey) { try { Signature signature = getSignature(algorithm); signature.initSign(privateKey); signature.update(data); return signature.sign(); } catch (Exception e) { throw new RuntimeException(e); } } public static boolean verify(JWSInput input, PublicKey publicKey) { try { Signature verifier = getSignature(input.getHeader().getAlgorithm()); verifier.initVerify(publicKey); verifier.update(input.getContent()); return verifier.verify(input.getSignature()); } catch (Exception e) { throw new RuntimeException(e); } } }