From ee97cb9053cced3ccfedd7ddf210579827859b6a Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Tue, 14 Feb 2023 20:25:34 +0700 Subject: Refactoring in Cms --- crypto/src/cms/CMSEnvelopedHelper.cs | 123 +++++++++++++---------------------- 1 file changed, 45 insertions(+), 78 deletions(-) (limited to 'crypto/src/cms/CMSEnvelopedHelper.cs') diff --git a/crypto/src/cms/CMSEnvelopedHelper.cs b/crypto/src/cms/CMSEnvelopedHelper.cs index 888aba817..40c5e6868 100644 --- a/crypto/src/cms/CMSEnvelopedHelper.cs +++ b/crypto/src/cms/CMSEnvelopedHelper.cs @@ -13,91 +13,36 @@ using Org.BouncyCastle.Utilities.IO; namespace Org.BouncyCastle.Cms { - class CmsEnvelopedHelper + // TODO[api] Make static + internal class CmsEnvelopedHelper { internal static readonly CmsEnvelopedHelper Instance = new CmsEnvelopedHelper(); - private static readonly IDictionary KeySizes = new Dictionary(); - private static readonly IDictionary BaseCipherNames = new Dictionary(); + private static readonly Dictionary KeySizes = new Dictionary(); + private static readonly Dictionary Rfc3211WrapperNames = new Dictionary(); static CmsEnvelopedHelper() { - KeySizes.Add(CmsEnvelopedGenerator.DesEde3Cbc, 192); KeySizes.Add(CmsEnvelopedGenerator.Aes128Cbc, 128); KeySizes.Add(CmsEnvelopedGenerator.Aes192Cbc, 192); KeySizes.Add(CmsEnvelopedGenerator.Aes256Cbc, 256); - - BaseCipherNames.Add(CmsEnvelopedGenerator.DesEde3Cbc, "DESEDE"); - BaseCipherNames.Add(CmsEnvelopedGenerator.Aes128Cbc, "AES"); - BaseCipherNames.Add(CmsEnvelopedGenerator.Aes192Cbc, "AES"); - BaseCipherNames.Add(CmsEnvelopedGenerator.Aes256Cbc, "AES"); - } - - private string GetAsymmetricEncryptionAlgName( - string encryptionAlgOid) - { - if (Asn1.Pkcs.PkcsObjectIdentifiers.RsaEncryption.Id.Equals(encryptionAlgOid)) - { - return "RSA/ECB/PKCS1Padding"; - } - - return encryptionAlgOid; - } - - internal IBufferedCipher CreateAsymmetricCipher( - string encryptionOid) - { - string asymName = GetAsymmetricEncryptionAlgName(encryptionOid); - if (!asymName.Equals(encryptionOid)) - { - try - { - return CipherUtilities.GetCipher(asymName); - } - catch (SecurityUtilityException) - { - // Ignore - } - } - return CipherUtilities.GetCipher(encryptionOid); - } - - internal IWrapper CreateWrapper( - string encryptionOid) - { - try - { - return WrapperUtilities.GetWrapper(encryptionOid); - } - catch (SecurityUtilityException) - { - return WrapperUtilities.GetWrapper(GetAsymmetricEncryptionAlgName(encryptionOid)); - } - } - - internal string GetRfc3211WrapperName(string oid) - { - if (oid == null) - throw new ArgumentNullException(nameof(oid)); - - if (!BaseCipherNames.TryGetValue(oid, out var alg)) - throw new ArgumentException("no name for " + oid, nameof(oid)); - - return alg + "RFC3211Wrap"; - } - - internal int GetKeySize(string oid) - { - if (oid == null) - throw new ArgumentNullException(nameof(oid)); - - if (!KeySizes.TryGetValue(oid, out var keySize)) - throw new ArgumentException("no keysize for " + oid, "oid"); - - return keySize; - } - - internal static RecipientInformationStore BuildRecipientInformationStore( + KeySizes.Add(CmsEnvelopedGenerator.Camellia128Cbc, 128); + KeySizes.Add(CmsEnvelopedGenerator.Camellia192Cbc, 192); + KeySizes.Add(CmsEnvelopedGenerator.Camellia256Cbc, 256); + KeySizes.Add(CmsEnvelopedGenerator.DesCbc, 64); + KeySizes.Add(CmsEnvelopedGenerator.DesEde3Cbc, 192); + + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Aes128Cbc, "AESRFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Aes192Cbc, "AESRFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Aes256Cbc, "AESRFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Camellia128Cbc, "CAMELLIARFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Camellia192Cbc, "CAMELLIARFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.Camellia256Cbc, "CAMELLIARFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.DesCbc, "DESRFC3211WRAP"); + Rfc3211WrapperNames.Add(CmsEnvelopedGenerator.DesEde3Cbc, "DESEDERFC3211WRAP"); + } + + internal static RecipientInformationStore BuildRecipientInformationStore( Asn1Set recipientInfos, CmsSecureReadable secureReadable) { var infos = new List(); @@ -110,7 +55,29 @@ namespace Org.BouncyCastle.Cms return new RecipientInformationStore(infos); } - private static void ReadRecipientInfo(IList infos, RecipientInfo info, + internal int GetKeySize(string oid) + { + if (oid == null) + throw new ArgumentNullException(nameof(oid)); + + if (!KeySizes.TryGetValue(oid, out var keySize)) + throw new ArgumentException("no key size for " + oid, nameof(oid)); + + return keySize; + } + + internal string GetRfc3211WrapperName(string oid) + { + if (oid == null) + throw new ArgumentNullException(nameof(oid)); + + if (!Rfc3211WrapperNames.TryGetValue(oid, out var name)) + throw new ArgumentException("no name for " + oid, nameof(oid)); + + return name; + } + + private static void ReadRecipientInfo(IList infos, RecipientInfo info, CmsSecureReadable secureReadable) { Asn1Encodable recipInfo = info.Info; @@ -304,4 +271,4 @@ namespace Org.BouncyCastle.Cms } } } -} \ No newline at end of file +} -- cgit 1.4.1