private void checkValues(
            IssuingDistributionPoint point,
            DistributionPointName distributionPoint,
            bool onlyContainsUserCerts,
            bool onlyContainsCACerts,
            ReasonFlags onlySomeReasons,
            bool indirectCRL,
            bool onlyContainsAttributeCerts)
        {
            if (point.OnlyContainsUserCerts != onlyContainsUserCerts)
            {
                Fail("mismatch on onlyContainsUserCerts");
            }

            if (point.OnlyContainsCACerts != onlyContainsCACerts)
            {
                Fail("mismatch on onlyContainsCACerts");
            }

            if (point.IsIndirectCrl != indirectCRL)
            {
                Fail("mismatch on indirectCRL");
            }

            if (point.OnlyContainsAttributeCerts != onlyContainsAttributeCerts)
            {
                Fail("mismatch on onlyContainsAttributeCerts");
            }

            if (!isEquiv(onlySomeReasons, point.OnlySomeReasons))
            {
                Fail("mismatch on onlySomeReasons");
            }

            if (!isEquiv(distributionPoint, point.DistributionPoint))
            {
                Fail("mismatch on distributionPoint");
            }
        }
        public override void PerformTest()
        {
            DistributionPointName name = new DistributionPointName(
                new GeneralNames(new GeneralName(new X509Name("cn=test"))));
            ReasonFlags reasonFlags = new ReasonFlags(ReasonFlags.CACompromise);

            checkPoint(6, name, true, true, reasonFlags, true, true);

            checkPoint(2, name, false, false, reasonFlags, false, false);

            checkPoint(0, null, false, false, null, false, false);

            try
            {
                IssuingDistributionPoint.GetInstance(new object());

                Fail("GetInstance() failed to detect bad object.");
            }
            catch (ArgumentException)
            {
                // expected
            }
        }
    private IssuingDistributionPoint(Asn1Sequence seq)
    {
        this.seq = seq;
        for (int i = 0; i != seq.Count; i++)
        {
            Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]);
            switch (instance.TagNo)
            {
            case 0:
                _distributionPoint = DistributionPointName.GetInstance(instance, explicitly: true);
                break;

            case 1:
                _onlyContainsUserCerts = DerBoolean.GetInstance(instance, isExplicit: false).IsTrue;
                break;

            case 2:
                _onlyContainsCACerts = DerBoolean.GetInstance(instance, isExplicit: false).IsTrue;
                break;

            case 3:
                _onlySomeReasons = new ReasonFlags(DerBitString.GetInstance(instance, isExplicit: false));
                break;

            case 4:
                _indirectCRL = DerBoolean.GetInstance(instance, isExplicit: false).IsTrue;
                break;

            case 5:
                _onlyContainsAttributeCerts = DerBoolean.GetInstance(instance, isExplicit: false).IsTrue;
                break;

            default:
                throw new ArgumentException("unknown tag in IssuingDistributionPoint");
            }
        }
    }
        private void checkPoint(
            int size,
            DistributionPointName distributionPoint,
            bool onlyContainsUserCerts,
            bool onlyContainsCACerts,
            ReasonFlags onlySomeReasons,
            bool indirectCRL,
            bool onlyContainsAttributeCerts)
        {
            IssuingDistributionPoint point = new IssuingDistributionPoint(distributionPoint, onlyContainsUserCerts, onlyContainsCACerts, onlySomeReasons, indirectCRL, onlyContainsAttributeCerts);

            checkValues(point, distributionPoint, onlyContainsUserCerts, onlyContainsCACerts, onlySomeReasons, indirectCRL, onlyContainsAttributeCerts);

            Asn1Sequence seq = Asn1Sequence.GetInstance(Asn1Object.FromByteArray(point.GetEncoded()));

            if (seq.Count != size)
            {
                Fail("size mismatch");
            }

            point = IssuingDistributionPoint.GetInstance(seq);

            checkValues(point, distributionPoint, onlyContainsUserCerts, onlyContainsCACerts, onlySomeReasons, indirectCRL, onlyContainsAttributeCerts);
        }
    public IssuingDistributionPoint(DistributionPointName distributionPoint, bool onlyContainsUserCerts, bool onlyContainsCACerts, ReasonFlags onlySomeReasons, bool indirectCRL, bool onlyContainsAttributeCerts)
    {
        _distributionPoint          = distributionPoint;
        _indirectCRL                = indirectCRL;
        _onlyContainsAttributeCerts = onlyContainsAttributeCerts;
        _onlyContainsCACerts        = onlyContainsCACerts;
        _onlyContainsUserCerts      = onlyContainsUserCerts;
        _onlySomeReasons            = onlySomeReasons;
        Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector();

        if (distributionPoint != null)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: true, 0, distributionPoint));
        }
        if (onlyContainsUserCerts)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 1, DerBoolean.True));
        }
        if (onlyContainsCACerts)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 2, DerBoolean.True));
        }
        if (onlySomeReasons != null)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 3, onlySomeReasons));
        }
        if (indirectCRL)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 4, DerBoolean.True));
        }
        if (onlyContainsAttributeCerts)
        {
            asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 5, DerBoolean.True));
        }
        seq = new DerSequence(asn1EncodableVector);
    }
 public DP(string dp, ReasonFlags reasons, string issuer)
 {
     DistributionPoint = dp;
     Reasons           = reasons;
     CRLIssuer         = issuer;
 }
			public DP (string dp, ReasonFlags reasons, string issuer) 
			{
				DistributionPoint = dp;
				Reasons = reasons;
				CRLIssuer = issuer;
			}