Pkcs12Utilities
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using System;
using System.IO;
namespace Org.BouncyCastle.Pkcs
{
public class Pkcs12Utilities
{
public static byte[] ConvertToDefiniteLength(byte[] berPkcs12File)
{
return DLEncode(Pfx.GetInstance(berPkcs12File));
}
public static byte[] ConvertToDefiniteLength(byte[] berPkcs12File, char[] passwd)
{
Pfx instance = Pfx.GetInstance(berPkcs12File);
ContentInfo authSafe = instance.AuthSafe;
Asn1OctetString instance2 = Asn1OctetString.GetInstance(authSafe.Content);
byte[] octets = instance2.GetOctets();
octets = DLEncode(Asn1Object.FromByteArray(octets));
authSafe = new ContentInfo(content: new DerOctetString(octets), contentType: authSafe.ContentType);
MacData macData = instance.MacData;
if (macData != null) {
if (passwd == null)
throw new ArgumentNullException("passwd", "no password supplied when one expected");
try {
AlgorithmIdentifier digestAlgorithm = macData.Mac.DigestAlgorithm;
byte[] octets2 = macData.MacSalt.GetOctets();
int intValueExact = macData.Iterations.IntValueExact;
byte[] contents = Pkcs12Store.CalculatePbeMac(digestAlgorithm, octets2, intValueExact, passwd, false, octets);
macData = new MacData(new DigestInfo(digestAlgorithm, new DerOctetString(contents)), macData.MacSalt, macData.Iterations);
} catch (Exception ex) {
throw new IOException("error constructing MAC: " + ex.ToString());
}
}
return DLEncode(new Pfx(authSafe, macData));
}
private static byte[] DLEncode(Asn1Encodable asn1Encodable)
{
return asn1Encodable.GetEncoded("DL");
}
}
}