Initial Commit
This commit is contained in:
99
iTechSharp/srcbc/cms/CMSEnvelopedHelper.cs
Normal file
99
iTechSharp/srcbc/cms/CMSEnvelopedHelper.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
|
||||
using Org.BouncyCastle.Asn1.Pkcs;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Security;
|
||||
|
||||
namespace Org.BouncyCastle.Cms
|
||||
{
|
||||
class CmsEnvelopedHelper
|
||||
{
|
||||
internal static readonly CmsEnvelopedHelper Instance = new CmsEnvelopedHelper();
|
||||
|
||||
private static readonly IDictionary KeySizes = new Hashtable();
|
||||
private static readonly IDictionary Ciphers = new Hashtable();
|
||||
private static readonly IDictionary BaseCipherNames = new Hashtable();
|
||||
// private static readonly IDictionary CipherAlgNames = new Hashtable();
|
||||
|
||||
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");
|
||||
|
||||
// CipherAlgNames.Add(CmsEnvelopedGenerator.DesEde3Cbc, "DESEDE/CBC/PKCS5Padding");
|
||||
// CipherAlgNames.Add(CmsEnvelopedGenerator.Aes128Cbc, "AES/CBC/PKCS5Padding");
|
||||
// CipherAlgNames.Add(CmsEnvelopedGenerator.Aes192Cbc, "AES/CBC/PKCS5Padding");
|
||||
// CipherAlgNames.Add(CmsEnvelopedGenerator.Aes256Cbc, "AES/CBC/PKCS5Padding");
|
||||
}
|
||||
|
||||
private string GetAsymmetricEncryptionAlgName(
|
||||
string encryptionAlgOid)
|
||||
{
|
||||
if (PkcsObjectIdentifiers.RsaEncryption.Id.Equals(encryptionAlgOid))
|
||||
{
|
||||
return "RSA/ECB/PKCS1Padding";
|
||||
}
|
||||
|
||||
return encryptionAlgOid;
|
||||
}
|
||||
|
||||
internal IBufferedCipher CreateAsymmetricCipher(
|
||||
string encryptionOid)
|
||||
{
|
||||
try
|
||||
{
|
||||
return CipherUtilities.GetCipher(encryptionOid);
|
||||
}
|
||||
catch (SecurityUtilityException)
|
||||
{
|
||||
return CipherUtilities.GetCipher(GetAsymmetricEncryptionAlgName(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("oid");
|
||||
|
||||
string alg = (string) BaseCipherNames[oid];
|
||||
|
||||
if (alg == null)
|
||||
throw new ArgumentException("no name for " + oid, "oid");
|
||||
|
||||
return alg + "RFC3211Wrap";
|
||||
}
|
||||
|
||||
internal int GetKeySize(
|
||||
string oid)
|
||||
{
|
||||
if (!KeySizes.Contains(oid))
|
||||
{
|
||||
throw new ArgumentException("no keysize for " + oid, "oid");
|
||||
}
|
||||
|
||||
return (int) KeySizes[oid];
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user