diff options
Diffstat (limited to 'crypto/src/asn1/cms/Time.cs')
-rw-r--r-- | crypto/src/asn1/cms/Time.cs | 112 |
1 files changed, 56 insertions, 56 deletions
diff --git a/crypto/src/asn1/cms/Time.cs b/crypto/src/asn1/cms/Time.cs index 67c73285b..f054e3809 100644 --- a/crypto/src/asn1/cms/Time.cs +++ b/crypto/src/asn1/cms/Time.cs @@ -8,24 +8,41 @@ namespace Org.BouncyCastle.Asn1.Cms public class Time : Asn1Encodable, IAsn1Choice { - private readonly Asn1Object time; + public static Time GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is Time time) + return time; + if (obj is Asn1UtcTime utcTime) + return new Time(utcTime); + if (obj is Asn1GeneralizedTime generalizedTime) + return new Time(generalizedTime); + + throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), nameof(obj)); + } - public static Time GetInstance( - Asn1TaggedObject obj, - bool explicitly) + public static Time GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { - return GetInstance(obj.GetObject()); + return GetInstance(taggedObject.GetObject()); } - public Time( - Asn1Object time) + private readonly Asn1Object m_timeObject; + + public Time(Asn1GeneralizedTime generalizedTime) + { + this.m_timeObject = generalizedTime ?? throw new ArgumentNullException(nameof(generalizedTime)); + } + + public Time(Asn1UtcTime utcTime) { - if (time == null) - throw new ArgumentNullException("time"); - if (!(time is Asn1UtcTime) && !(time is Asn1GeneralizedTime)) - throw new ArgumentException("unknown object passed to Time"); + if (utcTime == null) + throw new ArgumentNullException(nameof(utcTime)); - this.time = time; + // Validate utcTime is in the appropriate year range + utcTime.ToDateTime(2049); + + this.m_timeObject = utcTime; } /** @@ -35,61 +52,36 @@ namespace Org.BouncyCastle.Asn1.Cms */ public Time(DateTime date) { - DateTime d = date.ToUniversalTime(); + DateTime utc = date.ToUniversalTime(); - if (d.Year < 1950 || d.Year > 2049) + if (utc.Year < 1950 || utc.Year > 2049) { - time = new DerGeneralizedTime(d); + m_timeObject = new DerGeneralizedTime(utc); } else { - time = new DerUtcTime(d); + m_timeObject = new DerUtcTime(utc, 2049); } } - public static Time GetInstance(object obj) - { - if (obj == null) - return null; - if (obj is Time time) - return time; - if (obj is Asn1UtcTime utcTime) - return new Time(utcTime); - if (obj is Asn1GeneralizedTime generalizedTime) - return new Time(generalizedTime); - - throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); - } - - public string TimeString + public DateTime ToDateTime() { - get - { - if (time is Asn1UtcTime utcTime) - return utcTime.AdjustedTimeString; + try + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049); - return ((Asn1GeneralizedTime)time).GetTime(); - } + return ((Asn1GeneralizedTime)m_timeObject).ToDateTime(); + } + catch (FormatException e) + { + // this should never happen + throw new InvalidOperationException("invalid date string: " + e.Message); + } } - public DateTime Date - { - get - { - try - { - if (time is Asn1UtcTime utcTime) - return utcTime.ToAdjustedDateTime(); - - return ((Asn1GeneralizedTime)time).ToDateTime(); - } - catch (FormatException e) - { - // this should never happen - throw new InvalidOperationException("invalid date string: " + e.Message); - } - } - } + [Obsolete("Use 'ToDateTime' instead")] + public DateTime Date => ToDateTime(); /** * Produce an object suitable for an Asn1OutputStream. @@ -101,7 +93,15 @@ namespace Org.BouncyCastle.Asn1.Cms */ public override Asn1Object ToAsn1Object() { - return time; + return m_timeObject; + } + + public override string ToString() + { + if (m_timeObject is Asn1UtcTime utcTime) + return utcTime.ToDateTime(2049).ToString(@"yyyyMMddHHmmssK", DateTimeFormatInfo.InvariantInfo); + + return ((Asn1GeneralizedTime)m_timeObject).GetTime(); } } } |