Example usage for org.bouncycastle.crypto Signer generateSignature

List of usage examples for org.bouncycastle.crypto Signer generateSignature

Introduction

In this page you can find the example usage for org.bouncycastle.crypto Signer generateSignature.

Prototype

public byte[] generateSignature() throws CryptoException, DataLengthException;

Source Link

Document

generate a signature for the message we've been loaded with using the key we were initialised with.

Usage

From source file:com.codename1.payments.GooglePlayValidator.java

/**
 * Create JWT token.  See https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
 * @param payload/*from  www  .j  av  a2  s  . co  m*/
 * @return 
 */
private String createJWT(String payload) {
    try {
        Map header = new HashMap();
        header.put("alg", "RS256");
        header.put("typ", "JWT");

        Map claims = new HashMap();
        claims.put("iss", getGoogleClientId());
        claims.put("scope", "https://www.googleapis.com/auth/androidpublisher");
        claims.put("aud", "https://www.googleapis.com/oauth2/v4/token");
        claims.put("exp", String.valueOf(System.currentTimeMillis() / 1000l + 1800));
        claims.put("iat", String.valueOf(System.currentTimeMillis() / 1000l));

        String headerEnc = Base64.encodeNoNewline(Result.fromContent(header).toString().getBytes("UTF-8"))
                .replace('+', '-').replace('/', '_').replace("=", " ");
        String claimsEnc = Base64.encodeNoNewline(Result.fromContent(claims).toString().getBytes("UTF-8"))
                .replace('+', '-').replace('/', '_').replace("=", " ");
        ;
        String sigContent = headerEnc + "." + claimsEnc;

        Digest digest = new SHA256Digest();
        Signer signer = new RSADigestSigner(digest);

        String pkey = getGooglePrivateKey();
        RSAPrivateKey rpkey = getRSAPrivateKey(pkey);
        signer.init(true, new RSAKeyParameters(true, rpkey.getModulus(), rpkey.getPrivateExponent()));

        byte[] sigBytes = sigContent.getBytes("UTF-8");
        signer.update(sigBytes, 0, sigBytes.length);

        byte[] sig = signer.generateSignature();

        RSAKeyParameters kp = new RSAKeyParameters(false, rpkey.getModulus(), rpkey.getPublicExponent());
        signer.init(false, kp);
        signer.update(sigBytes, 0, sigBytes.length);
        boolean res = signer.verifySignature(sig);
        if (!res) {
            throw new RuntimeException("Failed to verify signature after creating it");
        }

        String jwt = headerEnc + "." + claimsEnc + "."
                + Base64.encodeNoNewline(sig).replace('+', '-').replace('/', '_').replace("=", " ");
        ;
        return jwt;
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }

}

From source file:com.github.jinahya.rfc5849.OAuthSignatureRsaSha1Bc.java

License:Apache License

@Override
byte[] get(final CipherParameters initParam, final byte[] baseBytes) throws Exception {
    final Signer signer = new RSADigestSigner(new SHA1Digest());
    signer.init(true, initParam);/*from  w w  w.j a  v  a  2  s. co  m*/
    signer.update(baseBytes, 0, baseBytes.length);
    return signer.generateSignature();
}

From source file:org.opcfoundation.ua.transport.security.BcCryptoProvider.java

License:Open Source License

@Override
public byte[] signAsymm(PrivateKey senderPrivate, SecurityAlgorithm algorithm, byte[] dataToSign)
        throws ServiceResultException {
    if (algorithm == null)
        return null;

    if (dataToSign == null || senderPrivate == null)
        throw new IllegalArgumentException("null arg");

    java.security.interfaces.RSAPrivateCrtKey privateKey = (java.security.interfaces.RSAPrivateCrtKey) senderPrivate;
    RSAPrivateKey privKey = new RSAPrivateKey(privateKey.getModulus(), privateKey.getPublicExponent(),
            privateKey.getPrivateExponent(), privateKey.getPrimeP(), privateKey.getPrimeQ(),
            privateKey.getPrimeExponentP(), privateKey.getPrimeExponentQ(), privateKey.getCrtCoefficient());

    Signer signer = getAsymmetricSigner(true, algorithm, privKey);
    signer.update(dataToSign, 0, dataToSign.length);

    try {/*from   w  w w.  j  a  va  2  s  .  co m*/
        return signer.generateSignature();
    } catch (DataLengthException e) {
        logger.error("Input data is not an even number of encryption blocks.");
        throw new ServiceResultException(StatusCodes.Bad_InternalError,
                "Error in symmetric decrypt: Input data is not an even number of encryption blocks.");
    } catch (CryptoException e) {
        throw new ServiceResultException(StatusCodes.Bad_InternalError, e);
    }

}