Search in sources :

Example 1 with BcDigestFactory

use of org.xwiki.crypto.internal.digest.factory.BcDigestFactory in project xwiki-commons by xwiki.

the class BcPKCS5S2KeyDerivationFunctionFactory method getInstance.

@Override
public KeyDerivationFunction getInstance(KeyDerivationFunctionParameters params) {
    if (!(params instanceof PBKDF2Parameters)) {
        throw new IllegalArgumentException("Invalid parameter used for PKCS5S2 function: " + params.getClass().getName());
    }
    PBKDF2Parameters kdfParams = (PBKDF2Parameters) params;
    PKCS5S2ParametersGenerator generator;
    BcDigestFactory factory = null;
    if (kdfParams.getPseudoRandomFuntionHint() != null) {
        factory = this.getDigestFactory(kdfParams.getPseudoRandomFuntionHint());
        generator = new PKCS5S2ParametersGenerator(factory.getDigestInstance());
    } else {
        generator = new PKCS5S2ParametersGenerator();
    }
    return new AbstractBcPBKDF2(generator, (PBKDF2Parameters) params, (factory != null) ? toHmacAlgId(factory.getAlgorithmIdentifier()) : HMAC_SHA1) {

        @Override
        public KeyDerivationFunc getKeyDerivationFunction() {
            PBKDF2Parameters parameters = (PBKDF2Parameters) getParameters();
            AlgorithmIdentifier algId = getPRFAlgorithmIdentifier();
            return new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, (isKeySizeOverwritten()) ? new PBKDF2Params(parameters.getSalt(), parameters.getIterationCount(), algId) : new PBKDF2Params(parameters.getSalt(), parameters.getIterationCount(), parameters.getKeySize(), algId));
        }
    };
}
Also used : PKCS5S2ParametersGenerator(org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator) PBKDF2Parameters(org.xwiki.crypto.password.params.PBKDF2Parameters) KeyDerivationFunc(org.bouncycastle.asn1.pkcs.KeyDerivationFunc) PBKDF2Params(org.xwiki.crypto.password.internal.kdf.PBKDF2Params) AbstractBcDigestFactory(org.xwiki.crypto.internal.digest.factory.AbstractBcDigestFactory) BcDigestFactory(org.xwiki.crypto.internal.digest.factory.BcDigestFactory) AbstractBcPBKDF2(org.xwiki.crypto.password.internal.kdf.AbstractBcPBKDF2) AlgorithmIdentifier(org.bouncycastle.asn1.x509.AlgorithmIdentifier)

Aggregations

KeyDerivationFunc (org.bouncycastle.asn1.pkcs.KeyDerivationFunc)1 AlgorithmIdentifier (org.bouncycastle.asn1.x509.AlgorithmIdentifier)1 PKCS5S2ParametersGenerator (org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator)1 AbstractBcDigestFactory (org.xwiki.crypto.internal.digest.factory.AbstractBcDigestFactory)1 BcDigestFactory (org.xwiki.crypto.internal.digest.factory.BcDigestFactory)1 AbstractBcPBKDF2 (org.xwiki.crypto.password.internal.kdf.AbstractBcPBKDF2)1 PBKDF2Params (org.xwiki.crypto.password.internal.kdf.PBKDF2Params)1 PBKDF2Parameters (org.xwiki.crypto.password.params.PBKDF2Parameters)1