diff options
author | David Hook <dgh@cryptoworkshop.com> | 2020-04-25 16:53:47 +1000 |
---|---|---|
committer | David Hook <dgh@cryptoworkshop.com> | 2020-04-25 16:53:47 +1000 |
commit | 99467b8431c1a871792ecb34fd5eeb962353b1d2 (patch) | |
tree | 043b017ad8dd740c71e8f0661a170109672b6bb6 /crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs | |
parent | github #237 - gost 2012 parsing (diff) | |
download | BouncyCastle.NET-ed25519-99467b8431c1a871792ecb34fd5eeb962353b1d2.tar.xz |
first cut at PKCS#5 Scheme 2 in PKCS#12
Diffstat (limited to 'crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs')
-rw-r--r-- | crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs b/crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs index b6b7bac65..000eb7ae5 100644 --- a/crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs +++ b/crypto/src/pkcs/EncryptedPrivateKeyInfoFactory.cs @@ -60,5 +60,43 @@ namespace Org.BouncyCastle.Pkcs AlgorithmIdentifier algID = new AlgorithmIdentifier(oid, pbeParameters); return new EncryptedPrivateKeyInfo(algID, encoding); } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + DerObjectIdentifier cipherAlgorithm, + DerObjectIdentifier prfAlgorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + SecureRandom random, + AsymmetricKeyParameter key) + { + return CreateEncryptedPrivateKeyInfo( + cipherAlgorithm, prfAlgorithm, passPhrase, salt, iterationCount, random, + PrivateKeyInfoFactory.CreatePrivateKeyInfo(key)); + } + + public static EncryptedPrivateKeyInfo CreateEncryptedPrivateKeyInfo( + DerObjectIdentifier cipherAlgorithm, + DerObjectIdentifier prfAlgorithm, + char[] passPhrase, + byte[] salt, + int iterationCount, + SecureRandom random, + PrivateKeyInfo keyInfo) + { + IBufferedCipher cipher = CipherUtilities.GetCipher(cipherAlgorithm) as IBufferedCipher; + if (cipher == null) + throw new Exception("Unknown encryption algorithm: " + cipherAlgorithm); + + Asn1Encodable pbeParameters = PbeUtilities.GenerateAlgorithmParameters( + cipherAlgorithm, prfAlgorithm, salt, iterationCount, random); + ICipherParameters cipherParameters = PbeUtilities.GenerateCipherParameters( + PkcsObjectIdentifiers.IdPbeS2, passPhrase, pbeParameters); + cipher.Init(true, cipherParameters); + byte[] encoding = cipher.DoFinal(keyInfo.GetEncoded()); + + AlgorithmIdentifier algID = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPbeS2, pbeParameters); + return new EncryptedPrivateKeyInfo(algID, encoding); + } } } |