示例#1
0
        /// <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 }) };
        }
示例#2
0
        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 }));
        }
示例#3
0
        /// <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();
        }
示例#4
0
        /// <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)),
                }) };
        }
示例#5
0
        /// <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();
        }
示例#6
0
        /// <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()) };
        }
示例#7
0
        /// <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 };
        }
示例#8
0
        /// <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 };
        }
示例#9
0
        /// <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 };
        }
示例#10
0
        /// <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)) };
        }