@@ -311,6 +311,37 @@ func TestReadASN1GeneralizedTime(t *testing.T) {
311
311
}
312
312
}
313
313
314
+ func TestReadASN1UTCTime (t * testing.T ) {
315
+ testData := []struct {
316
+ in string
317
+ ok bool
318
+ out time.Time
319
+ }{
320
+ {"000102030405Z" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
321
+ {"500102030405Z" , true , time .Date (1950 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
322
+ {"490102030405Z" , true , time .Date (2049 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
323
+ {"990102030405Z" , true , time .Date (1999 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
324
+ {"250102030405Z" , true , time .Date (2025 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
325
+ {"750102030405Z" , true , time .Date (1975 , 01 , 02 , 03 , 04 , 05 , 0 , time .UTC )},
326
+ {"000102030405+0905" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 05 , 0 , time .FixedZone ("" , 9 * 60 * 60 + 5 * 60 ))},
327
+ {"000102030405-0905" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 05 , 0 , time .FixedZone ("" , - 9 * 60 * 60 - 5 * 60 ))},
328
+ {"0001020304Z" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 0 , 0 , time .UTC )},
329
+ {"5001020304Z" , true , time .Date (1950 , 01 , 02 , 03 , 04 , 00 , 0 , time .UTC )},
330
+ {"0001020304+0905" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 0 , 0 , time .FixedZone ("" , 9 * 60 * 60 + 5 * 60 ))},
331
+ {"0001020304-0905" , true , time .Date (2000 , 01 , 02 , 03 , 04 , 0 , 0 , time .FixedZone ("" , - 9 * 60 * 60 - 5 * 60 ))},
332
+ {"000102030405Z0700" , false , time.Time {}},
333
+ {"000102030405" , false , time.Time {}},
334
+ }
335
+ for i , test := range testData {
336
+ in := String (append ([]byte {byte (asn1 .UTCTime ), byte (len (test .in ))}, test .in ... ))
337
+ var out time.Time
338
+ ok := in .ReadASN1UTCTime (& out )
339
+ if ok != test .ok || ok && ! reflect .DeepEqual (out , test .out ) {
340
+ t .Errorf ("#%d: in.ReadASN1UTCTime() = %v, want %v; out = %q, want %q" , i , ok , test .ok , out , test .out )
341
+ }
342
+ }
343
+ }
344
+
314
345
func TestReadASN1BitString (t * testing.T ) {
315
346
testData := []struct {
316
347
in []byte
0 commit comments