Search in sources :

Example 1 with JceGenericKey

use of com.github.zhenwei.pkix.operator.jcajce.JceGenericKey in project LinLong-Java by zhenwei1108.

the class JceKEKAuthenticatedRecipient method getRecipientOperator.

public RecipientOperator getRecipientOperator(AlgorithmIdentifier keyEncryptionAlgorithm, final AlgorithmIdentifier contentMacAlgorithm, byte[] encryptedContentEncryptionKey) throws CMSException {
    final Key secretKey = extractSecretKey(keyEncryptionAlgorithm, contentMacAlgorithm, encryptedContentEncryptionKey);
    final Mac dataMac = contentHelper.createContentMac(secretKey, contentMacAlgorithm);
    return new RecipientOperator(new MacCalculator() {

        public AlgorithmIdentifier getAlgorithmIdentifier() {
            return contentMacAlgorithm;
        }

        public GenericKey getKey() {
            return new JceGenericKey(contentMacAlgorithm, secretKey);
        }

        public OutputStream getOutputStream() {
            return new MacOutputStream(dataMac);
        }

        public byte[] getMac() {
            return dataMac.doFinal();
        }
    });
}
Also used : JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) OutputStream(java.io.OutputStream) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) RecipientOperator(com.github.zhenwei.pkix.cms.RecipientOperator) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Key(java.security.Key) SecretKey(javax.crypto.SecretKey) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Mac(javax.crypto.Mac) MacCalculator(com.github.zhenwei.pkix.operator.MacCalculator) AlgorithmIdentifier(com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier)

Example 2 with JceGenericKey

use of com.github.zhenwei.pkix.operator.jcajce.JceGenericKey in project LinLong-Java by zhenwei1108.

the class JceOpenSSLPKCS8EncryptorBuilder method build.

public OutputEncryptor build() throws OperatorCreationException {
    final AlgorithmIdentifier algID;
    if (random == null) {
        random = new SecureRandom();
    }
    try {
        this.cipher = helper.createCipher(algOID.getId());
        if (PEMUtilities.isPKCS5Scheme2(algOID)) {
            this.paramGen = helper.createAlgorithmParameterGenerator(algOID.getId());
        }
    } catch (GeneralSecurityException e) {
        throw new OperatorCreationException(algOID + " not available: " + e.getMessage(), e);
    }
    if (PEMUtilities.isPKCS5Scheme2(algOID)) {
        salt = new byte[PEMUtilities.getSaltSize(prf.getAlgorithm())];
        random.nextBytes(salt);
        params = paramGen.generateParameters();
        try {
            EncryptionScheme scheme = new EncryptionScheme(algOID, ASN1Primitive.fromByteArray(params.getEncoded()));
            KeyDerivationFunc func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, new PBKDF2Params(salt, iterationCount, prf));
            ASN1EncodableVector v = new ASN1EncodableVector();
            v.add(func);
            v.add(scheme);
            algID = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_PBES2, PBES2Parameters.getInstance(new DERSequence(v)));
        } catch (IOException e) {
            throw new OperatorCreationException(e.getMessage(), e);
        }
        try {
            if (PEMUtilities.isHmacSHA1(prf)) {
                key = PEMUtilities.generateSecretKeyForPKCS5Scheme2(helper, algOID.getId(), password, salt, iterationCount);
            } else {
                key = PEMUtilities.generateSecretKeyForPKCS5Scheme2(helper, algOID.getId(), password, salt, iterationCount, prf);
            }
            cipher.init(Cipher.ENCRYPT_MODE, key, params);
        } catch (GeneralSecurityException e) {
            throw new OperatorCreationException(e.getMessage(), e);
        }
    } else if (PEMUtilities.isPKCS12(algOID)) {
        ASN1EncodableVector v = new ASN1EncodableVector();
        salt = new byte[20];
        random.nextBytes(salt);
        v.add(new DEROctetString(salt));
        v.add(new ASN1Integer(iterationCount));
        algID = new AlgorithmIdentifier(algOID, PKCS12PBEParams.getInstance(new DERSequence(v)));
        try {
            cipher.init(Cipher.ENCRYPT_MODE, new PKCS12KeyWithParameters(password, salt, iterationCount));
        } catch (GeneralSecurityException e) {
            throw new OperatorCreationException(e.getMessage(), e);
        }
    } else {
        throw new OperatorCreationException("unknown algorithm: " + algOID, null);
    }
    return new OutputEncryptor() {

        public AlgorithmIdentifier getAlgorithmIdentifier() {
            return algID;
        }

        public OutputStream getOutputStream(OutputStream encOut) {
            return new CipherOutputStream(encOut, cipher);
        }

        public GenericKey getKey() {
            return new JceGenericKey(algID, key);
        }
    };
}
Also used : EncryptionScheme(com.github.zhenwei.core.asn1.pkcs.EncryptionScheme) CipherOutputStream(com.github.zhenwei.provider.jcajce.io.CipherOutputStream) GeneralSecurityException(java.security.GeneralSecurityException) OutputStream(java.io.OutputStream) CipherOutputStream(com.github.zhenwei.provider.jcajce.io.CipherOutputStream) SecureRandom(java.security.SecureRandom) IOException(java.io.IOException) ASN1Integer(com.github.zhenwei.core.asn1.ASN1Integer) DEROctetString(com.github.zhenwei.core.asn1.DEROctetString) AlgorithmIdentifier(com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier) DERSequence(com.github.zhenwei.core.asn1.DERSequence) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) KeyDerivationFunc(com.github.zhenwei.core.asn1.pkcs.KeyDerivationFunc) PBKDF2Params(com.github.zhenwei.core.asn1.pkcs.PBKDF2Params) ASN1EncodableVector(com.github.zhenwei.core.asn1.ASN1EncodableVector) OperatorCreationException(com.github.zhenwei.pkix.operator.OperatorCreationException) PKCS12KeyWithParameters(com.github.zhenwei.provider.jcajce.PKCS12KeyWithParameters) OutputEncryptor(com.github.zhenwei.pkix.operator.OutputEncryptor)

