diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2024-07-01 19:23:46 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2024-07-01 19:23:46 +0700 |
commit | 4e97fa1cbee0072938c5ea33ca51f4e3964f2998 (patch) | |
tree | 0aad9c9bc277429ee733c8383672cb7c6aed329a /crypto/src/asn1/tsp/TimeStampReq.cs | |
parent | Refactoring in Asn1.Smime (diff) | |
download | BouncyCastle.NET-ed25519-4e97fa1cbee0072938c5ea33ca51f4e3964f2998.tar.xz |
Refactoring in Asn1.Tsp
Diffstat (limited to 'crypto/src/asn1/tsp/TimeStampReq.cs')
-rw-r--r-- | crypto/src/asn1/tsp/TimeStampReq.cs | 75 |
1 files changed, 27 insertions, 48 deletions
diff --git a/crypto/src/asn1/tsp/TimeStampReq.cs b/crypto/src/asn1/tsp/TimeStampReq.cs index aa9621007..e87b24087 100644 --- a/crypto/src/asn1/tsp/TimeStampReq.cs +++ b/crypto/src/asn1/tsp/TimeStampReq.cs @@ -1,16 +1,15 @@ using System; using Org.BouncyCastle.Asn1.X509; -using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Asn1.Tsp { - public class TimeStampReq + public class TimeStampReq : Asn1Encodable { private readonly DerInteger m_version; private readonly MessageImprint m_messageImprint; - private readonly DerObjectIdentifier m_tsaPolicy; + private readonly DerObjectIdentifier m_reqPolicy; private readonly DerInteger m_nonce; private readonly DerBoolean m_certReq; private readonly X509Extensions m_extensions; @@ -24,60 +23,40 @@ namespace Org.BouncyCastle.Asn1.Tsp return new TimeStampReq(Asn1Sequence.GetInstance(obj)); } - public static TimeStampReq GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) - { - return new TimeStampReq(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); - } + public static TimeStampReq GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) => + new TimeStampReq(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); + + public static TimeStampReq GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) => + new TimeStampReq(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); private TimeStampReq(Asn1Sequence seq) { - int nbObjects = seq.Count; - int seqStart = 0; - - // version - m_version = DerInteger.GetInstance(seq[seqStart++]); - - // messageImprint - m_messageImprint = MessageImprint.GetInstance(seq[seqStart++]); - - for (int opt = seqStart; opt < nbObjects; opt++) - { - // tsaPolicy - if (seq[opt] is DerObjectIdentifier oid) - { - m_tsaPolicy = oid; - } - // nonce - else if (seq[opt] is DerInteger derInteger) - { - m_nonce = derInteger; - } - // certReq - else if (seq[opt] is DerBoolean derBoolean) - { - m_certReq = derBoolean; - } - // extensions - else if (seq[opt] is Asn1TaggedObject tagged) - { - if (tagged.TagNo == 0) - { - m_extensions = X509Extensions.GetInstance(tagged, false); - } - } - } + int count = seq.Count, pos = 0; + if (count < 2 || count > 6) + throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); + + m_version = DerInteger.GetInstance(seq[pos++]); + m_messageImprint = MessageImprint.GetInstance(seq[pos++]); + m_reqPolicy = Asn1Utilities.ReadOptional(seq, ref pos, DerObjectIdentifier.GetOptional); + m_nonce = Asn1Utilities.ReadOptional(seq, ref pos, DerInteger.GetOptional); + m_certReq = Asn1Utilities.ReadOptional(seq, ref pos, DerBoolean.GetOptional) ?? DerBoolean.False; + m_extensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, false, X509Extensions.GetTagged); + + if (pos != count) + throw new ArgumentException("Unexpected elements in sequence", nameof(seq)); } + // TODO[api] 'tsaPolicy' => 'reqPolicy' public TimeStampReq(MessageImprint messageImprint, DerObjectIdentifier tsaPolicy, DerInteger nonce, DerBoolean certReq, X509Extensions extensions) { // default m_version = DerInteger.One; - m_messageImprint = messageImprint; - m_tsaPolicy = tsaPolicy; + m_messageImprint = messageImprint ?? throw new ArgumentNullException(nameof(messageImprint)); + m_reqPolicy = tsaPolicy; m_nonce = nonce; - m_certReq = certReq; + m_certReq = certReq ?? DerBoolean.False; m_extensions = extensions; } @@ -85,7 +64,7 @@ namespace Org.BouncyCastle.Asn1.Tsp public MessageImprint MessageImprint => m_messageImprint; - public DerObjectIdentifier ReqPolicy => m_tsaPolicy; + public DerObjectIdentifier ReqPolicy => m_reqPolicy; public DerInteger Nonce => m_nonce; @@ -111,9 +90,9 @@ namespace Org.BouncyCastle.Asn1.Tsp { Asn1EncodableVector v = new Asn1EncodableVector(6); v.Add(m_version, m_messageImprint); - v.AddOptional(m_tsaPolicy, m_nonce); + v.AddOptional(m_reqPolicy, m_nonce); - if (m_certReq != null && m_certReq.IsTrue) + if (m_certReq.IsTrue) { v.Add(m_certReq); } |