github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/encoding/asn1/asn1_test.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package asn1 6 7 import ( 8 "bytes" 9 "math/big" 10 "reflect" 11 "testing" 12 "time" 13 ) 14 15 type int64Test struct { 16 in []byte 17 ok bool 18 out int64 19 } 20 21 var int64TestData = []int64Test{ 22 {[]byte{0x00}, true, 0}, 23 {[]byte{0x7f}, true, 127}, 24 {[]byte{0x00, 0x80}, true, 128}, 25 {[]byte{0x01, 0x00}, true, 256}, 26 {[]byte{0x80}, true, -128}, 27 {[]byte{0xff, 0x7f}, true, -129}, 28 {[]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, true, -1}, 29 {[]byte{0xff}, true, -1}, 30 {[]byte{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, true, -9223372036854775808}, 31 {[]byte{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, false, 0}, 32 } 33 34 func TestParseInt64(t *testing.T) { 35 for i, test := range int64TestData { 36 ret, err := parseInt64(test.in) 37 if (err == nil) != test.ok { 38 t.Errorf("#%d: Incorrect error result (did fail? %v, expected: %v)", i, err == nil, test.ok) 39 } 40 if test.ok && ret != test.out { 41 t.Errorf("#%d: Bad result: %v (expected %v)", i, ret, test.out) 42 } 43 } 44 } 45 46 type int32Test struct { 47 in []byte 48 ok bool 49 out int32 50 } 51 52 var int32TestData = []int32Test{ 53 {[]byte{0x00}, true, 0}, 54 {[]byte{0x7f}, true, 127}, 55 {[]byte{0x00, 0x80}, true, 128}, 56 {[]byte{0x01, 0x00}, true, 256}, 57 {[]byte{0x80}, true, -128}, 58 {[]byte{0xff, 0x7f}, true, -129}, 59 {[]byte{0xff, 0xff, 0xff, 0xff}, true, -1}, 60 {[]byte{0xff}, true, -1}, 61 {[]byte{0x80, 0x00, 0x00, 0x00}, true, -2147483648}, 62 {[]byte{0x80, 0x00, 0x00, 0x00, 0x00}, false, 0}, 63 } 64 65 func TestParseInt32(t *testing.T) { 66 for i, test := range int32TestData { 67 ret, err := parseInt32(test.in) 68 if (err == nil) != test.ok { 69 t.Errorf("#%d: Incorrect error result (did fail? %v, expected: %v)", i, err == nil, test.ok) 70 } 71 if test.ok && int32(ret) != test.out { 72 t.Errorf("#%d: Bad result: %v (expected %v)", i, ret, test.out) 73 } 74 } 75 } 76 77 var bigIntTests = []struct { 78 in []byte 79 base10 string 80 }{ 81 {[]byte{0xff}, "-1"}, 82 {[]byte{0x00}, "0"}, 83 {[]byte{0x01}, "1"}, 84 {[]byte{0x00, 0xff}, "255"}, 85 {[]byte{0xff, 0x00}, "-256"}, 86 {[]byte{0x01, 0x00}, "256"}, 87 } 88 89 func TestParseBigInt(t *testing.T) { 90 for i, test := range bigIntTests { 91 ret := parseBigInt(test.in) 92 if ret.String() != test.base10 { 93 t.Errorf("#%d: bad result from %x, got %s want %s", i, test.in, ret.String(), test.base10) 94 } 95 fw := newForkableWriter() 96 marshalBigInt(fw, ret) 97 result := fw.Bytes() 98 if !bytes.Equal(result, test.in) { 99 t.Errorf("#%d: got %x from marshaling %s, want %x", i, result, ret, test.in) 100 } 101 } 102 } 103 104 type bitStringTest struct { 105 in []byte 106 ok bool 107 out []byte 108 bitLength int 109 } 110 111 var bitStringTestData = []bitStringTest{ 112 {[]byte{}, false, []byte{}, 0}, 113 {[]byte{0x00}, true, []byte{}, 0}, 114 {[]byte{0x07, 0x00}, true, []byte{0x00}, 1}, 115 {[]byte{0x07, 0x01}, false, []byte{}, 0}, 116 {[]byte{0x07, 0x40}, false, []byte{}, 0}, 117 {[]byte{0x08, 0x00}, false, []byte{}, 0}, 118 } 119 120 func TestBitString(t *testing.T) { 121 for i, test := range bitStringTestData { 122 ret, err := parseBitString(test.in) 123 if (err == nil) != test.ok { 124 t.Errorf("#%d: Incorrect error result (did fail? %v, expected: %v)", i, err == nil, test.ok) 125 } 126 if err == nil { 127 if test.bitLength != ret.BitLength || !bytes.Equal(ret.Bytes, test.out) { 128 t.Errorf("#%d: Bad result: %v (expected %v %v)", i, ret, test.out, test.bitLength) 129 } 130 } 131 } 132 } 133 134 func TestBitStringAt(t *testing.T) { 135 bs := BitString{[]byte{0x82, 0x40}, 16} 136 if bs.At(0) != 1 { 137 t.Error("#1: Failed") 138 } 139 if bs.At(1) != 0 { 140 t.Error("#2: Failed") 141 } 142 if bs.At(6) != 1 { 143 t.Error("#3: Failed") 144 } 145 if bs.At(9) != 1 { 146 t.Error("#4: Failed") 147 } 148 } 149 150 type bitStringRightAlignTest struct { 151 in []byte 152 inlen int 153 out []byte 154 } 155 156 var bitStringRightAlignTests = []bitStringRightAlignTest{ 157 {[]byte{0x80}, 1, []byte{0x01}}, 158 {[]byte{0x80, 0x80}, 9, []byte{0x01, 0x01}}, 159 {[]byte{}, 0, []byte{}}, 160 {[]byte{0xce}, 8, []byte{0xce}}, 161 {[]byte{0xce, 0x47}, 16, []byte{0xce, 0x47}}, 162 {[]byte{0x34, 0x50}, 12, []byte{0x03, 0x45}}, 163 } 164 165 func TestBitStringRightAlign(t *testing.T) { 166 for i, test := range bitStringRightAlignTests { 167 bs := BitString{test.in, test.inlen} 168 out := bs.RightAlign() 169 if !bytes.Equal(out, test.out) { 170 t.Errorf("#%d got: %x want: %x", i, out, test.out) 171 } 172 } 173 } 174 175 type objectIdentifierTest struct { 176 in []byte 177 ok bool 178 out []int 179 } 180 181 var objectIdentifierTestData = []objectIdentifierTest{ 182 {[]byte{}, false, []int{}}, 183 {[]byte{85}, true, []int{2, 5}}, 184 {[]byte{85, 0x02}, true, []int{2, 5, 2}}, 185 {[]byte{85, 0x02, 0xc0, 0x00}, true, []int{2, 5, 2, 0x2000}}, 186 {[]byte{85, 0x02, 0xc0, 0x80, 0x80, 0x80, 0x80}, false, []int{}}, 187 } 188 189 func TestObjectIdentifier(t *testing.T) { 190 for i, test := range objectIdentifierTestData { 191 ret, err := parseObjectIdentifier(test.in) 192 if (err == nil) != test.ok { 193 t.Errorf("#%d: Incorrect error result (did fail? %v, expected: %v)", i, err == nil, test.ok) 194 } 195 if err == nil { 196 if !reflect.DeepEqual(test.out, ret) { 197 t.Errorf("#%d: Bad result: %v (expected %v)", i, ret, test.out) 198 } 199 } 200 } 201 } 202 203 type timeTest struct { 204 in string 205 ok bool 206 out time.Time 207 } 208 209 var utcTestData = []timeTest{ 210 {"910506164540-0700", true, time.Date(1991, 05, 06, 16, 45, 40, 0, time.FixedZone("", -7*60*60))}, 211 {"910506164540+0730", true, time.Date(1991, 05, 06, 16, 45, 40, 0, time.FixedZone("", 7*60*60+30*60))}, 212 {"910506234540Z", true, time.Date(1991, 05, 06, 23, 45, 40, 0, time.UTC)}, 213 {"9105062345Z", true, time.Date(1991, 05, 06, 23, 45, 0, 0, time.UTC)}, 214 {"a10506234540Z", false, time.Time{}}, 215 {"91a506234540Z", false, time.Time{}}, 216 {"9105a6234540Z", false, time.Time{}}, 217 {"910506a34540Z", false, time.Time{}}, 218 {"910506334a40Z", false, time.Time{}}, 219 {"91050633444aZ", false, time.Time{}}, 220 {"910506334461Z", false, time.Time{}}, 221 {"910506334400Za", false, time.Time{}}, 222 } 223 224 func TestUTCTime(t *testing.T) { 225 for i, test := range utcTestData { 226 ret, err := parseUTCTime([]byte(test.in)) 227 if err != nil { 228 if test.ok { 229 t.Errorf("#%d: parseUTCTime(%q) = error %v", i, test.in, err) 230 } 231 continue 232 } 233 if !test.ok { 234 t.Errorf("#%d: parseUTCTime(%q) succeeded, should have failed", i, test.in) 235 continue 236 } 237 const format = "Jan _2 15:04:05 -0700 2006" // ignore zone name, just offset 238 have := ret.Format(format) 239 want := test.out.Format(format) 240 if have != want { 241 t.Errorf("#%d: parseUTCTime(%q) = %s, want %s", i, test.in, have, want) 242 } 243 } 244 } 245 246 var generalizedTimeTestData = []timeTest{ 247 {"20100102030405Z", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.UTC)}, 248 {"20100102030405", false, time.Time{}}, 249 {"20100102030405+0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", 6*60*60+7*60))}, 250 {"20100102030405-0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", -6*60*60-7*60))}, 251 } 252 253 func TestGeneralizedTime(t *testing.T) { 254 for i, test := range generalizedTimeTestData { 255 ret, err := parseGeneralizedTime([]byte(test.in)) 256 if (err == nil) != test.ok { 257 t.Errorf("#%d: Incorrect error result (did fail? %v, expected: %v)", i, err == nil, test.ok) 258 } 259 if err == nil { 260 if !reflect.DeepEqual(test.out, ret) { 261 t.Errorf("#%d: Bad result: %v (expected %v)", i, ret, test.out) 262 } 263 } 264 } 265 } 266 267 type tagAndLengthTest struct { 268 in []byte 269 ok bool 270 out tagAndLength 271 } 272 273 var tagAndLengthData = []tagAndLengthTest{ 274 {[]byte{0x80, 0x01}, true, tagAndLength{2, 0, 1, false}}, 275 {[]byte{0xa0, 0x01}, true, tagAndLength{2, 0, 1, true}}, 276 {[]byte{0x02, 0x00}, true, tagAndLength{0, 2, 0, false}}, 277 {[]byte{0xfe, 0x00}, true, tagAndLength{3, 30, 0, true}}, 278 {[]byte{0x1f, 0x01, 0x00}, true, tagAndLength{0, 1, 0, false}}, 279 {[]byte{0x1f, 0x81, 0x00, 0x00}, true, tagAndLength{0, 128, 0, false}}, 280 {[]byte{0x1f, 0x81, 0x80, 0x01, 0x00}, true, tagAndLength{0, 0x4001, 0, false}}, 281 {[]byte{0x00, 0x81, 0x01}, true, tagAndLength{0, 0, 1, false}}, 282 {[]byte{0x00, 0x82, 0x01, 0x00}, true, tagAndLength{0, 0, 256, false}}, 283 {[]byte{0x00, 0x83, 0x01, 0x00}, false, tagAndLength{}}, 284 {[]byte{0x1f, 0x85}, false, tagAndLength{}}, 285 {[]byte{0x30, 0x80}, false, tagAndLength{}}, 286 // Superfluous zeros in the length should be an error. 287 {[]byte{0xa0, 0x82, 0x00, 0x01}, false, tagAndLength{}}, 288 // Lengths up to the maximum size of an int should work. 289 {[]byte{0xa0, 0x84, 0x7f, 0xff, 0xff, 0xff}, true, tagAndLength{2, 0, 0x7fffffff, true}}, 290 // Lengths that would overflow an int should be rejected. 291 {[]byte{0xa0, 0x84, 0x80, 0x00, 0x00, 0x00}, false, tagAndLength{}}, 292 } 293 294 func TestParseTagAndLength(t *testing.T) { 295 for i, test := range tagAndLengthData { 296 tagAndLength, _, err := parseTagAndLength(test.in, 0) 297 if (err == nil) != test.ok { 298 t.Errorf("#%d: Incorrect error result (did pass? %v, expected: %v)", i, err == nil, test.ok) 299 } 300 if err == nil && !reflect.DeepEqual(test.out, tagAndLength) { 301 t.Errorf("#%d: Bad result: %v (expected %v)", i, tagAndLength, test.out) 302 } 303 } 304 } 305 306 type parseFieldParametersTest struct { 307 in string 308 out fieldParameters 309 } 310 311 func newInt(n int) *int { return &n } 312 313 func newInt64(n int64) *int64 { return &n } 314 315 func newString(s string) *string { return &s } 316 317 func newBool(b bool) *bool { return &b } 318 319 var parseFieldParametersTestData []parseFieldParametersTest = []parseFieldParametersTest{ 320 {"", fieldParameters{}}, 321 {"ia5", fieldParameters{stringType: tagIA5String}}, 322 {"printable", fieldParameters{stringType: tagPrintableString}}, 323 {"optional", fieldParameters{optional: true}}, 324 {"explicit", fieldParameters{explicit: true, tag: new(int)}}, 325 {"application", fieldParameters{application: true, tag: new(int)}}, 326 {"optional,explicit", fieldParameters{optional: true, explicit: true, tag: new(int)}}, 327 {"default:42", fieldParameters{defaultValue: newInt64(42)}}, 328 {"tag:17", fieldParameters{tag: newInt(17)}}, 329 {"optional,explicit,default:42,tag:17", fieldParameters{optional: true, explicit: true, defaultValue: newInt64(42), tag: newInt(17)}}, 330 {"optional,explicit,default:42,tag:17,rubbish1", fieldParameters{true, true, false, newInt64(42), newInt(17), 0, false, false}}, 331 {"set", fieldParameters{set: true}}, 332 } 333 334 func TestParseFieldParameters(t *testing.T) { 335 for i, test := range parseFieldParametersTestData { 336 f := parseFieldParameters(test.in) 337 if !reflect.DeepEqual(f, test.out) { 338 t.Errorf("#%d: Bad result: %v (expected %v)", i, f, test.out) 339 } 340 } 341 } 342 343 type TestObjectIdentifierStruct struct { 344 OID ObjectIdentifier 345 } 346 347 type TestContextSpecificTags struct { 348 A int `asn1:"tag:1"` 349 } 350 351 type TestContextSpecificTags2 struct { 352 A int `asn1:"explicit,tag:1"` 353 B int 354 } 355 356 type TestElementsAfterString struct { 357 S string 358 A, B int 359 } 360 361 type TestBigInt struct { 362 X *big.Int 363 } 364 365 var unmarshalTestData = []struct { 366 in []byte 367 out interface{} 368 }{ 369 {[]byte{0x02, 0x01, 0x42}, newInt(0x42)}, 370 {[]byte{0x30, 0x08, 0x06, 0x06, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d}, &TestObjectIdentifierStruct{[]int{1, 2, 840, 113549}}}, 371 {[]byte{0x03, 0x04, 0x06, 0x6e, 0x5d, 0xc0}, &BitString{[]byte{110, 93, 192}, 18}}, 372 {[]byte{0x30, 0x09, 0x02, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x01, 0x03}, &[]int{1, 2, 3}}, 373 {[]byte{0x02, 0x01, 0x10}, newInt(16)}, 374 {[]byte{0x13, 0x04, 't', 'e', 's', 't'}, newString("test")}, 375 {[]byte{0x16, 0x04, 't', 'e', 's', 't'}, newString("test")}, 376 {[]byte{0x16, 0x04, 't', 'e', 's', 't'}, &RawValue{0, 22, false, []byte("test"), []byte("\x16\x04test")}}, 377 {[]byte{0x04, 0x04, 1, 2, 3, 4}, &RawValue{0, 4, false, []byte{1, 2, 3, 4}, []byte{4, 4, 1, 2, 3, 4}}}, 378 {[]byte{0x30, 0x03, 0x81, 0x01, 0x01}, &TestContextSpecificTags{1}}, 379 {[]byte{0x30, 0x08, 0xa1, 0x03, 0x02, 0x01, 0x01, 0x02, 0x01, 0x02}, &TestContextSpecificTags2{1, 2}}, 380 {[]byte{0x01, 0x01, 0x00}, newBool(false)}, 381 {[]byte{0x01, 0x01, 0x01}, newBool(true)}, 382 {[]byte{0x30, 0x0b, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x02, 0x01, 0x22, 0x02, 0x01, 0x33}, &TestElementsAfterString{"foo", 0x22, 0x33}}, 383 {[]byte{0x30, 0x05, 0x02, 0x03, 0x12, 0x34, 0x56}, &TestBigInt{big.NewInt(0x123456)}}, 384 } 385 386 func TestUnmarshal(t *testing.T) { 387 for i, test := range unmarshalTestData { 388 pv := reflect.New(reflect.TypeOf(test.out).Elem()) 389 val := pv.Interface() 390 _, err := Unmarshal(test.in, val) 391 if err != nil { 392 t.Errorf("Unmarshal failed at index %d %v", i, err) 393 } 394 if !reflect.DeepEqual(val, test.out) { 395 t.Errorf("#%d:\nhave %#v\nwant %#v", i, val, test.out) 396 } 397 } 398 } 399 400 type Certificate struct { 401 TBSCertificate TBSCertificate 402 SignatureAlgorithm AlgorithmIdentifier 403 SignatureValue BitString 404 } 405 406 type TBSCertificate struct { 407 Version int `asn1:"optional,explicit,default:0,tag:0"` 408 SerialNumber RawValue 409 SignatureAlgorithm AlgorithmIdentifier 410 Issuer RDNSequence 411 Validity Validity 412 Subject RDNSequence 413 PublicKey PublicKeyInfo 414 } 415 416 type AlgorithmIdentifier struct { 417 Algorithm ObjectIdentifier 418 } 419 420 type RDNSequence []RelativeDistinguishedNameSET 421 422 type RelativeDistinguishedNameSET []AttributeTypeAndValue 423 424 type AttributeTypeAndValue struct { 425 Type ObjectIdentifier 426 Value interface{} 427 } 428 429 type Validity struct { 430 NotBefore, NotAfter time.Time 431 } 432 433 type PublicKeyInfo struct { 434 Algorithm AlgorithmIdentifier 435 PublicKey BitString 436 } 437 438 func TestCertificate(t *testing.T) { 439 // This is a minimal, self-signed certificate that should parse correctly. 440 var cert Certificate 441 if _, err := Unmarshal(derEncodedSelfSignedCertBytes, &cert); err != nil { 442 t.Errorf("Unmarshal failed: %v", err) 443 } 444 if !reflect.DeepEqual(cert, derEncodedSelfSignedCert) { 445 t.Errorf("Bad result:\ngot: %+v\nwant: %+v", cert, derEncodedSelfSignedCert) 446 } 447 } 448 449 func TestCertificateWithNUL(t *testing.T) { 450 // This is the paypal NUL-hack certificate. It should fail to parse because 451 // NUL isn't a permitted character in a PrintableString. 452 453 var cert Certificate 454 if _, err := Unmarshal(derEncodedPaypalNULCertBytes, &cert); err == nil { 455 t.Error("Unmarshal succeeded, should not have") 456 } 457 } 458 459 type rawStructTest struct { 460 Raw RawContent 461 A int 462 } 463 464 func TestRawStructs(t *testing.T) { 465 var s rawStructTest 466 input := []byte{0x30, 0x03, 0x02, 0x01, 0x50} 467 468 rest, err := Unmarshal(input, &s) 469 if len(rest) != 0 { 470 t.Errorf("incomplete parse: %x", rest) 471 return 472 } 473 if err != nil { 474 t.Error(err) 475 return 476 } 477 if s.A != 0x50 { 478 t.Errorf("bad value for A: got %d want %d", s.A, 0x50) 479 } 480 if !bytes.Equal([]byte(s.Raw), input) { 481 t.Errorf("bad value for Raw: got %x want %x", s.Raw, input) 482 } 483 } 484 485 var derEncodedSelfSignedCert = Certificate{ 486 TBSCertificate: TBSCertificate{ 487 Version: 0, 488 SerialNumber: RawValue{Class: 0, Tag: 2, IsCompound: false, Bytes: []uint8{0x0, 0x8c, 0xc3, 0x37, 0x92, 0x10, 0xec, 0x2c, 0x98}, FullBytes: []byte{2, 9, 0x0, 0x8c, 0xc3, 0x37, 0x92, 0x10, 0xec, 0x2c, 0x98}}, 489 SignatureAlgorithm: AlgorithmIdentifier{Algorithm: ObjectIdentifier{1, 2, 840, 113549, 1, 1, 5}}, 490 Issuer: RDNSequence{ 491 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 6}, Value: "XX"}}, 492 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 8}, Value: "Some-State"}}, 493 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 7}, Value: "City"}}, 494 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 10}, Value: "Internet Widgits Pty Ltd"}}, 495 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 3}, Value: "false.example.com"}}, 496 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{1, 2, 840, 113549, 1, 9, 1}, Value: "false@example.com"}}, 497 }, 498 Validity: Validity{ 499 NotBefore: time.Date(2009, 10, 8, 00, 25, 53, 0, time.UTC), 500 NotAfter: time.Date(2010, 10, 8, 00, 25, 53, 0, time.UTC), 501 }, 502 Subject: RDNSequence{ 503 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 6}, Value: "XX"}}, 504 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 8}, Value: "Some-State"}}, 505 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 7}, Value: "City"}}, 506 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 10}, Value: "Internet Widgits Pty Ltd"}}, 507 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{2, 5, 4, 3}, Value: "false.example.com"}}, 508 RelativeDistinguishedNameSET{AttributeTypeAndValue{Type: ObjectIdentifier{1, 2, 840, 113549, 1, 9, 1}, Value: "false@example.com"}}, 509 }, 510 PublicKey: PublicKeyInfo{ 511 Algorithm: AlgorithmIdentifier{Algorithm: ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1}}, 512 PublicKey: BitString{ 513 Bytes: []uint8{ 514 0x30, 0x48, 0x2, 0x41, 0x0, 0xcd, 0xb7, 515 0x63, 0x9c, 0x32, 0x78, 0xf0, 0x6, 0xaa, 0x27, 0x7f, 0x6e, 0xaf, 0x42, 516 0x90, 0x2b, 0x59, 0x2d, 0x8c, 0xbc, 0xbe, 0x38, 0xa1, 0xc9, 0x2b, 0xa4, 517 0x69, 0x5a, 0x33, 0x1b, 0x1d, 0xea, 0xde, 0xad, 0xd8, 0xe9, 0xa5, 0xc2, 518 0x7e, 0x8c, 0x4c, 0x2f, 0xd0, 0xa8, 0x88, 0x96, 0x57, 0x72, 0x2a, 0x4f, 519 0x2a, 0xf7, 0x58, 0x9c, 0xf2, 0xc7, 0x70, 0x45, 0xdc, 0x8f, 0xde, 0xec, 520 0x35, 0x7d, 0x2, 0x3, 0x1, 0x0, 0x1, 521 }, 522 BitLength: 592, 523 }, 524 }, 525 }, 526 SignatureAlgorithm: AlgorithmIdentifier{Algorithm: ObjectIdentifier{1, 2, 840, 113549, 1, 1, 5}}, 527 SignatureValue: BitString{ 528 Bytes: []uint8{ 529 0xa6, 0x7b, 0x6, 0xec, 0x5e, 0xce, 530 0x92, 0x77, 0x2c, 0xa4, 0x13, 0xcb, 0xa3, 0xca, 0x12, 0x56, 0x8f, 0xdc, 0x6c, 531 0x7b, 0x45, 0x11, 0xcd, 0x40, 0xa7, 0xf6, 0x59, 0x98, 0x4, 0x2, 0xdf, 0x2b, 532 0x99, 0x8b, 0xb9, 0xa4, 0xa8, 0xcb, 0xeb, 0x34, 0xc0, 0xf0, 0xa7, 0x8c, 0xf8, 533 0xd9, 0x1e, 0xde, 0x14, 0xa5, 0xed, 0x76, 0xbf, 0x11, 0x6f, 0xe3, 0x60, 0xaa, 534 0xfa, 0x88, 0x21, 0x49, 0x4, 0x35, 535 }, 536 BitLength: 512, 537 }, 538 } 539 540 var derEncodedSelfSignedCertBytes = []byte{ 541 0x30, 0x82, 0x02, 0x18, 0x30, 542 0x82, 0x01, 0xc2, 0x02, 0x09, 0x00, 0x8c, 0xc3, 0x37, 0x92, 0x10, 0xec, 0x2c, 543 0x98, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 544 0x05, 0x05, 0x00, 0x30, 0x81, 0x92, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 545 0x04, 0x06, 0x13, 0x02, 0x58, 0x58, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 546 0x04, 0x08, 0x13, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 547 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x04, 0x43, 548 0x69, 0x74, 0x79, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 549 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 550 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x31, 551 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x66, 0x61, 0x6c, 552 0x73, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 553 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 554 0x01, 0x09, 0x01, 0x16, 0x11, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x40, 0x65, 0x78, 555 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 556 0x30, 0x39, 0x31, 0x30, 0x30, 0x38, 0x30, 0x30, 0x32, 0x35, 0x35, 0x33, 0x5a, 557 0x17, 0x0d, 0x31, 0x30, 0x31, 0x30, 0x30, 0x38, 0x30, 0x30, 0x32, 0x35, 0x35, 558 0x33, 0x5a, 0x30, 0x81, 0x92, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 559 0x06, 0x13, 0x02, 0x58, 0x58, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 560 0x08, 0x13, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 561 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x04, 0x43, 0x69, 562 0x74, 0x79, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 563 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 564 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x31, 0x1a, 565 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x66, 0x61, 0x6c, 0x73, 566 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 567 0x31, 0x20, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 568 0x09, 0x01, 0x16, 0x11, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x40, 0x65, 0x78, 0x61, 569 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x5c, 0x30, 0x0d, 0x06, 570 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 571 0x4b, 0x00, 0x30, 0x48, 0x02, 0x41, 0x00, 0xcd, 0xb7, 0x63, 0x9c, 0x32, 0x78, 572 0xf0, 0x06, 0xaa, 0x27, 0x7f, 0x6e, 0xaf, 0x42, 0x90, 0x2b, 0x59, 0x2d, 0x8c, 573 0xbc, 0xbe, 0x38, 0xa1, 0xc9, 0x2b, 0xa4, 0x69, 0x5a, 0x33, 0x1b, 0x1d, 0xea, 574 0xde, 0xad, 0xd8, 0xe9, 0xa5, 0xc2, 0x7e, 0x8c, 0x4c, 0x2f, 0xd0, 0xa8, 0x88, 575 0x96, 0x57, 0x72, 0x2a, 0x4f, 0x2a, 0xf7, 0x58, 0x9c, 0xf2, 0xc7, 0x70, 0x45, 576 0xdc, 0x8f, 0xde, 0xec, 0x35, 0x7d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x0d, 577 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 578 0x03, 0x41, 0x00, 0xa6, 0x7b, 0x06, 0xec, 0x5e, 0xce, 0x92, 0x77, 0x2c, 0xa4, 579 0x13, 0xcb, 0xa3, 0xca, 0x12, 0x56, 0x8f, 0xdc, 0x6c, 0x7b, 0x45, 0x11, 0xcd, 580 0x40, 0xa7, 0xf6, 0x59, 0x98, 0x04, 0x02, 0xdf, 0x2b, 0x99, 0x8b, 0xb9, 0xa4, 581 0xa8, 0xcb, 0xeb, 0x34, 0xc0, 0xf0, 0xa7, 0x8c, 0xf8, 0xd9, 0x1e, 0xde, 0x14, 582 0xa5, 0xed, 0x76, 0xbf, 0x11, 0x6f, 0xe3, 0x60, 0xaa, 0xfa, 0x88, 0x21, 0x49, 583 0x04, 0x35, 584 } 585 586 var derEncodedPaypalNULCertBytes = []byte{ 587 0x30, 0x82, 0x06, 0x44, 0x30, 588 0x82, 0x05, 0xad, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x03, 0x00, 0xf0, 0x9b, 589 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 590 0x05, 0x00, 0x30, 0x82, 0x01, 0x12, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 591 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 592 0x04, 0x08, 0x13, 0x09, 0x42, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x6f, 0x6e, 0x61, 593 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x42, 0x61, 594 0x72, 0x63, 0x65, 0x6c, 0x6f, 0x6e, 0x61, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 595 0x55, 0x04, 0x0a, 0x13, 0x20, 0x49, 0x50, 0x53, 0x20, 0x43, 0x65, 0x72, 0x74, 596 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 597 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x73, 0x2e, 0x6c, 0x2e, 0x31, 0x2e, 598 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x14, 0x25, 0x67, 0x65, 0x6e, 0x65, 599 0x72, 0x61, 0x6c, 0x40, 0x69, 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 600 0x20, 0x43, 0x2e, 0x49, 0x2e, 0x46, 0x2e, 0x20, 0x20, 0x42, 0x2d, 0x42, 0x36, 601 0x32, 0x32, 0x31, 0x30, 0x36, 0x39, 0x35, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 602 0x55, 0x04, 0x0b, 0x13, 0x25, 0x69, 0x70, 0x73, 0x43, 0x41, 0x20, 0x43, 0x4c, 603 0x41, 0x53, 0x45, 0x41, 0x31, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 604 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 605 0x69, 0x74, 0x79, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 606 0x25, 0x69, 0x70, 0x73, 0x43, 0x41, 0x20, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 607 0x31, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 608 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 609 0x20, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 610 0x01, 0x16, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x40, 0x69, 0x70, 611 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 612 0x30, 0x32, 0x32, 0x34, 0x32, 0x33, 0x30, 0x34, 0x31, 0x37, 0x5a, 0x17, 0x0d, 613 0x31, 0x31, 0x30, 0x32, 0x32, 0x34, 0x32, 0x33, 0x30, 0x34, 0x31, 0x37, 0x5a, 614 0x30, 0x81, 0x94, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 615 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 616 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x31, 0x16, 617 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0d, 0x53, 0x61, 0x6e, 0x20, 618 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x31, 0x11, 0x30, 0x0f, 619 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 620 0x74, 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0b, 621 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x31, 0x2f, 622 0x30, 0x2d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x26, 0x77, 0x77, 0x77, 0x2e, 623 0x70, 0x61, 0x79, 0x70, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x00, 0x73, 0x73, 624 0x6c, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 625 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x63, 0x30, 0x81, 0x9f, 0x30, 0x0d, 626 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 627 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xd2, 0x69, 628 0xfa, 0x6f, 0x3a, 0x00, 0xb4, 0x21, 0x1b, 0xc8, 0xb1, 0x02, 0xd7, 0x3f, 0x19, 629 0xb2, 0xc4, 0x6d, 0xb4, 0x54, 0xf8, 0x8b, 0x8a, 0xcc, 0xdb, 0x72, 0xc2, 0x9e, 630 0x3c, 0x60, 0xb9, 0xc6, 0x91, 0x3d, 0x82, 0xb7, 0x7d, 0x99, 0xff, 0xd1, 0x29, 631 0x84, 0xc1, 0x73, 0x53, 0x9c, 0x82, 0xdd, 0xfc, 0x24, 0x8c, 0x77, 0xd5, 0x41, 632 0xf3, 0xe8, 0x1e, 0x42, 0xa1, 0xad, 0x2d, 0x9e, 0xff, 0x5b, 0x10, 0x26, 0xce, 633 0x9d, 0x57, 0x17, 0x73, 0x16, 0x23, 0x38, 0xc8, 0xd6, 0xf1, 0xba, 0xa3, 0x96, 634 0x5b, 0x16, 0x67, 0x4a, 0x4f, 0x73, 0x97, 0x3a, 0x4d, 0x14, 0xa4, 0xf4, 0xe2, 635 0x3f, 0x8b, 0x05, 0x83, 0x42, 0xd1, 0xd0, 0xdc, 0x2f, 0x7a, 0xe5, 0xb6, 0x10, 636 0xb2, 0x11, 0xc0, 0xdc, 0x21, 0x2a, 0x90, 0xff, 0xae, 0x97, 0x71, 0x5a, 0x49, 637 0x81, 0xac, 0x40, 0xf3, 0x3b, 0xb8, 0x59, 0xb2, 0x4f, 0x02, 0x03, 0x01, 0x00, 638 0x01, 0xa3, 0x82, 0x03, 0x21, 0x30, 0x82, 0x03, 0x1d, 0x30, 0x09, 0x06, 0x03, 639 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x11, 0x06, 0x09, 0x60, 0x86, 640 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x01, 0x04, 0x04, 0x03, 0x02, 0x06, 0x40, 641 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x03, 0xf8, 642 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 643 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x1d, 0x06, 0x03, 0x55, 644 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x61, 0x8f, 0x61, 0x34, 0x43, 0x55, 0x14, 645 0x7f, 0x27, 0x09, 0xce, 0x4c, 0x8b, 0xea, 0x9b, 0x7b, 0x19, 0x25, 0xbc, 0x6e, 646 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 647 0x0e, 0x07, 0x60, 0xd4, 0x39, 0xc9, 0x1b, 0x5b, 0x5d, 0x90, 0x7b, 0x23, 0xc8, 648 0xd2, 0x34, 0x9d, 0x4a, 0x9a, 0x46, 0x39, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 649 0x11, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x1d, 0x12, 0x04, 650 0x15, 0x30, 0x13, 0x81, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x40, 651 0x69, 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x72, 0x06, 0x09, 652 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x0d, 0x04, 0x65, 0x16, 0x63, 653 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 654 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4e, 655 0x4f, 0x54, 0x20, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x45, 0x44, 0x2e, 656 0x20, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 0x31, 0x20, 0x53, 0x65, 0x72, 0x76, 657 0x65, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 658 0x65, 0x20, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x68, 659 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x70, 660 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x30, 0x2f, 0x06, 0x09, 0x60, 661 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x02, 0x04, 0x22, 0x16, 0x20, 0x68, 662 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x70, 663 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 664 0x32, 0x30, 0x30, 0x32, 0x2f, 0x30, 0x43, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 665 0x86, 0xf8, 0x42, 0x01, 0x04, 0x04, 0x36, 0x16, 0x34, 0x68, 0x74, 0x74, 0x70, 666 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x70, 0x73, 0x63, 0x61, 667 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 0x32, 0x30, 0x30, 668 0x32, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 0x32, 0x30, 0x30, 0x32, 0x43, 0x4c, 669 0x41, 0x53, 0x45, 0x41, 0x31, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x46, 0x06, 0x09, 670 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x03, 0x04, 0x39, 0x16, 0x37, 671 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 672 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 673 0x61, 0x32, 0x30, 0x30, 0x32, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 674 0x69, 0x6f, 0x6e, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 0x31, 0x2e, 0x68, 0x74, 675 0x6d, 0x6c, 0x3f, 0x30, 0x43, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 676 0x42, 0x01, 0x07, 0x04, 0x36, 0x16, 0x34, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 677 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 678 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 0x32, 0x30, 0x30, 0x32, 0x2f, 679 0x72, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 680 0x31, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x3f, 0x30, 0x41, 0x06, 0x09, 0x60, 0x86, 681 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x08, 0x04, 0x34, 0x16, 0x32, 0x68, 0x74, 682 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x70, 0x73, 683 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 0x32, 684 0x30, 0x30, 0x32, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x4c, 0x41, 685 0x53, 0x45, 0x41, 0x31, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x30, 0x81, 0x83, 0x06, 686 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x7c, 0x30, 0x7a, 0x30, 0x39, 0xa0, 0x37, 0xa0, 687 0x35, 0x86, 0x33, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 688 0x2e, 0x69, 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 689 0x73, 0x63, 0x61, 0x32, 0x30, 0x30, 0x32, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 690 0x32, 0x30, 0x30, 0x32, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 0x31, 0x2e, 0x63, 691 0x72, 0x6c, 0x30, 0x3d, 0xa0, 0x3b, 0xa0, 0x39, 0x86, 0x37, 0x68, 0x74, 0x74, 692 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x69, 693 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x70, 0x73, 0x63, 694 0x61, 0x32, 0x30, 0x30, 0x32, 0x2f, 0x69, 0x70, 0x73, 0x63, 0x61, 0x32, 0x30, 695 0x30, 0x32, 0x43, 0x4c, 0x41, 0x53, 0x45, 0x41, 0x31, 0x2e, 0x63, 0x72, 0x6c, 696 0x30, 0x32, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 697 0x26, 0x30, 0x24, 0x30, 0x22, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 698 0x30, 0x01, 0x86, 0x16, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 699 0x73, 0x70, 0x2e, 0x69, 0x70, 0x73, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 700 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 701 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x68, 0xee, 0x79, 0x97, 0x97, 0xdd, 0x3b, 702 0xef, 0x16, 0x6a, 0x06, 0xf2, 0x14, 0x9a, 0x6e, 0xcd, 0x9e, 0x12, 0xf7, 0xaa, 703 0x83, 0x10, 0xbd, 0xd1, 0x7c, 0x98, 0xfa, 0xc7, 0xae, 0xd4, 0x0e, 0x2c, 0x9e, 704 0x38, 0x05, 0x9d, 0x52, 0x60, 0xa9, 0x99, 0x0a, 0x81, 0xb4, 0x98, 0x90, 0x1d, 705 0xae, 0xbb, 0x4a, 0xd7, 0xb9, 0xdc, 0x88, 0x9e, 0x37, 0x78, 0x41, 0x5b, 0xf7, 706 0x82, 0xa5, 0xf2, 0xba, 0x41, 0x25, 0x5a, 0x90, 0x1a, 0x1e, 0x45, 0x38, 0xa1, 707 0x52, 0x58, 0x75, 0x94, 0x26, 0x44, 0xfb, 0x20, 0x07, 0xba, 0x44, 0xcc, 0xe5, 708 0x4a, 0x2d, 0x72, 0x3f, 0x98, 0x47, 0xf6, 0x26, 0xdc, 0x05, 0x46, 0x05, 0x07, 709 0x63, 0x21, 0xab, 0x46, 0x9b, 0x9c, 0x78, 0xd5, 0x54, 0x5b, 0x3d, 0x0c, 0x1e, 710 0xc8, 0x64, 0x8c, 0xb5, 0x50, 0x23, 0x82, 0x6f, 0xdb, 0xb8, 0x22, 0x1c, 0x43, 711 0x96, 0x07, 0xa8, 0xbb, 712 }