/// <summary> /// Constructs the QcStatement so it can be added to a certificate. /// </summary> public QcTypeStatement(QcTypeIdentifiers type) : base(Array.Empty <DerAsnType>()) { var oid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_QcType.OidToArray()); var oidType = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, (Oid_QcType + "." + (int)type).OidToArray()); Value = new DerAsnType[] { oid, new DerAsnSequence(new DerAsnType[] { oidType }) }; }
public void DerAsnObjectIdentifier_GetBytes_ShouldEncodeCorrectly() { var type = new DerAsnObjectIdentifier("1.2.840.113549.1.1.1"); var data = type.GetBytes(); Assert.That(data, Is.EqualTo(new byte[] { 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01 })); }
/// <summary> /// Constructs the <see cref="AccessDescriptionList"/> from <see cref="Uri"/>. /// </summary> /// <param name="descriptions"></param> public AccessDescriptionList(AccessDescription[] descriptions) : base(new DerAsnType[0]) { var list = new List <DerAsnSequence>(); foreach (var description in descriptions) { var id = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid2Array(Oid_AccessDescription + "." + (int)description.AccessMethod)); var alternativeName = new ContextSpecificString(description.AccessLocation); var accessDescription = new DerAsnSequence(new DerAsnType[] { id, alternativeName }); list.Add(accessDescription); } Value = list.ToArray(); }
/// <summary> /// Constructs the QcStatement so it can be added to a certificate. /// </summary> public QcLimitValueStatement(decimal limitValue, string currenyCode) : base(Array.Empty <DerAsnType>()) { var parts = decimal.GetBits(limitValue); var scale = (byte)((parts[3] >> 16) & 0x7F); var amount = ((BigInteger)limitValue) * (int)Math.Pow(10.0, scale); var oid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_QcLimitValue.OidToArray()); Value = new DerAsnType[] { oid, new DerAsnSequence(new DerAsnType[] { new DerAsnPrintableString(currenyCode.Substring(0, 3)), new DerAsnInteger(amount), new DerAsnInteger(new BigInteger(-scale)), }) }; }
/// <summary> /// Constructs the <see cref="CertificatePolicies"/> from <see cref="List{PolicyInformation}"/>. /// </summary> /// <param name="policies"></param> public CertificatePolicies(PolicyInformation[] policies) : base(new DerAsnType[0]) { var list = new List <DerAsnSequence>(); foreach (var policy in policies) { var definition = new List <DerAsnType>(); if (policy.PolicyIdentifier != null) { var id = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, policy.PolicyIdentifier.OidToArray()); definition.Add(id); } if (policy.PolicyQualifiers?.Count > 0) { var definitionQualifiers = new List <DerAsnType>(); foreach (var qualifier in policy.PolicyQualifiers) { var qualifierId = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, qualifier.Identifier.OidToArray()); var qualifierValue = default(DerAsnType); if (qualifier.Type == PolicyQualifierType.UserNotice) { var noticeSequence = new List <DerAsnType>(); if (qualifier.UserNotice?.Reference != null) { noticeSequence.Add(new DerAsnSequence(new DerAsnType[] { new DerAsnUtf8String(qualifier.UserNotice.Reference.Organization ?? string.Empty), new DerAsnSequence(qualifier.UserNotice.Reference.NoticeNumbers.Select(c => new DerAsnInteger(new BigInteger(c))).ToArray()) })); } if (qualifier.UserNotice?.ExplicitText != null) { noticeSequence.Add(new DerAsnUtf8String(qualifier.UserNotice.ExplicitText)); } qualifierValue = new DerAsnSequence(noticeSequence.ToArray()); } else { qualifierValue = new DerAsnIa5String(qualifier.CPS_Uri ?? string.Empty); } definitionQualifiers.Add(new DerAsnSequence(new DerAsnType[] { qualifierId, qualifierValue })); } definition.Add(new DerAsnSequence(definitionQualifiers.ToArray())); } list.Add(new DerAsnSequence(definition.ToArray())); } Value = list.ToArray(); }
/// <summary> /// Constructs the QcStatement so it can be added to a certificate. /// </summary> public QcPdsStatement(IEnumerable <PdsLocation> pdsLocations) : base(Array.Empty <DerAsnType>()) { var oid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_QcPds.OidToArray()); var sequence = new List <DerAsnType>(); foreach (var item in pdsLocations) { var pdsSequense = new DerAsnSequence(new DerAsnType[] { new DerAsnIa5String(item.Url), new DerAsnPrintableString(item.Language) }); sequence.Add(pdsSequense); } Value = new DerAsnType[] { oid, new DerAsnSequence(sequence.ToArray()) }; }
/// <summary> /// Constructs the QcStatement from <see cref="Psd2CertificateAttributes "/>. /// </summary> /// <param name="type"></param> public Psd2QcStatement(Psd2CertificateAttributes type) : base(new DerAsnType[0]) { var rolesList = new List <DerAsnSequence>(); foreach (var roleName in type.Roles) { var id = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid2Array(GetPsd2Oid(roleName))); var name = new DerAsnUtf8String(roleName); var role = new DerAsnSequence(new DerAsnType[] { id, name }); rolesList.Add(role); } var rolesOfPSP = new DerAsnSequence(rolesList.ToArray()); //RolesOfPSP ::= SEQUENCE OF RoleOfPSP var ncaName = new DerAsnUtf8String(type.AuthorityName); var ncaId = new DerAsnUtf8String(type.AuthorizationNumber.ToString()); var typeSequence = new DerAsnSequence(new DerAsnType[] { rolesOfPSP, ncaName, ncaId }); var psd2QstatementOid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid2Array(Oid_PSD2_QcStatement)); Value = new DerAsnType[] { psd2QstatementOid, typeSequence }; }
/// <summary> /// Constructs the QcStatement from <see cref="Psd2Attributes "/>. /// </summary> /// <param name="psd2"></param> public Psd2QcStatement(Psd2Attributes psd2) : base(Array.Empty <DerAsnType>()) { var rolesList = new List <DerAsnSequence>(); foreach (var roleName in psd2.Roles) { var id = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, GetPsd2Oid(roleName).OidToArray()); var name = new DerAsnUtf8String(roleName); var role = new DerAsnSequence(new DerAsnType[] { id, name }); rolesList.Add(role); } var rolesOfPSP = new DerAsnSequence(rolesList.ToArray()); //RolesOfPSP ::= SEQUENCE OF RoleOfPSP var ncaName = new DerAsnUtf8String(psd2.AuthorityName); var ncaId = new DerAsnUtf8String(psd2.AuthorizationId.ToString()); var typeSequence = new DerAsnSequence(new DerAsnType[] { rolesOfPSP, ncaName, ncaId }); var psd2QstatementOid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_PSD2_QcStatement.OidToArray()); Value = new DerAsnType[] { psd2QstatementOid, typeSequence }; }
/// <summary> /// Constructs the QcStatement so it can be added to a certificate. /// </summary> public QcSSCDStatement() : base(Array.Empty <DerAsnType>()) { var oid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_QcSSCD.OidToArray()); Value = new DerAsnType[] { oid }; }
/// <summary> /// Constructs the QcStatement so it can be added to a certificate. /// </summary> public QcRetentionPeriodStatement(int retentionPeriod) : base(Array.Empty <DerAsnType>()) { var oid = new DerAsnObjectIdentifier(DerAsnIdentifiers.Primitive.ObjectIdentifier, Oid_QcRetentionPeriod.OidToArray()); Value = new DerAsnType[] { oid, new DerAsnInteger(new BigInteger(retentionPeriod)) }; }