Initial Commit

This commit is contained in:
2023-06-21 12:46:23 -04:00
commit c70248a520
1352 changed files with 336780 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
using System;
using System.Collections;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.3.1 Certificate Values Attribute Definition
/// <code>
/// CertificateValues ::= SEQUENCE OF Certificate
/// </code>
/// </remarks>
public class CertificateValues
: Asn1Encodable
{
private readonly Asn1Sequence certificates;
public static CertificateValues GetInstance(
object obj)
{
if (obj == null || obj is CertificateValues)
return (CertificateValues) obj;
if (obj is Asn1Sequence)
return new CertificateValues((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CertificateValues' factory: "
+ obj.GetType().Name,
"obj");
}
private CertificateValues(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
foreach (Asn1Encodable ae in seq)
{
X509CertificateStructure.GetInstance(ae.ToAsn1Object());
}
this.certificates = seq;
}
public CertificateValues(
params X509CertificateStructure[] certificates)
{
if (certificates == null)
throw new ArgumentNullException("certificates");
this.certificates = new DerSequence(certificates);
}
public CertificateValues(
IEnumerable certificates)
{
if (certificates == null)
throw new ArgumentNullException("certificates");
if (!CollectionUtilities.CheckElementsAreOfType(certificates, typeof(X509CertificateStructure)))
throw new ArgumentException("Must contain only 'X509CertificateStructure' objects", "certificates");
this.certificates = new DerSequence(
Asn1EncodableVector.FromEnumerable(certificates));
}
public X509CertificateStructure[] GetCertificates()
{
X509CertificateStructure[] result = new X509CertificateStructure[certificates.Count];
for (int i = 0; i < certificates.Count; ++i)
{
result[i] = X509CertificateStructure.GetInstance(certificates[i]);
}
return result;
}
public override Asn1Object ToAsn1Object()
{
return certificates;
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Pkcs;
namespace Org.BouncyCastle.Asn1.Esf
{
public abstract class CommitmentTypeIdentifier
{
public static readonly DerObjectIdentifier ProofOfOrigin = PkcsObjectIdentifiers.IdCtiEtsProofOfOrigin;
public static readonly DerObjectIdentifier ProofOfReceipt = PkcsObjectIdentifiers.IdCtiEtsProofOfReceipt;
public static readonly DerObjectIdentifier ProofOfDelivery = PkcsObjectIdentifiers.IdCtiEtsProofOfDelivery;
public static readonly DerObjectIdentifier ProofOfSender = PkcsObjectIdentifiers.IdCtiEtsProofOfSender;
public static readonly DerObjectIdentifier ProofOfApproval = PkcsObjectIdentifiers.IdCtiEtsProofOfApproval;
public static readonly DerObjectIdentifier ProofOfCreation = PkcsObjectIdentifiers.IdCtiEtsProofOfCreation;
}
}

View File

@@ -0,0 +1,95 @@
using System;
using Org.BouncyCastle.Asn1;
namespace Org.BouncyCastle.Asn1.Esf
{
public class CommitmentTypeIndication
: Asn1Encodable
{
private readonly DerObjectIdentifier commitmentTypeId;
private readonly Asn1Sequence commitmentTypeQualifier;
public static CommitmentTypeIndication GetInstance(
object obj)
{
if (obj == null || obj is CommitmentTypeIndication)
return (CommitmentTypeIndication) obj;
if (obj is Asn1Sequence)
return new CommitmentTypeIndication((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CommitmentTypeIndication' factory: "
+ obj.GetType().Name,
"obj");
}
public CommitmentTypeIndication(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.commitmentTypeId = (DerObjectIdentifier) seq[0].ToAsn1Object();
if (seq.Count > 1)
{
this.commitmentTypeQualifier = (Asn1Sequence) seq[1].ToAsn1Object();
}
}
public CommitmentTypeIndication(
DerObjectIdentifier commitmentTypeId)
: this(commitmentTypeId, null)
{
}
public CommitmentTypeIndication(
DerObjectIdentifier commitmentTypeId,
Asn1Sequence commitmentTypeQualifier)
{
if (commitmentTypeId == null)
throw new ArgumentNullException("commitmentTypeId");
this.commitmentTypeId = commitmentTypeId;
if (commitmentTypeQualifier != null)
{
this.commitmentTypeQualifier = commitmentTypeQualifier;
}
}
public DerObjectIdentifier CommitmentTypeID
{
get { return commitmentTypeId; }
}
public Asn1Sequence CommitmentTypeQualifier
{
get { return commitmentTypeQualifier; }
}
/**
* <pre>
* CommitmentTypeIndication ::= SEQUENCE {
* commitmentTypeId CommitmentTypeIdentifier,
* commitmentTypeQualifier SEQUENCE SIZE (1..MAX) OF
* CommitmentTypeQualifier OPTIONAL }
* </pre>
*/
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(commitmentTypeId);
if (commitmentTypeQualifier != null)
{
v.Add(commitmentTypeQualifier);
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,119 @@
using System;
using Org.BouncyCastle.Asn1;
namespace Org.BouncyCastle.Asn1.Esf
{
/**
* Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126).
*
* <pre>
* CommitmentTypeQualifier ::= SEQUENCE {
* commitmentTypeIdentifier CommitmentTypeIdentifier,
* qualifier ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
* </pre>
*/
public class CommitmentTypeQualifier
: Asn1Encodable
{
private readonly DerObjectIdentifier commitmentTypeIdentifier;
private readonly Asn1Object qualifier;
/**
* Creates a new <code>CommitmentTypeQualifier</code> instance.
*
* @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value
*/
public CommitmentTypeQualifier(
DerObjectIdentifier commitmentTypeIdentifier)
: this(commitmentTypeIdentifier, null)
{
}
/**
* Creates a new <code>CommitmentTypeQualifier</code> instance.
*
* @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value
* @param qualifier the qualifier, defined by the above field.
*/
public CommitmentTypeQualifier(
DerObjectIdentifier commitmentTypeIdentifier,
Asn1Encodable qualifier)
{
if (commitmentTypeIdentifier == null)
throw new ArgumentNullException("commitmentTypeIdentifier");
this.commitmentTypeIdentifier = commitmentTypeIdentifier;
if (qualifier != null)
{
this.qualifier = qualifier.ToAsn1Object();
}
}
/**
* Creates a new <code>CommitmentTypeQualifier</code> instance.
*
* @param as <code>CommitmentTypeQualifier</code> structure
* encoded as an Asn1Sequence.
*/
public CommitmentTypeQualifier(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
commitmentTypeIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object();
if (seq.Count > 1)
{
qualifier = seq[1].ToAsn1Object();
}
}
public static CommitmentTypeQualifier GetInstance(
object obj)
{
if (obj == null || obj is CommitmentTypeQualifier)
return (CommitmentTypeQualifier) obj;
if (obj is Asn1Sequence)
return new CommitmentTypeQualifier((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CommitmentTypeQualifier' factory: "
+ obj.GetType().Name,
"obj");
}
public DerObjectIdentifier CommitmentTypeIdentifier
{
get { return commitmentTypeIdentifier; }
}
public Asn1Object Qualifier
{
get { return qualifier; }
}
/**
* Returns a DER-encodable representation of this instance.
*
* @return a <code>Asn1Object</code> value
*/
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(
commitmentTypeIdentifier);
if (qualifier != null)
{
v.Add(qualifier);
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition
/// <code>
/// CompleteCertificateRefs ::= SEQUENCE OF OtherCertID
/// </code>
/// </remarks>
public class CompleteCertificateRefs
: Asn1Encodable
{
private readonly Asn1Sequence otherCertIDs;
public static CompleteCertificateRefs GetInstance(
object obj)
{
if (obj == null || obj is CompleteCertificateRefs)
return (CompleteCertificateRefs) obj;
if (obj is Asn1Sequence)
return new CompleteCertificateRefs((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CompleteCertificateRefs' factory: "
+ obj.GetType().Name,
"obj");
}
private CompleteCertificateRefs(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
foreach (Asn1Encodable ae in seq)
{
OtherCertID.GetInstance(ae.ToAsn1Object());
}
this.otherCertIDs = seq;
}
public CompleteCertificateRefs(
params OtherCertID[] otherCertIDs)
{
if (otherCertIDs == null)
throw new ArgumentNullException("otherCertIDs");
this.otherCertIDs = new DerSequence(otherCertIDs);
}
public CompleteCertificateRefs(
IEnumerable otherCertIDs)
{
if (otherCertIDs == null)
throw new ArgumentNullException("otherCertIDs");
if (!CollectionUtilities.CheckElementsAreOfType(otherCertIDs, typeof(OtherCertID)))
throw new ArgumentException("Must contain only 'OtherCertID' objects", "otherCertIDs");
this.otherCertIDs = new DerSequence(
Asn1EncodableVector.FromEnumerable(otherCertIDs));
}
public OtherCertID[] GetOtherCertIDs()
{
OtherCertID[] result = new OtherCertID[otherCertIDs.Count];
for (int i = 0; i < otherCertIDs.Count; ++i)
{
result[i] = OtherCertID.GetInstance(otherCertIDs[i].ToAsn1Object());
}
return result;
}
public override Asn1Object ToAsn1Object()
{
return otherCertIDs;
}
}
}

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef
/// </code>
/// </remarks>
public class CompleteRevocationRefs
: Asn1Encodable
{
private readonly Asn1Sequence crlOcspRefs;
public static CompleteRevocationRefs GetInstance(
object obj)
{
if (obj == null || obj is CompleteRevocationRefs)
return (CompleteRevocationRefs) obj;
if (obj is Asn1Sequence)
return new CompleteRevocationRefs((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CompleteRevocationRefs' factory: "
+ obj.GetType().Name,
"obj");
}
private CompleteRevocationRefs(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
foreach (Asn1Encodable ae in seq)
{
CrlOcspRef.GetInstance(ae.ToAsn1Object());
}
this.crlOcspRefs = seq;
}
public CompleteRevocationRefs(
params CrlOcspRef[] crlOcspRefs)
{
if (crlOcspRefs == null)
throw new ArgumentNullException("crlOcspRefs");
this.crlOcspRefs = new DerSequence(crlOcspRefs);
}
public CompleteRevocationRefs(
IEnumerable crlOcspRefs)
{
if (crlOcspRefs == null)
throw new ArgumentNullException("crlOcspRefs");
if (!CollectionUtilities.CheckElementsAreOfType(crlOcspRefs, typeof(CrlOcspRef)))
throw new ArgumentException("Must contain only 'CrlOcspRef' objects", "crlOcspRefs");
this.crlOcspRefs = new DerSequence(
Asn1EncodableVector.FromEnumerable(crlOcspRefs));
}
public CrlOcspRef[] GetCrlOcspRefs()
{
CrlOcspRef[] result = new CrlOcspRef[crlOcspRefs.Count];
for (int i = 0; i < crlOcspRefs.Count; ++i)
{
result[i] = CrlOcspRef.GetInstance(crlOcspRefs[i].ToAsn1Object());
}
return result;
}
public override Asn1Object ToAsn1Object()
{
return crlOcspRefs;
}
}
}

View File

@@ -0,0 +1,110 @@
using System;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Math;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// CrlIdentifier ::= SEQUENCE
/// {
/// crlissuer Name,
/// crlIssuedTime UTCTime,
/// crlNumber INTEGER OPTIONAL
/// }
/// </code>
/// </remarks>
public class CrlIdentifier
: Asn1Encodable
{
private readonly X509Name crlIssuer;
private readonly DerUtcTime crlIssuedTime;
private readonly DerInteger crlNumber;
public static CrlIdentifier GetInstance(
object obj)
{
if (obj == null || obj is CrlIdentifier)
return (CrlIdentifier) obj;
if (obj is Asn1Sequence)
return new CrlIdentifier((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CrlIdentifier' factory: "
+ obj.GetType().Name,
"obj");
}
private CrlIdentifier(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 2 || seq.Count > 3)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.crlIssuer = X509Name.GetInstance(seq[0]);
this.crlIssuedTime = DerUtcTime.GetInstance(seq[1]);
if (seq.Count > 2)
{
this.crlNumber = DerInteger.GetInstance(seq[2]);
}
}
public CrlIdentifier(
X509Name crlIssuer,
DateTime crlIssuedTime)
: this(crlIssuer, crlIssuedTime, null)
{
}
public CrlIdentifier(
X509Name crlIssuer,
DateTime crlIssuedTime,
BigInteger crlNumber)
{
if (crlIssuer == null)
throw new ArgumentNullException("crlIssuer");
this.crlIssuer = crlIssuer;
this.crlIssuedTime = new DerUtcTime(crlIssuedTime);
if (crlNumber != null)
{
this.crlNumber = new DerInteger(crlNumber);
}
}
public X509Name CrlIssuer
{
get { return crlIssuer; }
}
public DateTime CrlIssuedTime
{
get { return crlIssuedTime.ToAdjustedDateTime(); }
}
public BigInteger CrlNumber
{
get { return crlNumber == null ? null : crlNumber.Value; }
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(
crlIssuer.ToAsn1Object(), crlIssuedTime);
if (crlNumber != null)
{
v.Add(crlNumber);
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,89 @@
using System;
using System.Collections;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// CRLListID ::= SEQUENCE
/// {
/// crls SEQUENCE OF CrlValidatedID
/// }
/// </code>
/// </remarks>
public class CrlListID
: Asn1Encodable
{
private readonly Asn1Sequence crls;
public static CrlListID GetInstance(
object obj)
{
if (obj == null || obj is CrlListID)
return (CrlListID) obj;
if (obj is Asn1Sequence)
return new CrlListID((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CrlListID' factory: "
+ obj.GetType().Name,
"obj");
}
private CrlListID(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 1)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.crls = (Asn1Sequence) seq[0].ToAsn1Object();
foreach (Asn1Encodable ae in this.crls)
{
CrlValidatedID.GetInstance(ae.ToAsn1Object());
}
}
public CrlListID(
params CrlValidatedID[] crls)
{
if (crls == null)
throw new ArgumentNullException("crls");
this.crls = new DerSequence(crls);
}
public CrlListID(
IEnumerable crls)
{
if (crls == null)
throw new ArgumentNullException("crls");
if (!CollectionUtilities.CheckElementsAreOfType(crls, typeof(CrlValidatedID)))
throw new ArgumentException("Must contain only 'CrlValidatedID' objects", "crls");
this.crls = new DerSequence(
Asn1EncodableVector.FromEnumerable(crls));
}
public CrlValidatedID[] GetCrls()
{
CrlValidatedID[] result = new CrlValidatedID[crls.Count];
for (int i = 0; i < crls.Count; ++i)
{
result[i] = CrlValidatedID.GetInstance(crls[i].ToAsn1Object());
}
return result;
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(crls);
}
}
}

View File

@@ -0,0 +1,111 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// CrlOcspRef ::= SEQUENCE {
/// crlids [0] CRLListID OPTIONAL,
/// ocspids [1] OcspListID OPTIONAL,
/// otherRev [2] OtherRevRefs OPTIONAL
/// }
/// </code>
/// </remarks>
public class CrlOcspRef
: Asn1Encodable
{
private readonly CrlListID crlids;
private readonly OcspListID ocspids;
private readonly OtherRevRefs otherRev;
public static CrlOcspRef GetInstance(
object obj)
{
if (obj == null || obj is CrlOcspRef)
return (CrlOcspRef) obj;
if (obj is Asn1Sequence)
return new CrlOcspRef((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CrlOcspRef' factory: "
+ obj.GetType().Name,
"obj");
}
private CrlOcspRef(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
foreach (Asn1TaggedObject taggedObj in seq)
{
Asn1Object asn1Obj = taggedObj.GetObject();
switch (taggedObj.TagNo)
{
case 0:
this.crlids = CrlListID.GetInstance(asn1Obj);
break;
case 1:
this.ocspids = OcspListID.GetInstance(asn1Obj);
break;
case 2:
this.otherRev = OtherRevRefs.GetInstance(asn1Obj);
break;
default:
throw new ArgumentException("Illegal tag in CrlOcspRef", "seq");
}
}
}
public CrlOcspRef(
CrlListID crlids,
OcspListID ocspids,
OtherRevRefs otherRev)
{
this.crlids = crlids;
this.ocspids = ocspids;
this.otherRev = otherRev;
}
public CrlListID CrlIDs
{
get { return crlids; }
}
public OcspListID OcspIDs
{
get { return ocspids; }
}
public OtherRevRefs OtherRev
{
get { return otherRev; }
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector();
if (crlids != null)
{
v.Add(new DerTaggedObject(true, 0, crlids.ToAsn1Object()));
}
if (ocspids != null)
{
v.Add(new DerTaggedObject(true, 1, ocspids.ToAsn1Object()));
}
if (otherRev != null)
{
v.Add(new DerTaggedObject(true, 2, otherRev.ToAsn1Object()));
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,89 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// CrlValidatedID ::= SEQUENCE {
/// crlHash OtherHash,
/// crlIdentifier CrlIdentifier OPTIONAL}
/// </code>
/// </remarks>
public class CrlValidatedID
: Asn1Encodable
{
private readonly OtherHash crlHash;
private readonly CrlIdentifier crlIdentifier;
public static CrlValidatedID GetInstance(
object obj)
{
if (obj == null || obj is CrlValidatedID)
return (CrlValidatedID) obj;
if (obj is Asn1Sequence)
return new CrlValidatedID((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'CrlValidatedID' factory: "
+ obj.GetType().Name,
"obj");
}
private CrlValidatedID(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.crlHash = OtherHash.GetInstance(seq[0].ToAsn1Object());
if (seq.Count > 1)
{
this.crlIdentifier = CrlIdentifier.GetInstance(seq[1].ToAsn1Object());
}
}
public CrlValidatedID(
OtherHash crlHash)
: this(crlHash, null)
{
}
public CrlValidatedID(
OtherHash crlHash,
CrlIdentifier crlIdentifier)
{
if (crlHash == null)
throw new ArgumentNullException("crlHash");
this.crlHash = crlHash;
this.crlIdentifier = crlIdentifier;
}
public OtherHash CrlHash
{
get { return crlHash; }
}
public CrlIdentifier CrlIdentifier
{
get { return crlIdentifier; }
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(crlHash.ToAsn1Object());
if (crlIdentifier != null)
{
v.Add(crlIdentifier.ToAsn1Object());
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,24 @@
using System;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Pkcs;
namespace Org.BouncyCastle.Asn1.Esf
{
public abstract class EsfAttributes
{
public static readonly DerObjectIdentifier SigPolicyId = PkcsObjectIdentifiers.IdAAEtsSigPolicyID;
public static readonly DerObjectIdentifier CommitmentType = PkcsObjectIdentifiers.IdAAEtsCommitmentType;
public static readonly DerObjectIdentifier SignerLocation = PkcsObjectIdentifiers.IdAAEtsSignerLocation;
public static readonly DerObjectIdentifier SignerAttr = PkcsObjectIdentifiers.IdAAEtsSignerAttr;
public static readonly DerObjectIdentifier OtherSigCert = PkcsObjectIdentifiers.IdAAEtsOtherSigCert;
public static readonly DerObjectIdentifier ContentTimestamp = PkcsObjectIdentifiers.IdAAEtsContentTimestamp;
public static readonly DerObjectIdentifier CertificateRefs = PkcsObjectIdentifiers.IdAAEtsCertificateRefs;
public static readonly DerObjectIdentifier RevocationRefs = PkcsObjectIdentifiers.IdAAEtsRevocationRefs;
public static readonly DerObjectIdentifier CertValues = PkcsObjectIdentifiers.IdAAEtsCertValues;
public static readonly DerObjectIdentifier RevocationValues = PkcsObjectIdentifiers.IdAAEtsRevocationValues;
public static readonly DerObjectIdentifier EscTimeStamp = PkcsObjectIdentifiers.IdAAEtsEscTimeStamp;
public static readonly DerObjectIdentifier CertCrlTimestamp = PkcsObjectIdentifiers.IdAAEtsCertCrlTimestamp;
public static readonly DerObjectIdentifier ArchiveTimestamp = PkcsObjectIdentifiers.IdAAEtsArchiveTimestamp;
}
}

View File

@@ -0,0 +1,77 @@
using System;
using Org.BouncyCastle.Asn1.Ocsp;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// OcspIdentifier ::= SEQUENCE {
/// ocspResponderID ResponderID,
/// -- As in OCSP response data
/// producedAt GeneralizedTime
/// -- As in OCSP response data
/// }
/// </code>
/// </remarks>
public class OcspIdentifier
: Asn1Encodable
{
private readonly ResponderID ocspResponderID;
private readonly DerGeneralizedTime producedAt;
public static OcspIdentifier GetInstance(
object obj)
{
if (obj == null || obj is OcspIdentifier)
return (OcspIdentifier) obj;
if (obj is Asn1Sequence)
return new OcspIdentifier((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OcspIdentifier' factory: "
+ obj.GetType().Name,
"obj");
}
private OcspIdentifier(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.ocspResponderID = ResponderID.GetInstance(seq[0].ToAsn1Object());
this.producedAt = (DerGeneralizedTime) seq[1].ToAsn1Object();
}
public OcspIdentifier(
ResponderID ocspResponderID,
DateTime producedAt)
{
if (ocspResponderID == null)
throw new ArgumentNullException();
this.ocspResponderID = ocspResponderID;
this.producedAt = new DerGeneralizedTime(producedAt);
}
public ResponderID OcspResponderID
{
get { return ocspResponderID; }
}
public DateTime ProducedAt
{
get { return producedAt.ToDateTime(); }
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(ocspResponderID, producedAt);
}
}
}

View File

@@ -0,0 +1,88 @@
using System;
using System.Collections;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// OcspListID ::= SEQUENCE {
/// ocspResponses SEQUENCE OF OcspResponsesID
/// }
/// </code>
/// </remarks>
public class OcspListID
: Asn1Encodable
{
private readonly Asn1Sequence ocspResponses;
public static OcspListID GetInstance(
object obj)
{
if (obj == null || obj is OcspListID)
return (OcspListID) obj;
if (obj is Asn1Sequence)
return new OcspListID((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OcspListID' factory: "
+ obj.GetType().Name,
"obj");
}
private OcspListID(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 1)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.ocspResponses = (Asn1Sequence) seq[0].ToAsn1Object();
foreach (Asn1Encodable ae in this.ocspResponses)
{
OcspResponsesID.GetInstance(ae.ToAsn1Object());
}
}
public OcspListID(
params OcspResponsesID[] ocspResponses)
{
if (ocspResponses == null)
throw new ArgumentNullException("ocspResponses");
this.ocspResponses = new DerSequence(ocspResponses);
}
public OcspListID(
IEnumerable ocspResponses)
{
if (ocspResponses == null)
throw new ArgumentNullException("ocspResponses");
if (!CollectionUtilities.CheckElementsAreOfType(ocspResponses, typeof(OcspResponsesID)))
throw new ArgumentException("Must contain only 'OcspResponsesID' objects", "ocspResponses");
this.ocspResponses = new DerSequence(
Asn1EncodableVector.FromEnumerable(ocspResponses));
}
public OcspResponsesID[] GetOcspResponses()
{
OcspResponsesID[] result = new OcspResponsesID[ocspResponses.Count];
for (int i = 0; i < ocspResponses.Count; ++i)
{
result[i] = OcspResponsesID.GetInstance(ocspResponses[i].ToAsn1Object());
}
return result;
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(ocspResponses);
}
}
}

View File

@@ -0,0 +1,92 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// OcspResponsesID ::= SEQUENCE {
/// ocspIdentifier OcspIdentifier,
/// ocspRepHash OtherHash OPTIONAL
/// }
/// </code>
/// </remarks>
public class OcspResponsesID
: Asn1Encodable
{
private readonly OcspIdentifier ocspIdentifier;
private readonly OtherHash ocspRepHash;
public static OcspResponsesID GetInstance(
object obj)
{
if (obj == null || obj is OcspResponsesID)
return (OcspResponsesID) obj;
if (obj is Asn1Sequence)
return new OcspResponsesID((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OcspResponsesID' factory: "
+ obj.GetType().Name,
"obj");
}
private OcspResponsesID(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.ocspIdentifier = OcspIdentifier.GetInstance(seq[0].ToAsn1Object());
if (seq.Count > 1)
{
this.ocspRepHash = OtherHash.GetInstance(seq[1].ToAsn1Object());
}
}
public OcspResponsesID(
OcspIdentifier ocspIdentifier)
: this(ocspIdentifier, null)
{
}
public OcspResponsesID(
OcspIdentifier ocspIdentifier,
OtherHash ocspRepHash)
{
if (ocspIdentifier == null)
throw new ArgumentNullException("ocspIdentifier");
this.ocspIdentifier = ocspIdentifier;
this.ocspRepHash = ocspRepHash;
}
public OcspIdentifier OcspIdentifier
{
get { return ocspIdentifier; }
}
public OtherHash OcspRepHash
{
get { return ocspRepHash; }
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(
ocspIdentifier.ToAsn1Object());
if (ocspRepHash != null)
{
v.Add(ocspRepHash.ToAsn1Object());
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,93 @@
using System;
using Org.BouncyCastle.Asn1.X509;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// OtherCertID ::= SEQUENCE {
/// otherCertHash OtherHash,
/// issuerSerial IssuerSerial OPTIONAL
/// }
/// </code>
/// </remarks>
public class OtherCertID
: Asn1Encodable
{
private readonly OtherHash otherCertHash;
private readonly IssuerSerial issuerSerial;
public static OtherCertID GetInstance(
object obj)
{
if (obj == null || obj is OtherCertID)
return (OtherCertID) obj;
if (obj is Asn1Sequence)
return new OtherCertID((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OtherCertID' factory: "
+ obj.GetType().Name,
"obj");
}
private OtherCertID(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.otherCertHash = OtherHash.GetInstance(seq[0].ToAsn1Object());
if (seq.Count > 1)
{
this.issuerSerial = IssuerSerial.GetInstance(seq[1].ToAsn1Object());
}
}
public OtherCertID(
OtherHash otherCertHash)
: this(otherCertHash, null)
{
}
public OtherCertID(
OtherHash otherCertHash,
IssuerSerial issuerSerial)
{
if (otherCertHash == null)
throw new ArgumentNullException("otherCertHash");
this.otherCertHash = otherCertHash;
this.issuerSerial = issuerSerial;
}
public OtherHash OtherCertHash
{
get { return otherCertHash; }
}
public IssuerSerial IssuerSerial
{
get { return issuerSerial; }
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(
otherCertHash.ToAsn1Object());
if (issuerSerial != null)
{
v.Add(issuerSerial.ToAsn1Object());
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,89 @@
using System;
using Org.BouncyCastle.Asn1.Oiw;
using Org.BouncyCastle.Asn1.X509;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// OtherHash ::= CHOICE {
/// sha1Hash OtherHashValue, -- This contains a SHA-1 hash
/// otherHash OtherHashAlgAndValue
/// }
///
/// OtherHashValue ::= OCTET STRING
/// </code>
/// </remarks>
public class OtherHash
: Asn1Encodable
//, Asn1Choice
{
private readonly Asn1OctetString sha1Hash;
private readonly OtherHashAlgAndValue otherHash;
public static OtherHash GetInstance(
object obj)
{
if (obj == null || obj is OtherHash)
return (OtherHash) obj;
if (obj is Asn1OctetString)
return new OtherHash((Asn1OctetString) obj);
return new OtherHash(
OtherHashAlgAndValue.GetInstance(obj));
}
public OtherHash(
byte[] sha1Hash)
{
if (sha1Hash == null)
throw new ArgumentNullException("sha1Hash");
this.sha1Hash = new DerOctetString(sha1Hash);
}
public OtherHash(
Asn1OctetString sha1Hash)
{
if (sha1Hash == null)
throw new ArgumentNullException("sha1Hash");
this.sha1Hash = sha1Hash;
}
public OtherHash(
OtherHashAlgAndValue otherHash)
{
if (otherHash == null)
throw new ArgumentNullException("otherHash");
this.otherHash = otherHash;
}
public AlgorithmIdentifier HashAlgorithm
{
get
{
return otherHash == null
? new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1)
: otherHash.HashAlgorithm;
}
}
public byte[] GetHashValue()
{
return otherHash == null
? sha1Hash.GetOctets()
: otherHash.GetHashValue();
}
public override Asn1Object ToAsn1Object()
{
return otherHash == null
? sha1Hash
: otherHash.ToAsn1Object();
}
}
}

View File

@@ -0,0 +1,94 @@
using System;
using Org.BouncyCastle.Asn1.X509;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <summary>
/// Summary description for OtherHashAlgAndValue.
/// </summary>
/// <remarks>
/// <code>
/// OtherHashAlgAndValue ::= SEQUENCE {
/// hashAlgorithm AlgorithmIdentifier,
/// hashValue OtherHashValue
/// }
///
/// OtherHashValue ::= OCTET STRING
/// </code>
/// </remarks>
public class OtherHashAlgAndValue
: Asn1Encodable
{
private readonly AlgorithmIdentifier hashAlgorithm;
private readonly Asn1OctetString hashValue;
public static OtherHashAlgAndValue GetInstance(
object obj)
{
if (obj == null || obj is OtherHashAlgAndValue)
return (OtherHashAlgAndValue) obj;
if (obj is Asn1Sequence)
return new OtherHashAlgAndValue((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OtherHashAlgAndValue' factory: "
+ obj.GetType().Name,
"obj");
}
private OtherHashAlgAndValue(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0].ToAsn1Object());
this.hashValue = (Asn1OctetString) seq[1].ToAsn1Object();
}
public OtherHashAlgAndValue(
AlgorithmIdentifier hashAlgorithm,
byte[] hashValue)
{
if (hashAlgorithm == null)
throw new ArgumentNullException("hashAlgorithm");
if (hashValue == null)
throw new ArgumentNullException("hashValue");
this.hashAlgorithm = hashAlgorithm;
this.hashValue = new DerOctetString(hashValue);
}
public OtherHashAlgAndValue(
AlgorithmIdentifier hashAlgorithm,
Asn1OctetString hashValue)
{
if (hashAlgorithm == null)
throw new ArgumentNullException("hashAlgorithm");
if (hashValue == null)
throw new ArgumentNullException("hashValue");
this.hashAlgorithm = hashAlgorithm;
this.hashValue = hashValue;
}
public AlgorithmIdentifier HashAlgorithm
{
get { return hashAlgorithm; }
}
public byte[] GetHashValue()
{
return hashValue.GetOctets();
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(hashAlgorithm, hashValue);
}
}
}

View File

@@ -0,0 +1,78 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
/// <code>
/// OtherRevRefs ::= SEQUENCE
/// {
/// otherRevRefType OtherRevRefType,
/// otherRevRefs ANY DEFINED BY otherRevRefType
/// }
///
/// OtherRevRefType ::= OBJECT IDENTIFIER
/// </code>
/// </remarks>
public class OtherRevRefs
: Asn1Encodable
{
private readonly DerObjectIdentifier otherRevRefType;
private readonly Asn1Object otherRevRefs;
public static OtherRevRefs GetInstance(
object obj)
{
if (obj == null || obj is OtherRevRefs)
return (OtherRevRefs) obj;
if (obj is Asn1Sequence)
return new OtherRevRefs((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OtherRevRefs' factory: "
+ obj.GetType().Name,
"obj");
}
private OtherRevRefs(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.otherRevRefType = (DerObjectIdentifier) seq[0].ToAsn1Object();
this.otherRevRefs = seq[1].ToAsn1Object();
}
public OtherRevRefs(
DerObjectIdentifier otherRevRefType,
Asn1Encodable otherRevRefs)
{
if (otherRevRefType == null)
throw new ArgumentNullException("otherRevRefType");
if (otherRevRefs == null)
throw new ArgumentNullException("otherRevRefs");
this.otherRevRefType = otherRevRefType;
this.otherRevRefs = otherRevRefs.ToAsn1Object();
}
public DerObjectIdentifier OtherRevRefType
{
get { return otherRevRefType; }
}
public Asn1Object OtherRevRefsObject
{
get { return otherRevRefs; }
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(otherRevRefType, otherRevRefs);
}
}
}

View File

@@ -0,0 +1,78 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.3.2 Revocation Values Attribute Definition
/// <code>
/// OtherRevVals ::= SEQUENCE
/// {
/// otherRevValType OtherRevValType,
/// otherRevVals ANY DEFINED BY otherRevValType
/// }
///
/// OtherRevValType ::= OBJECT IDENTIFIER
/// </code>
/// </remarks>
public class OtherRevVals
: Asn1Encodable
{
private readonly DerObjectIdentifier otherRevValType;
private readonly Asn1Object otherRevVals;
public static OtherRevVals GetInstance(
object obj)
{
if (obj == null || obj is OtherRevVals)
return (OtherRevVals) obj;
if (obj is Asn1Sequence)
return new OtherRevVals((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OtherRevVals' factory: "
+ obj.GetType().Name,
"obj");
}
private OtherRevVals(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.otherRevValType = (DerObjectIdentifier) seq[0].ToAsn1Object();
this.otherRevVals = seq[1].ToAsn1Object();
}
public OtherRevVals(
DerObjectIdentifier otherRevValType,
Asn1Encodable otherRevVals)
{
if (otherRevValType == null)
throw new ArgumentNullException("otherRevValType");
if (otherRevVals == null)
throw new ArgumentNullException("otherRevVals");
this.otherRevValType = otherRevValType;
this.otherRevVals = otherRevVals.ToAsn1Object();
}
public DerObjectIdentifier OtherRevValType
{
get { return otherRevValType; }
}
public Asn1Object OtherRevValsObject
{
get { return otherRevVals; }
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(otherRevValType, otherRevVals);
}
}
}

View File

@@ -0,0 +1,138 @@
using System;
using System.Collections;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// OtherSigningCertificate ::= SEQUENCE {
/// certs SEQUENCE OF OtherCertID,
/// policies SEQUENCE OF PolicyInformation OPTIONAL
/// }
/// </code>
/// </remarks>
public class OtherSigningCertificate
: Asn1Encodable
{
private readonly Asn1Sequence certs;
private readonly Asn1Sequence policies;
public static OtherSigningCertificate GetInstance(
object obj)
{
if (obj == null || obj is OtherSigningCertificate)
return (OtherSigningCertificate) obj;
if (obj is Asn1Sequence)
return new OtherSigningCertificate((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'OtherSigningCertificate' factory: "
+ obj.GetType().Name,
"obj");
}
private OtherSigningCertificate(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.certs = Asn1Sequence.GetInstance(seq[0].ToAsn1Object());
if (seq.Count > 1)
{
this.policies = Asn1Sequence.GetInstance(seq[1].ToAsn1Object());
}
}
public OtherSigningCertificate(
params OtherCertID[] certs)
: this(certs, null)
{
}
public OtherSigningCertificate(
OtherCertID[] certs,
params PolicyInformation[] policies)
{
if (certs == null)
throw new ArgumentNullException("certs");
this.certs = new DerSequence(certs);
if (policies != null)
{
this.policies = new DerSequence(policies);
}
}
public OtherSigningCertificate(
IEnumerable certs)
: this(certs, null)
{
}
public OtherSigningCertificate(
IEnumerable certs,
IEnumerable policies)
{
if (certs == null)
throw new ArgumentNullException("certs");
if (!CollectionUtilities.CheckElementsAreOfType(certs, typeof(OtherCertID)))
throw new ArgumentException("Must contain only 'OtherCertID' objects", "certs");
this.certs = new DerSequence(
Asn1EncodableVector.FromEnumerable(certs));
if (policies != null)
{
if (!CollectionUtilities.CheckElementsAreOfType(policies, typeof(PolicyInformation)))
throw new ArgumentException("Must contain only 'PolicyInformation' objects", "policies");
this.policies = new DerSequence(
Asn1EncodableVector.FromEnumerable(policies));
}
}
public OtherCertID[] GetCerts()
{
OtherCertID[] cs = new OtherCertID[certs.Count];
for (int i = 0; i < certs.Count; ++i)
{
cs[i] = OtherCertID.GetInstance(certs[i].ToAsn1Object());
}
return cs;
}
public PolicyInformation[] GetPolicies()
{
if (policies == null)
return null;
PolicyInformation[] ps = new PolicyInformation[policies.Count];
for (int i = 0; i < policies.Count; ++i)
{
ps[i] = PolicyInformation.GetInstance(policies[i].ToAsn1Object());
}
return ps;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(certs);
if (policies != null)
{
v.Add(policies);
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,175 @@
using System;
using System.Collections;
using Org.BouncyCastle.Asn1.Ocsp;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// RFC 3126: 4.3.2 Revocation Values Attribute Definition
/// <code>
/// RevocationValues ::= SEQUENCE {
/// crlVals [0] SEQUENCE OF CertificateList OPTIONAL,
/// ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL,
/// otherRevVals [2] OtherRevVals
/// }
/// </code>
/// </remarks>
public class RevocationValues
: Asn1Encodable
{
private readonly Asn1Sequence crlVals;
private readonly Asn1Sequence ocspVals;
private readonly OtherRevVals otherRevVals;
public static RevocationValues GetInstance(
object obj)
{
if (obj == null || obj is RevocationValues)
return (RevocationValues) obj;
if (obj is Asn1Sequence)
return new RevocationValues((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'RevocationValues' factory: "
+ obj.GetType().Name,
"obj");
}
private RevocationValues(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 1 || seq.Count > 3)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
bool otherRevValsFound = false;
foreach (Asn1TaggedObject taggedObj in seq)
{
Asn1Object asn1Obj = taggedObj.GetObject();
switch (taggedObj.TagNo)
{
case 0:
Asn1Sequence crlValsSeq = (Asn1Sequence) asn1Obj;
foreach (Asn1Encodable ae in crlValsSeq)
{
CertificateList.GetInstance(ae.ToAsn1Object());
}
this.crlVals = crlValsSeq;
break;
case 1:
Asn1Sequence ocspValsSeq = (Asn1Sequence) asn1Obj;
foreach (Asn1Encodable ae in ocspValsSeq)
{
BasicOcspResponse.GetInstance(ae.ToAsn1Object());
}
this.ocspVals = ocspValsSeq;
break;
case 2:
this.otherRevVals = OtherRevVals.GetInstance(asn1Obj);
otherRevValsFound = true;
break;
default:
throw new ArgumentException("Illegal tag in RevocationValues", "seq");
}
}
if (!otherRevValsFound)
throw new ArgumentException("No otherRevVals found", "seq");
}
public RevocationValues(
CertificateList[] crlVals,
BasicOcspResponse[] ocspVals,
OtherRevVals otherRevVals)
{
if (otherRevVals == null)
throw new ArgumentNullException("otherRevVals");
if (crlVals != null)
{
this.crlVals = new DerSequence(crlVals);
}
if (ocspVals != null)
{
this.ocspVals = new DerSequence(ocspVals);
}
this.otherRevVals = otherRevVals;
}
public RevocationValues(
IEnumerable crlVals,
IEnumerable ocspVals,
OtherRevVals otherRevVals)
{
if (otherRevVals == null)
throw new ArgumentNullException("otherRevVals");
if (crlVals != null)
{
if (!CollectionUtilities.CheckElementsAreOfType(crlVals, typeof(CertificateList)))
throw new ArgumentException("Must contain only 'CertificateList' objects", "crlVals");
this.crlVals = new DerSequence(
Asn1EncodableVector.FromEnumerable(crlVals));
}
if (ocspVals != null)
{
if (!CollectionUtilities.CheckElementsAreOfType(ocspVals, typeof(BasicOcspResponse)))
throw new ArgumentException("Must contain only 'BasicOcspResponse' objects", "ocspVals");
this.ocspVals = new DerSequence(
Asn1EncodableVector.FromEnumerable(ocspVals));
}
this.otherRevVals = otherRevVals;
}
public CertificateList[] GetCrlVals()
{
CertificateList[] result = new CertificateList[crlVals.Count];
for (int i = 0; i < crlVals.Count; ++i)
{
result[i] = CertificateList.GetInstance(crlVals[i].ToAsn1Object());
}
return result;
}
public BasicOcspResponse[] GetOcspVals()
{
BasicOcspResponse[] result = new BasicOcspResponse[ocspVals.Count];
for (int i = 0; i < ocspVals.Count; ++i)
{
result[i] = BasicOcspResponse.GetInstance(ocspVals[i].ToAsn1Object());
}
return result;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector();
if (crlVals != null)
{
v.Add(new DerTaggedObject(true, 0, crlVals));
}
if (ocspVals != null)
{
v.Add(new DerTaggedObject(true, 1, ocspVals));
}
v.Add(new DerTaggedObject(true, 2, otherRevVals.ToAsn1Object()));
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,71 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// SigPolicyQualifierInfo ::= SEQUENCE {
/// sigPolicyQualifierId SigPolicyQualifierId,
/// sigQualifier ANY DEFINED BY sigPolicyQualifierId
/// }
///
/// SigPolicyQualifierId ::= OBJECT IDENTIFIER
/// </code>
/// </remarks>
public class SigPolicyQualifierInfo
: Asn1Encodable
{
private readonly DerObjectIdentifier sigPolicyQualifierId;
private readonly Asn1Object sigQualifier;
public static SigPolicyQualifierInfo GetInstance(
object obj)
{
if (obj == null || obj is SigPolicyQualifierInfo)
return (SigPolicyQualifierInfo) obj;
if (obj is Asn1Sequence)
return new SigPolicyQualifierInfo((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'SigPolicyQualifierInfo' factory: "
+ obj.GetType().Name,
"obj");
}
private SigPolicyQualifierInfo(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count != 2)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.sigPolicyQualifierId = (DerObjectIdentifier) seq[0].ToAsn1Object();
this.sigQualifier = seq[1].ToAsn1Object();
}
public SigPolicyQualifierInfo(
DerObjectIdentifier sigPolicyQualifierId,
Asn1Encodable sigQualifier)
{
this.sigPolicyQualifierId = sigPolicyQualifierId;
this.sigQualifier = sigQualifier.ToAsn1Object();
}
public DerObjectIdentifier SigPolicyQualifierId
{
get { return sigPolicyQualifierId; }
}
public Asn1Object SigQualifier
{
get { return sigQualifier; }
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(sigPolicyQualifierId, sigQualifier);
}
}
}

View File

@@ -0,0 +1,145 @@
using System;
using System.Collections;
using Org.BouncyCastle.Utilities.Collections;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// SignaturePolicyId ::= SEQUENCE {
/// sigPolicyIdentifier SigPolicyId,
/// sigPolicyHash SigPolicyHash,
/// sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL
/// }
///
/// SigPolicyId ::= OBJECT IDENTIFIER
///
/// SigPolicyHash ::= OtherHashAlgAndValue
/// </code>
/// </remarks>
public class SignaturePolicyId
: Asn1Encodable
{
private readonly DerObjectIdentifier sigPolicyIdentifier;
private readonly OtherHashAlgAndValue sigPolicyHash;
private readonly Asn1Sequence sigPolicyQualifiers;
public static SignaturePolicyId GetInstance(
object obj)
{
if (obj == null || obj is SignaturePolicyId)
return (SignaturePolicyId) obj;
if (obj is Asn1Sequence)
return new SignaturePolicyId((Asn1Sequence) obj);
throw new ArgumentException(
"Unknown object in 'SignaturePolicyId' factory: "
+ obj.GetType().Name,
"obj");
}
private SignaturePolicyId(
Asn1Sequence seq)
{
if (seq == null)
throw new ArgumentNullException("seq");
if (seq.Count < 2 || seq.Count > 3)
throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
this.sigPolicyIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object();
this.sigPolicyHash = OtherHashAlgAndValue.GetInstance(seq[1].ToAsn1Object());
if (seq.Count > 2)
{
this.sigPolicyQualifiers = (Asn1Sequence) seq[2].ToAsn1Object();
}
}
public SignaturePolicyId(
DerObjectIdentifier sigPolicyIdentifier,
OtherHashAlgAndValue sigPolicyHash)
: this(sigPolicyIdentifier, sigPolicyHash, null)
{
}
public SignaturePolicyId(
DerObjectIdentifier sigPolicyIdentifier,
OtherHashAlgAndValue sigPolicyHash,
params SigPolicyQualifierInfo[] sigPolicyQualifiers)
{
if (sigPolicyIdentifier == null)
throw new ArgumentNullException("sigPolicyIdentifier");
if (sigPolicyHash == null)
throw new ArgumentNullException("sigPolicyHash");
this.sigPolicyIdentifier = sigPolicyIdentifier;
this.sigPolicyHash = sigPolicyHash;
if (sigPolicyQualifiers != null)
{
this.sigPolicyQualifiers = new DerSequence(sigPolicyQualifiers);
}
}
public SignaturePolicyId(
DerObjectIdentifier sigPolicyIdentifier,
OtherHashAlgAndValue sigPolicyHash,
IEnumerable sigPolicyQualifiers)
{
if (sigPolicyIdentifier == null)
throw new ArgumentNullException("sigPolicyIdentifier");
if (sigPolicyHash == null)
throw new ArgumentNullException("sigPolicyHash");
this.sigPolicyIdentifier = sigPolicyIdentifier;
this.sigPolicyHash = sigPolicyHash;
if (sigPolicyQualifiers != null)
{
if (!CollectionUtilities.CheckElementsAreOfType(sigPolicyQualifiers, typeof(SigPolicyQualifierInfo)))
throw new ArgumentException("Must contain only 'SigPolicyQualifierInfo' objects", "sigPolicyQualifiers");
this.sigPolicyQualifiers = new DerSequence(
Asn1EncodableVector.FromEnumerable(sigPolicyQualifiers));
}
}
public DerObjectIdentifier SigPolicyIdentifier
{
get { return sigPolicyIdentifier; }
}
public OtherHashAlgAndValue SigPolicyHash
{
get { return sigPolicyHash; }
}
public SigPolicyQualifierInfo[] GetSigPolicyQualifiers()
{
if (sigPolicyQualifiers == null)
return null;
SigPolicyQualifierInfo[] infos = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count];
for (int i = 0; i < sigPolicyQualifiers.Count; ++i)
{
infos[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]);
}
return infos;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector(
sigPolicyIdentifier, sigPolicyHash.ToAsn1Object());
if (sigPolicyQualifiers != null)
{
v.Add(sigPolicyQualifiers.ToAsn1Object());
}
return new DerSequence(v);
}
}
}

View File

@@ -0,0 +1,65 @@
using System;
namespace Org.BouncyCastle.Asn1.Esf
{
/// <remarks>
/// <code>
/// SignaturePolicyIdentifier ::= CHOICE {
/// SignaturePolicyId SignaturePolicyId,
/// SignaturePolicyImplied SignaturePolicyImplied
/// }
///
/// SignaturePolicyImplied ::= NULL
/// </code>
/// </remarks>
public class SignaturePolicyIdentifier
: Asn1Encodable
//, Asn1Choice
{
private readonly SignaturePolicyId sigPolicy;
public static SignaturePolicyIdentifier GetInstance(
object obj)
{
if (obj == null || obj is SignaturePolicyIdentifier)
return (SignaturePolicyIdentifier) obj;
if (obj is SignaturePolicyId)
return new SignaturePolicyIdentifier((SignaturePolicyId) obj);
if (obj is Asn1Null)
return new SignaturePolicyIdentifier();
throw new ArgumentException(
"Unknown object in 'SignaturePolicyIdentifier' factory: "
+ obj.GetType().Name,
"obj");
}
public SignaturePolicyIdentifier()
{
this.sigPolicy = null;
}
public SignaturePolicyIdentifier(
SignaturePolicyId signaturePolicyId)
{
if (signaturePolicyId == null)
throw new ArgumentNullException("signaturePolicyId");
this.sigPolicy = signaturePolicyId;
}
public SignaturePolicyId SignaturePolicyId
{
get { return sigPolicy; }
}
public override Asn1Object ToAsn1Object()
{
return sigPolicy == null
? DerNull.Instance
: sigPolicy.ToAsn1Object();
}
}
}

View File

@@ -0,0 +1,144 @@
using System;
using System.Collections;
using Org.BouncyCastle.Asn1;
namespace Org.BouncyCastle.Asn1.Esf
{
/**
* Signer-Location attribute (RFC3126).
*
* <pre>
* SignerLocation ::= SEQUENCE {
* countryName [0] DirectoryString OPTIONAL,
* localityName [1] DirectoryString OPTIONAL,
* postalAddress [2] PostalAddress OPTIONAL }
*
* PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
* </pre>
*/
public class SignerLocation
: Asn1Encodable
{
// TODO Should these be using DirectoryString?
private DerUtf8String countryName;
private DerUtf8String localityName;
private Asn1Sequence postalAddress;
public SignerLocation(
Asn1Sequence seq)
{
foreach (Asn1TaggedObject obj in seq)
{
switch (obj.TagNo)
{
case 0:
this.countryName = DerUtf8String.GetInstance(obj, true);
break;
case 1:
this.localityName = DerUtf8String.GetInstance(obj, true);
break;
case 2:
bool isExplicit = obj.IsExplicit(); // handle erroneous implicitly tagged sequences
this.postalAddress = Asn1Sequence.GetInstance(obj, isExplicit);
if (postalAddress != null && postalAddress.Count > 6)
throw new ArgumentException("postal address must contain less than 6 strings");
break;
default:
throw new ArgumentException("illegal tag");
}
}
}
public SignerLocation(
DerUtf8String countryName,
DerUtf8String localityName,
Asn1Sequence postalAddress)
{
if (postalAddress != null && postalAddress.Count > 6)
{
throw new ArgumentException("postal address must contain less than 6 strings");
}
if (countryName != null)
{
this.countryName = DerUtf8String.GetInstance(countryName.ToAsn1Object());
}
if (localityName != null)
{
this.localityName = DerUtf8String.GetInstance(localityName.ToAsn1Object());
}
if (postalAddress != null)
{
this.postalAddress = (Asn1Sequence) postalAddress.ToAsn1Object();
}
}
public static SignerLocation GetInstance(
object obj)
{
if (obj == null || obj is SignerLocation)
{
return (SignerLocation) obj;
}
return new SignerLocation(Asn1Sequence.GetInstance(obj));
}
public DerUtf8String CountryName
{
get { return countryName; }
}
public DerUtf8String LocalityName
{
get { return localityName; }
}
public Asn1Sequence PostalAddress
{
get { return postalAddress; }
}
/**
* <pre>
* SignerLocation ::= SEQUENCE {
* countryName [0] DirectoryString OPTIONAL,
* localityName [1] DirectoryString OPTIONAL,
* postalAddress [2] PostalAddress OPTIONAL }
*
* PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
*
* DirectoryString ::= CHOICE {
* teletexString TeletexString (SIZE (1..MAX)),
* printableString PrintableString (SIZE (1..MAX)),
* universalString UniversalString (SIZE (1..MAX)),
* utf8String UTF8String (SIZE (1.. MAX)),
* bmpString BMPString (SIZE (1..MAX)) }
* </pre>
*/
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector v = new Asn1EncodableVector();
if (countryName != null)
{
v.Add(new DerTaggedObject(true, 0, countryName));
}
if (localityName != null)
{
v.Add(new DerTaggedObject(true, 1, localityName));
}
if (postalAddress != null)
{
v.Add(new DerTaggedObject(true, 2, postalAddress));
}
return new DerSequence(v);
}
}
}