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

PersonalData

public class PersonalData : Asn1Encodable
using Org.BouncyCastle.Asn1.X500; using Org.BouncyCastle.Math; using Org.BouncyCastle.Utilities; using System; using System.Collections.Generic; namespace Org.BouncyCastle.Asn1.X509.SigI { public class PersonalData : Asn1Encodable { private readonly NameOrPseudonym nameOrPseudonym; private readonly BigInteger nameDistinguisher; private readonly Asn1GeneralizedTime dateOfBirth; private readonly DirectoryString placeOfBirth; private readonly string gender; private readonly DirectoryString postalAddress; public NameOrPseudonym NameOrPseudonym => nameOrPseudonym; public BigInteger NameDistinguisher => nameDistinguisher; public Asn1GeneralizedTime DateOfBirth => dateOfBirth; public DirectoryString PlaceOfBirth => placeOfBirth; public string Gender => gender; public DirectoryString PostalAddress => postalAddress; public static PersonalData GetInstance(object obj) { if (obj == null || obj is PersonalData) return (PersonalData)obj; if (obj is Asn1Sequence) return new PersonalData((Asn1Sequence)obj); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); } private PersonalData(Asn1Sequence seq) { int num; if (seq.Count < 1) { num = seq.Count; throw new ArgumentException("Bad sequence size: " + num.ToString()); } IEnumerator<Asn1Encodable> enumerator = seq.GetEnumerator(); enumerator.MoveNext(); nameOrPseudonym = NameOrPseudonym.GetInstance(enumerator.Current); while (enumerator.MoveNext()) { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(enumerator.Current); switch (instance.TagNo) { case 0: nameDistinguisher = DerInteger.GetInstance(instance, false).Value; break; case 1: dateOfBirth = Asn1GeneralizedTime.GetInstance(instance, false); break; case 2: placeOfBirth = DirectoryString.GetInstance(instance, true); break; case 3: gender = DerPrintableString.GetInstance(instance, false).GetString(); break; case 4: postalAddress = DirectoryString.GetInstance(instance, true); break; default: num = instance.TagNo; throw new ArgumentException("Bad tag number: " + num.ToString()); } } } public PersonalData(NameOrPseudonym nameOrPseudonym, BigInteger nameDistinguisher, Asn1GeneralizedTime dateOfBirth, DirectoryString placeOfBirth, string gender, DirectoryString postalAddress) { this.nameOrPseudonym = nameOrPseudonym; this.dateOfBirth = dateOfBirth; this.gender = gender; this.nameDistinguisher = nameDistinguisher; this.postalAddress = postalAddress; this.placeOfBirth = placeOfBirth; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(nameOrPseudonym); if (nameDistinguisher != null) asn1EncodableVector.Add(new DerTaggedObject(false, 0, new DerInteger(nameDistinguisher))); asn1EncodableVector.AddOptionalTagged(false, 1, dateOfBirth); asn1EncodableVector.AddOptionalTagged(true, 2, placeOfBirth); if (gender != null) asn1EncodableVector.Add(new DerTaggedObject(false, 3, new DerPrintableString(gender, true))); asn1EncodableVector.AddOptionalTagged(true, 4, postalAddress); return new DerSequence(asn1EncodableVector); } } }