<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />

Pkcs12Utilities

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