Example 3 with JceGenericKey

use of com.github.zhenwei.pkix.operator.jcajce.JceGenericKey in project LinLong-Java by zhenwei1108.

the class JceKeyTransAuthenticatedRecipient method getRecipientOperator.

public RecipientOperator getRecipientOperator(AlgorithmIdentifier keyEncryptionAlgorithm, final AlgorithmIdentifier contentMacAlgorithm, byte[] encryptedContentEncryptionKey) throws CMSException {
    final Key secretKey = extractSecretKey(keyEncryptionAlgorithm, contentMacAlgorithm, encryptedContentEncryptionKey);
    final Mac dataMac = contentHelper.createContentMac(secretKey, contentMacAlgorithm);
    return new RecipientOperator(new MacCalculator() {

        public AlgorithmIdentifier getAlgorithmIdentifier() {
            return contentMacAlgorithm;
        }

        public GenericKey getKey() {
            return new JceGenericKey(contentMacAlgorithm, secretKey);
        }

        public OutputStream getOutputStream() {
            return new MacOutputStream(dataMac);
        }

        public byte[] getMac() {
            return dataMac.doFinal();
        }
    });
}
Also used : JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) OutputStream(java.io.OutputStream) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) RecipientOperator(com.github.zhenwei.pkix.cms.RecipientOperator) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Key(java.security.Key) PrivateKey(java.security.PrivateKey) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Mac(javax.crypto.Mac) MacCalculator(com.github.zhenwei.pkix.operator.MacCalculator) AlgorithmIdentifier(com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier)

Example 4 with JceGenericKey

use of com.github.zhenwei.pkix.operator.jcajce.JceGenericKey in project LinLong-Java by zhenwei1108.

the class JcePasswordAuthenticatedRecipient method getRecipientOperator.

