EssCertIDv2
using Org.BouncyCastle.Asn1.Nist;
using Org.BouncyCastle.Asn1.Oiw;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Operators.Utilities;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Asn1.Ess
{
public class EssCertIDv2 : Asn1Encodable
{
private static readonly AlgorithmIdentifier DefaultHashAlgorithm = DefaultDigestAlgorithmFinder.Instance.Find(NistObjectIdentifiers.IdSha256);
private readonly AlgorithmIdentifier m_hashAlgorithm;
private readonly Asn1OctetString m_certHash;
private readonly IssuerSerial m_issuerSerial;
public AlgorithmIdentifier HashAlgorithm => m_hashAlgorithm;
public Asn1OctetString CertHash => m_certHash;
public IssuerSerial IssuerSerial => m_issuerSerial;
public static EssCertIDv2 From(EssCertID essCertID)
{
return new EssCertIDv2(new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1), essCertID.CertHash, essCertID.IssuerSerial);
}
public static EssCertIDv2 GetInstance(object obj)
{
if (obj == null)
return null;
EssCertIDv2 essCertIDv = obj as EssCertIDv2;
if (essCertIDv != null)
return essCertIDv;
return new EssCertIDv2(Asn1Sequence.GetInstance(obj));
}
public static EssCertIDv2 GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EssCertIDv2(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static EssCertIDv2 GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EssCertIDv2(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private EssCertIDv2(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 3)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_hashAlgorithm = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, AlgorithmIdentifier.GetOptional) ?? DefaultHashAlgorithm);
m_certHash = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_issuerSerial = Asn1Utilities.ReadOptional(seq, ref sequencePosition, IssuerSerial.GetOptional);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public EssCertIDv2(byte[] certHash)
: this(null, certHash, null)
{
}
public EssCertIDv2(AlgorithmIdentifier algId, byte[] certHash)
: this(algId, certHash, null)
{
}
public EssCertIDv2(byte[] certHash, IssuerSerial issuerSerial)
: this(null, certHash, issuerSerial)
{
}
public EssCertIDv2(AlgorithmIdentifier algId, byte[] certHash, IssuerSerial issuerSerial)
{
m_hashAlgorithm = (algId ?? DefaultHashAlgorithm);
m_certHash = DerOctetString.FromContents(certHash);
m_issuerSerial = issuerSerial;
}
public EssCertIDv2(AlgorithmIdentifier hashAlgorithm, Asn1OctetString certHash, IssuerSerial issuerSerial)
{
m_hashAlgorithm = (hashAlgorithm ?? DefaultHashAlgorithm);
if (certHash == null)
throw new ArgumentNullException("certHash");
m_certHash = certHash;
m_issuerSerial = issuerSerial;
}
public byte[] GetCertHash()
{
return Arrays.Clone(m_certHash.GetOctets());
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3);
if (!DefaultHashAlgorithm.Equals(m_hashAlgorithm))
asn1EncodableVector.Add(m_hashAlgorithm);
asn1EncodableVector.Add(m_certHash);
asn1EncodableVector.AddOptional(m_issuerSerial);
return new DerSequence(asn1EncodableVector);
}
}
}