Search in sources :

Example 1 with PSSSigner

use of org.spongycastle.crypto.signers.PSSSigner in project universa by UniversaBlockchain.

the class RSAOAEPPublicKey method checkSignature.

/**
 * {@inheritDoc}
 */
@NonNull
@Override
public boolean checkSignature(InputStream input, byte[] signature, HashType hashType, int saltLength) throws IllegalStateException, IOException {
    if (state == null) {
        throw new IllegalStateException();
    } else {
        final Digest primaryDigest = hashType.makeDigest();
        if (saltLength == MAX_SALT_LENGTH) {
            saltLength = getMaxSaltLength(getBitStrength(), primaryDigest.getDigestSize());
        }
        if (saltLength < 0) {
            throw new RuntimeException(String.format("Incorrect salt length %s", saltLength));
        }
        final Signer signatureChecker = new PSSSigner(RSAEngineFactory.make(), primaryDigest, state.mgf1HashType.makeDigest(), saltLength);
        signatureChecker.init(false, new ParametersWithRandom(state.keyParameters, state.rng));
        boolean done = false;
        while (!done) {
            int availableBytes = input.available();
            if (availableBytes <= 0) {
                done = true;
            } else {
                byte[] buffer = new byte[availableBytes];
                int howManyBytesRead = input.read(buffer);
                if (howManyBytesRead <= 0) {
                    done = true;
                } else {
                    signatureChecker.update(buffer, 0, howManyBytesRead);
                }
            }
        }
        return signatureChecker.verifySignature(signature);
    }
}
Also used : PSSSigner(org.spongycastle.crypto.signers.PSSSigner) Signer(org.spongycastle.crypto.Signer) Digest(org.spongycastle.crypto.Digest) SHA1Digest(org.spongycastle.crypto.digests.SHA1Digest) PSSSigner(org.spongycastle.crypto.signers.PSSSigner) ParametersWithRandom(org.spongycastle.crypto.params.ParametersWithRandom) NonNull(org.checkerframework.checker.nullness.qual.NonNull)

Example 2 with PSSSigner

use of org.spongycastle.crypto.signers.PSSSigner in project universa by UniversaBlockchain.

the class RSAOAEPPrivateKey method sign.

/**
 * {@inheritDoc}
 * <p>
 * Signature is created using RSA-PSS as described in PKCS# 1 v 2.1.
 */
@Override
public byte[] sign(InputStream input, HashType hashType, @Nullable byte[] salt) throws IllegalStateException, IOException {
    if (state == null) {
        throw new IllegalStateException();
    } else {
        final Digest primaryDigest = hashType.makeDigest();
        final PSSSigner signer;
        if (salt == null) {
            // Use maximum possible salt
            signer = new PSSSigner(RSAEngineFactory.make(), primaryDigest, state.mgf1HashType.makeDigest(), getMaxSaltLength(getBitStrength(), primaryDigest.getDigestSize()));
        } else {
            // Use some specific salt
            signer = new PSSSigner(RSAEngineFactory.make(), primaryDigest, state.mgf1HashType.makeDigest(), salt);
        }
        signer.init(true, new ParametersWithRandom(state.keyParameters, state.rng));
        boolean done = false;
        while (!done) {
            int availableBytes = input.available();
            if (availableBytes <= 0) {
                done = true;
            } else {
                byte[] buffer = new byte[availableBytes];
                int howManyBytesRead = input.read(buffer);
                if (howManyBytesRead <= 0) {
                    done = true;
                } else {
                    signer.update(buffer, 0, howManyBytesRead);
                }
            }
        }
        try {
            return signer.generateSignature();
        } catch (CryptoException e) {
            throw new IOException(String.format("Cannot sign data: %s", e.toString()));
        }
    }
}
Also used : SHA1Digest(org.spongycastle.crypto.digests.SHA1Digest) PSSSigner(org.spongycastle.crypto.signers.PSSSigner) ParametersWithRandom(org.spongycastle.crypto.params.ParametersWithRandom) IOException(java.io.IOException)

Aggregations

SHA1Digest (org.spongycastle.crypto.digests.SHA1Digest)2 ParametersWithRandom (org.spongycastle.crypto.params.ParametersWithRandom)2 PSSSigner (org.spongycastle.crypto.signers.PSSSigner)2 IOException (java.io.IOException)1 NonNull (org.checkerframework.checker.nullness.qual.NonNull)1 Digest (org.spongycastle.crypto.Digest)1 Signer (org.spongycastle.crypto.Signer)1