@@ -311,6 +311,37 @@ func TestReadASN1GeneralizedTime(t *testing.T) {
311311 }
312312}
313313
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+
314345func TestReadASN1BitString (t * testing.T ) {
315346 testData := []struct {
316347 in []byte
0 commit comments