package com.github.scribejava.core.services; import java.security.PrivateKey; import java.security.Signature; import java.security.SignatureException; import com.github.scribejava.core.exceptions.OAuthSignatureException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * A signature service that uses the RSA-SHA1 algorithm. */ public class RSASha1SignatureService implements SignatureService { private static final String METHOD = "RSA-SHA1"; private static final String RSA_SHA1 = "SHA1withRSA"; private static final String UTF8 = "UTF-8"; private final PrivateKey privateKey; public RSASha1SignatureService(PrivateKey privateKey) { this.privateKey = privateKey; } /** * {@inheritDoc} */ @Override public String getSignature(String baseString, String apiSecret, String tokenSecret) { try { final Signature signature = Signature.getInstance(RSA_SHA1); signature.initSign(privateKey); signature.update(baseString.getBytes(UTF8)); return bytesToBase64String(signature); } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException | UnsupportedEncodingException | RuntimeException e) { throw new OAuthSignatureException(baseString, e); } } private String bytesToBase64String(Signature signature) throws SignatureException { return Base64Encoder.getInstance().encode(signature.sign()); } /** * {@inheritDoc} */ @Override public String getSignatureMethod() { return METHOD; } }