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");
        }
    }
}