123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using System.Globalization;
- using System.Text;
- using Org.BouncyCastle.Utilities;
- namespace Org.BouncyCastle.Asn1
- {
-
- public class DerUtcTime
- : Asn1Object
- {
- private readonly string time;
-
- public static DerUtcTime GetInstance(
- object obj)
- {
- if (obj == null || obj is DerUtcTime)
- {
- return (DerUtcTime)obj;
- }
- throw new ArgumentException("illegal object in GetInstance: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj));
- }
-
- public static DerUtcTime GetInstance(
- Asn1TaggedObject obj,
- bool isExplicit)
- {
- Asn1Object o = obj.GetObject();
- if (isExplicit || o is DerUtcTime)
- {
- return GetInstance(o);
- }
- return new DerUtcTime(((Asn1OctetString)o).GetOctets());
- }
-
- public DerUtcTime(
- string time)
- {
- if (time == null)
- throw new ArgumentNullException("time");
- this.time = time;
- try
- {
- ToDateTime();
- }
- catch (FormatException e)
- {
- throw new ArgumentException("invalid date string: " + e.Message);
- }
- }
-
- public DerUtcTime(
- DateTime time)
- {
- #if PORTABLE || NETFX_CORE
- this.time = time.ToUniversalTime().ToString("yyMMddHHmmss", CultureInfo.InvariantCulture) + "Z";
- #else
- this.time = time.ToString("yyMMddHHmmss", CultureInfo.InvariantCulture) + "Z";
- #endif
- }
- internal DerUtcTime(
- byte[] bytes)
- {
-
-
-
- this.time = Strings.FromAsciiByteArray(bytes);
- }
-
- public DateTime ToDateTime()
- {
- return ParseDateString(TimeString, @"yyMMddHHmmss'GMT'zzz");
- }
-
- public DateTime ToAdjustedDateTime()
- {
- return ParseDateString(AdjustedTimeString, @"yyyyMMddHHmmss'GMT'zzz");
- }
- private DateTime ParseDateString(
- string dateStr,
- string formatStr)
- {
- DateTime dt = DateTime.ParseExact(
- dateStr,
- formatStr,
- DateTimeFormatInfo.InvariantInfo);
- return dt.ToUniversalTime();
- }
-
- public string TimeString
- {
- get
- {
-
-
-
- if (time.IndexOf('-') < 0 && time.IndexOf('+') < 0)
- {
- if (time.Length == 11)
- {
- return time.Substring(0, 10) + "00GMT+00:00";
- }
- else
- {
- return time.Substring(0, 12) + "GMT+00:00";
- }
- }
- else
- {
- int index = time.IndexOf('-');
- if (index < 0)
- {
- index = time.IndexOf('+');
- }
- string d = time;
- if (index == time.Length - 3)
- {
- d += "00";
- }
- if (index == 10)
- {
- return d.Substring(0, 10) + "00GMT" + d.Substring(10, 3) + ":" + d.Substring(13, 2);
- }
- else
- {
- return d.Substring(0, 12) + "GMT" + d.Substring(12, 3) + ":" + d.Substring(15, 2);
- }
- }
- }
- }
- [Obsolete("Use 'AdjustedTimeString' property instead")]
- public string AdjustedTime
- {
- get { return AdjustedTimeString; }
- }
-
-
-
-
- public string AdjustedTimeString
- {
- get
- {
- string d = TimeString;
- string c = d[0] < '5' ? "20" : "19";
- return c + d;
- }
- }
- private byte[] GetOctets()
- {
- return Strings.ToAsciiByteArray(time);
- }
- internal override void Encode(
- DerOutputStream derOut)
- {
- derOut.WriteEncoded(Asn1Tags.UtcTime, GetOctets());
- }
- protected override bool Asn1Equals(
- Asn1Object asn1Object)
- {
- DerUtcTime other = asn1Object as DerUtcTime;
- if (other == null)
- return false;
- return this.time.Equals(other.time);
- }
- protected override int Asn1GetHashCode()
- {
- return time.GetHashCode();
- }
- public override string ToString()
- {
- return time;
- }
- }
- }
- #endif
|