示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="X509IssuingDistributionPointsExtension"/> class using an
        /// distribution point and partitioned CRL configuration.
        /// </summary>
        /// <param name="distributionPoint">Specifies an instance of <see cref="X509DistributionPoint"/> that contains CRL location.</param>
        /// <param name="indirect">Specifies whether the CRL is indirect CRL.</param>
        /// <param name="reasons">Specifies whether the CRL is partitioned by a subset of revocation reasons.</param>
        /// <param name="scope">Specifies the scope for CRL.</param>
        /// <exception cref="ArgumentNullException"><strong>distributionPoint</strong> parameter is NULL.</exception>
        public X509IssuingDistributionPointsExtension(
            X509DistributionPoint distributionPoint,
            Boolean indirect = false,
            X509RevocationReasonFlag reasons    = X509RevocationReasonFlag.None,
            IssuingDistributionPointScope scope = IssuingDistributionPointScope.None)
        {
            if (distributionPoint == null)
            {
                throw new ArgumentNullException(nameof(distributionPoint));
            }

            encode(distributionPoint, indirect, reasons, scope);
        }
示例#2
0
        void encode(X509DistributionPoint distributionPoint, Boolean indirect, X509RevocationReasonFlag reasons, IssuingDistributionPointScope scope)
        {
            Oid      = _oid;
            Critical = true;

            var builder = Asn1Builder.Create();

            if (distributionPoint != null)
            {
                DistributionPoint = distributionPoint;
                builder.AddExplicit(0, distributionPoint.RawData, true);
            }
            if (scope == IssuingDistributionPointScope.OnlyUserCerts)
            {
                OnlyUserCerts = true;
                builder.AddImplicit(1, new Asn1Boolean(true).RawData, false);
            }
            else if (scope == IssuingDistributionPointScope.OnlyCaCerts)
            {
                OnlyCaCerts = true;
                builder.AddImplicit(2, new Asn1Boolean(true).RawData, false);
            }
            if (reasons != X509RevocationReasonFlag.None)
            {
                Reasons = reasons;
                // do encoding trick since encoding matches the Key Usage extension encoding
                builder.AddExplicit(3, x => x.AddDerData(new X509KeyUsageExtension((X509KeyUsageFlags)reasons, false).RawData));
            }
            if (indirect)
            {
                IndirectCRL = true;
                builder.AddImplicit(4, new Asn1Boolean(true).RawData, false);
            }
            if (scope == IssuingDistributionPointScope.OnlyAttributeCerts)
            {
                OnlyAttributeCerts = true;
                builder.AddImplicit(5, new Asn1Boolean(true).RawData, false);
            }

            RawData = builder.GetEncoded();
        }