public RecipientOperator getRecipientOperator(AlgorithmIdentifier keyEncryptionAlgorithm, final AlgorithmIdentifier contentMacAlgorithm, byte[] derivedKey, byte[] encryptedContentEncryptionKey) throws CMSException {
    final Key secretKey = extractSecretKey(keyEncryptionAlgorithm, contentMacAlgorithm, derivedKey, encryptedContentEncryptionKey);
    final Mac dataMac = helper.createContentMac(secretKey, contentMacAlgorithm);
    return new RecipientOperator(new MacCalculator() {

        public AlgorithmIdentifier getAlgorithmIdentifier() {
            return contentMacAlgorithm;
        }

        public GenericKey getKey() {
            return new JceGenericKey(contentMacAlgorithm, secretKey);
        }

        public OutputStream getOutputStream() {
            return new MacOutputStream(dataMac);
        }

        public byte[] getMac() {
            return dataMac.doFinal();
        }
    });
}
Also used : JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) OutputStream(java.io.OutputStream) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) RecipientOperator(com.github.zhenwei.pkix.cms.RecipientOperator) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Key(java.security.Key) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Mac(javax.crypto.Mac) MacCalculator(com.github.zhenwei.pkix.operator.MacCalculator) AlgorithmIdentifier(com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier)

Example 5 with JceGenericKey

use of com.github.zhenwei.pkix.operator.jcajce.JceGenericKey in project LinLong-Java by zhenwei1108.

the class JceKTSKeyTransAuthenticatedRecipient method getRecipientOperator.

public RecipientOperator getRecipientOperator(AlgorithmIdentifier keyEncryptionAlgorithm, final AlgorithmIdentifier contentMacAlgorithm, byte[] encryptedContentEncryptionKey) throws CMSException {
    final Key secretKey = extractSecretKey(keyEncryptionAlgorithm, contentMacAlgorithm, encryptedContentEncryptionKey);
    final Mac dataMac = contentHelper.createContentMac(secretKey, contentMacAlgorithm);
    return new RecipientOperator(new MacCalculator() {

        public AlgorithmIdentifier getAlgorithmIdentifier() {
            return contentMacAlgorithm;
        }

        public GenericKey getKey() {
            return new JceGenericKey(contentMacAlgorithm, secretKey);
        }

        public OutputStream getOutputStream() {
            return new MacOutputStream(dataMac);
        }

        public byte[] getMac() {
            return dataMac.doFinal();
        }
    });
}
Also used : JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) OutputStream(java.io.OutputStream) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) RecipientOperator(com.github.zhenwei.pkix.cms.RecipientOperator) MacOutputStream(com.github.zhenwei.provider.jcajce.io.MacOutputStream) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) JceGenericKey(com.github.zhenwei.pkix.operator.jcajce.JceGenericKey) Key(java.security.Key) PrivateKey(java.security.PrivateKey) GenericKey(com.github.zhenwei.pkix.operator.GenericKey) Mac(javax.crypto.Mac) MacCalculator(com.github.zhenwei.pkix.operator.MacCalculator) AlgorithmIdentifier(com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier)

Aggregations

AlgorithmIdentifier (com.github.zhenwei.core.asn1.x509.AlgorithmIdentifier)6 JceGenericKey (com.github.zhenwei.pkix.operator.jcajce.JceGenericKey)6 OutputStream (java.io.OutputStream)6 RecipientOperator (com.github.zhenwei.pkix.cms.RecipientOperator)5 GenericKey (com.github.zhenwei.pkix.operator.GenericKey)5 MacCalculator (com.github.zhenwei.pkix.operator.MacCalculator)5 MacOutputStream (com.github.zhenwei.provider.jcajce.io.MacOutputStream)5 Key (java.security.Key)5 Mac (javax.crypto.Mac)5 PrivateKey (java.security.PrivateKey)3 ASN1EncodableVector (com.github.zhenwei.core.asn1.ASN1EncodableVector)1 ASN1Integer (com.github.zhenwei.core.asn1.ASN1Integer)1 DEROctetString (com.github.zhenwei.core.asn1.DEROctetString)1 DERSequence (com.github.zhenwei.core.asn1.DERSequence)1 EncryptionScheme (com.github.zhenwei.core.asn1.pkcs.EncryptionScheme)1 KeyDerivationFunc (com.github.zhenwei.core.asn1.pkcs.KeyDerivationFunc)1 PBKDF2Params (com.github.zhenwei.core.asn1.pkcs.PBKDF2Params)1 OperatorCreationException (com.github.zhenwei.pkix.operator.OperatorCreationException)1 OutputEncryptor (com.github.zhenwei.pkix.operator.OutputEncryptor)1 PKCS12KeyWithParameters (com.github.zhenwei.provider.jcajce.PKCS12KeyWithParameters)1