diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-01-21 19:09:31 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-01-21 19:09:31 +0700 |
commit | 79f344b578c17dd919eafbefff8bf76269c8551a (patch) | |
tree | f22e217b58bab742f86949e7e43918329e85c0c1 /crypto/src/asn1 | |
parent | Fix Equals methods (diff) | |
download | BouncyCastle.NET-ed25519-79f344b578c17dd919eafbefff8bf76269c8551a.tar.xz |
BMA-116
Update some Asn1.X509 classes from Java
Diffstat (limited to 'crypto/src/asn1')
-rw-r--r-- | crypto/src/asn1/x509/NoticeReference.cs | 261 | ||||
-rw-r--r-- | crypto/src/asn1/x509/PolicyQualifierInfo.cs | 152 | ||||
-rw-r--r-- | crypto/src/asn1/x509/UserNotice.cs | 102 |
3 files changed, 266 insertions, 249 deletions
diff --git a/crypto/src/asn1/x509/NoticeReference.cs b/crypto/src/asn1/x509/NoticeReference.cs index 86a51c5b7..f0d3a7b7f 100644 --- a/crypto/src/asn1/x509/NoticeReference.cs +++ b/crypto/src/asn1/x509/NoticeReference.cs @@ -1,138 +1,143 @@ using System; using System.Collections; +using Org.BouncyCastle.Math; + namespace Org.BouncyCastle.Asn1.X509 { - /** - * <code>NoticeReference</code> class, used in - * <code>CertificatePolicies</code> X509 V3 extensions - * (in policy qualifiers). - * - * <pre> - * NoticeReference ::= Sequence { - * organization DisplayText, - * noticeNumbers Sequence OF Integer } - * - * </pre> - * - * @see PolicyQualifierInfo - * @see PolicyInformation - */ - public class NoticeReference - : Asn1Encodable - { - internal readonly DisplayText organization; - internal readonly Asn1Sequence noticeNumbers; - -#if !SILVERLIGHT - [Obsolete] - public NoticeReference( - string orgName, - ArrayList numbers) - : this(orgName, (IList)numbers) + /** + * <code>NoticeReference</code> class, used in + * <code>CertificatePolicies</code> X509 V3 extensions + * (in policy qualifiers). + * + * <pre> + * NoticeReference ::= Sequence { + * organization DisplayText, + * noticeNumbers Sequence OF Integer } + * + * </pre> + * + * @see PolicyQualifierInfo + * @see PolicyInformation + */ + public class NoticeReference + : Asn1Encodable + { + private readonly DisplayText organization; + private readonly Asn1Sequence noticeNumbers; + + private static Asn1EncodableVector ConvertVector(IList numbers) + { + Asn1EncodableVector av = new Asn1EncodableVector(); + + foreach (object o in numbers) + { + DerInteger di; + + if (o is BigInteger) + { + di = new DerInteger((BigInteger)o); + } + else if (o is int) + { + di = new DerInteger((int)o); + } + else + { + throw new ArgumentException(); + } + + av.Add(di); + } + return av; + } + + /** + * Creates a new <code>NoticeReference</code> instance. + * + * @param organization a <code>String</code> value + * @param numbers a <code>Vector</code> value + */ + public NoticeReference(string organization, IList numbers) + : this(organization, ConvertVector(numbers)) { } -#endif /** - * Creates a new <code>NoticeReference</code> instance. - * - * @param orgName a <code>string</code> value - * @param numbers a <code>ArrayList</code> value - */ - public NoticeReference( - string orgName, - IList numbers) - { - organization = new DisplayText(orgName); - - object o = numbers[0]; - - Asn1EncodableVector av = new Asn1EncodableVector(); - if (o is int) - { - foreach (int nm in numbers) - { - av.Add(new DerInteger(nm)); - } - } - - noticeNumbers = new DerSequence(av); - } - - /** - * Creates a new <code>NoticeReference</code> instance. - * - * @param orgName a <code>string</code> value - * @param numbers an <code>Asn1Sequence</code> value - */ - public NoticeReference( - string orgName, - Asn1Sequence numbers) - { - organization = new DisplayText(orgName); - noticeNumbers = numbers; - } - - /** - * Creates a new <code>NoticeReference</code> instance. - * - * @param displayTextType an <code>int</code> value - * @param orgName a <code>string</code> value - * @param numbers an <code>Asn1Sequence</code> value - */ - public NoticeReference( - int displayTextType, - string orgName, - Asn1Sequence numbers) - { - organization = new DisplayText(displayTextType, orgName); - noticeNumbers = numbers; - } - - /** - * Creates a new <code>NoticeReference</code> instance. - * <p>Useful for reconstructing a <code>NoticeReference</code> - * instance from its encodable/encoded form.</p> - * - * @param as an <code>Asn1Sequence</code> value obtained from either - * calling @{link ToAsn1Object()} for a <code>NoticeReference</code> - * instance or from parsing it from a Der-encoded stream. - */ - private NoticeReference( - Asn1Sequence seq) - { - if (seq.Count != 2) - throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); - - organization = DisplayText.GetInstance(seq[0]); - noticeNumbers = Asn1Sequence.GetInstance(seq[1]); - } - - public static NoticeReference GetInstance( - object obj) - { - if (obj is NoticeReference) - { - return (NoticeReference) obj; - } - - if (obj is Asn1Sequence) - { - return new NoticeReference((Asn1Sequence) obj); - } - - throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj"); - } - - /** - * Describe <code>ToAsn1Object</code> method here. - * - * @return a <code>Asn1Object</code> value - */ - public override Asn1Object ToAsn1Object() - { - return new DerSequence(organization, noticeNumbers); - } - } + * Creates a new <code>NoticeReference</code> instance. + * + * @param organization a <code>String</code> value + * @param noticeNumbers an <code>ASN1EncodableVector</code> value + */ + public NoticeReference(string organization, Asn1EncodableVector noticeNumbers) + : this(new DisplayText(organization), noticeNumbers) + { + } + + /** + * Creates a new <code>NoticeReference</code> instance. + * + * @param organization displayText + * @param noticeNumbers an <code>ASN1EncodableVector</code> value + */ + public NoticeReference(DisplayText organization, Asn1EncodableVector noticeNumbers) + { + this.organization = organization; + this.noticeNumbers = new DerSequence(noticeNumbers); + } + + /** + * Creates a new <code>NoticeReference</code> instance. + * <p>Useful for reconstructing a <code>NoticeReference</code> + * instance from its encodable/encoded form.</p> + * + * @param as an <code>Asn1Sequence</code> value obtained from either + * calling @{link ToAsn1Object()} for a <code>NoticeReference</code> + * instance or from parsing it from a Der-encoded stream. + */ + private NoticeReference(Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + + organization = DisplayText.GetInstance(seq[0]); + noticeNumbers = Asn1Sequence.GetInstance(seq[1]); + } + + public static NoticeReference GetInstance(object obj) + { + if (obj is NoticeReference) + return (NoticeReference)obj; + if (obj == null) + return null; + return new NoticeReference(Asn1Sequence.GetInstance(obj)); + } + + public virtual DisplayText Organization + { + get { return organization; } + } + + public virtual DerInteger[] GetNoticeNumbers() + { + DerInteger[] tmp = new DerInteger[noticeNumbers.Count]; + + for (int i = 0; i != noticeNumbers.Count; ++i) + { + tmp[i] = DerInteger.GetInstance(noticeNumbers[i]); + } + + return tmp; + } + + /** + * Describe <code>ToAsn1Object</code> method here. + * + * @return a <code>Asn1Object</code> value + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(organization, noticeNumbers); + } + } } diff --git a/crypto/src/asn1/x509/PolicyQualifierInfo.cs b/crypto/src/asn1/x509/PolicyQualifierInfo.cs index f2c617ff6..3cf6d7e10 100644 --- a/crypto/src/asn1/x509/PolicyQualifierInfo.cs +++ b/crypto/src/asn1/x509/PolicyQualifierInfo.cs @@ -2,81 +2,75 @@ using System; namespace Org.BouncyCastle.Asn1.X509 { - /** - * Policy qualifiers, used in the X509V3 CertificatePolicies - * extension. - * - * <pre> - * PolicyQualifierInfo ::= Sequence { - * policyQualifierId PolicyQualifierId, - * qualifier ANY DEFINED BY policyQualifierId } - * </pre> - */ - public class PolicyQualifierInfo - : Asn1Encodable - { - internal readonly DerObjectIdentifier policyQualifierId; - internal readonly Asn1Encodable qualifier; + /** + * Policy qualifiers, used in the X509V3 CertificatePolicies + * extension. + * + * <pre> + * PolicyQualifierInfo ::= Sequence { + * policyQualifierId PolicyQualifierId, + * qualifier ANY DEFINED BY policyQualifierId } + * </pre> + */ + public class PolicyQualifierInfo + : Asn1Encodable + { + private readonly DerObjectIdentifier policyQualifierId; + private readonly Asn1Encodable qualifier; - /** - * Creates a new <code>PolicyQualifierInfo</code> instance. - * - * @param policyQualifierId a <code>PolicyQualifierId</code> value - * @param qualifier the qualifier, defined by the above field. - */ - public PolicyQualifierInfo( - DerObjectIdentifier policyQualifierId, - Asn1Encodable qualifier) - { - this.policyQualifierId = policyQualifierId; - this.qualifier = qualifier; - } - - /** - * Creates a new <code>PolicyQualifierInfo</code> containing a - * cPSuri qualifier. - * - * @param cps the CPS (certification practice statement) uri as a - * <code>string</code>. - */ - public PolicyQualifierInfo( - string cps) - { - policyQualifierId = PolicyQualifierID.IdQtCps; - qualifier = new DerIA5String(cps); - } - - /** - * Creates a new <code>PolicyQualifierInfo</code> instance. - * - * @param as <code>PolicyQualifierInfo</code> X509 structure - * encoded as an Asn1Sequence. - */ - private PolicyQualifierInfo( - Asn1Sequence seq) - { - if (seq.Count != 2) - throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + /** + * Creates a new <code>PolicyQualifierInfo</code> instance. + * + * @param policyQualifierId a <code>PolicyQualifierId</code> value + * @param qualifier the qualifier, defined by the above field. + */ + public PolicyQualifierInfo( + DerObjectIdentifier policyQualifierId, + Asn1Encodable qualifier) + { + this.policyQualifierId = policyQualifierId; + this.qualifier = qualifier; + } - policyQualifierId = DerObjectIdentifier.GetInstance(seq[0]); - qualifier = seq[1]; - } + /** + * Creates a new <code>PolicyQualifierInfo</code> containing a + * cPSuri qualifier. + * + * @param cps the CPS (certification practice statement) uri as a + * <code>string</code>. + */ + public PolicyQualifierInfo( + string cps) + { + policyQualifierId = PolicyQualifierID.IdQtCps; + qualifier = new DerIA5String(cps); + } - public static PolicyQualifierInfo GetInstance( - object obj) - { - if (obj is PolicyQualifierInfo) - { - return (PolicyQualifierInfo) obj; - } + /** + * Creates a new <code>PolicyQualifierInfo</code> instance. + * + * @param as <code>PolicyQualifierInfo</code> X509 structure + * encoded as an Asn1Sequence. + */ + private PolicyQualifierInfo( + Asn1Sequence seq) + { + if (seq.Count != 2) + throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); - if (obj is Asn1Sequence) - { - return new PolicyQualifierInfo((Asn1Sequence) obj); - } + policyQualifierId = DerObjectIdentifier.GetInstance(seq[0]); + qualifier = seq[1]; + } - throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj"); - } + public static PolicyQualifierInfo GetInstance( + object obj) + { + if (obj is PolicyQualifierInfo) + return (PolicyQualifierInfo)obj; + if (obj == null) + return null; + return new PolicyQualifierInfo(Asn1Sequence.GetInstance(obj)); + } public virtual DerObjectIdentifier PolicyQualifierId { @@ -89,13 +83,13 @@ namespace Org.BouncyCastle.Asn1.X509 } /** - * Returns a Der-encodable representation of this instance. - * - * @return a <code>Asn1Object</code> value - */ - public override Asn1Object ToAsn1Object() - { - return new DerSequence(policyQualifierId, qualifier); - } - } + * Returns a Der-encodable representation of this instance. + * + * @return a <code>Asn1Object</code> value + */ + public override Asn1Object ToAsn1Object() + { + return new DerSequence(policyQualifierId, qualifier); + } + } } diff --git a/crypto/src/asn1/x509/UserNotice.cs b/crypto/src/asn1/x509/UserNotice.cs index 2878a180f..5938f7c49 100644 --- a/crypto/src/asn1/x509/UserNotice.cs +++ b/crypto/src/asn1/x509/UserNotice.cs @@ -19,10 +19,10 @@ namespace Org.BouncyCastle.Asn1.X509 public class UserNotice : Asn1Encodable { - internal NoticeReference noticeRef; - internal DisplayText explicitText; + private readonly NoticeReference noticeRef; + private readonly DisplayText explicitText; - /** + /** * Creates a new <code>UserNotice</code> instance. * * @param noticeRef a <code>NoticeReference</code> value @@ -36,7 +36,7 @@ namespace Org.BouncyCastle.Asn1.X509 this.explicitText = explicitText; } - /** + /** * Creates a new <code>UserNotice</code> instance. * * @param noticeRef a <code>NoticeReference</code> value @@ -45,60 +45,78 @@ namespace Org.BouncyCastle.Asn1.X509 public UserNotice( NoticeReference noticeRef, string str) + : this(noticeRef, new DisplayText(str)) { - this.noticeRef = noticeRef; - this.explicitText = new DisplayText(str); } - /** - * Creates a new <code>UserNotice</code> instance. - * <p>Useful from reconstructing a <code>UserNotice</code> instance - * from its encodable/encoded form. - * - * @param as an <code>ASN1Sequence</code> value obtained from either - * calling @{link toASN1Object()} for a <code>UserNotice</code> - * instance or from parsing it from a DER-encoded stream.</p> - */ - public UserNotice( - Asn1Sequence seq) - { - if (seq.Count == 2) - { - noticeRef = NoticeReference.GetInstance(seq[0]); - explicitText = DisplayText.GetInstance(seq[1]); - } - else if (seq.Count == 1) - { - if (seq[0].ToAsn1Object() is Asn1Sequence) - { - noticeRef = NoticeReference.GetInstance(seq[0]); - } - else - { - explicitText = DisplayText.GetInstance(seq[0]); - } - } - else - { - throw new ArgumentException("Bad sequence size: " + seq.Count); - } + /** + * Creates a new <code>UserNotice</code> instance. + * <p>Useful from reconstructing a <code>UserNotice</code> instance + * from its encodable/encoded form. + * + * @param as an <code>ASN1Sequence</code> value obtained from either + * calling @{link toASN1Object()} for a <code>UserNotice</code> + * instance or from parsing it from a DER-encoded stream.</p> + */ + public UserNotice( + Asn1Sequence seq) + { + if (seq.Count == 2) + { + noticeRef = NoticeReference.GetInstance(seq[0]); + explicitText = DisplayText.GetInstance(seq[1]); + } + else if (seq.Count == 1) + { + if (seq[0].ToAsn1Object() is Asn1Sequence) + { + noticeRef = NoticeReference.GetInstance(seq[0]); + } + else + { + explicitText = DisplayText.GetInstance(seq[0]); + } + } + else + { + throw new ArgumentException("Bad sequence size: " + seq.Count); + } + } + + public static UserNotice GetInstance(object obj) + { + if (obj is UserNotice) + return (UserNotice)obj; + if (obj == null) + return null; + return new UserNotice(Asn1Sequence.GetInstance(obj)); + } + + public virtual NoticeReference NoticeRef + { + get { return noticeRef; } + } + + public virtual DisplayText ExplicitText + { + get { return explicitText; } } - public override Asn1Object ToAsn1Object() + public override Asn1Object ToAsn1Object() { Asn1EncodableVector av = new Asn1EncodableVector(); - if (noticeRef != null) + if (noticeRef != null) { av.Add(noticeRef); } - if (explicitText != null) + if (explicitText != null) { av.Add(explicitText); } - return new DerSequence(av); + return new DerSequence(av); } } } |