Merge pull request #363 from letsencrypt/cps
Update cfssl dependency to latest master
This commit is contained in:
		
						commit
						dfc76e59bf
					
				|  | @ -10,93 +10,53 @@ | |||
| 			"Comment": "v2.0.0-21-gea76b31", | ||||
| 			"Rev": "ea76b313ca75d0a41a3fd02af88326a9ce225b60" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cf-tls/tls", | ||||
| 			"Rev": "9b22c194563b88ed8040c1e82d41aa2801826007" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/api", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/auth", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/bundler", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/cli", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/cmd/cfssl", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/config", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/crypto/pkcs11key", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/crypto/pkcs12", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/crypto/pkcs7", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/csr", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/errors", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/helpers", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/info", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/initca", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/log", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/ocsp", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/revoke", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/scan", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/selfsign", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/signer", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/cloudflare/cfssl/ubiquity", | ||||
| 			"Rev": "39ec5f93190f042ddf337955d4df679b0305c9df" | ||||
| 			"Rev": "6f428f654df58d23d1321bcbe3598f6b8a02167a" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"ImportPath": "github.com/codegangsta/cli", | ||||
|  |  | |||
|  | @ -1,79 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import "strconv" | ||||
| 
 | ||||
| type alert uint8 | ||||
| 
 | ||||
| const ( | ||||
| 	// alert level
 | ||||
| 	alertLevelWarning = 1 | ||||
| 	alertLevelError   = 2 | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	alertCloseNotify            alert = 0 | ||||
| 	alertUnexpectedMessage      alert = 10 | ||||
| 	alertBadRecordMAC           alert = 20 | ||||
| 	alertDecryptionFailed       alert = 21 | ||||
| 	alertRecordOverflow         alert = 22 | ||||
| 	alertDecompressionFailure   alert = 30 | ||||
| 	alertHandshakeFailure       alert = 40 | ||||
| 	alertBadCertificate         alert = 42 | ||||
| 	alertUnsupportedCertificate alert = 43 | ||||
| 	alertCertificateRevoked     alert = 44 | ||||
| 	alertCertificateExpired     alert = 45 | ||||
| 	alertCertificateUnknown     alert = 46 | ||||
| 	alertIllegalParameter       alert = 47 | ||||
| 	alertUnknownCA              alert = 48 | ||||
| 	alertAccessDenied           alert = 49 | ||||
| 	alertDecodeError            alert = 50 | ||||
| 	alertDecryptError           alert = 51 | ||||
| 	alertProtocolVersion        alert = 70 | ||||
| 	alertInsufficientSecurity   alert = 71 | ||||
| 	alertInternalError          alert = 80 | ||||
| 	alertInappropriateFallback  alert = 86 | ||||
| 	alertUserCanceled           alert = 90 | ||||
| 	alertNoRenegotiation        alert = 100 | ||||
| ) | ||||
| 
 | ||||
| var alertText = map[alert]string{ | ||||
| 	alertCloseNotify:            "close notify", | ||||
| 	alertUnexpectedMessage:      "unexpected message", | ||||
| 	alertBadRecordMAC:           "bad record MAC", | ||||
| 	alertDecryptionFailed:       "decryption failed", | ||||
| 	alertRecordOverflow:         "record overflow", | ||||
| 	alertDecompressionFailure:   "decompression failure", | ||||
| 	alertHandshakeFailure:       "handshake failure", | ||||
| 	alertBadCertificate:         "bad certificate", | ||||
| 	alertUnsupportedCertificate: "unsupported certificate", | ||||
| 	alertCertificateRevoked:     "revoked certificate", | ||||
| 	alertCertificateExpired:     "expired certificate", | ||||
| 	alertCertificateUnknown:     "unknown certificate", | ||||
| 	alertIllegalParameter:       "illegal parameter", | ||||
| 	alertUnknownCA:              "unknown certificate authority", | ||||
| 	alertAccessDenied:           "access denied", | ||||
| 	alertDecodeError:            "error decoding message", | ||||
| 	alertDecryptError:           "error decrypting message", | ||||
| 	alertProtocolVersion:        "protocol version not supported", | ||||
| 	alertInsufficientSecurity:   "insufficient security level", | ||||
| 	alertInternalError:          "internal error", | ||||
| 	alertInappropriateFallback:  "inappropriate fallback", | ||||
| 	alertUserCanceled:           "user canceled", | ||||
| 	alertNoRenegotiation:        "no renegotiation", | ||||
| } | ||||
| 
 | ||||
| func (e alert) String() string { | ||||
| 	s, ok := alertText[e] | ||||
| 	if ok { | ||||
| 		return s | ||||
| 	} | ||||
| 	return "alert(" + strconv.Itoa(int(e)) + ")" | ||||
| } | ||||
| 
 | ||||
| func (e alert) Error() string { | ||||
| 	return e.String() | ||||
| } | ||||
|  | @ -1,385 +0,0 @@ | |||
| package tls | ||||
| 
 | ||||
| const ( | ||||
| 	hNone uint8 = iota | ||||
| 	hMD5 | ||||
| 	hSHA1 | ||||
| 	hSHA224 | ||||
| 	hSHA256 | ||||
| 	hSHA384 | ||||
| 	hSHA512 | ||||
| ) | ||||
| 
 | ||||
| // Signature algorithms for TLS 1.2 (See RFC 5246, section A.4.1)
 | ||||
| const ( | ||||
| 	sigAnon uint8 = iota | ||||
| 	sigDSA | ||||
| 	sigRSA | ||||
| 	sigECDSA | ||||
| ) | ||||
| 
 | ||||
| // allSignatureAndHashAlgorithms contains all possible signature and
 | ||||
| // hash algorithm pairs that the can be advertised in a TLS 1.2 ClientHello.
 | ||||
| var allSignatureAndHashAlgorithms []signatureAndHash | ||||
| 
 | ||||
| func init() { | ||||
| 	for hash := hNone; hash <= hSHA512; hash++ { | ||||
| 		for signature := sigAnon; signature <= sigECDSA; signature++ { | ||||
| 			allSignatureAndHashAlgorithms = append(allSignatureAndHashAlgorithms, | ||||
| 				signatureAndHash{hash, signature}) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // TLSVersions is a list of the current SSL/TLS Versions implemented by Go
 | ||||
| var Versions = map[uint16]string{ | ||||
| 	VersionSSL30: "SSL 3.0", | ||||
| 	VersionTLS10: "TLS 1.0", | ||||
| 	VersionTLS11: "TLS 1.1", | ||||
| 	VersionTLS12: "TLS 1.2", | ||||
| } | ||||
| 
 | ||||
| // CipherSuite describes an individual cipher suite, with long and short names
 | ||||
| // and security properties.
 | ||||
| type CipherSuite struct { | ||||
| 	Name, ShortName string | ||||
| 	// ForwardSecret cipher suites negotiate ephemeral keys, allowing forward secrecy.
 | ||||
| 	ForwardSecret bool | ||||
| } | ||||
| 
 | ||||
| // Returns the (short) name of the cipher suite.
 | ||||
| func (c CipherSuite) String() string { | ||||
| 	if c.ShortName != "" { | ||||
| 		return c.ShortName | ||||
| 	} | ||||
| 	return c.Name | ||||
| } | ||||
| 
 | ||||
| // CipherSuites contains all values in the TLS Cipher Suite Registry
 | ||||
| // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
 | ||||
| var CipherSuites = map[uint16]CipherSuite{ | ||||
| 	0X0000: {Name: "TLS_NULL_WITH_NULL_NULL"}, | ||||
| 	0X0001: {Name: "TLS_RSA_WITH_NULL_MD5"}, | ||||
| 	0X0002: {Name: "TLS_RSA_WITH_NULL_SHA"}, | ||||
| 	0X0003: {Name: "TLS_RSA_EXPORT_WITH_RC4_40_MD5", ShortName: "EXP-RC4-MD5"}, | ||||
| 	0X0004: {Name: "TLS_RSA_WITH_RC4_128_MD5", ShortName: "RC4-MD5"}, | ||||
| 	0X0005: {Name: "TLS_RSA_WITH_RC4_128_SHA", ShortName: "RC4-SHA"}, | ||||
| 	0X0006: {Name: "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", ShortName: "EXP-RC2-CBC-MD5"}, | ||||
| 	0X0007: {Name: "TLS_RSA_WITH_IDEA_CBC_SHA", ShortName: "IDEA-CBC-SHA"}, | ||||
| 	0X0008: {Name: "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DES-CBC-SHA"}, | ||||
| 	0X0009: {Name: "TLS_RSA_WITH_DES_CBC_SHA", ShortName: "DES-CBC-SHA"}, | ||||
| 	0X000A: {Name: "TLS_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "DES-CBC3-SHA"}, | ||||
| 	0X000B: {Name: "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DH-DSS-DES-CBC-SHA"}, | ||||
| 	0X000C: {Name: "TLS_DH_DSS_WITH_DES_CBC_SHA", ShortName: "DH-DSS-DES-CBC-SHA"}, | ||||
| 	0X000D: {Name: "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "DH-DSS-DES-CBC3-SHA"}, | ||||
| 	0X000E: {Name: "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DH-RSA-DES-CBC-SHA"}, | ||||
| 	0X000F: {Name: "TLS_DH_RSA_WITH_DES_CBC_SHA", ShortName: "DH-RSA-DES-CBC-SHA"}, | ||||
| 	0X0010: {Name: "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "DH-RSA-DES-CBC3-SHA"}, | ||||
| 	0X0011: {Name: "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-EDH-DSS-DES-CBC-SHA", ForwardSecret: true}, | ||||
| 	0X0012: {Name: "TLS_DHE_DSS_WITH_DES_CBC_SHA", ShortName: "EDH-DSS-DES-CBC-SHA", ForwardSecret: true}, | ||||
| 	0X0013: {Name: "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "EDH-DSS-DES-CBC3-SHA", ForwardSecret: true}, | ||||
| 	0X0014: {Name: "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-EDH-RSA-DES-CBC-SHA", ForwardSecret: true}, | ||||
| 	0X0015: {Name: "TLS_DHE_RSA_WITH_DES_CBC_SHA", ShortName: "EDH-RSA-DES-CBC-SHA", ForwardSecret: true}, | ||||
| 	0X0016: {Name: "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "EDH-RSA-DES-CBC3-SHA", ForwardSecret: true}, | ||||
| 	0X0017: {Name: "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"}, | ||||
| 	0X0018: {Name: "TLS_DH_anon_WITH_RC4_128_MD5"}, | ||||
| 	0X0019: {Name: "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"}, | ||||
| 	0X001A: {Name: "TLS_DH_anon_WITH_DES_CBC_SHA"}, | ||||
| 	0X001B: {Name: "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"}, | ||||
| 	0X001E: {Name: "TLS_KRB5_WITH_DES_CBC_SHA"}, | ||||
| 	0X001F: {Name: "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"}, | ||||
| 	0X0020: {Name: "TLS_KRB5_WITH_RC4_128_SHA"}, | ||||
| 	0X0021: {Name: "TLS_KRB5_WITH_IDEA_CBC_SHA"}, | ||||
| 	0X0022: {Name: "TLS_KRB5_WITH_DES_CBC_MD5"}, | ||||
| 	0X0023: {Name: "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"}, | ||||
| 	0X0024: {Name: "TLS_KRB5_WITH_RC4_128_MD5"}, | ||||
| 	0X0025: {Name: "TLS_KRB5_WITH_IDEA_CBC_MD5"}, | ||||
| 	0X0026: {Name: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"}, | ||||
| 	0X0027: {Name: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"}, | ||||
| 	0X0028: {Name: "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"}, | ||||
| 	0X0029: {Name: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"}, | ||||
| 	0X002A: {Name: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"}, | ||||
| 	0X002B: {Name: "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"}, | ||||
| 	0X002C: {Name: "TLS_PSK_WITH_NULL_SHA"}, | ||||
| 	0X002D: {Name: "TLS_DHE_PSK_WITH_NULL_SHA", ForwardSecret: true}, | ||||
| 	0X002E: {Name: "TLS_RSA_PSK_WITH_NULL_SHA"}, | ||||
| 	0X002F: {Name: "TLS_RSA_WITH_AES_128_CBC_SHA", ShortName: "AES128-SHA"}, | ||||
| 	0X0030: {Name: "TLS_DH_DSS_WITH_AES_128_CBC_SHA", ShortName: "DH-DSS-AES128-SHA"}, | ||||
| 	0X0031: {Name: "TLS_DH_RSA_WITH_AES_128_CBC_SHA", ShortName: "DH-RSA-AES128-SHA"}, | ||||
| 	0X0032: {Name: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", ShortName: "DHE-DSS-AES128-SHA", ForwardSecret: true}, | ||||
| 	0X0033: {Name: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", ShortName: "DHE-RSA-AES128-SHA", ForwardSecret: true}, | ||||
| 	0X0034: {Name: "TLS_DH_anon_WITH_AES_128_CBC_SHA"}, | ||||
| 	0X0035: {Name: "TLS_RSA_WITH_AES_256_CBC_SHA", ShortName: "AES256-SHA"}, | ||||
| 	0X0036: {Name: "TLS_DH_DSS_WITH_AES_256_CBC_SHA", ShortName: "DH-DSS-AES256-SHA"}, | ||||
| 	0X0037: {Name: "TLS_DH_RSA_WITH_AES_256_CBC_SHA", ShortName: "DH-RSA-AES256-SHA"}, | ||||
| 	0X0038: {Name: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", ShortName: "DHE-DSS-AES256-SHA", ForwardSecret: true}, | ||||
| 	0X0039: {Name: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", ShortName: "DHE-RSA-AES256-SHA", ForwardSecret: true}, | ||||
| 	0X003A: {Name: "TLS_DH_anon_WITH_AES_256_CBC_SHA"}, | ||||
| 	0X003B: {Name: "TLS_RSA_WITH_NULL_SHA256"}, | ||||
| 	0X003C: {Name: "TLS_RSA_WITH_AES_128_CBC_SHA256", ShortName: "AES128-SHA256"}, | ||||
| 	0X003D: {Name: "TLS_RSA_WITH_AES_256_CBC_SHA256", ShortName: "AES256-SHA256"}, | ||||
| 	0X003E: {Name: "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", ShortName: "DH-DSS-AES128-SHA256"}, | ||||
| 	0X003F: {Name: "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", ShortName: "DH-RSA-AES128-SHA256"}, | ||||
| 	0X0040: {Name: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", ShortName: "DHE-DSS-AES128-SHA256", ForwardSecret: true}, | ||||
| 	0X0041: {Name: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "CAMELLIA128-SHA"}, | ||||
| 	0X0042: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DH-DSS-CAMELLIA128-SHA"}, | ||||
| 	0X0043: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DH-RSA-CAMELLIA128-SHA"}, | ||||
| 	0X0044: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DHE-DSS-CAMELLIA128-SHA", ForwardSecret: true}, | ||||
| 	0X0045: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DHE-RSA-CAMELLIA128-SHA", ForwardSecret: true}, | ||||
| 	0X0046: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"}, | ||||
| 	0X0067: {Name: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", ShortName: "DHE-RSA-AES128-SHA256", ForwardSecret: true}, | ||||
| 	0X0068: {Name: "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", ShortName: "DH-DSS-AES256-SHA256"}, | ||||
| 	0X0069: {Name: "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", ShortName: "DH-RSA-AES256-SHA256"}, | ||||
| 	0X006A: {Name: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", ShortName: "DHE-DSS-AES256-SHA256", ForwardSecret: true}, | ||||
| 	0X006B: {Name: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", ShortName: "DHE-RSA-AES256-SHA256", ForwardSecret: true}, | ||||
| 	0X006C: {Name: "TLS_DH_anon_WITH_AES_128_CBC_SHA256"}, | ||||
| 	0X006D: {Name: "TLS_DH_anon_WITH_AES_256_CBC_SHA256"}, | ||||
| 	0X0084: {Name: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "CAMELLIA256-SHA"}, | ||||
| 	0X0085: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DH-DSS-CAMELLIA256-SHA"}, | ||||
| 	0X0086: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DH-RSA-CAMELLIA256-SHA"}, | ||||
| 	0X0087: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DHE-DSS-CAMELLIA256-SHA", ForwardSecret: true}, | ||||
| 	0X0088: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DHE-RSA-CAMELLIA256-SHA", ForwardSecret: true}, | ||||
| 	0X0089: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"}, | ||||
| 	0X008A: {Name: "TLS_PSK_WITH_RC4_128_SHA", ShortName: "PSK-RC4-SHA"}, | ||||
| 	0X008B: {Name: "TLS_PSK_WITH_3DES_EDE_CBC_SHA", ShortName: "PSK-3DES-EDE-CBC-SHA"}, | ||||
| 	0X008C: {Name: "TLS_PSK_WITH_AES_128_CBC_SHA", ShortName: "PSK-AES128-CBC-SHA"}, | ||||
| 	0X008D: {Name: "TLS_PSK_WITH_AES_256_CBC_SHA", ShortName: "PSK-AES256-CBC-SHA"}, | ||||
| 	0X008E: {Name: "TLS_DHE_PSK_WITH_RC4_128_SHA", ForwardSecret: true}, | ||||
| 	0X008F: {Name: "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", ForwardSecret: true}, | ||||
| 	0X0090: {Name: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", ForwardSecret: true}, | ||||
| 	0X0091: {Name: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", ForwardSecret: true}, | ||||
| 	0X0092: {Name: "TLS_RSA_PSK_WITH_RC4_128_SHA"}, | ||||
| 	0X0093: {Name: "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"}, | ||||
| 	0X0094: {Name: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"}, | ||||
| 	0X0095: {Name: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"}, | ||||
| 	0X0096: {Name: "TLS_RSA_WITH_SEED_CBC_SHA", ShortName: "SEED-SHA"}, | ||||
| 	0X0097: {Name: "TLS_DH_DSS_WITH_SEED_CBC_SHA", ShortName: "DH-DSS-SEED-SHA"}, | ||||
| 	0X0098: {Name: "TLS_DH_RSA_WITH_SEED_CBC_SHA", ShortName: "DH-RSA-SEED-SHA"}, | ||||
| 	0X0099: {Name: "TLS_DHE_DSS_WITH_SEED_CBC_SHA", ShortName: "DHE-DSS-SEED-SHA", ForwardSecret: true}, | ||||
| 	0X009A: {Name: "TLS_DHE_RSA_WITH_SEED_CBC_SHA", ShortName: "DHE-RSA-SEED-SHA", ForwardSecret: true}, | ||||
| 	0X009B: {Name: "TLS_DH_anon_WITH_SEED_CBC_SHA"}, | ||||
| 	0X009C: {Name: "TLS_RSA_WITH_AES_128_GCM_SHA256", ShortName: "AES128-GCM-SHA256"}, | ||||
| 	0X009D: {Name: "TLS_RSA_WITH_AES_256_GCM_SHA384", ShortName: "AES256-GCM-SHA384"}, | ||||
| 	0X009E: {Name: "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", ShortName: "DHE-RSA-AES128-GCM-SHA256", ForwardSecret: true}, | ||||
| 	0X009F: {Name: "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", ShortName: "DHE-RSA-AES256-GCM-SHA384", ForwardSecret: true}, | ||||
| 	0X00A0: {Name: "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", ShortName: "DH-RSA-AES128-GCM-SHA256"}, | ||||
| 	0X00A1: {Name: "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", ShortName: "DH-RSA-AES256-GCM-SHA384"}, | ||||
| 	0X00A2: {Name: "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", ShortName: "DHE-DSS-AES128-GCM-SHA256", ForwardSecret: true}, | ||||
| 	0X00A3: {Name: "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", ShortName: "DHE-DSS-AES256-GCM-SHA384", ForwardSecret: true}, | ||||
| 	0X00A4: {Name: "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", ShortName: "DH-DSS-AES128-GCM-SHA256"}, | ||||
| 	0X00A5: {Name: "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", ShortName: "DH-DSS-AES256-GCM-SHA384"}, | ||||
| 	0X00A6: {Name: "TLS_DH_anon_WITH_AES_128_GCM_SHA256"}, | ||||
| 	0X00A7: {Name: "TLS_DH_anon_WITH_AES_256_GCM_SHA384"}, | ||||
| 	0X00A8: {Name: "TLS_PSK_WITH_AES_128_GCM_SHA256"}, | ||||
| 	0X00A9: {Name: "TLS_PSK_WITH_AES_256_GCM_SHA384"}, | ||||
| 	0X00AA: {Name: "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0X00AB: {Name: "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0X00AC: {Name: "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"}, | ||||
| 	0X00AD: {Name: "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"}, | ||||
| 	0X00AE: {Name: "TLS_PSK_WITH_AES_128_CBC_SHA256"}, | ||||
| 	0X00AF: {Name: "TLS_PSK_WITH_AES_256_CBC_SHA384"}, | ||||
| 	0X00B0: {Name: "TLS_PSK_WITH_NULL_SHA256"}, | ||||
| 	0X00B1: {Name: "TLS_PSK_WITH_NULL_SHA384"}, | ||||
| 	0X00B2: {Name: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0X00B3: {Name: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0X00B4: {Name: "TLS_DHE_PSK_WITH_NULL_SHA256", ForwardSecret: true}, | ||||
| 	0X00B5: {Name: "TLS_DHE_PSK_WITH_NULL_SHA384", ForwardSecret: true}, | ||||
| 	0X00B6: {Name: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"}, | ||||
| 	0X00B7: {Name: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"}, | ||||
| 	0X00B8: {Name: "TLS_RSA_PSK_WITH_NULL_SHA256"}, | ||||
| 	0X00B9: {Name: "TLS_RSA_PSK_WITH_NULL_SHA384"}, | ||||
| 	0X00BA: {Name: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0X00BB: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0X00BC: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0X00BD: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0X00BE: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0X00BF: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0X00C0: {Name: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, | ||||
| 	0X00C1: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"}, | ||||
| 	0X00C2: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"}, | ||||
| 	0X00C3: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0X00C4: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0X00C5: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"}, | ||||
| 	0X00FF: {Name: "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"}, | ||||
| 	0XC001: {Name: "TLS_ECDH_ECDSA_WITH_NULL_SHA"}, | ||||
| 	0XC002: {Name: "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", ShortName: "ECDH-ECDSA-RC4-SHA"}, | ||||
| 	0XC003: {Name: "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDH-ECDSA-DES-CBC3-SHA"}, | ||||
| 	0XC004: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", ShortName: "ECDH-ECDSA-AES128-SHA"}, | ||||
| 	0XC005: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", ShortName: "ECDH-ECDSA-AES256-SHA"}, | ||||
| 	0XC006: {Name: "TLS_ECDHE_ECDSA_WITH_NULL_SHA", ForwardSecret: true}, | ||||
| 	0XC007: {Name: "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", ShortName: "ECDHE-ECDSA-RC4-SHA", ForwardSecret: true}, | ||||
| 	0XC008: {Name: "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDHE-ECDSA-DES-CBC3-SHA", ForwardSecret: true}, | ||||
| 	0XC009: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", ShortName: "ECDHE-ECDSA-AES128-SHA", ForwardSecret: true}, | ||||
| 	0XC00A: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", ShortName: "ECDHE-ECDSA-AES256-SHA", ForwardSecret: true}, | ||||
| 	0XC00B: {Name: "TLS_ECDH_RSA_WITH_NULL_SHA"}, | ||||
| 	0XC00C: {Name: "TLS_ECDH_RSA_WITH_RC4_128_SHA", ShortName: "ECDH-RSA-RC4-SHA"}, | ||||
| 	0XC00D: {Name: "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDH-RSA-DES-CBC3-SHA"}, | ||||
| 	0XC00E: {Name: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", ShortName: "ECDH-RSA-AES128-SHA"}, | ||||
| 	0XC00F: {Name: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", ShortName: "ECDH-RSA-AES256-SHA"}, | ||||
| 	0XC010: {Name: "TLS_ECDHE_RSA_WITH_NULL_SHA", ForwardSecret: true}, | ||||
| 	0XC011: {Name: "TLS_ECDHE_RSA_WITH_RC4_128_SHA", ShortName: "ECDHE-RSA-RC4-SHA", ForwardSecret: true}, | ||||
| 	0XC012: {Name: "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDHE-RSA-DES-CBC3-SHA", ForwardSecret: true}, | ||||
| 	0XC013: {Name: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", ShortName: "ECDHE-RSA-AES128-SHA", ForwardSecret: true}, | ||||
| 	0XC014: {Name: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", ShortName: "ECDHE-RSA-AES256-SHA", ForwardSecret: true}, | ||||
| 	0XC015: {Name: "TLS_ECDH_anon_WITH_NULL_SHA"}, | ||||
| 	0XC016: {Name: "TLS_ECDH_anon_WITH_RC4_128_SHA"}, | ||||
| 	0XC017: {Name: "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"}, | ||||
| 	0XC018: {Name: "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"}, | ||||
| 	0XC019: {Name: "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"}, | ||||
| 	0XC01A: {Name: "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-3DES-EDE-CBC-SHA"}, | ||||
| 	0XC01B: {Name: "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-RSA-3DES-EDE-CBC-SHA"}, | ||||
| 	0XC01C: {Name: "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-DSS-3DES-EDE-CBC-SHA"}, | ||||
| 	0XC01D: {Name: "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", ShortName: "SRP-AES-128-CBC-SHA"}, | ||||
| 	0XC01E: {Name: "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", ShortName: "SRP-RSA-AES-128-CBC-SHA"}, | ||||
| 	0XC01F: {Name: "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", ShortName: "SRP-DSS-AES-128-CBC-SHA"}, | ||||
| 	0XC020: {Name: "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", ShortName: "SRP-AES-256-CBC-SHA"}, | ||||
| 	0XC021: {Name: "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", ShortName: "SRP-RSA-AES-256-CBC-SHA"}, | ||||
| 	0XC022: {Name: "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", ShortName: "SRP-DSS-AES-256-CBC-SHA"}, | ||||
| 	0XC023: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDHE-ECDSA-AES128-SHA256", ForwardSecret: true}, | ||||
| 	0XC024: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDHE-ECDSA-AES256-SHA384", ForwardSecret: true}, | ||||
| 	0XC025: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDH-ECDSA-AES128-SHA256"}, | ||||
| 	0XC026: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDH-ECDSA-AES256-SHA384"}, | ||||
| 	0XC027: {Name: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDHE-RSA-AES128-SHA256", ForwardSecret: true}, | ||||
| 	0XC028: {Name: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDHE-RSA-AES256-SHA384", ForwardSecret: true}, | ||||
| 	0XC029: {Name: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDH-RSA-AES128-SHA256"}, | ||||
| 	0XC02A: {Name: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDH-RSA-AES256-SHA384"}, | ||||
| 	0XC02B: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDHE-ECDSA-AES128-GCM-SHA256", ForwardSecret: true}, | ||||
| 	0XC02C: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDHE-ECDSA-AES256-GCM-SHA384", ForwardSecret: true}, | ||||
| 	0XC02D: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDH-ECDSA-AES128-GCM-SHA256"}, | ||||
| 	0XC02E: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDH-ECDSA-AES256-GCM-SHA384"}, | ||||
| 	0XC02F: {Name: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDHE-RSA-AES128-GCM-SHA256", ForwardSecret: true}, | ||||
| 	0XC030: {Name: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDHE-RSA-AES256-GCM-SHA384", ForwardSecret: true}, | ||||
| 	0XC031: {Name: "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDH-RSA-AES128-GCM-SHA256"}, | ||||
| 	0XC032: {Name: "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDH-RSA-AES256-GCM-SHA384"}, | ||||
| 	0XC033: {Name: "TLS_ECDHE_PSK_WITH_RC4_128_SHA", ForwardSecret: true}, | ||||
| 	0XC034: {Name: "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", ForwardSecret: true}, | ||||
| 	0XC035: {Name: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", ForwardSecret: true}, | ||||
| 	0XC036: {Name: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", ForwardSecret: true}, | ||||
| 	0XC037: {Name: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC038: {Name: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC039: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA", ForwardSecret: true}, | ||||
| 	0XC03A: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA256", ForwardSecret: true}, | ||||
| 	0XC03B: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA384", ForwardSecret: true}, | ||||
| 	0XC03C: {Name: "TLS_RSA_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC03D: {Name: "TLS_RSA_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC03E: {Name: "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC03F: {Name: "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC040: {Name: "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC041: {Name: "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC042: {Name: "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC043: {Name: "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC044: {Name: "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC045: {Name: "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC046: {Name: "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC047: {Name: "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC048: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC049: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC04A: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC04B: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC04C: {Name: "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC04D: {Name: "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC04E: {Name: "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC04F: {Name: "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC050: {Name: "TLS_RSA_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC051: {Name: "TLS_RSA_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC052: {Name: "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC053: {Name: "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC054: {Name: "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC055: {Name: "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC056: {Name: "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC057: {Name: "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC058: {Name: "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC059: {Name: "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC05A: {Name: "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC05B: {Name: "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC05C: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC05D: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC05E: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC05F: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC060: {Name: "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC061: {Name: "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC062: {Name: "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC063: {Name: "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC064: {Name: "TLS_PSK_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC065: {Name: "TLS_PSK_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC066: {Name: "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC067: {Name: "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC068: {Name: "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"}, | ||||
| 	0XC069: {Name: "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"}, | ||||
| 	0XC06A: {Name: "TLS_PSK_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC06B: {Name: "TLS_PSK_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC06C: {Name: "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC06D: {Name: "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC06E: {Name: "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"}, | ||||
| 	0XC06F: {Name: "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"}, | ||||
| 	0XC070: {Name: "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC071: {Name: "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC072: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC073: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC074: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0XC075: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, | ||||
| 	0XC076: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC077: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC078: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0XC079: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"}, | ||||
| 	0XC07A: {Name: "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC07B: {Name: "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC07C: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC07D: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC07E: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC07F: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC080: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC081: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC082: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC083: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC084: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC085: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC086: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC087: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC088: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC089: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC08A: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC08B: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC08C: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC08D: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC08E: {Name: "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC08F: {Name: "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC090: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true}, | ||||
| 	0XC091: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true}, | ||||
| 	0XC092: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"}, | ||||
| 	0XC093: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"}, | ||||
| 	0XC094: {Name: "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0XC095: {Name: "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, | ||||
| 	0XC096: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC097: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC098: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"}, | ||||
| 	0XC099: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"}, | ||||
| 	0XC09A: {Name: "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true}, | ||||
| 	0XC09B: {Name: "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true}, | ||||
| 	0XC09C: {Name: "TLS_RSA_WITH_AES_128_CCM"}, | ||||
| 	0XC09D: {Name: "TLS_RSA_WITH_AES_256_CCM"}, | ||||
| 	0XC09E: {Name: "TLS_DHE_RSA_WITH_AES_128_CCM", ForwardSecret: true}, | ||||
| 	0XC09F: {Name: "TLS_DHE_RSA_WITH_AES_256_CCM", ForwardSecret: true}, | ||||
| 	0XC0A0: {Name: "TLS_RSA_WITH_AES_128_CCM_8"}, | ||||
| 	0XC0A1: {Name: "TLS_RSA_WITH_AES_256_CCM_8"}, | ||||
| 	0XC0A2: {Name: "TLS_DHE_RSA_WITH_AES_128_CCM_8", ForwardSecret: true}, | ||||
| 	0XC0A3: {Name: "TLS_DHE_RSA_WITH_AES_256_CCM_8", ForwardSecret: true}, | ||||
| 	0XC0A4: {Name: "TLS_PSK_WITH_AES_128_CCM"}, | ||||
| 	0XC0A5: {Name: "TLS_PSK_WITH_AES_256_CCM"}, | ||||
| 	0XC0A6: {Name: "TLS_DHE_PSK_WITH_AES_128_CCM", ForwardSecret: true}, | ||||
| 	0XC0A7: {Name: "TLS_DHE_PSK_WITH_AES_256_CCM", ForwardSecret: true}, | ||||
| 	0XC0A8: {Name: "TLS_PSK_WITH_AES_128_CCM_8"}, | ||||
| 	0XC0A9: {Name: "TLS_PSK_WITH_AES_256_CCM_8"}, | ||||
| 	0XC0AA: {Name: "TLS_PSK_DHE_WITH_AES_128_CCM_8", ForwardSecret: true}, | ||||
| 	0XC0AB: {Name: "TLS_PSK_DHE_WITH_AES_256_CCM_8", ForwardSecret: true}, | ||||
| 	0XC0AC: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", ForwardSecret: true}, | ||||
| 	0XC0AD: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", ForwardSecret: true}, | ||||
| 	0XC0AE: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", ForwardSecret: true}, | ||||
| 	0XC0AF: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", ForwardSecret: true}, | ||||
| 	// Non-IANA standardized cipher suites:
 | ||||
| 	// ChaCha20, Poly1305 cipher suites are defined in
 | ||||
| 	// https://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04
 | ||||
| 	0XCC13: {Name: "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true}, | ||||
| 	0XCC14: {Name: "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true}, | ||||
| 	0XCC15: {Name: "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true}, | ||||
| } | ||||
|  | @ -1,32 +0,0 @@ | |||
| package tls | ||||
| 
 | ||||
| // SayHello sends a simple Client Hello to server and returns the negotiated ciphersuite ID
 | ||||
| func (c *Conn) SayHello() (cipherID uint16, version uint16, err error) { | ||||
| 	hello := &clientHelloMsg{ | ||||
| 		vers:                c.config.maxVersion(), | ||||
| 		compressionMethods:  []uint8{compressionNone}, | ||||
| 		random:              make([]byte, 32), | ||||
| 		ocspStapling:        true, | ||||
| 		serverName:          c.config.ServerName, | ||||
| 		supportedCurves:     c.config.curvePreferences(), | ||||
| 		supportedPoints:     []uint8{pointFormatUncompressed}, | ||||
| 		nextProtoNeg:        len(c.config.NextProtos) > 0, | ||||
| 		secureRenegotiation: true, | ||||
| 		cipherSuites:        c.config.cipherSuites(), | ||||
| 		signatureAndHashes:  allSignatureAndHashAlgorithms, | ||||
| 	} | ||||
| 
 | ||||
| 	c.writeRecord(recordTypeHandshake, hello.marshal()) | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	serverHello, ok := msg.(*serverHelloMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return | ||||
| 	} | ||||
| 	cipherID, version = serverHello.cipherSuite, serverHello.vers | ||||
| 	return | ||||
| } | ||||
|  | @ -1,281 +0,0 @@ | |||
| // Copyright 2010 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/aes" | ||||
| 	"crypto/cipher" | ||||
| 	"crypto/des" | ||||
| 	"crypto/hmac" | ||||
| 	"crypto/rc4" | ||||
| 	"crypto/sha1" | ||||
| 	"crypto/x509" | ||||
| 	"hash" | ||||
| ) | ||||
| 
 | ||||
| // a keyAgreement implements the client and server side of a TLS key agreement
 | ||||
| // protocol by generating and processing key exchange messages.
 | ||||
| type keyAgreement interface { | ||||
| 	// On the server side, the first two methods are called in order.
 | ||||
| 
 | ||||
| 	// In the case that the key agreement protocol doesn't use a
 | ||||
| 	// ServerKeyExchange message, generateServerKeyExchange can return nil,
 | ||||
| 	// nil.
 | ||||
| 	generateServerKeyExchange(*Config, *Certificate, *clientHelloMsg, *serverHelloMsg) (*serverKeyExchangeMsg, error) | ||||
| 	processClientKeyExchange(*Config, *Certificate, *clientKeyExchangeMsg, uint16) ([]byte, error) | ||||
| 
 | ||||
| 	// On the client side, the next two methods are called in order.
 | ||||
| 
 | ||||
| 	// This method may not be called if the server doesn't send a
 | ||||
| 	// ServerKeyExchange message.
 | ||||
| 	processServerKeyExchange(*Config, *clientHelloMsg, *serverHelloMsg, *x509.Certificate, *serverKeyExchangeMsg) error | ||||
| 	generateClientKeyExchange(*Config, *clientHelloMsg, *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	// suiteECDH indicates that the cipher suite involves elliptic curve
 | ||||
| 	// Diffie-Hellman. This means that it should only be selected when the
 | ||||
| 	// client indicates that it supports ECC with a curve and point format
 | ||||
| 	// that we're happy with.
 | ||||
| 	suiteECDHE = 1 << iota | ||||
| 	// suiteECDSA indicates that the cipher suite involves an ECDSA
 | ||||
| 	// signature and therefore may only be selected when the server's
 | ||||
| 	// certificate is ECDSA. If this is not set then the cipher suite is
 | ||||
| 	// RSA based.
 | ||||
| 	suiteECDSA | ||||
| 	// suiteTLS12 indicates that the cipher suite should only be advertised
 | ||||
| 	// and accepted when using TLS 1.2.
 | ||||
| 	suiteTLS12 | ||||
| ) | ||||
| 
 | ||||
| // A cipherSuite is a specific combination of key agreement, cipher and MAC
 | ||||
| // function. All cipher suites currently assume RSA key agreement.
 | ||||
| type cipherSuite struct { | ||||
| 	id uint16 | ||||
| 	// the lengths, in bytes, of the key material needed for each component.
 | ||||
| 	keyLen int | ||||
| 	macLen int | ||||
| 	ivLen  int | ||||
| 	ka     func(version uint16) keyAgreement | ||||
| 	// flags is a bitmask of the suite* values, above.
 | ||||
| 	flags     int | ||||
| 	cipher    func(key, iv []byte, isRead bool) interface{} | ||||
| 	mac       func(version uint16, macKey []byte) macFunction | ||||
| 	aead      func(key, fixedNonce []byte) cipher.AEAD | ||||
| 	tls12Hash crypto.Hash | ||||
| } | ||||
| 
 | ||||
| var cipherSuites = []*cipherSuite{ | ||||
| 	// Ciphersuite order is chosen so that ECDHE comes before plain RSA
 | ||||
| 	// and RC4 comes before AES (because of the Lucky13 attack).
 | ||||
| 	{TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadAESGCM, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12, nil, nil, aeadAESGCM, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadAESGCM, crypto.SHA384}, | ||||
| 	{TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12, nil, nil, aeadAESGCM, crypto.SHA384}, | ||||
| 	{TLS_ECDHE_RSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheRSAKA, suiteECDHE, cipherRC4, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheECDSAKA, suiteECDHE | suiteECDSA, cipherRC4, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECDSA, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECDSA, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_RSA_WITH_RC4_128_SHA, 16, 20, 0, rsaKA, 0, cipherRC4, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, rsaKA, 0, cipherAES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, ecdheRSAKA, suiteECDHE, cipher3DES, macSHA1, nil, crypto.SHA256}, | ||||
| 	{TLS_RSA_WITH_3DES_EDE_CBC_SHA, 24, 20, 8, rsaKA, 0, cipher3DES, macSHA1, nil, crypto.SHA256}, | ||||
| } | ||||
| 
 | ||||
| func cipherRC4(key, iv []byte, isRead bool) interface{} { | ||||
| 	cipher, _ := rc4.NewCipher(key) | ||||
| 	return cipher | ||||
| } | ||||
| 
 | ||||
| func cipher3DES(key, iv []byte, isRead bool) interface{} { | ||||
| 	block, _ := des.NewTripleDESCipher(key) | ||||
| 	if isRead { | ||||
| 		return cipher.NewCBCDecrypter(block, iv) | ||||
| 	} | ||||
| 	return cipher.NewCBCEncrypter(block, iv) | ||||
| } | ||||
| 
 | ||||
| func cipherAES(key, iv []byte, isRead bool) interface{} { | ||||
| 	block, _ := aes.NewCipher(key) | ||||
| 	if isRead { | ||||
| 		return cipher.NewCBCDecrypter(block, iv) | ||||
| 	} | ||||
| 	return cipher.NewCBCEncrypter(block, iv) | ||||
| } | ||||
| 
 | ||||
| // macSHA1 returns a macFunction for the given protocol version.
 | ||||
| func macSHA1(version uint16, key []byte) macFunction { | ||||
| 	if version == VersionSSL30 { | ||||
| 		mac := ssl30MAC{ | ||||
| 			h:   sha1.New(), | ||||
| 			key: make([]byte, len(key)), | ||||
| 		} | ||||
| 		copy(mac.key, key) | ||||
| 		return mac | ||||
| 	} | ||||
| 	return tls10MAC{hmac.New(sha1.New, key)} | ||||
| } | ||||
| 
 | ||||
| type macFunction interface { | ||||
| 	Size() int | ||||
| 	MAC(digestBuf, seq, header, data []byte) []byte | ||||
| } | ||||
| 
 | ||||
| // fixedNonceAEAD wraps an AEAD and prefixes a fixed portion of the nonce to
 | ||||
| // each call.
 | ||||
| type fixedNonceAEAD struct { | ||||
| 	// sealNonce and openNonce are buffers where the larger nonce will be
 | ||||
| 	// constructed. Since a seal and open operation may be running
 | ||||
| 	// concurrently, there is a separate buffer for each.
 | ||||
| 	sealNonce, openNonce []byte | ||||
| 	aead                 cipher.AEAD | ||||
| } | ||||
| 
 | ||||
| func (f *fixedNonceAEAD) NonceSize() int { return 8 } | ||||
| func (f *fixedNonceAEAD) Overhead() int  { return f.aead.Overhead() } | ||||
| 
 | ||||
| func (f *fixedNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { | ||||
| 	copy(f.sealNonce[len(f.sealNonce)-8:], nonce) | ||||
| 	return f.aead.Seal(out, f.sealNonce, plaintext, additionalData) | ||||
| } | ||||
| 
 | ||||
| func (f *fixedNonceAEAD) Open(out, nonce, plaintext, additionalData []byte) ([]byte, error) { | ||||
| 	copy(f.openNonce[len(f.openNonce)-8:], nonce) | ||||
| 	return f.aead.Open(out, f.openNonce, plaintext, additionalData) | ||||
| } | ||||
| 
 | ||||
| func aeadAESGCM(key, fixedNonce []byte) cipher.AEAD { | ||||
| 	aes, err := aes.NewCipher(key) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	aead, err := cipher.NewGCM(aes) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 
 | ||||
| 	nonce1, nonce2 := make([]byte, 12), make([]byte, 12) | ||||
| 	copy(nonce1, fixedNonce) | ||||
| 	copy(nonce2, fixedNonce) | ||||
| 
 | ||||
| 	return &fixedNonceAEAD{nonce1, nonce2, aead} | ||||
| } | ||||
| 
 | ||||
| // ssl30MAC implements the SSLv3 MAC function, as defined in
 | ||||
| // www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt section 5.2.3.1
 | ||||
| type ssl30MAC struct { | ||||
| 	h   hash.Hash | ||||
| 	key []byte | ||||
| } | ||||
| 
 | ||||
| func (s ssl30MAC) Size() int { | ||||
| 	return s.h.Size() | ||||
| } | ||||
| 
 | ||||
| var ssl30Pad1 = [48]byte{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36} | ||||
| 
 | ||||
| var ssl30Pad2 = [48]byte{0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c} | ||||
| 
 | ||||
| func (s ssl30MAC) MAC(digestBuf, seq, header, data []byte) []byte { | ||||
| 	padLength := 48 | ||||
| 	if s.h.Size() == 20 { | ||||
| 		padLength = 40 | ||||
| 	} | ||||
| 
 | ||||
| 	s.h.Reset() | ||||
| 	s.h.Write(s.key) | ||||
| 	s.h.Write(ssl30Pad1[:padLength]) | ||||
| 	s.h.Write(seq) | ||||
| 	s.h.Write(header[:1]) | ||||
| 	s.h.Write(header[3:5]) | ||||
| 	s.h.Write(data) | ||||
| 	digestBuf = s.h.Sum(digestBuf[:0]) | ||||
| 
 | ||||
| 	s.h.Reset() | ||||
| 	s.h.Write(s.key) | ||||
| 	s.h.Write(ssl30Pad2[:padLength]) | ||||
| 	s.h.Write(digestBuf) | ||||
| 	return s.h.Sum(digestBuf[:0]) | ||||
| } | ||||
| 
 | ||||
| // tls10MAC implements the TLS 1.0 MAC function. RFC 2246, section 6.2.3.
 | ||||
| type tls10MAC struct { | ||||
| 	h hash.Hash | ||||
| } | ||||
| 
 | ||||
| func (s tls10MAC) Size() int { | ||||
| 	return s.h.Size() | ||||
| } | ||||
| 
 | ||||
| func (s tls10MAC) MAC(digestBuf, seq, header, data []byte) []byte { | ||||
| 	s.h.Reset() | ||||
| 	s.h.Write(seq) | ||||
| 	s.h.Write(header) | ||||
| 	s.h.Write(data) | ||||
| 	return s.h.Sum(digestBuf[:0]) | ||||
| } | ||||
| 
 | ||||
| func rsaKA(version uint16) keyAgreement { | ||||
| 	return rsaKeyAgreement{} | ||||
| } | ||||
| 
 | ||||
| func ecdheECDSAKA(version uint16) keyAgreement { | ||||
| 	return &ecdheKeyAgreement{ | ||||
| 		sigType: signatureECDSA, | ||||
| 		version: version, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func ecdheRSAKA(version uint16) keyAgreement { | ||||
| 	return &ecdheKeyAgreement{ | ||||
| 		sigType: signatureRSA, | ||||
| 		version: version, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // mutualCipherSuite returns a cipherSuite given a list of supported
 | ||||
| // ciphersuites and the id requested by the peer.
 | ||||
| func mutualCipherSuite(have []uint16, want uint16) *cipherSuite { | ||||
| 	for _, id := range have { | ||||
| 		if id == want { | ||||
| 			for _, suite := range cipherSuites { | ||||
| 				if suite.id == want { | ||||
| 					return suite | ||||
| 				} | ||||
| 			} | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // A list of the possible cipher suite ids. Taken from
 | ||||
| // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml
 | ||||
| const ( | ||||
| 	TLS_RSA_WITH_RC4_128_SHA                uint16 = 0x0005 | ||||
| 	TLS_RSA_WITH_3DES_EDE_CBC_SHA           uint16 = 0x000a | ||||
| 	TLS_RSA_WITH_AES_128_CBC_SHA            uint16 = 0x002f | ||||
| 	TLS_RSA_WITH_AES_256_CBC_SHA            uint16 = 0x0035 | ||||
| 	TLS_ECDHE_ECDSA_WITH_RC4_128_SHA        uint16 = 0xc007 | ||||
| 	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA    uint16 = 0xc009 | ||||
| 	TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA    uint16 = 0xc00a | ||||
| 	TLS_ECDHE_RSA_WITH_RC4_128_SHA          uint16 = 0xc011 | ||||
| 	TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA     uint16 = 0xc012 | ||||
| 	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA      uint16 = 0xc013 | ||||
| 	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA      uint16 = 0xc014 | ||||
| 	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   uint16 = 0xc02f | ||||
| 	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 uint16 = 0xc02b | ||||
| 	TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384   uint16 = 0xc030 | ||||
| 	TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 uint16 = 0xc02c | ||||
| 
 | ||||
| 	// TLS_FALLBACK_SCSV isn't a standard cipher suite but an indicator
 | ||||
| 	// that the client is doing version fallback. See
 | ||||
| 	// https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-00.
 | ||||
| 	TLS_FALLBACK_SCSV uint16 = 0x5600 | ||||
| ) | ||||
|  | @ -1,621 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"container/list" | ||||
| 	"crypto" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/x509" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"math/big" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	VersionSSL30 = 0x0300 | ||||
| 	VersionTLS10 = 0x0301 | ||||
| 	VersionTLS11 = 0x0302 | ||||
| 	VersionTLS12 = 0x0303 | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	maxPlaintext    = 16384        // maximum plaintext payload length
 | ||||
| 	maxCiphertext   = 16384 + 2048 // maximum ciphertext payload length
 | ||||
| 	recordHeaderLen = 5            // record header length
 | ||||
| 	maxHandshake    = 65536        // maximum handshake we support (protocol max is 16 MB)
 | ||||
| 
 | ||||
| 	minVersion = VersionTLS10 | ||||
| 	maxVersion = VersionTLS12 | ||||
| ) | ||||
| 
 | ||||
| // TLS record types.
 | ||||
| type recordType uint8 | ||||
| 
 | ||||
| const ( | ||||
| 	recordTypeChangeCipherSpec recordType = 20 | ||||
| 	recordTypeAlert            recordType = 21 | ||||
| 	recordTypeHandshake        recordType = 22 | ||||
| 	recordTypeApplicationData  recordType = 23 | ||||
| ) | ||||
| 
 | ||||
| // TLS handshake message types.
 | ||||
| const ( | ||||
| 	typeClientHello        uint8 = 1 | ||||
| 	typeServerHello        uint8 = 2 | ||||
| 	typeNewSessionTicket   uint8 = 4 | ||||
| 	typeCertificate        uint8 = 11 | ||||
| 	typeServerKeyExchange  uint8 = 12 | ||||
| 	typeCertificateRequest uint8 = 13 | ||||
| 	typeServerHelloDone    uint8 = 14 | ||||
| 	typeCertificateVerify  uint8 = 15 | ||||
| 	typeClientKeyExchange  uint8 = 16 | ||||
| 	typeFinished           uint8 = 20 | ||||
| 	typeCertificateStatus  uint8 = 22 | ||||
| 	typeNextProtocol       uint8 = 67 // Not IANA assigned
 | ||||
| ) | ||||
| 
 | ||||
| // TLS compression types.
 | ||||
| const ( | ||||
| 	compressionNone uint8 = 0 | ||||
| ) | ||||
| 
 | ||||
| // TLS extension numbers
 | ||||
| const ( | ||||
| 	extensionServerName          uint16 = 0 | ||||
| 	extensionStatusRequest       uint16 = 5 | ||||
| 	extensionSupportedCurves     uint16 = 10 | ||||
| 	extensionSupportedPoints     uint16 = 11 | ||||
| 	extensionSignatureAlgorithms uint16 = 13 | ||||
| 	extensionALPN                uint16 = 16 | ||||
| 	extensionSessionTicket       uint16 = 35 | ||||
| 	extensionNextProtoNeg        uint16 = 13172 // not IANA assigned
 | ||||
| 	extensionRenegotiationInfo   uint16 = 0xff01 | ||||
| ) | ||||
| 
 | ||||
| // TLS signaling cipher suite values
 | ||||
| const ( | ||||
| 	scsvRenegotiation uint16 = 0x00ff | ||||
| ) | ||||
| 
 | ||||
| // CurveID is the type of a TLS identifier for an elliptic curve. See
 | ||||
| // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8
 | ||||
| type CurveID uint16 | ||||
| 
 | ||||
| const ( | ||||
| 	CurveP256 CurveID = 23 | ||||
| 	CurveP384 CurveID = 24 | ||||
| 	CurveP521 CurveID = 25 | ||||
| ) | ||||
| 
 | ||||
| // TLS Elliptic Curve Point Formats
 | ||||
| // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-9
 | ||||
| const ( | ||||
| 	pointFormatUncompressed uint8 = 0 | ||||
| ) | ||||
| 
 | ||||
| // TLS CertificateStatusType (RFC 3546)
 | ||||
| const ( | ||||
| 	statusTypeOCSP uint8 = 1 | ||||
| ) | ||||
| 
 | ||||
| // Certificate types (for certificateRequestMsg)
 | ||||
| const ( | ||||
| 	certTypeRSASign    = 1 // A certificate containing an RSA key
 | ||||
| 	certTypeDSSSign    = 2 // A certificate containing a DSA key
 | ||||
| 	certTypeRSAFixedDH = 3 // A certificate containing a static DH key
 | ||||
| 	certTypeDSSFixedDH = 4 // A certificate containing a static DH key
 | ||||
| 
 | ||||
| 	// See RFC4492 sections 3 and 5.5.
 | ||||
| 	certTypeECDSASign      = 64 // A certificate containing an ECDSA-capable public key, signed with ECDSA.
 | ||||
| 	certTypeRSAFixedECDH   = 65 // A certificate containing an ECDH-capable public key, signed with RSA.
 | ||||
| 	certTypeECDSAFixedECDH = 66 // A certificate containing an ECDH-capable public key, signed with ECDSA.
 | ||||
| 
 | ||||
| 	// Rest of these are reserved by the TLS spec
 | ||||
| ) | ||||
| 
 | ||||
| // Hash functions for TLS 1.2 (See RFC 5246, section A.4.1)
 | ||||
| const ( | ||||
| 	hashSHA1   uint8 = 2 | ||||
| 	hashSHA256 uint8 = 4 | ||||
| ) | ||||
| 
 | ||||
| // Signature algorithms for TLS 1.2 (See RFC 5246, section A.4.1)
 | ||||
| const ( | ||||
| 	signatureRSA   uint8 = 1 | ||||
| 	signatureECDSA uint8 = 3 | ||||
| ) | ||||
| 
 | ||||
| // signatureAndHash mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See
 | ||||
| // RFC 5246, section A.4.1.
 | ||||
| type signatureAndHash struct { | ||||
| 	hash, signature uint8 | ||||
| } | ||||
| 
 | ||||
| // supportedSKXSignatureAlgorithms contains the signature and hash algorithms
 | ||||
| // that the code advertises as supported in a TLS 1.2 ClientHello.
 | ||||
| var supportedSKXSignatureAlgorithms = []signatureAndHash{ | ||||
| 	{hashSHA256, signatureRSA}, | ||||
| 	{hashSHA256, signatureECDSA}, | ||||
| 	{hashSHA1, signatureRSA}, | ||||
| 	{hashSHA1, signatureECDSA}, | ||||
| } | ||||
| 
 | ||||
| // supportedClientCertSignatureAlgorithms contains the signature and hash
 | ||||
| // algorithms that the code advertises as supported in a TLS 1.2
 | ||||
| // CertificateRequest.
 | ||||
| var supportedClientCertSignatureAlgorithms = []signatureAndHash{ | ||||
| 	{hashSHA256, signatureRSA}, | ||||
| 	{hashSHA256, signatureECDSA}, | ||||
| } | ||||
| 
 | ||||
| // ConnectionState records basic TLS details about the connection.
 | ||||
| type ConnectionState struct { | ||||
| 	Version                    uint16                // TLS version used by the connection (e.g. VersionTLS12)
 | ||||
| 	HandshakeComplete          bool                  // TLS handshake is complete
 | ||||
| 	DidResume                  bool                  // connection resumes a previous TLS connection
 | ||||
| 	CipherSuite                uint16                // cipher suite in use (TLS_RSA_WITH_RC4_128_SHA, ...)
 | ||||
| 	NegotiatedProtocol         string                // negotiated next protocol (from Config.NextProtos)
 | ||||
| 	NegotiatedProtocolIsMutual bool                  // negotiated protocol was advertised by server
 | ||||
| 	ServerName                 string                // server name requested by client, if any (server side only)
 | ||||
| 	PeerCertificates           []*x509.Certificate   // certificate chain presented by remote peer
 | ||||
| 	VerifiedChains             [][]*x509.Certificate // verified chains built from PeerCertificates
 | ||||
| 
 | ||||
| 	// TLSUnique contains the "tls-unique" channel binding value (see RFC
 | ||||
| 	// 5929, section 3). For resumed sessions this value will be nil
 | ||||
| 	// because resumption does not include enough context (see
 | ||||
| 	// https://secure-resumption.com/#channelbindings). This will change in
 | ||||
| 	// future versions of Go once the TLS master-secret fix has been
 | ||||
| 	// standardized and implemented.
 | ||||
| 	TLSUnique []byte | ||||
| } | ||||
| 
 | ||||
| // ClientAuthType declares the policy the server will follow for
 | ||||
| // TLS Client Authentication.
 | ||||
| type ClientAuthType int | ||||
| 
 | ||||
| const ( | ||||
| 	NoClientCert ClientAuthType = iota | ||||
| 	RequestClientCert | ||||
| 	RequireAnyClientCert | ||||
| 	VerifyClientCertIfGiven | ||||
| 	RequireAndVerifyClientCert | ||||
| ) | ||||
| 
 | ||||
| // ClientSessionState contains the state needed by clients to resume TLS
 | ||||
| // sessions.
 | ||||
| type ClientSessionState struct { | ||||
| 	sessionTicket      []uint8             // Encrypted ticket used for session resumption with server
 | ||||
| 	vers               uint16              // SSL/TLS version negotiated for the session
 | ||||
| 	cipherSuite        uint16              // Ciphersuite negotiated for the session
 | ||||
| 	masterSecret       []byte              // MasterSecret generated by client on a full handshake
 | ||||
| 	serverCertificates []*x509.Certificate // Certificate chain presented by the server
 | ||||
| } | ||||
| 
 | ||||
| // ClientSessionCache is a cache of ClientSessionState objects that can be used
 | ||||
| // by a client to resume a TLS session with a given server. ClientSessionCache
 | ||||
| // implementations should expect to be called concurrently from different
 | ||||
| // goroutines.
 | ||||
| type ClientSessionCache interface { | ||||
| 	// Get searches for a ClientSessionState associated with the given key.
 | ||||
| 	// On return, ok is true if one was found.
 | ||||
| 	Get(sessionKey string) (session *ClientSessionState, ok bool) | ||||
| 
 | ||||
| 	// Put adds the ClientSessionState to the cache with the given key.
 | ||||
| 	Put(sessionKey string, cs *ClientSessionState) | ||||
| } | ||||
| 
 | ||||
| // ClientHelloInfo contains information from a ClientHello message in order to
 | ||||
| // guide certificate selection in the GetCertificate callback.
 | ||||
| type ClientHelloInfo struct { | ||||
| 	// CipherSuites lists the CipherSuites supported by the client (e.g.
 | ||||
| 	// TLS_RSA_WITH_RC4_128_SHA).
 | ||||
| 	CipherSuites []uint16 | ||||
| 
 | ||||
| 	// ServerName indicates the name of the server requested by the client
 | ||||
| 	// in order to support virtual hosting. ServerName is only set if the
 | ||||
| 	// client is using SNI (see
 | ||||
| 	// http://tools.ietf.org/html/rfc4366#section-3.1).
 | ||||
| 	ServerName string | ||||
| 
 | ||||
| 	// SupportedCurves lists the elliptic curves supported by the client.
 | ||||
| 	// SupportedCurves is set only if the Supported Elliptic Curves
 | ||||
| 	// Extension is being used (see
 | ||||
| 	// http://tools.ietf.org/html/rfc4492#section-5.1.1).
 | ||||
| 	SupportedCurves []CurveID | ||||
| 
 | ||||
| 	// SupportedPoints lists the point formats supported by the client.
 | ||||
| 	// SupportedPoints is set only if the Supported Point Formats Extension
 | ||||
| 	// is being used (see
 | ||||
| 	// http://tools.ietf.org/html/rfc4492#section-5.1.2).
 | ||||
| 	SupportedPoints []uint8 | ||||
| } | ||||
| 
 | ||||
| // A Config structure is used to configure a TLS client or server.
 | ||||
| // After one has been passed to a TLS function it must not be
 | ||||
| // modified. A Config may be reused; the tls package will also not
 | ||||
| // modify it.
 | ||||
| type Config struct { | ||||
| 	// Rand provides the source of entropy for nonces and RSA blinding.
 | ||||
| 	// If Rand is nil, TLS uses the cryptographic random reader in package
 | ||||
| 	// crypto/rand.
 | ||||
| 	// The Reader must be safe for use by multiple goroutines.
 | ||||
| 	Rand io.Reader | ||||
| 
 | ||||
| 	// Time returns the current time as the number of seconds since the epoch.
 | ||||
| 	// If Time is nil, TLS uses time.Now.
 | ||||
| 	Time func() time.Time | ||||
| 
 | ||||
| 	// Certificates contains one or more certificate chains
 | ||||
| 	// to present to the other side of the connection.
 | ||||
| 	// Server configurations must include at least one certificate.
 | ||||
| 	Certificates []Certificate | ||||
| 
 | ||||
| 	// NameToCertificate maps from a certificate name to an element of
 | ||||
| 	// Certificates. Note that a certificate name can be of the form
 | ||||
| 	// '*.example.com' and so doesn't have to be a domain name as such.
 | ||||
| 	// See Config.BuildNameToCertificate
 | ||||
| 	// The nil value causes the first element of Certificates to be used
 | ||||
| 	// for all connections.
 | ||||
| 	NameToCertificate map[string]*Certificate | ||||
| 
 | ||||
| 	// GetCertificate returns a Certificate based on the given
 | ||||
| 	// ClientHelloInfo. If GetCertificate is nil or returns nil, then the
 | ||||
| 	// certificate is retrieved from NameToCertificate. If
 | ||||
| 	// NameToCertificate is nil, the first element of Certificates will be
 | ||||
| 	// used.
 | ||||
| 	GetCertificate func(clientHello *ClientHelloInfo) (*Certificate, error) | ||||
| 
 | ||||
| 	// RootCAs defines the set of root certificate authorities
 | ||||
| 	// that clients use when verifying server certificates.
 | ||||
| 	// If RootCAs is nil, TLS uses the host's root CA set.
 | ||||
| 	RootCAs *x509.CertPool | ||||
| 
 | ||||
| 	// NextProtos is a list of supported, application level protocols.
 | ||||
| 	NextProtos []string | ||||
| 
 | ||||
| 	// ServerName is used to verify the hostname on the returned
 | ||||
| 	// certificates unless InsecureSkipVerify is given. It is also included
 | ||||
| 	// in the client's handshake to support virtual hosting.
 | ||||
| 	ServerName string | ||||
| 
 | ||||
| 	// ClientAuth determines the server's policy for
 | ||||
| 	// TLS Client Authentication. The default is NoClientCert.
 | ||||
| 	ClientAuth ClientAuthType | ||||
| 
 | ||||
| 	// ClientCAs defines the set of root certificate authorities
 | ||||
| 	// that servers use if required to verify a client certificate
 | ||||
| 	// by the policy in ClientAuth.
 | ||||
| 	ClientCAs *x509.CertPool | ||||
| 
 | ||||
| 	// InsecureSkipVerify controls whether a client verifies the
 | ||||
| 	// server's certificate chain and host name.
 | ||||
| 	// If InsecureSkipVerify is true, TLS accepts any certificate
 | ||||
| 	// presented by the server and any host name in that certificate.
 | ||||
| 	// In this mode, TLS is susceptible to man-in-the-middle attacks.
 | ||||
| 	// This should be used only for testing.
 | ||||
| 	InsecureSkipVerify bool | ||||
| 
 | ||||
| 	// CipherSuites is a list of supported cipher suites. If CipherSuites
 | ||||
| 	// is nil, TLS uses a list of suites supported by the implementation.
 | ||||
| 	CipherSuites []uint16 | ||||
| 
 | ||||
| 	// PreferServerCipherSuites controls whether the server selects the
 | ||||
| 	// client's most preferred ciphersuite, or the server's most preferred
 | ||||
| 	// ciphersuite. If true then the server's preference, as expressed in
 | ||||
| 	// the order of elements in CipherSuites, is used.
 | ||||
| 	PreferServerCipherSuites bool | ||||
| 
 | ||||
| 	// SessionTicketsDisabled may be set to true to disable session ticket
 | ||||
| 	// (resumption) support.
 | ||||
| 	SessionTicketsDisabled bool | ||||
| 
 | ||||
| 	// SessionTicketKey is used by TLS servers to provide session
 | ||||
| 	// resumption. See RFC 5077. If zero, it will be filled with
 | ||||
| 	// random data before the first server handshake.
 | ||||
| 	//
 | ||||
| 	// If multiple servers are terminating connections for the same host
 | ||||
| 	// they should all have the same SessionTicketKey. If the
 | ||||
| 	// SessionTicketKey leaks, previously recorded and future TLS
 | ||||
| 	// connections using that key are compromised.
 | ||||
| 	SessionTicketKey [32]byte | ||||
| 
 | ||||
| 	// SessionCache is a cache of ClientSessionState entries for TLS session
 | ||||
| 	// resumption.
 | ||||
| 	ClientSessionCache ClientSessionCache | ||||
| 
 | ||||
| 	// MinVersion contains the minimum SSL/TLS version that is acceptable.
 | ||||
| 	// If zero, then SSLv3 is taken as the minimum.
 | ||||
| 	MinVersion uint16 | ||||
| 
 | ||||
| 	// MaxVersion contains the maximum SSL/TLS version that is acceptable.
 | ||||
| 	// If zero, then the maximum version supported by this package is used,
 | ||||
| 	// which is currently TLS 1.2.
 | ||||
| 	MaxVersion uint16 | ||||
| 
 | ||||
| 	// CurvePreferences contains the elliptic curves that will be used in
 | ||||
| 	// an ECDHE handshake, in preference order. If empty, the default will
 | ||||
| 	// be used.
 | ||||
| 	CurvePreferences []CurveID | ||||
| 
 | ||||
| 	serverInitOnce sync.Once // guards calling (*Config).serverInit
 | ||||
| } | ||||
| 
 | ||||
| func (c *Config) serverInit() { | ||||
| 	if c.SessionTicketsDisabled { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// If the key has already been set then we have nothing to do.
 | ||||
| 	for _, b := range c.SessionTicketKey { | ||||
| 		if b != 0 { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if _, err := io.ReadFull(c.rand(), c.SessionTicketKey[:]); err != nil { | ||||
| 		c.SessionTicketsDisabled = true | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (c *Config) rand() io.Reader { | ||||
| 	r := c.Rand | ||||
| 	if r == nil { | ||||
| 		return rand.Reader | ||||
| 	} | ||||
| 	return r | ||||
| } | ||||
| 
 | ||||
| func (c *Config) time() time.Time { | ||||
| 	t := c.Time | ||||
| 	if t == nil { | ||||
| 		t = time.Now | ||||
| 	} | ||||
| 	return t() | ||||
| } | ||||
| 
 | ||||
| func (c *Config) cipherSuites() []uint16 { | ||||
| 	s := c.CipherSuites | ||||
| 	if s == nil { | ||||
| 		s = defaultCipherSuites() | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
| 
 | ||||
| func (c *Config) minVersion() uint16 { | ||||
| 	if c == nil || c.MinVersion == 0 { | ||||
| 		return minVersion | ||||
| 	} | ||||
| 	return c.MinVersion | ||||
| } | ||||
| 
 | ||||
| func (c *Config) maxVersion() uint16 { | ||||
| 	if c == nil || c.MaxVersion == 0 { | ||||
| 		return maxVersion | ||||
| 	} | ||||
| 	return c.MaxVersion | ||||
| } | ||||
| 
 | ||||
| var defaultCurvePreferences = []CurveID{CurveP256, CurveP384, CurveP521} | ||||
| 
 | ||||
| func (c *Config) curvePreferences() []CurveID { | ||||
| 	if c == nil || len(c.CurvePreferences) == 0 { | ||||
| 		return defaultCurvePreferences | ||||
| 	} | ||||
| 	return c.CurvePreferences | ||||
| } | ||||
| 
 | ||||
| // mutualVersion returns the protocol version to use given the advertised
 | ||||
| // version of the peer.
 | ||||
| func (c *Config) mutualVersion(vers uint16) (uint16, bool) { | ||||
| 	minVersion := c.minVersion() | ||||
| 	maxVersion := c.maxVersion() | ||||
| 
 | ||||
| 	if vers < minVersion { | ||||
| 		return 0, false | ||||
| 	} | ||||
| 	if vers > maxVersion { | ||||
| 		vers = maxVersion | ||||
| 	} | ||||
| 	return vers, true | ||||
| } | ||||
| 
 | ||||
| // getCertificate returns the best certificate for the given ClientHelloInfo,
 | ||||
| // defaulting to the first element of c.Certificates.
 | ||||
| func (c *Config) getCertificate(clientHello *ClientHelloInfo) (*Certificate, error) { | ||||
| 	if c.GetCertificate != nil { | ||||
| 		cert, err := c.GetCertificate(clientHello) | ||||
| 		if cert != nil || err != nil { | ||||
| 			return cert, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(c.Certificates) == 1 || c.NameToCertificate == nil { | ||||
| 		// There's only one choice, so no point doing any work.
 | ||||
| 		return &c.Certificates[0], nil | ||||
| 	} | ||||
| 
 | ||||
| 	name := strings.ToLower(clientHello.ServerName) | ||||
| 	for len(name) > 0 && name[len(name)-1] == '.' { | ||||
| 		name = name[:len(name)-1] | ||||
| 	} | ||||
| 
 | ||||
| 	if cert, ok := c.NameToCertificate[name]; ok { | ||||
| 		return cert, nil | ||||
| 	} | ||||
| 
 | ||||
| 	// try replacing labels in the name with wildcards until we get a
 | ||||
| 	// match.
 | ||||
| 	labels := strings.Split(name, ".") | ||||
| 	for i := range labels { | ||||
| 		labels[i] = "*" | ||||
| 		candidate := strings.Join(labels, ".") | ||||
| 		if cert, ok := c.NameToCertificate[candidate]; ok { | ||||
| 			return cert, nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// If nothing matches, return the first certificate.
 | ||||
| 	return &c.Certificates[0], nil | ||||
| } | ||||
| 
 | ||||
| // BuildNameToCertificate parses c.Certificates and builds c.NameToCertificate
 | ||||
| // from the CommonName and SubjectAlternateName fields of each of the leaf
 | ||||
| // certificates.
 | ||||
| func (c *Config) BuildNameToCertificate() { | ||||
| 	c.NameToCertificate = make(map[string]*Certificate) | ||||
| 	for i := range c.Certificates { | ||||
| 		cert := &c.Certificates[i] | ||||
| 		x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) | ||||
| 		if err != nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		if len(x509Cert.Subject.CommonName) > 0 { | ||||
| 			c.NameToCertificate[x509Cert.Subject.CommonName] = cert | ||||
| 		} | ||||
| 		for _, san := range x509Cert.DNSNames { | ||||
| 			c.NameToCertificate[san] = cert | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // A Certificate is a chain of one or more certificates, leaf first.
 | ||||
| type Certificate struct { | ||||
| 	Certificate [][]byte | ||||
| 	// PrivateKey contains the private key corresponding to the public key
 | ||||
| 	// in Leaf. For a server, this must be a *rsa.PrivateKey or
 | ||||
| 	// *ecdsa.PrivateKey. For a client doing client authentication, this
 | ||||
| 	// can be any type that implements crypto.Signer (which includes RSA
 | ||||
| 	// and ECDSA private keys).
 | ||||
| 	PrivateKey crypto.PrivateKey | ||||
| 	// OCSPStaple contains an optional OCSP response which will be served
 | ||||
| 	// to clients that request it.
 | ||||
| 	OCSPStaple []byte | ||||
| 	// Leaf is the parsed form of the leaf certificate, which may be
 | ||||
| 	// initialized using x509.ParseCertificate to reduce per-handshake
 | ||||
| 	// processing for TLS clients doing client authentication. If nil, the
 | ||||
| 	// leaf certificate will be parsed as needed.
 | ||||
| 	Leaf *x509.Certificate | ||||
| } | ||||
| 
 | ||||
| // A TLS record.
 | ||||
| type record struct { | ||||
| 	contentType  recordType | ||||
| 	major, minor uint8 | ||||
| 	payload      []byte | ||||
| } | ||||
| 
 | ||||
| type handshakeMessage interface { | ||||
| 	marshal() []byte | ||||
| 	unmarshal([]byte) bool | ||||
| } | ||||
| 
 | ||||
| // lruSessionCache is a ClientSessionCache implementation that uses an LRU
 | ||||
| // caching strategy.
 | ||||
| type lruSessionCache struct { | ||||
| 	sync.Mutex | ||||
| 
 | ||||
| 	m        map[string]*list.Element | ||||
| 	q        *list.List | ||||
| 	capacity int | ||||
| } | ||||
| 
 | ||||
| type lruSessionCacheEntry struct { | ||||
| 	sessionKey string | ||||
| 	state      *ClientSessionState | ||||
| } | ||||
| 
 | ||||
| // NewLRUClientSessionCache returns a ClientSessionCache with the given
 | ||||
| // capacity that uses an LRU strategy. If capacity is < 1, a default capacity
 | ||||
| // is used instead.
 | ||||
| func NewLRUClientSessionCache(capacity int) ClientSessionCache { | ||||
| 	const defaultSessionCacheCapacity = 64 | ||||
| 
 | ||||
| 	if capacity < 1 { | ||||
| 		capacity = defaultSessionCacheCapacity | ||||
| 	} | ||||
| 	return &lruSessionCache{ | ||||
| 		m:        make(map[string]*list.Element), | ||||
| 		q:        list.New(), | ||||
| 		capacity: capacity, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Put adds the provided (sessionKey, cs) pair to the cache.
 | ||||
| func (c *lruSessionCache) Put(sessionKey string, cs *ClientSessionState) { | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
| 
 | ||||
| 	if elem, ok := c.m[sessionKey]; ok { | ||||
| 		entry := elem.Value.(*lruSessionCacheEntry) | ||||
| 		entry.state = cs | ||||
| 		c.q.MoveToFront(elem) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if c.q.Len() < c.capacity { | ||||
| 		entry := &lruSessionCacheEntry{sessionKey, cs} | ||||
| 		c.m[sessionKey] = c.q.PushFront(entry) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	elem := c.q.Back() | ||||
| 	entry := elem.Value.(*lruSessionCacheEntry) | ||||
| 	delete(c.m, entry.sessionKey) | ||||
| 	entry.sessionKey = sessionKey | ||||
| 	entry.state = cs | ||||
| 	c.q.MoveToFront(elem) | ||||
| 	c.m[sessionKey] = elem | ||||
| } | ||||
| 
 | ||||
| // Get returns the ClientSessionState value associated with a given key. It
 | ||||
| // returns (nil, false) if no value is found.
 | ||||
| func (c *lruSessionCache) Get(sessionKey string) (*ClientSessionState, bool) { | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
| 
 | ||||
| 	if elem, ok := c.m[sessionKey]; ok { | ||||
| 		c.q.MoveToFront(elem) | ||||
| 		return elem.Value.(*lruSessionCacheEntry).state, true | ||||
| 	} | ||||
| 	return nil, false | ||||
| } | ||||
| 
 | ||||
| // TODO(jsing): Make these available to both crypto/x509 and crypto/tls.
 | ||||
| type dsaSignature struct { | ||||
| 	R, S *big.Int | ||||
| } | ||||
| 
 | ||||
| type ecdsaSignature dsaSignature | ||||
| 
 | ||||
| var emptyConfig Config | ||||
| 
 | ||||
| func defaultConfig() *Config { | ||||
| 	return &emptyConfig | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	once                   sync.Once | ||||
| 	varDefaultCipherSuites []uint16 | ||||
| ) | ||||
| 
 | ||||
| func defaultCipherSuites() []uint16 { | ||||
| 	once.Do(initDefaultCipherSuites) | ||||
| 	return varDefaultCipherSuites | ||||
| } | ||||
| 
 | ||||
| func initDefaultCipherSuites() { | ||||
| 	varDefaultCipherSuites = make([]uint16, len(cipherSuites)) | ||||
| 	for i, suite := range cipherSuites { | ||||
| 		varDefaultCipherSuites[i] = suite.id | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func unexpectedMessageError(wanted, got interface{}) error { | ||||
| 	return fmt.Errorf("tls: received unexpected handshake message of type %T when waiting for %T", got, wanted) | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,118 +0,0 @@ | |||
| // Copyright 2010 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestRoundUp(t *testing.T) { | ||||
| 	if roundUp(0, 16) != 0 || | ||||
| 		roundUp(1, 16) != 16 || | ||||
| 		roundUp(15, 16) != 16 || | ||||
| 		roundUp(16, 16) != 16 || | ||||
| 		roundUp(17, 16) != 32 { | ||||
| 		t.Error("roundUp broken") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var paddingTests = []struct { | ||||
| 	in          []byte | ||||
| 	good        bool | ||||
| 	expectedLen int | ||||
| }{ | ||||
| 	{[]byte{1, 2, 3, 4, 0}, true, 4}, | ||||
| 	{[]byte{1, 2, 3, 4, 0, 1}, false, 0}, | ||||
| 	{[]byte{1, 2, 3, 4, 99, 99}, false, 0}, | ||||
| 	{[]byte{1, 2, 3, 4, 1, 1}, true, 4}, | ||||
| 	{[]byte{1, 2, 3, 2, 2, 2}, true, 3}, | ||||
| 	{[]byte{1, 2, 3, 3, 3, 3}, true, 2}, | ||||
| 	{[]byte{1, 2, 3, 4, 3, 3}, false, 0}, | ||||
| 	{[]byte{1, 4, 4, 4, 4, 4}, true, 1}, | ||||
| 	{[]byte{5, 5, 5, 5, 5, 5}, true, 0}, | ||||
| 	{[]byte{6, 6, 6, 6, 6, 6}, false, 0}, | ||||
| } | ||||
| 
 | ||||
| func TestRemovePadding(t *testing.T) { | ||||
| 	for i, test := range paddingTests { | ||||
| 		payload, good := removePadding(test.in) | ||||
| 		expectedGood := byte(255) | ||||
| 		if !test.good { | ||||
| 			expectedGood = 0 | ||||
| 		} | ||||
| 		if good != expectedGood { | ||||
| 			t.Errorf("#%d: wrong validity, want:%d got:%d", i, expectedGood, good) | ||||
| 		} | ||||
| 		if good == 255 && len(payload) != test.expectedLen { | ||||
| 			t.Errorf("#%d: got %d, want %d", i, len(payload), test.expectedLen) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var certExampleCom = `308201403081eda003020102020101300b06092a864886f70d010105301e311c301a060355040a131354657374696e67204365727469666963617465301e170d3131313030313138353835325a170d3132303933303138353835325a301e311c301a060355040a131354657374696e67204365727469666963617465305a300b06092a864886f70d010101034b003048024100bced6e32368599eeddf18796bfd03958a154f87e5b084f96e85136a56b886733592f493f0fc68b0d6b3551781cb95e13c5de458b28d6fb60d20a9129313261410203010001a31a301830160603551d11040f300d820b6578616d706c652e636f6d300b06092a864886f70d0101050341001a0b419d2c74474c6450654e5f10b32bf426ffdf55cad1c52602e7a9151513a3424c70f5960dcd682db0c33769cc1daa3fcdd3db10809d2392ed4a1bf50ced18` | ||||
| 
 | ||||
| var certWildcardExampleCom = `308201423081efa003020102020101300b06092a864886f70d010105301e311c301a060355040a131354657374696e67204365727469666963617465301e170d3131313030313139303034365a170d3132303933303139303034365a301e311c301a060355040a131354657374696e67204365727469666963617465305a300b06092a864886f70d010101034b003048024100bced6e32368599eeddf18796bfd03958a154f87e5b084f96e85136a56b886733592f493f0fc68b0d6b3551781cb95e13c5de458b28d6fb60d20a9129313261410203010001a31c301a30180603551d110411300f820d2a2e6578616d706c652e636f6d300b06092a864886f70d0101050341001676f0c9e7c33c1b656ed5a6476c4e2ee9ec8e62df7407accb1875272b2edd0a22096cb2c22598d11604104d604f810eb4b5987ca6bb319c7e6ce48725c54059` | ||||
| 
 | ||||
| var certFooExampleCom = `308201443081f1a003020102020101300b06092a864886f70d010105301e311c301a060355040a131354657374696e67204365727469666963617465301e170d3131313030313139303131345a170d3132303933303139303131345a301e311c301a060355040a131354657374696e67204365727469666963617465305a300b06092a864886f70d010101034b003048024100bced6e32368599eeddf18796bfd03958a154f87e5b084f96e85136a56b886733592f493f0fc68b0d6b3551781cb95e13c5de458b28d6fb60d20a9129313261410203010001a31e301c301a0603551d1104133011820f666f6f2e6578616d706c652e636f6d300b06092a864886f70d010105034100646a2a51f2aa2477add854b462cf5207ba16d3213ffb5d3d0eed473fbf09935019192d1d5b8ca6a2407b424cf04d97c4cd9197c83ecf81f0eab9464a1109d09f` | ||||
| 
 | ||||
| var certDoubleWildcardExampleCom = `308201443081f1a003020102020101300b06092a864886f70d010105301e311c301a060355040a131354657374696e67204365727469666963617465301e170d3131313030313139303134315a170d3132303933303139303134315a301e311c301a060355040a131354657374696e67204365727469666963617465305a300b06092a864886f70d010101034b003048024100bced6e32368599eeddf18796bfd03958a154f87e5b084f96e85136a56b886733592f493f0fc68b0d6b3551781cb95e13c5de458b28d6fb60d20a9129313261410203010001a31e301c301a0603551d1104133011820f2a2e2a2e6578616d706c652e636f6d300b06092a864886f70d0101050341001c3de267975f56ef57771c6218ef95ecc65102e57bd1defe6f7efea90d9b26cf40de5bd7ad75e46201c7f2a92aaa3e907451e9409f65e28ddb6db80d726290f6` | ||||
| 
 | ||||
| func TestCertificateSelection(t *testing.T) { | ||||
| 	config := Config{ | ||||
| 		Certificates: []Certificate{ | ||||
| 			{ | ||||
| 				Certificate: [][]byte{fromHex(certExampleCom)}, | ||||
| 			}, | ||||
| 			{ | ||||
| 				Certificate: [][]byte{fromHex(certWildcardExampleCom)}, | ||||
| 			}, | ||||
| 			{ | ||||
| 				Certificate: [][]byte{fromHex(certFooExampleCom)}, | ||||
| 			}, | ||||
| 			{ | ||||
| 				Certificate: [][]byte{fromHex(certDoubleWildcardExampleCom)}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	config.BuildNameToCertificate() | ||||
| 
 | ||||
| 	pointerToIndex := func(c *Certificate) int { | ||||
| 		for i := range config.Certificates { | ||||
| 			if c == &config.Certificates[i] { | ||||
| 				return i | ||||
| 			} | ||||
| 		} | ||||
| 		return -1 | ||||
| 	} | ||||
| 
 | ||||
| 	certificateForName := func(name string) *Certificate { | ||||
| 		clientHello := &ClientHelloInfo{ | ||||
| 			ServerName: name, | ||||
| 		} | ||||
| 		if cert, err := config.getCertificate(clientHello); err != nil { | ||||
| 			t.Errorf("unable to get certificate for name '%s': %s", name, err) | ||||
| 			return nil | ||||
| 		} else { | ||||
| 			return cert | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if n := pointerToIndex(certificateForName("example.com")); n != 0 { | ||||
| 		t.Errorf("example.com returned certificate %d, not 0", n) | ||||
| 	} | ||||
| 	if n := pointerToIndex(certificateForName("bar.example.com")); n != 1 { | ||||
| 		t.Errorf("bar.example.com returned certificate %d, not 1", n) | ||||
| 	} | ||||
| 	if n := pointerToIndex(certificateForName("foo.example.com")); n != 2 { | ||||
| 		t.Errorf("foo.example.com returned certificate %d, not 2", n) | ||||
| 	} | ||||
| 	if n := pointerToIndex(certificateForName("foo.bar.example.com")); n != 3 { | ||||
| 		t.Errorf("foo.bar.example.com returned certificate %d, not 3", n) | ||||
| 	} | ||||
| 	if n := pointerToIndex(certificateForName("foo.bar.baz.example.com")); n != 0 { | ||||
| 		t.Errorf("foo.bar.baz.example.com returned certificate %d, not 0", n) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,57 +0,0 @@ | |||
| // Copyright 2014 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls_test | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| 	"crypto/x509" | ||||
| ) | ||||
| 
 | ||||
| func ExampleDial() { | ||||
| 	// Connecting with a custom root-certificate set.
 | ||||
| 
 | ||||
| 	const rootPEM = ` | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT | ||||
| MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i | ||||
| YWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG | ||||
| EwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy | ||||
| bmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB | ||||
| AJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP | ||||
| VaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv | ||||
| h8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE
 | ||||
| ahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ | ||||
| EASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC | ||||
| DTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7 | ||||
| qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD | ||||
| VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g | ||||
| K4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI | ||||
| KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n | ||||
| ZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB | ||||
| BQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY | ||||
| /iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/ | ||||
| zG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza | ||||
| HFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto | ||||
| WHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6 | ||||
| yuGnBXj8ytqU0CwIPX4WecigUCAkVDNx | ||||
| -----END CERTIFICATE-----` | ||||
| 
 | ||||
| 	// First, create the set of root certificates. For this example we only
 | ||||
| 	// have one. It's also possible to omit this in order to use the
 | ||||
| 	// default root set of the current operating system.
 | ||||
| 	roots := x509.NewCertPool() | ||||
| 	ok := roots.AppendCertsFromPEM([]byte(rootPEM)) | ||||
| 	if !ok { | ||||
| 		panic("failed to parse root certificate") | ||||
| 	} | ||||
| 
 | ||||
| 	conn, err := tls.Dial("tcp", "mail.google.com:443", &tls.Config{ | ||||
| 		RootCAs: roots, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		panic("failed to connect: " + err.Error()) | ||||
| 	} | ||||
| 	conn.Close() | ||||
| } | ||||
|  | @ -1,161 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build ignore
 | ||||
| 
 | ||||
| // Generate a self-signed X.509 certificate for a TLS server. Outputs to
 | ||||
| // 'cert.pem' and 'key.pem' and will overwrite existing files.
 | ||||
| 
 | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/x509" | ||||
| 	"crypto/x509/pkix" | ||||
| 	"encoding/pem" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"math/big" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	host       = flag.String("host", "", "Comma-separated hostnames and IPs to generate a certificate for") | ||||
| 	validFrom  = flag.String("start-date", "", "Creation date formatted as Jan 1 15:04:05 2011") | ||||
| 	validFor   = flag.Duration("duration", 365*24*time.Hour, "Duration that certificate is valid for") | ||||
| 	isCA       = flag.Bool("ca", false, "whether this cert should be its own Certificate Authority") | ||||
| 	rsaBits    = flag.Int("rsa-bits", 2048, "Size of RSA key to generate. Ignored if --ecdsa-curve is set") | ||||
| 	ecdsaCurve = flag.String("ecdsa-curve", "", "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521") | ||||
| ) | ||||
| 
 | ||||
| func publicKey(priv interface{}) interface{} { | ||||
| 	switch k := priv.(type) { | ||||
| 	case *rsa.PrivateKey: | ||||
| 		return &k.PublicKey | ||||
| 	case *ecdsa.PrivateKey: | ||||
| 		return &k.PublicKey | ||||
| 	default: | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func pemBlockForKey(priv interface{}) *pem.Block { | ||||
| 	switch k := priv.(type) { | ||||
| 	case *rsa.PrivateKey: | ||||
| 		return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} | ||||
| 	case *ecdsa.PrivateKey: | ||||
| 		b, err := x509.MarshalECPrivateKey(k) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) | ||||
| 			os.Exit(2) | ||||
| 		} | ||||
| 		return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} | ||||
| 	default: | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| 	flag.Parse() | ||||
| 
 | ||||
| 	if len(*host) == 0 { | ||||
| 		log.Fatalf("Missing required --host parameter") | ||||
| 	} | ||||
| 
 | ||||
| 	var priv interface{} | ||||
| 	var err error | ||||
| 	switch *ecdsaCurve { | ||||
| 	case "": | ||||
| 		priv, err = rsa.GenerateKey(rand.Reader, *rsaBits) | ||||
| 	case "P224": | ||||
| 		priv, err = ecdsa.GenerateKey(elliptic.P224(), rand.Reader) | ||||
| 	case "P256": | ||||
| 		priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader) | ||||
| 	case "P384": | ||||
| 		priv, err = ecdsa.GenerateKey(elliptic.P384(), rand.Reader) | ||||
| 	case "P521": | ||||
| 		priv, err = ecdsa.GenerateKey(elliptic.P521(), rand.Reader) | ||||
| 	default: | ||||
| 		fmt.Fprintf(os.Stderr, "Unrecognized elliptic curve: %q", *ecdsaCurve) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("failed to generate private key: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	var notBefore time.Time | ||||
| 	if len(*validFrom) == 0 { | ||||
| 		notBefore = time.Now() | ||||
| 	} else { | ||||
| 		notBefore, err = time.Parse("Jan 2 15:04:05 2006", *validFrom) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, "Failed to parse creation date: %s\n", err) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	notAfter := notBefore.Add(*validFor) | ||||
| 
 | ||||
| 	serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) | ||||
| 	serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("failed to generate serial number: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	template := x509.Certificate{ | ||||
| 		SerialNumber: serialNumber, | ||||
| 		Subject: pkix.Name{ | ||||
| 			Organization: []string{"Acme Co"}, | ||||
| 		}, | ||||
| 		NotBefore: notBefore, | ||||
| 		NotAfter:  notAfter, | ||||
| 
 | ||||
| 		KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, | ||||
| 		ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, | ||||
| 		BasicConstraintsValid: true, | ||||
| 	} | ||||
| 
 | ||||
| 	hosts := strings.Split(*host, ",") | ||||
| 	for _, h := range hosts { | ||||
| 		if ip := net.ParseIP(h); ip != nil { | ||||
| 			template.IPAddresses = append(template.IPAddresses, ip) | ||||
| 		} else { | ||||
| 			template.DNSNames = append(template.DNSNames, h) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if *isCA { | ||||
| 		template.IsCA = true | ||||
| 		template.KeyUsage |= x509.KeyUsageCertSign | ||||
| 	} | ||||
| 
 | ||||
| 	derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("Failed to create certificate: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	certOut, err := os.Create("cert.pem") | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("failed to open cert.pem for writing: %s", err) | ||||
| 	} | ||||
| 	pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) | ||||
| 	certOut.Close() | ||||
| 	log.Print("written cert.pem\n") | ||||
| 
 | ||||
| 	keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) | ||||
| 	if err != nil { | ||||
| 		log.Print("failed to open key.pem for writing:", err) | ||||
| 		return | ||||
| 	} | ||||
| 	pem.Encode(keyOut, pemBlockForKey(priv)) | ||||
| 	keyOut.Close() | ||||
| 	log.Print("written key.pem\n") | ||||
| } | ||||
|  | @ -1,638 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/subtle" | ||||
| 	"crypto/x509" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net" | ||||
| 	"strconv" | ||||
| ) | ||||
| 
 | ||||
| type clientHandshakeState struct { | ||||
| 	c            *Conn | ||||
| 	serverHello  *serverHelloMsg | ||||
| 	hello        *clientHelloMsg | ||||
| 	suite        *cipherSuite | ||||
| 	finishedHash finishedHash | ||||
| 	masterSecret []byte | ||||
| 	session      *ClientSessionState | ||||
| } | ||||
| 
 | ||||
| func (c *Conn) clientHandshake() error { | ||||
| 	if c.config == nil { | ||||
| 		c.config = defaultConfig() | ||||
| 	} | ||||
| 
 | ||||
| 	if len(c.config.ServerName) == 0 && !c.config.InsecureSkipVerify { | ||||
| 		return errors.New("tls: either ServerName or InsecureSkipVerify must be specified in the tls.Config") | ||||
| 	} | ||||
| 
 | ||||
| 	nextProtosLength := 0 | ||||
| 	for _, proto := range c.config.NextProtos { | ||||
| 		if l := len(proto); l == 0 || l > 255 { | ||||
| 			return errors.New("tls: invalid NextProtos value") | ||||
| 		} else { | ||||
| 			nextProtosLength += 1 + l | ||||
| 		} | ||||
| 	} | ||||
| 	if nextProtosLength > 0xffff { | ||||
| 		return errors.New("tls: NextProtos values too large") | ||||
| 	} | ||||
| 
 | ||||
| 	hello := &clientHelloMsg{ | ||||
| 		vers:                c.config.maxVersion(), | ||||
| 		compressionMethods:  []uint8{compressionNone}, | ||||
| 		random:              make([]byte, 32), | ||||
| 		ocspStapling:        true, | ||||
| 		serverName:          c.config.ServerName, | ||||
| 		supportedCurves:     c.config.curvePreferences(), | ||||
| 		supportedPoints:     []uint8{pointFormatUncompressed}, | ||||
| 		nextProtoNeg:        len(c.config.NextProtos) > 0, | ||||
| 		secureRenegotiation: true, | ||||
| 		alpnProtocols:       c.config.NextProtos, | ||||
| 	} | ||||
| 
 | ||||
| 	possibleCipherSuites := c.config.cipherSuites() | ||||
| 	hello.cipherSuites = make([]uint16, 0, len(possibleCipherSuites)) | ||||
| 
 | ||||
| NextCipherSuite: | ||||
| 	for _, suiteId := range possibleCipherSuites { | ||||
| 		for _, suite := range cipherSuites { | ||||
| 			if suite.id != suiteId { | ||||
| 				continue | ||||
| 			} | ||||
| 			// Don't advertise TLS 1.2-only cipher suites unless
 | ||||
| 			// we're attempting TLS 1.2.
 | ||||
| 			if hello.vers < VersionTLS12 && suite.flags&suiteTLS12 != 0 { | ||||
| 				continue | ||||
| 			} | ||||
| 			hello.cipherSuites = append(hello.cipherSuites, suiteId) | ||||
| 			continue NextCipherSuite | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	_, err := io.ReadFull(c.config.rand(), hello.random) | ||||
| 	if err != nil { | ||||
| 		c.sendAlert(alertInternalError) | ||||
| 		return errors.New("tls: short read from Rand: " + err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	if hello.vers >= VersionTLS12 { | ||||
| 		hello.signatureAndHashes = supportedSKXSignatureAlgorithms | ||||
| 	} | ||||
| 
 | ||||
| 	var session *ClientSessionState | ||||
| 	var cacheKey string | ||||
| 	sessionCache := c.config.ClientSessionCache | ||||
| 	if c.config.SessionTicketsDisabled { | ||||
| 		sessionCache = nil | ||||
| 	} | ||||
| 
 | ||||
| 	if sessionCache != nil { | ||||
| 		hello.ticketSupported = true | ||||
| 
 | ||||
| 		// Try to resume a previously negotiated TLS session, if
 | ||||
| 		// available.
 | ||||
| 		cacheKey = clientSessionCacheKey(c.conn.RemoteAddr(), c.config) | ||||
| 		candidateSession, ok := sessionCache.Get(cacheKey) | ||||
| 		if ok { | ||||
| 			// Check that the ciphersuite/version used for the
 | ||||
| 			// previous session are still valid.
 | ||||
| 			cipherSuiteOk := false | ||||
| 			for _, id := range hello.cipherSuites { | ||||
| 				if id == candidateSession.cipherSuite { | ||||
| 					cipherSuiteOk = true | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			versOk := candidateSession.vers >= c.config.minVersion() && | ||||
| 				candidateSession.vers <= c.config.maxVersion() | ||||
| 			if versOk && cipherSuiteOk { | ||||
| 				session = candidateSession | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if session != nil { | ||||
| 		hello.sessionTicket = session.sessionTicket | ||||
| 		// A random session ID is used to detect when the
 | ||||
| 		// server accepted the ticket and is resuming a session
 | ||||
| 		// (see RFC 5077).
 | ||||
| 		hello.sessionId = make([]byte, 16) | ||||
| 		if _, err := io.ReadFull(c.config.rand(), hello.sessionId); err != nil { | ||||
| 			c.sendAlert(alertInternalError) | ||||
| 			return errors.New("tls: short read from Rand: " + err.Error()) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	c.writeRecord(recordTypeHandshake, hello.marshal()) | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	serverHello, ok := msg.(*serverHelloMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(serverHello, msg) | ||||
| 	} | ||||
| 
 | ||||
| 	vers, ok := c.config.mutualVersion(serverHello.vers) | ||||
| 	if !ok || vers < VersionTLS10 { | ||||
| 		// TLS 1.0 is the minimum version supported as a client.
 | ||||
| 		c.sendAlert(alertProtocolVersion) | ||||
| 		return fmt.Errorf("tls: server selected unsupported protocol version %x", serverHello.vers) | ||||
| 	} | ||||
| 	c.vers = vers | ||||
| 	c.haveVers = true | ||||
| 
 | ||||
| 	suite := mutualCipherSuite(c.config.cipherSuites(), serverHello.cipherSuite) | ||||
| 	if suite == nil { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return fmt.Errorf("tls: server selected an unsupported cipher suite") | ||||
| 	} | ||||
| 
 | ||||
| 	hs := &clientHandshakeState{ | ||||
| 		c:            c, | ||||
| 		serverHello:  serverHello, | ||||
| 		hello:        hello, | ||||
| 		suite:        suite, | ||||
| 		finishedHash: newFinishedHash(c.vers, suite.tls12Hash), | ||||
| 		session:      session, | ||||
| 	} | ||||
| 
 | ||||
| 	hs.finishedHash.Write(hs.hello.marshal()) | ||||
| 	hs.finishedHash.Write(hs.serverHello.marshal()) | ||||
| 
 | ||||
| 	isResume, err := hs.processServerHello() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if isResume { | ||||
| 		if err := hs.establishKeys(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readSessionTicket(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readFinished(c.firstFinished[:]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.sendFinished(nil); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} else { | ||||
| 		if err := hs.doFullHandshake(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.establishKeys(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.sendFinished(c.firstFinished[:]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readSessionTicket(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readFinished(nil); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if sessionCache != nil && hs.session != nil && session != hs.session { | ||||
| 		sessionCache.Put(cacheKey, hs.session) | ||||
| 	} | ||||
| 
 | ||||
| 	c.didResume = isResume | ||||
| 	c.handshakeComplete = true | ||||
| 	c.cipherSuite = suite.id | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) doFullHandshake() error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	certMsg, ok := msg.(*certificateMsg) | ||||
| 	if !ok || len(certMsg.certificates) == 0 { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(certMsg, msg) | ||||
| 	} | ||||
| 	hs.finishedHash.Write(certMsg.marshal()) | ||||
| 
 | ||||
| 	certs := make([]*x509.Certificate, len(certMsg.certificates)) | ||||
| 	for i, asn1Data := range certMsg.certificates { | ||||
| 		cert, err := x509.ParseCertificate(asn1Data) | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertBadCertificate) | ||||
| 			return errors.New("tls: failed to parse certificate from server: " + err.Error()) | ||||
| 		} | ||||
| 		certs[i] = cert | ||||
| 	} | ||||
| 
 | ||||
| 	if !c.config.InsecureSkipVerify { | ||||
| 		opts := x509.VerifyOptions{ | ||||
| 			Roots:         c.config.RootCAs, | ||||
| 			CurrentTime:   c.config.time(), | ||||
| 			DNSName:       c.config.ServerName, | ||||
| 			Intermediates: x509.NewCertPool(), | ||||
| 		} | ||||
| 
 | ||||
| 		for i, cert := range certs { | ||||
| 			if i == 0 { | ||||
| 				continue | ||||
| 			} | ||||
| 			opts.Intermediates.AddCert(cert) | ||||
| 		} | ||||
| 		c.verifiedChains, err = certs[0].Verify(opts) | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertBadCertificate) | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	switch certs[0].PublicKey.(type) { | ||||
| 	case *rsa.PublicKey, *ecdsa.PublicKey: | ||||
| 		break | ||||
| 	default: | ||||
| 		c.sendAlert(alertUnsupportedCertificate) | ||||
| 		return fmt.Errorf("tls: server's certificate contains an unsupported type of public key: %T", certs[0].PublicKey) | ||||
| 	} | ||||
| 
 | ||||
| 	c.peerCertificates = certs | ||||
| 
 | ||||
| 	if hs.serverHello.ocspStapling { | ||||
| 		msg, err = c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		cs, ok := msg.(*certificateStatusMsg) | ||||
| 		if !ok { | ||||
| 			c.sendAlert(alertUnexpectedMessage) | ||||
| 			return unexpectedMessageError(cs, msg) | ||||
| 		} | ||||
| 		hs.finishedHash.Write(cs.marshal()) | ||||
| 
 | ||||
| 		if cs.statusType == statusTypeOCSP { | ||||
| 			c.ocspResponse = cs.response | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err = c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	keyAgreement := hs.suite.ka(c.vers) | ||||
| 
 | ||||
| 	skx, ok := msg.(*serverKeyExchangeMsg) | ||||
| 	if ok { | ||||
| 		hs.finishedHash.Write(skx.marshal()) | ||||
| 		err = keyAgreement.processServerKeyExchange(c.config, hs.hello, hs.serverHello, certs[0], skx) | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertUnexpectedMessage) | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		msg, err = c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var chainToSend *Certificate | ||||
| 	var certRequested bool | ||||
| 	certReq, ok := msg.(*certificateRequestMsg) | ||||
| 	if ok { | ||||
| 		certRequested = true | ||||
| 
 | ||||
| 		// RFC 4346 on the certificateAuthorities field:
 | ||||
| 		// A list of the distinguished names of acceptable certificate
 | ||||
| 		// authorities. These distinguished names may specify a desired
 | ||||
| 		// distinguished name for a root CA or for a subordinate CA;
 | ||||
| 		// thus, this message can be used to describe both known roots
 | ||||
| 		// and a desired authorization space. If the
 | ||||
| 		// certificate_authorities list is empty then the client MAY
 | ||||
| 		// send any certificate of the appropriate
 | ||||
| 		// ClientCertificateType, unless there is some external
 | ||||
| 		// arrangement to the contrary.
 | ||||
| 
 | ||||
| 		hs.finishedHash.Write(certReq.marshal()) | ||||
| 
 | ||||
| 		var rsaAvail, ecdsaAvail bool | ||||
| 		for _, certType := range certReq.certificateTypes { | ||||
| 			switch certType { | ||||
| 			case certTypeRSASign: | ||||
| 				rsaAvail = true | ||||
| 			case certTypeECDSASign: | ||||
| 				ecdsaAvail = true | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// We need to search our list of client certs for one
 | ||||
| 		// where SignatureAlgorithm is acceptable to the server and the
 | ||||
| 		// Issuer is in certReq.certificateAuthorities
 | ||||
| 	findCert: | ||||
| 		for i, chain := range c.config.Certificates { | ||||
| 			if !rsaAvail && !ecdsaAvail { | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			for j, cert := range chain.Certificate { | ||||
| 				x509Cert := chain.Leaf | ||||
| 				// parse the certificate if this isn't the leaf
 | ||||
| 				// node, or if chain.Leaf was nil
 | ||||
| 				if j != 0 || x509Cert == nil { | ||||
| 					if x509Cert, err = x509.ParseCertificate(cert); err != nil { | ||||
| 						c.sendAlert(alertInternalError) | ||||
| 						return errors.New("tls: failed to parse client certificate #" + strconv.Itoa(i) + ": " + err.Error()) | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				switch { | ||||
| 				case rsaAvail && x509Cert.PublicKeyAlgorithm == x509.RSA: | ||||
| 				case ecdsaAvail && x509Cert.PublicKeyAlgorithm == x509.ECDSA: | ||||
| 				default: | ||||
| 					continue findCert | ||||
| 				} | ||||
| 
 | ||||
| 				if len(certReq.certificateAuthorities) == 0 { | ||||
| 					// they gave us an empty list, so just take the
 | ||||
| 					// first cert from c.config.Certificates
 | ||||
| 					chainToSend = &chain | ||||
| 					break findCert | ||||
| 				} | ||||
| 
 | ||||
| 				for _, ca := range certReq.certificateAuthorities { | ||||
| 					if bytes.Equal(x509Cert.RawIssuer, ca) { | ||||
| 						chainToSend = &chain | ||||
| 						break findCert | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		msg, err = c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	shd, ok := msg.(*serverHelloDoneMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(shd, msg) | ||||
| 	} | ||||
| 	hs.finishedHash.Write(shd.marshal()) | ||||
| 
 | ||||
| 	// If the server requested a certificate then we have to send a
 | ||||
| 	// Certificate message, even if it's empty because we don't have a
 | ||||
| 	// certificate to send.
 | ||||
| 	if certRequested { | ||||
| 		certMsg = new(certificateMsg) | ||||
| 		if chainToSend != nil { | ||||
| 			certMsg.certificates = chainToSend.Certificate | ||||
| 		} | ||||
| 		hs.finishedHash.Write(certMsg.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, certMsg.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	preMasterSecret, ckx, err := keyAgreement.generateClientKeyExchange(c.config, hs.hello, certs[0]) | ||||
| 	if err != nil { | ||||
| 		c.sendAlert(alertInternalError) | ||||
| 		return err | ||||
| 	} | ||||
| 	if ckx != nil { | ||||
| 		hs.finishedHash.Write(ckx.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, ckx.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	if chainToSend != nil { | ||||
| 		var signed []byte | ||||
| 		certVerify := &certificateVerifyMsg{ | ||||
| 			hasSignatureAndHash: c.vers >= VersionTLS12, | ||||
| 		} | ||||
| 
 | ||||
| 		key, ok := chainToSend.PrivateKey.(crypto.Signer) | ||||
| 		if !ok { | ||||
| 			c.sendAlert(alertInternalError) | ||||
| 			return fmt.Errorf("tls: client certificate private key of type %T does not implement crypto.Signer", chainToSend.PrivateKey) | ||||
| 		} | ||||
| 		switch key.Public().(type) { | ||||
| 		case *ecdsa.PublicKey: | ||||
| 			digest, hashFunc, hashId := hs.finishedHash.hashForClientCertificate(signatureECDSA) | ||||
| 			signed, err = key.Sign(c.config.rand(), digest, hashFunc) | ||||
| 			certVerify.signatureAndHash.signature = signatureECDSA | ||||
| 			certVerify.signatureAndHash.hash = hashId | ||||
| 		case *rsa.PublicKey: | ||||
| 			digest, hashFunc, hashId := hs.finishedHash.hashForClientCertificate(signatureRSA) | ||||
| 			signed, err = key.Sign(c.config.rand(), digest, hashFunc) | ||||
| 			certVerify.signatureAndHash.signature = signatureRSA | ||||
| 			certVerify.signatureAndHash.hash = hashId | ||||
| 		default: | ||||
| 			err = fmt.Errorf("tls: unknown client certificate key type: %T", key) | ||||
| 		} | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertInternalError) | ||||
| 			return errors.New("tls: failed to sign handshake with client certificate: " + err.Error()) | ||||
| 		} | ||||
| 		certVerify.signature = signed | ||||
| 
 | ||||
| 		hs.finishedHash.Write(certVerify.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, certVerify.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite.tls12Hash, preMasterSecret, hs.hello.random, hs.serverHello.random) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) establishKeys() error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := | ||||
| 		keysFromMasterSecret(c.vers, hs.suite.tls12Hash, hs.masterSecret, hs.hello.random, hs.serverHello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) | ||||
| 	var clientCipher, serverCipher interface{} | ||||
| 	var clientHash, serverHash macFunction | ||||
| 	if hs.suite.cipher != nil { | ||||
| 		clientCipher = hs.suite.cipher(clientKey, clientIV, false /* not for reading */) | ||||
| 		clientHash = hs.suite.mac(c.vers, clientMAC) | ||||
| 		serverCipher = hs.suite.cipher(serverKey, serverIV, true /* for reading */) | ||||
| 		serverHash = hs.suite.mac(c.vers, serverMAC) | ||||
| 	} else { | ||||
| 		clientCipher = hs.suite.aead(clientKey, clientIV) | ||||
| 		serverCipher = hs.suite.aead(serverKey, serverIV) | ||||
| 	} | ||||
| 
 | ||||
| 	c.in.prepareCipherSpec(c.vers, serverCipher, serverHash) | ||||
| 	c.out.prepareCipherSpec(c.vers, clientCipher, clientHash) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) serverResumedSession() bool { | ||||
| 	// If the server responded with the same sessionId then it means the
 | ||||
| 	// sessionTicket is being used to resume a TLS session.
 | ||||
| 	return hs.session != nil && hs.hello.sessionId != nil && | ||||
| 		bytes.Equal(hs.serverHello.sessionId, hs.hello.sessionId) | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) processServerHello() (bool, error) { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	if hs.serverHello.compressionMethod != compressionNone { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return false, errors.New("tls: server selected unsupported compression format") | ||||
| 	} | ||||
| 
 | ||||
| 	clientDidNPN := hs.hello.nextProtoNeg | ||||
| 	clientDidALPN := len(hs.hello.alpnProtocols) > 0 | ||||
| 	serverHasNPN := hs.serverHello.nextProtoNeg | ||||
| 	serverHasALPN := len(hs.serverHello.alpnProtocol) > 0 | ||||
| 
 | ||||
| 	if !clientDidNPN && serverHasNPN { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return false, errors.New("server advertised unrequested NPN extension") | ||||
| 	} | ||||
| 
 | ||||
| 	if !clientDidALPN && serverHasALPN { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return false, errors.New("server advertised unrequested ALPN extension") | ||||
| 	} | ||||
| 
 | ||||
| 	if serverHasNPN && serverHasALPN { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return false, errors.New("server advertised both NPN and ALPN extensions") | ||||
| 	} | ||||
| 
 | ||||
| 	if serverHasALPN { | ||||
| 		c.clientProtocol = hs.serverHello.alpnProtocol | ||||
| 		c.clientProtocolFallback = false | ||||
| 	} | ||||
| 
 | ||||
| 	if hs.serverResumedSession() { | ||||
| 		// Restore masterSecret and peerCerts from previous state
 | ||||
| 		hs.masterSecret = hs.session.masterSecret | ||||
| 		c.peerCertificates = hs.session.serverCertificates | ||||
| 		return true, nil | ||||
| 	} | ||||
| 	return false, nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) readFinished(out []byte) error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	c.readRecord(recordTypeChangeCipherSpec) | ||||
| 	if err := c.in.error(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	serverFinished, ok := msg.(*finishedMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(serverFinished, msg) | ||||
| 	} | ||||
| 
 | ||||
| 	verify := hs.finishedHash.serverSum(hs.masterSecret) | ||||
| 	if len(verify) != len(serverFinished.verifyData) || | ||||
| 		subtle.ConstantTimeCompare(verify, serverFinished.verifyData) != 1 { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return errors.New("tls: server's Finished message was incorrect") | ||||
| 	} | ||||
| 	hs.finishedHash.Write(serverFinished.marshal()) | ||||
| 	copy(out, verify) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) readSessionTicket() error { | ||||
| 	if !hs.serverHello.ticketSupported { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	c := hs.c | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	sessionTicketMsg, ok := msg.(*newSessionTicketMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(sessionTicketMsg, msg) | ||||
| 	} | ||||
| 	hs.finishedHash.Write(sessionTicketMsg.marshal()) | ||||
| 
 | ||||
| 	hs.session = &ClientSessionState{ | ||||
| 		sessionTicket:      sessionTicketMsg.ticket, | ||||
| 		vers:               c.vers, | ||||
| 		cipherSuite:        hs.suite.id, | ||||
| 		masterSecret:       hs.masterSecret, | ||||
| 		serverCertificates: c.peerCertificates, | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *clientHandshakeState) sendFinished(out []byte) error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) | ||||
| 	if hs.serverHello.nextProtoNeg { | ||||
| 		nextProto := new(nextProtoMsg) | ||||
| 		proto, fallback := mutualProtocol(c.config.NextProtos, hs.serverHello.nextProtos) | ||||
| 		nextProto.proto = proto | ||||
| 		c.clientProtocol = proto | ||||
| 		c.clientProtocolFallback = fallback | ||||
| 
 | ||||
| 		hs.finishedHash.Write(nextProto.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, nextProto.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	finished := new(finishedMsg) | ||||
| 	finished.verifyData = hs.finishedHash.clientSum(hs.masterSecret) | ||||
| 	hs.finishedHash.Write(finished.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, finished.marshal()) | ||||
| 	copy(out, finished.verifyData) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // clientSessionCacheKey returns a key used to cache sessionTickets that could
 | ||||
| // be used to resume previously negotiated TLS sessions with a server.
 | ||||
| func clientSessionCacheKey(serverAddr net.Addr, config *Config) string { | ||||
| 	if len(config.ServerName) > 0 { | ||||
| 		return config.ServerName | ||||
| 	} | ||||
| 	return serverAddr.String() | ||||
| } | ||||
| 
 | ||||
| // mutualProtocol finds the mutual Next Protocol Negotiation or ALPN protocol
 | ||||
| // given list of possible protocols and a list of the preference order. The
 | ||||
| // first list must not be empty. It returns the resulting protocol and flag
 | ||||
| // indicating if the fallback case was reached.
 | ||||
| func mutualProtocol(protos, preferenceProtos []string) (string, bool) { | ||||
| 	for _, s := range preferenceProtos { | ||||
| 		for _, c := range protos { | ||||
| 			if s == c { | ||||
| 				return s, false | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return protos[0], true | ||||
| } | ||||
							
								
								
									
										499
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_client_test.go
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										499
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_client_test.go
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,499 +0,0 @@ | |||
| // Copyright 2010 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/x509" | ||||
| 	"encoding/pem" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Note: see comment in handshake_test.go for details of how the reference
 | ||||
| // tests work.
 | ||||
| 
 | ||||
| // blockingSource is an io.Reader that blocks a Read call until it's closed.
 | ||||
| type blockingSource chan bool | ||||
| 
 | ||||
| func (b blockingSource) Read([]byte) (n int, err error) { | ||||
| 	<-b | ||||
| 	return 0, io.EOF | ||||
| } | ||||
| 
 | ||||
| // clientTest represents a test of the TLS client handshake against a reference
 | ||||
| // implementation.
 | ||||
| type clientTest struct { | ||||
| 	// name is a freeform string identifying the test and the file in which
 | ||||
| 	// the expected results will be stored.
 | ||||
| 	name string | ||||
| 	// command, if not empty, contains a series of arguments for the
 | ||||
| 	// command to run for the reference server.
 | ||||
| 	command []string | ||||
| 	// config, if not nil, contains a custom Config to use for this test.
 | ||||
| 	config *Config | ||||
| 	// cert, if not empty, contains a DER-encoded certificate for the
 | ||||
| 	// reference server.
 | ||||
| 	cert []byte | ||||
| 	// key, if not nil, contains either a *rsa.PrivateKey or
 | ||||
| 	// *ecdsa.PrivateKey which is the private key for the reference server.
 | ||||
| 	key interface{} | ||||
| 	// validate, if not nil, is a function that will be called with the
 | ||||
| 	// ConnectionState of the resulting connection. It returns a non-nil
 | ||||
| 	// error if the ConnectionState is unacceptable.
 | ||||
| 	validate func(ConnectionState) error | ||||
| } | ||||
| 
 | ||||
| var defaultServerCommand = []string{"openssl", "s_server"} | ||||
| 
 | ||||
| // connFromCommand starts the reference server process, connects to it and
 | ||||
| // returns a recordingConn for the connection. The stdin return value is a
 | ||||
| // blockingSource for the stdin of the child process. It must be closed before
 | ||||
| // Waiting for child.
 | ||||
| func (test *clientTest) connFromCommand() (conn *recordingConn, child *exec.Cmd, stdin blockingSource, err error) { | ||||
| 	cert := testRSACertificate | ||||
| 	if len(test.cert) > 0 { | ||||
| 		cert = test.cert | ||||
| 	} | ||||
| 	certPath := tempFile(string(cert)) | ||||
| 	defer os.Remove(certPath) | ||||
| 
 | ||||
| 	var key interface{} = testRSAPrivateKey | ||||
| 	if test.key != nil { | ||||
| 		key = test.key | ||||
| 	} | ||||
| 	var pemType string | ||||
| 	var derBytes []byte | ||||
| 	switch key := key.(type) { | ||||
| 	case *rsa.PrivateKey: | ||||
| 		pemType = "RSA" | ||||
| 		derBytes = x509.MarshalPKCS1PrivateKey(key) | ||||
| 	case *ecdsa.PrivateKey: | ||||
| 		pemType = "EC" | ||||
| 		var err error | ||||
| 		derBytes, err = x509.MarshalECPrivateKey(key) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	default: | ||||
| 		panic("unknown key type") | ||||
| 	} | ||||
| 
 | ||||
| 	var pemOut bytes.Buffer | ||||
| 	pem.Encode(&pemOut, &pem.Block{Type: pemType + " PRIVATE KEY", Bytes: derBytes}) | ||||
| 
 | ||||
| 	keyPath := tempFile(string(pemOut.Bytes())) | ||||
| 	defer os.Remove(keyPath) | ||||
| 
 | ||||
| 	var command []string | ||||
| 	if len(test.command) > 0 { | ||||
| 		command = append(command, test.command...) | ||||
| 	} else { | ||||
| 		command = append(command, defaultServerCommand...) | ||||
| 	} | ||||
| 	command = append(command, "-cert", certPath, "-certform", "DER", "-key", keyPath) | ||||
| 	// serverPort contains the port that OpenSSL will listen on. OpenSSL
 | ||||
| 	// can't take "0" as an argument here so we have to pick a number and
 | ||||
| 	// hope that it's not in use on the machine. Since this only occurs
 | ||||
| 	// when -update is given and thus when there's a human watching the
 | ||||
| 	// test, this isn't too bad.
 | ||||
| 	const serverPort = 24323 | ||||
| 	command = append(command, "-accept", strconv.Itoa(serverPort)) | ||||
| 
 | ||||
| 	cmd := exec.Command(command[0], command[1:]...) | ||||
| 	stdin = blockingSource(make(chan bool)) | ||||
| 	cmd.Stdin = stdin | ||||
| 	var out bytes.Buffer | ||||
| 	cmd.Stdout = &out | ||||
| 	cmd.Stderr = &out | ||||
| 	if err := cmd.Start(); err != nil { | ||||
| 		return nil, nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// OpenSSL does print an "ACCEPT" banner, but it does so *before*
 | ||||
| 	// opening the listening socket, so we can't use that to wait until it
 | ||||
| 	// has started listening. Thus we are forced to poll until we get a
 | ||||
| 	// connection.
 | ||||
| 	var tcpConn net.Conn | ||||
| 	for i := uint(0); i < 5; i++ { | ||||
| 		tcpConn, err = net.DialTCP("tcp", nil, &net.TCPAddr{ | ||||
| 			IP:   net.IPv4(127, 0, 0, 1), | ||||
| 			Port: serverPort, | ||||
| 		}) | ||||
| 		if err == nil { | ||||
| 			break | ||||
| 		} | ||||
| 		time.Sleep((1 << i) * 5 * time.Millisecond) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		close(stdin) | ||||
| 		out.WriteTo(os.Stdout) | ||||
| 		cmd.Process.Kill() | ||||
| 		return nil, nil, nil, cmd.Wait() | ||||
| 	} | ||||
| 
 | ||||
| 	record := &recordingConn{ | ||||
| 		Conn: tcpConn, | ||||
| 	} | ||||
| 
 | ||||
| 	return record, cmd, stdin, nil | ||||
| } | ||||
| 
 | ||||
| func (test *clientTest) dataPath() string { | ||||
| 	return filepath.Join("testdata", "Client-"+test.name) | ||||
| } | ||||
| 
 | ||||
| func (test *clientTest) loadData() (flows [][]byte, err error) { | ||||
| 	in, err := os.Open(test.dataPath()) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer in.Close() | ||||
| 	return parseTestData(in) | ||||
| } | ||||
| 
 | ||||
| func (test *clientTest) run(t *testing.T, write bool) { | ||||
| 	var clientConn, serverConn net.Conn | ||||
| 	var recordingConn *recordingConn | ||||
| 	var childProcess *exec.Cmd | ||||
| 	var stdin blockingSource | ||||
| 
 | ||||
| 	if write { | ||||
| 		var err error | ||||
| 		recordingConn, childProcess, stdin, err = test.connFromCommand() | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("Failed to start subcommand: %s", err) | ||||
| 		} | ||||
| 		clientConn = recordingConn | ||||
| 	} else { | ||||
| 		clientConn, serverConn = net.Pipe() | ||||
| 	} | ||||
| 
 | ||||
| 	config := test.config | ||||
| 	if config == nil { | ||||
| 		config = testConfig | ||||
| 	} | ||||
| 	client := Client(clientConn, config) | ||||
| 
 | ||||
| 	doneChan := make(chan bool) | ||||
| 	go func() { | ||||
| 		if _, err := client.Write([]byte("hello\n")); err != nil { | ||||
| 			t.Errorf("Client.Write failed: %s", err) | ||||
| 		} | ||||
| 		if test.validate != nil { | ||||
| 			if err := test.validate(client.ConnectionState()); err != nil { | ||||
| 				t.Logf("validate callback returned error: %s", err) | ||||
| 			} | ||||
| 		} | ||||
| 		client.Close() | ||||
| 		clientConn.Close() | ||||
| 		doneChan <- true | ||||
| 	}() | ||||
| 
 | ||||
| 	if !write { | ||||
| 		flows, err := test.loadData() | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("%s: failed to load data from %s: %v", test.name, test.dataPath(), err) | ||||
| 		} | ||||
| 		for i, b := range flows { | ||||
| 			if i%2 == 1 { | ||||
| 				serverConn.Write(b) | ||||
| 				continue | ||||
| 			} | ||||
| 			bb := make([]byte, len(b)) | ||||
| 			_, err := io.ReadFull(serverConn, bb) | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("%s #%d: %s", test.name, i, err) | ||||
| 			} | ||||
| 			if !bytes.Equal(b, bb) { | ||||
| 				t.Fatalf("%s #%d: mismatch on read: got:%x want:%x", test.name, i, bb, b) | ||||
| 			} | ||||
| 		} | ||||
| 		serverConn.Close() | ||||
| 	} | ||||
| 
 | ||||
| 	<-doneChan | ||||
| 
 | ||||
| 	if write { | ||||
| 		path := test.dataPath() | ||||
| 		out, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("Failed to create output file: %s", err) | ||||
| 		} | ||||
| 		defer out.Close() | ||||
| 		recordingConn.Close() | ||||
| 		close(stdin) | ||||
| 		childProcess.Process.Kill() | ||||
| 		childProcess.Wait() | ||||
| 		if len(recordingConn.flows) < 3 { | ||||
| 			childProcess.Stdout.(*bytes.Buffer).WriteTo(os.Stdout) | ||||
| 			t.Fatalf("Client connection didn't work") | ||||
| 		} | ||||
| 		recordingConn.WriteTo(out) | ||||
| 		fmt.Printf("Wrote %s\n", path) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func runClientTestForVersion(t *testing.T, template *clientTest, prefix, option string) { | ||||
| 	test := *template | ||||
| 	test.name = prefix + test.name | ||||
| 	if len(test.command) == 0 { | ||||
| 		test.command = defaultClientCommand | ||||
| 	} | ||||
| 	test.command = append([]string(nil), test.command...) | ||||
| 	test.command = append(test.command, option) | ||||
| 	test.run(t, *update) | ||||
| } | ||||
| 
 | ||||
| func runClientTestTLS10(t *testing.T, template *clientTest) { | ||||
| 	runClientTestForVersion(t, template, "TLSv10-", "-tls1") | ||||
| } | ||||
| 
 | ||||
| func runClientTestTLS11(t *testing.T, template *clientTest) { | ||||
| 	runClientTestForVersion(t, template, "TLSv11-", "-tls1_1") | ||||
| } | ||||
| 
 | ||||
| func runClientTestTLS12(t *testing.T, template *clientTest) { | ||||
| 	runClientTestForVersion(t, template, "TLSv12-", "-tls1_2") | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientRSARC4(t *testing.T) { | ||||
| 	test := &clientTest{ | ||||
| 		name:    "RSA-RC4", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "RC4-SHA"}, | ||||
| 	} | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS11(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientECDHERSAAES(t *testing.T) { | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ECDHE-RSA-AES", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-RSA-AES128-SHA"}, | ||||
| 	} | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS11(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientECDHEECDSAAES(t *testing.T) { | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ECDHE-ECDSA-AES", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-ECDSA-AES128-SHA"}, | ||||
| 		cert:    testECDSACertificate, | ||||
| 		key:     testECDSAPrivateKey, | ||||
| 	} | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS11(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientECDHEECDSAAESGCM(t *testing.T) { | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ECDHE-ECDSA-AES-GCM", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-ECDSA-AES128-GCM-SHA256"}, | ||||
| 		cert:    testECDSACertificate, | ||||
| 		key:     testECDSAPrivateKey, | ||||
| 	} | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientAES256GCMSHA384(t *testing.T) { | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ECDHE-ECDSA-AES256-GCM-SHA384", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-ECDSA-AES256-GCM-SHA384"}, | ||||
| 		cert:    testECDSACertificate, | ||||
| 		key:     testECDSAPrivateKey, | ||||
| 	} | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientCertRSA(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	cert, _ := X509KeyPair([]byte(clientCertificatePEM), []byte(clientKeyPEM)) | ||||
| 	config.Certificates = []Certificate{cert} | ||||
| 
 | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ClientCert-RSA-RSA", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "RC4-SHA", "-verify", "1"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 
 | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| 
 | ||||
| 	test = &clientTest{ | ||||
| 		name:    "ClientCert-RSA-ECDSA", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-ECDSA-AES128-SHA", "-verify", "1"}, | ||||
| 		config:  &config, | ||||
| 		cert:    testECDSACertificate, | ||||
| 		key:     testECDSAPrivateKey, | ||||
| 	} | ||||
| 
 | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientCertECDSA(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	cert, _ := X509KeyPair([]byte(clientECDSACertificatePEM), []byte(clientECDSAKeyPEM)) | ||||
| 	config.Certificates = []Certificate{cert} | ||||
| 
 | ||||
| 	test := &clientTest{ | ||||
| 		name:    "ClientCert-ECDSA-RSA", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "RC4-SHA", "-verify", "1"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 
 | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| 
 | ||||
| 	test = &clientTest{ | ||||
| 		name:    "ClientCert-ECDSA-ECDSA", | ||||
| 		command: []string{"openssl", "s_server", "-cipher", "ECDHE-ECDSA-AES128-SHA", "-verify", "1"}, | ||||
| 		config:  &config, | ||||
| 		cert:    testECDSACertificate, | ||||
| 		key:     testECDSAPrivateKey, | ||||
| 	} | ||||
| 
 | ||||
| 	runClientTestTLS10(t, test) | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestClientResumption(t *testing.T) { | ||||
| 	serverConfig := &Config{ | ||||
| 		CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA}, | ||||
| 		Certificates: testConfig.Certificates, | ||||
| 	} | ||||
| 	clientConfig := &Config{ | ||||
| 		CipherSuites:       []uint16{TLS_RSA_WITH_RC4_128_SHA}, | ||||
| 		InsecureSkipVerify: true, | ||||
| 		ClientSessionCache: NewLRUClientSessionCache(32), | ||||
| 	} | ||||
| 
 | ||||
| 	testResumeState := func(test string, didResume bool) { | ||||
| 		hs, err := testHandshake(clientConfig, serverConfig) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("%s: handshake failed: %s", test, err) | ||||
| 		} | ||||
| 		if hs.DidResume != didResume { | ||||
| 			t.Fatalf("%s resumed: %v, expected: %v", test, hs.DidResume, didResume) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	testResumeState("Handshake", false) | ||||
| 	testResumeState("Resume", true) | ||||
| 
 | ||||
| 	if _, err := io.ReadFull(serverConfig.rand(), serverConfig.SessionTicketKey[:]); err != nil { | ||||
| 		t.Fatalf("Failed to invalidate SessionTicketKey") | ||||
| 	} | ||||
| 	testResumeState("InvalidSessionTicketKey", false) | ||||
| 	testResumeState("ResumeAfterInvalidSessionTicketKey", true) | ||||
| 
 | ||||
| 	clientConfig.CipherSuites = []uint16{TLS_ECDHE_RSA_WITH_RC4_128_SHA} | ||||
| 	testResumeState("DifferentCipherSuite", false) | ||||
| 	testResumeState("DifferentCipherSuiteRecovers", true) | ||||
| 
 | ||||
| 	clientConfig.ClientSessionCache = nil | ||||
| 	testResumeState("WithoutSessionCache", false) | ||||
| } | ||||
| 
 | ||||
| func TestLRUClientSessionCache(t *testing.T) { | ||||
| 	// Initialize cache of capacity 4.
 | ||||
| 	cache := NewLRUClientSessionCache(4) | ||||
| 	cs := make([]ClientSessionState, 6) | ||||
| 	keys := []string{"0", "1", "2", "3", "4", "5", "6"} | ||||
| 
 | ||||
| 	// Add 4 entries to the cache and look them up.
 | ||||
| 	for i := 0; i < 4; i++ { | ||||
| 		cache.Put(keys[i], &cs[i]) | ||||
| 	} | ||||
| 	for i := 0; i < 4; i++ { | ||||
| 		if s, ok := cache.Get(keys[i]); !ok || s != &cs[i] { | ||||
| 			t.Fatalf("session cache failed lookup for added key: %s", keys[i]) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Add 2 more entries to the cache. First 2 should be evicted.
 | ||||
| 	for i := 4; i < 6; i++ { | ||||
| 		cache.Put(keys[i], &cs[i]) | ||||
| 	} | ||||
| 	for i := 0; i < 2; i++ { | ||||
| 		if s, ok := cache.Get(keys[i]); ok || s != nil { | ||||
| 			t.Fatalf("session cache should have evicted key: %s", keys[i]) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Touch entry 2. LRU should evict 3 next.
 | ||||
| 	cache.Get(keys[2]) | ||||
| 	cache.Put(keys[0], &cs[0]) | ||||
| 	if s, ok := cache.Get(keys[3]); ok || s != nil { | ||||
| 		t.Fatalf("session cache should have evicted key 3") | ||||
| 	} | ||||
| 
 | ||||
| 	// Update entry 0 in place.
 | ||||
| 	cache.Put(keys[0], &cs[3]) | ||||
| 	if s, ok := cache.Get(keys[0]); !ok || s != &cs[3] { | ||||
| 		t.Fatalf("session cache failed update for key 0") | ||||
| 	} | ||||
| 
 | ||||
| 	// Adding a nil entry is valid.
 | ||||
| 	cache.Put(keys[0], nil) | ||||
| 	if s, ok := cache.Get(keys[0]); !ok || s != nil { | ||||
| 		t.Fatalf("failed to add nil entry to cache") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientALPNMatch(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.NextProtos = []string{"proto2", "proto1"} | ||||
| 
 | ||||
| 	test := &clientTest{ | ||||
| 		name: "ALPN", | ||||
| 		// Note that this needs OpenSSL 1.0.2 because that is the first
 | ||||
| 		// version that supports the -alpn flag.
 | ||||
| 		command: []string{"openssl", "s_server", "-alpn", "proto1,proto2"}, | ||||
| 		config:  &config, | ||||
| 		validate: func(state ConnectionState) error { | ||||
| 			// The server's preferences should override the client.
 | ||||
| 			if state.NegotiatedProtocol != "proto1" { | ||||
| 				return fmt.Errorf("Got protocol %q, wanted proto1", state.NegotiatedProtocol) | ||||
| 			} | ||||
| 			return nil | ||||
| 		}, | ||||
| 	} | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeClientALPNNoMatch(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.NextProtos = []string{"proto3"} | ||||
| 
 | ||||
| 	test := &clientTest{ | ||||
| 		name: "ALPN-NoMatch", | ||||
| 		// Note that this needs OpenSSL 1.0.2 because that is the first
 | ||||
| 		// version that supports the -alpn flag.
 | ||||
| 		command: []string{"openssl", "s_server", "-alpn", "proto1,proto2"}, | ||||
| 		config:  &config, | ||||
| 		validate: func(state ConnectionState) error { | ||||
| 			// There's no overlap so OpenSSL will not select a protocol.
 | ||||
| 			if state.NegotiatedProtocol != "" { | ||||
| 				return fmt.Errorf("Got protocol %q, wanted ''", state.NegotiatedProtocol) | ||||
| 			} | ||||
| 			return nil | ||||
| 		}, | ||||
| 	} | ||||
| 	runClientTestTLS12(t, test) | ||||
| } | ||||
							
								
								
									
										1438
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_messages.go
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										1438
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_messages.go
								
								
									generated
								
								
									vendored
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										251
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_messages_test.go
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										251
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_messages_test.go
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,251 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"math/rand" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| 	"testing/quick" | ||||
| ) | ||||
| 
 | ||||
| var tests = []interface{}{ | ||||
| 	&clientHelloMsg{}, | ||||
| 	&serverHelloMsg{}, | ||||
| 	&finishedMsg{}, | ||||
| 
 | ||||
| 	&certificateMsg{}, | ||||
| 	&certificateRequestMsg{}, | ||||
| 	&certificateVerifyMsg{}, | ||||
| 	&certificateStatusMsg{}, | ||||
| 	&clientKeyExchangeMsg{}, | ||||
| 	&nextProtoMsg{}, | ||||
| 	&newSessionTicketMsg{}, | ||||
| 	&sessionState{}, | ||||
| } | ||||
| 
 | ||||
| type testMessage interface { | ||||
| 	marshal() []byte | ||||
| 	unmarshal([]byte) bool | ||||
| 	equal(interface{}) bool | ||||
| } | ||||
| 
 | ||||
| func TestMarshalUnmarshal(t *testing.T) { | ||||
| 	rand := rand.New(rand.NewSource(0)) | ||||
| 
 | ||||
| 	for i, iface := range tests { | ||||
| 		ty := reflect.ValueOf(iface).Type() | ||||
| 
 | ||||
| 		n := 100 | ||||
| 		if testing.Short() { | ||||
| 			n = 5 | ||||
| 		} | ||||
| 		for j := 0; j < n; j++ { | ||||
| 			v, ok := quick.Value(ty, rand) | ||||
| 			if !ok { | ||||
| 				t.Errorf("#%d: failed to create value", i) | ||||
| 				break | ||||
| 			} | ||||
| 
 | ||||
| 			m1 := v.Interface().(testMessage) | ||||
| 			marshaled := m1.marshal() | ||||
| 			m2 := iface.(testMessage) | ||||
| 			if !m2.unmarshal(marshaled) { | ||||
| 				t.Errorf("#%d failed to unmarshal %#v %x", i, m1, marshaled) | ||||
| 				break | ||||
| 			} | ||||
| 			m2.marshal() // to fill any marshal cache in the message
 | ||||
| 
 | ||||
| 			if !m1.equal(m2) { | ||||
| 				t.Errorf("#%d got:%#v want:%#v %x", i, m2, m1, marshaled) | ||||
| 				break | ||||
| 			} | ||||
| 
 | ||||
| 			if i >= 3 { | ||||
| 				// The first three message types (ClientHello,
 | ||||
| 				// ServerHello and Finished) are allowed to
 | ||||
| 				// have parsable prefixes because the extension
 | ||||
| 				// data is optional and the length of the
 | ||||
| 				// Finished varies across versions.
 | ||||
| 				for j := 0; j < len(marshaled); j++ { | ||||
| 					if m2.unmarshal(marshaled[0:j]) { | ||||
| 						t.Errorf("#%d unmarshaled a prefix of length %d of %#v", i, j, m1) | ||||
| 						break | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestFuzz(t *testing.T) { | ||||
| 	rand := rand.New(rand.NewSource(0)) | ||||
| 	for _, iface := range tests { | ||||
| 		m := iface.(testMessage) | ||||
| 
 | ||||
| 		for j := 0; j < 1000; j++ { | ||||
| 			len := rand.Intn(100) | ||||
| 			bytes := randomBytes(len, rand) | ||||
| 			// This just looks for crashes due to bounds errors etc.
 | ||||
| 			m.unmarshal(bytes) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func randomBytes(n int, rand *rand.Rand) []byte { | ||||
| 	r := make([]byte, n) | ||||
| 	for i := 0; i < n; i++ { | ||||
| 		r[i] = byte(rand.Int31()) | ||||
| 	} | ||||
| 	return r | ||||
| } | ||||
| 
 | ||||
| func randomString(n int, rand *rand.Rand) string { | ||||
| 	b := randomBytes(n, rand) | ||||
| 	return string(b) | ||||
| } | ||||
| 
 | ||||
| func (*clientHelloMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &clientHelloMsg{} | ||||
| 	m.vers = uint16(rand.Intn(65536)) | ||||
| 	m.random = randomBytes(32, rand) | ||||
| 	m.sessionId = randomBytes(rand.Intn(32), rand) | ||||
| 	m.cipherSuites = make([]uint16, rand.Intn(63)+1) | ||||
| 	for i := 0; i < len(m.cipherSuites); i++ { | ||||
| 		m.cipherSuites[i] = uint16(rand.Int31()) | ||||
| 	} | ||||
| 	m.compressionMethods = randomBytes(rand.Intn(63)+1, rand) | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.nextProtoNeg = true | ||||
| 	} | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.serverName = randomString(rand.Intn(255), rand) | ||||
| 	} | ||||
| 	m.ocspStapling = rand.Intn(10) > 5 | ||||
| 	m.supportedPoints = randomBytes(rand.Intn(5)+1, rand) | ||||
| 	m.supportedCurves = make([]CurveID, rand.Intn(5)+1) | ||||
| 	for i := range m.supportedCurves { | ||||
| 		m.supportedCurves[i] = CurveID(rand.Intn(30000)) | ||||
| 	} | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.ticketSupported = true | ||||
| 		if rand.Intn(10) > 5 { | ||||
| 			m.sessionTicket = randomBytes(rand.Intn(300), rand) | ||||
| 		} | ||||
| 	} | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.signatureAndHashes = supportedSKXSignatureAlgorithms | ||||
| 	} | ||||
| 	m.alpnProtocols = make([]string, rand.Intn(5)) | ||||
| 	for i := range m.alpnProtocols { | ||||
| 		m.alpnProtocols[i] = randomString(rand.Intn(20)+1, rand) | ||||
| 	} | ||||
| 
 | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*serverHelloMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &serverHelloMsg{} | ||||
| 	m.vers = uint16(rand.Intn(65536)) | ||||
| 	m.random = randomBytes(32, rand) | ||||
| 	m.sessionId = randomBytes(rand.Intn(32), rand) | ||||
| 	m.cipherSuite = uint16(rand.Int31()) | ||||
| 	m.compressionMethod = uint8(rand.Intn(256)) | ||||
| 
 | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.nextProtoNeg = true | ||||
| 
 | ||||
| 		n := rand.Intn(10) | ||||
| 		m.nextProtos = make([]string, n) | ||||
| 		for i := 0; i < n; i++ { | ||||
| 			m.nextProtos[i] = randomString(20, rand) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.ocspStapling = true | ||||
| 	} | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.ticketSupported = true | ||||
| 	} | ||||
| 	m.alpnProtocol = randomString(rand.Intn(32)+1, rand) | ||||
| 
 | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*certificateMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &certificateMsg{} | ||||
| 	numCerts := rand.Intn(20) | ||||
| 	m.certificates = make([][]byte, numCerts) | ||||
| 	for i := 0; i < numCerts; i++ { | ||||
| 		m.certificates[i] = randomBytes(rand.Intn(10)+1, rand) | ||||
| 	} | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*certificateRequestMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &certificateRequestMsg{} | ||||
| 	m.certificateTypes = randomBytes(rand.Intn(5)+1, rand) | ||||
| 	numCAs := rand.Intn(100) | ||||
| 	m.certificateAuthorities = make([][]byte, numCAs) | ||||
| 	for i := 0; i < numCAs; i++ { | ||||
| 		m.certificateAuthorities[i] = randomBytes(rand.Intn(15)+1, rand) | ||||
| 	} | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*certificateVerifyMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &certificateVerifyMsg{} | ||||
| 	m.signature = randomBytes(rand.Intn(15)+1, rand) | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*certificateStatusMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &certificateStatusMsg{} | ||||
| 	if rand.Intn(10) > 5 { | ||||
| 		m.statusType = statusTypeOCSP | ||||
| 		m.response = randomBytes(rand.Intn(10)+1, rand) | ||||
| 	} else { | ||||
| 		m.statusType = 42 | ||||
| 	} | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*clientKeyExchangeMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &clientKeyExchangeMsg{} | ||||
| 	m.ciphertext = randomBytes(rand.Intn(1000)+1, rand) | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*finishedMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &finishedMsg{} | ||||
| 	m.verifyData = randomBytes(12, rand) | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*nextProtoMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &nextProtoMsg{} | ||||
| 	m.proto = randomString(rand.Intn(255), rand) | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*newSessionTicketMsg) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	m := &newSessionTicketMsg{} | ||||
| 	m.ticket = randomBytes(rand.Intn(4), rand) | ||||
| 	return reflect.ValueOf(m) | ||||
| } | ||||
| 
 | ||||
| func (*sessionState) Generate(rand *rand.Rand, size int) reflect.Value { | ||||
| 	s := &sessionState{} | ||||
| 	s.vers = uint16(rand.Intn(10000)) | ||||
| 	s.cipherSuite = uint16(rand.Intn(10000)) | ||||
| 	s.masterSecret = randomBytes(rand.Intn(100), rand) | ||||
| 	numCerts := rand.Intn(20) | ||||
| 	s.certificates = make([][]byte, numCerts) | ||||
| 	for i := 0; i < numCerts; i++ { | ||||
| 		s.certificates[i] = randomBytes(rand.Intn(10)+1, rand) | ||||
| 	} | ||||
| 	return reflect.ValueOf(s) | ||||
| } | ||||
|  | @ -1,684 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/subtle" | ||||
| 	"crypto/x509" | ||||
| 	"encoding/asn1" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| ) | ||||
| 
 | ||||
| // serverHandshakeState contains details of a server handshake in progress.
 | ||||
| // It's discarded once the handshake has completed.
 | ||||
| type serverHandshakeState struct { | ||||
| 	c               *Conn | ||||
| 	clientHello     *clientHelloMsg | ||||
| 	hello           *serverHelloMsg | ||||
| 	suite           *cipherSuite | ||||
| 	ellipticOk      bool | ||||
| 	ecdsaOk         bool | ||||
| 	sessionState    *sessionState | ||||
| 	finishedHash    finishedHash | ||||
| 	masterSecret    []byte | ||||
| 	certsFromClient [][]byte | ||||
| 	cert            *Certificate | ||||
| } | ||||
| 
 | ||||
| // serverHandshake performs a TLS handshake as a server.
 | ||||
| func (c *Conn) serverHandshake() error { | ||||
| 	config := c.config | ||||
| 
 | ||||
| 	// If this is the first server handshake, we generate a random key to
 | ||||
| 	// encrypt the tickets with.
 | ||||
| 	config.serverInitOnce.Do(config.serverInit) | ||||
| 
 | ||||
| 	hs := serverHandshakeState{ | ||||
| 		c: c, | ||||
| 	} | ||||
| 	isResume, err := hs.readClientHello() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	hs.finishedHash = newFinishedHash(hs.c.vers, hs.suite.tls12Hash) | ||||
| 	hs.finishedHash.Write(hs.clientHello.marshal()) | ||||
| 
 | ||||
| 	// For an overview of TLS handshaking, see https://tools.ietf.org/html/rfc5246#section-7.3
 | ||||
| 	if isResume { | ||||
| 		// The client has included a session ticket and so we do an abbreviated handshake.
 | ||||
| 		if err := hs.doResumeHandshake(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.establishKeys(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.sendFinished(c.firstFinished[:]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readFinished(nil); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		c.didResume = true | ||||
| 	} else { | ||||
| 		// The client didn't include a session ticket, or it wasn't
 | ||||
| 		// valid so we do a full handshake.
 | ||||
| 		if err := hs.doFullHandshake(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.establishKeys(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.readFinished(c.firstFinished[:]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.sendSessionTicket(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := hs.sendFinished(nil); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	c.handshakeComplete = true | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // readClientHello reads a ClientHello message from the client and decides
 | ||||
| // whether we will perform session resumption.
 | ||||
| func (hs *serverHandshakeState) readClientHello() (isResume bool, err error) { | ||||
| 	config := hs.c.config | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 	var ok bool | ||||
| 	hs.clientHello, ok = msg.(*clientHelloMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return false, unexpectedMessageError(hs.clientHello, msg) | ||||
| 	} | ||||
| 	c.vers, ok = config.mutualVersion(hs.clientHello.vers) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertProtocolVersion) | ||||
| 		return false, fmt.Errorf("tls: client offered an unsupported, maximum protocol version of %x", hs.clientHello.vers) | ||||
| 	} | ||||
| 	c.haveVers = true | ||||
| 
 | ||||
| 	hs.hello = new(serverHelloMsg) | ||||
| 
 | ||||
| 	supportedCurve := false | ||||
| 	preferredCurves := config.curvePreferences() | ||||
| Curves: | ||||
| 	for _, curve := range hs.clientHello.supportedCurves { | ||||
| 		for _, supported := range preferredCurves { | ||||
| 			if supported == curve { | ||||
| 				supportedCurve = true | ||||
| 				break Curves | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	supportedPointFormat := false | ||||
| 	for _, pointFormat := range hs.clientHello.supportedPoints { | ||||
| 		if pointFormat == pointFormatUncompressed { | ||||
| 			supportedPointFormat = true | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 	hs.ellipticOk = supportedCurve && supportedPointFormat | ||||
| 
 | ||||
| 	foundCompression := false | ||||
| 	// We only support null compression, so check that the client offered it.
 | ||||
| 	for _, compression := range hs.clientHello.compressionMethods { | ||||
| 		if compression == compressionNone { | ||||
| 			foundCompression = true | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if !foundCompression { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return false, errors.New("tls: client does not support uncompressed connections") | ||||
| 	} | ||||
| 
 | ||||
| 	hs.hello.vers = c.vers | ||||
| 	hs.hello.random = make([]byte, 32) | ||||
| 	_, err = io.ReadFull(config.rand(), hs.hello.random) | ||||
| 	if err != nil { | ||||
| 		c.sendAlert(alertInternalError) | ||||
| 		return false, err | ||||
| 	} | ||||
| 	hs.hello.secureRenegotiation = hs.clientHello.secureRenegotiation | ||||
| 	hs.hello.compressionMethod = compressionNone | ||||
| 	if len(hs.clientHello.serverName) > 0 { | ||||
| 		c.serverName = hs.clientHello.serverName | ||||
| 	} | ||||
| 
 | ||||
| 	if len(hs.clientHello.alpnProtocols) > 0 { | ||||
| 		if selectedProto, fallback := mutualProtocol(hs.clientHello.alpnProtocols, c.config.NextProtos); !fallback { | ||||
| 			hs.hello.alpnProtocol = selectedProto | ||||
| 			c.clientProtocol = selectedProto | ||||
| 		} | ||||
| 	} else { | ||||
| 		// Although sending an empty NPN extension is reasonable, Firefox has
 | ||||
| 		// had a bug around this. Best to send nothing at all if
 | ||||
| 		// config.NextProtos is empty. See
 | ||||
| 		// https://golang.org/issue/5445.
 | ||||
| 		if hs.clientHello.nextProtoNeg && len(config.NextProtos) > 0 { | ||||
| 			hs.hello.nextProtoNeg = true | ||||
| 			hs.hello.nextProtos = config.NextProtos | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(config.Certificates) == 0 { | ||||
| 		c.sendAlert(alertInternalError) | ||||
| 		return false, errors.New("tls: no certificates configured") | ||||
| 	} | ||||
| 	hs.cert = &config.Certificates[0] | ||||
| 	if len(hs.clientHello.serverName) > 0 { | ||||
| 		chi := &ClientHelloInfo{ | ||||
| 			CipherSuites:    hs.clientHello.cipherSuites, | ||||
| 			ServerName:      hs.clientHello.serverName, | ||||
| 			SupportedCurves: hs.clientHello.supportedCurves, | ||||
| 			SupportedPoints: hs.clientHello.supportedPoints, | ||||
| 		} | ||||
| 		if hs.cert, err = config.getCertificate(chi); err != nil { | ||||
| 			c.sendAlert(alertInternalError) | ||||
| 			return false, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	_, hs.ecdsaOk = hs.cert.PrivateKey.(*ecdsa.PrivateKey) | ||||
| 
 | ||||
| 	if hs.checkForResumption() { | ||||
| 		return true, nil | ||||
| 	} | ||||
| 
 | ||||
| 	var preferenceList, supportedList []uint16 | ||||
| 	if c.config.PreferServerCipherSuites { | ||||
| 		preferenceList = c.config.cipherSuites() | ||||
| 		supportedList = hs.clientHello.cipherSuites | ||||
| 	} else { | ||||
| 		preferenceList = hs.clientHello.cipherSuites | ||||
| 		supportedList = c.config.cipherSuites() | ||||
| 	} | ||||
| 
 | ||||
| 	for _, id := range preferenceList { | ||||
| 		if hs.suite = c.tryCipherSuite(id, supportedList, c.vers, hs.ellipticOk, hs.ecdsaOk); hs.suite != nil { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if hs.suite == nil { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return false, errors.New("tls: no cipher suite supported by both client and server") | ||||
| 	} | ||||
| 
 | ||||
| 	// See https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-00.
 | ||||
| 	for _, id := range hs.clientHello.cipherSuites { | ||||
| 		if id == TLS_FALLBACK_SCSV { | ||||
| 			// The client is doing a fallback connection.
 | ||||
| 			if hs.clientHello.vers < c.config.maxVersion() { | ||||
| 				c.sendAlert(alertInappropriateFallback) | ||||
| 				return false, errors.New("tls: client using inppropriate protocol fallback") | ||||
| 			} | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return false, nil | ||||
| } | ||||
| 
 | ||||
| // checkForResumption returns true if we should perform resumption on this connection.
 | ||||
| func (hs *serverHandshakeState) checkForResumption() bool { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	if c.config.SessionTicketsDisabled { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	var ok bool | ||||
| 	var sessionTicket = append([]uint8{}, hs.clientHello.sessionTicket...) | ||||
| 	if hs.sessionState, ok = c.decryptTicket(sessionTicket); !ok { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	if hs.sessionState.vers > hs.clientHello.vers { | ||||
| 		return false | ||||
| 	} | ||||
| 	if vers, ok := c.config.mutualVersion(hs.sessionState.vers); !ok || vers != hs.sessionState.vers { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	cipherSuiteOk := false | ||||
| 	// Check that the client is still offering the ciphersuite in the session.
 | ||||
| 	for _, id := range hs.clientHello.cipherSuites { | ||||
| 		if id == hs.sessionState.cipherSuite { | ||||
| 			cipherSuiteOk = true | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 	if !cipherSuiteOk { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	// Check that we also support the ciphersuite from the session.
 | ||||
| 	hs.suite = c.tryCipherSuite(hs.sessionState.cipherSuite, c.config.cipherSuites(), hs.sessionState.vers, hs.ellipticOk, hs.ecdsaOk) | ||||
| 	if hs.suite == nil { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	sessionHasClientCerts := len(hs.sessionState.certificates) != 0 | ||||
| 	needClientCerts := c.config.ClientAuth == RequireAnyClientCert || c.config.ClientAuth == RequireAndVerifyClientCert | ||||
| 	if needClientCerts && !sessionHasClientCerts { | ||||
| 		return false | ||||
| 	} | ||||
| 	if sessionHasClientCerts && c.config.ClientAuth == NoClientCert { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) doResumeHandshake() error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	hs.hello.cipherSuite = hs.suite.id | ||||
| 	// We echo the client's session ID in the ServerHello to let it know
 | ||||
| 	// that we're doing a resumption.
 | ||||
| 	hs.hello.sessionId = hs.clientHello.sessionId | ||||
| 	hs.finishedHash.Write(hs.hello.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, hs.hello.marshal()) | ||||
| 
 | ||||
| 	if len(hs.sessionState.certificates) > 0 { | ||||
| 		if _, err := hs.processCertsFromClient(hs.sessionState.certificates); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	hs.masterSecret = hs.sessionState.masterSecret | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) doFullHandshake() error { | ||||
| 	config := hs.c.config | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	if hs.clientHello.ocspStapling && len(hs.cert.OCSPStaple) > 0 { | ||||
| 		hs.hello.ocspStapling = true | ||||
| 	} | ||||
| 
 | ||||
| 	hs.hello.ticketSupported = hs.clientHello.ticketSupported && !config.SessionTicketsDisabled | ||||
| 	hs.hello.cipherSuite = hs.suite.id | ||||
| 	hs.finishedHash.Write(hs.hello.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, hs.hello.marshal()) | ||||
| 
 | ||||
| 	certMsg := new(certificateMsg) | ||||
| 	certMsg.certificates = hs.cert.Certificate | ||||
| 	hs.finishedHash.Write(certMsg.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, certMsg.marshal()) | ||||
| 
 | ||||
| 	if hs.hello.ocspStapling { | ||||
| 		certStatus := new(certificateStatusMsg) | ||||
| 		certStatus.statusType = statusTypeOCSP | ||||
| 		certStatus.response = hs.cert.OCSPStaple | ||||
| 		hs.finishedHash.Write(certStatus.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, certStatus.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	keyAgreement := hs.suite.ka(c.vers) | ||||
| 	skx, err := keyAgreement.generateServerKeyExchange(config, hs.cert, hs.clientHello, hs.hello) | ||||
| 	if err != nil { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return err | ||||
| 	} | ||||
| 	if skx != nil { | ||||
| 		hs.finishedHash.Write(skx.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, skx.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	if config.ClientAuth >= RequestClientCert { | ||||
| 		// Request a client certificate
 | ||||
| 		certReq := new(certificateRequestMsg) | ||||
| 		certReq.certificateTypes = []byte{ | ||||
| 			byte(certTypeRSASign), | ||||
| 			byte(certTypeECDSASign), | ||||
| 		} | ||||
| 		if c.vers >= VersionTLS12 { | ||||
| 			certReq.hasSignatureAndHash = true | ||||
| 			certReq.signatureAndHashes = supportedClientCertSignatureAlgorithms | ||||
| 		} | ||||
| 
 | ||||
| 		// An empty list of certificateAuthorities signals to
 | ||||
| 		// the client that it may send any certificate in response
 | ||||
| 		// to our request. When we know the CAs we trust, then
 | ||||
| 		// we can send them down, so that the client can choose
 | ||||
| 		// an appropriate certificate to give to us.
 | ||||
| 		if config.ClientCAs != nil { | ||||
| 			certReq.certificateAuthorities = config.ClientCAs.Subjects() | ||||
| 		} | ||||
| 		hs.finishedHash.Write(certReq.marshal()) | ||||
| 		c.writeRecord(recordTypeHandshake, certReq.marshal()) | ||||
| 	} | ||||
| 
 | ||||
| 	helloDone := new(serverHelloDoneMsg) | ||||
| 	hs.finishedHash.Write(helloDone.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, helloDone.marshal()) | ||||
| 
 | ||||
| 	var pub crypto.PublicKey // public key for client auth, if any
 | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	var ok bool | ||||
| 	// If we requested a client certificate, then the client must send a
 | ||||
| 	// certificate message, even if it's empty.
 | ||||
| 	if config.ClientAuth >= RequestClientCert { | ||||
| 		if certMsg, ok = msg.(*certificateMsg); !ok { | ||||
| 			c.sendAlert(alertUnexpectedMessage) | ||||
| 			return unexpectedMessageError(certMsg, msg) | ||||
| 		} | ||||
| 		hs.finishedHash.Write(certMsg.marshal()) | ||||
| 
 | ||||
| 		if len(certMsg.certificates) == 0 { | ||||
| 			// The client didn't actually send a certificate
 | ||||
| 			switch config.ClientAuth { | ||||
| 			case RequireAnyClientCert, RequireAndVerifyClientCert: | ||||
| 				c.sendAlert(alertBadCertificate) | ||||
| 				return errors.New("tls: client didn't provide a certificate") | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		pub, err = hs.processCertsFromClient(certMsg.certificates) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		msg, err = c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Get client key exchange
 | ||||
| 	ckx, ok := msg.(*clientKeyExchangeMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(ckx, msg) | ||||
| 	} | ||||
| 	hs.finishedHash.Write(ckx.marshal()) | ||||
| 
 | ||||
| 	// If we received a client cert in response to our certificate request message,
 | ||||
| 	// the client will send us a certificateVerifyMsg immediately after the
 | ||||
| 	// clientKeyExchangeMsg.  This message is a digest of all preceding
 | ||||
| 	// handshake-layer messages that is signed using the private key corresponding
 | ||||
| 	// to the client's certificate. This allows us to verify that the client is in
 | ||||
| 	// possession of the private key of the certificate.
 | ||||
| 	if len(c.peerCertificates) > 0 { | ||||
| 		msg, err = c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		certVerify, ok := msg.(*certificateVerifyMsg) | ||||
| 		if !ok { | ||||
| 			c.sendAlert(alertUnexpectedMessage) | ||||
| 			return unexpectedMessageError(certVerify, msg) | ||||
| 		} | ||||
| 
 | ||||
| 		switch key := pub.(type) { | ||||
| 		case *ecdsa.PublicKey: | ||||
| 			ecdsaSig := new(ecdsaSignature) | ||||
| 			if _, err = asn1.Unmarshal(certVerify.signature, ecdsaSig); err != nil { | ||||
| 				break | ||||
| 			} | ||||
| 			if ecdsaSig.R.Sign() <= 0 || ecdsaSig.S.Sign() <= 0 { | ||||
| 				err = errors.New("ECDSA signature contained zero or negative values") | ||||
| 				break | ||||
| 			} | ||||
| 			digest, _, _ := hs.finishedHash.hashForClientCertificate(signatureECDSA) | ||||
| 			if !ecdsa.Verify(key, digest, ecdsaSig.R, ecdsaSig.S) { | ||||
| 				err = errors.New("ECDSA verification failure") | ||||
| 				break | ||||
| 			} | ||||
| 		case *rsa.PublicKey: | ||||
| 			digest, hashFunc, _ := hs.finishedHash.hashForClientCertificate(signatureRSA) | ||||
| 			err = rsa.VerifyPKCS1v15(key, hashFunc, digest, certVerify.signature) | ||||
| 		} | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertBadCertificate) | ||||
| 			return errors.New("could not validate signature of connection nonces: " + err.Error()) | ||||
| 		} | ||||
| 
 | ||||
| 		hs.finishedHash.Write(certVerify.marshal()) | ||||
| 	} | ||||
| 	preMasterSecret, err := keyAgreement.processClientKeyExchange(config, hs.cert, ckx, c.vers) | ||||
| 	if err != nil { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return err | ||||
| 	} | ||||
| 	hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite.tls12Hash, preMasterSecret, hs.clientHello.random, hs.hello.random) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) establishKeys() error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := | ||||
| 		keysFromMasterSecret(c.vers, hs.suite.tls12Hash, hs.masterSecret, hs.clientHello.random, hs.hello.random, hs.suite.macLen, hs.suite.keyLen, hs.suite.ivLen) | ||||
| 
 | ||||
| 	var clientCipher, serverCipher interface{} | ||||
| 	var clientHash, serverHash macFunction | ||||
| 
 | ||||
| 	if hs.suite.aead == nil { | ||||
| 		clientCipher = hs.suite.cipher(clientKey, clientIV, true /* for reading */) | ||||
| 		clientHash = hs.suite.mac(c.vers, clientMAC) | ||||
| 		serverCipher = hs.suite.cipher(serverKey, serverIV, false /* not for reading */) | ||||
| 		serverHash = hs.suite.mac(c.vers, serverMAC) | ||||
| 	} else { | ||||
| 		clientCipher = hs.suite.aead(clientKey, clientIV) | ||||
| 		serverCipher = hs.suite.aead(serverKey, serverIV) | ||||
| 	} | ||||
| 
 | ||||
| 	c.in.prepareCipherSpec(c.vers, clientCipher, clientHash) | ||||
| 	c.out.prepareCipherSpec(c.vers, serverCipher, serverHash) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) readFinished(out []byte) error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	c.readRecord(recordTypeChangeCipherSpec) | ||||
| 	if err := c.in.error(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if hs.hello.nextProtoNeg { | ||||
| 		msg, err := c.readHandshake() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		nextProto, ok := msg.(*nextProtoMsg) | ||||
| 		if !ok { | ||||
| 			c.sendAlert(alertUnexpectedMessage) | ||||
| 			return unexpectedMessageError(nextProto, msg) | ||||
| 		} | ||||
| 		hs.finishedHash.Write(nextProto.marshal()) | ||||
| 		c.clientProtocol = nextProto.proto | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := c.readHandshake() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	clientFinished, ok := msg.(*finishedMsg) | ||||
| 	if !ok { | ||||
| 		c.sendAlert(alertUnexpectedMessage) | ||||
| 		return unexpectedMessageError(clientFinished, msg) | ||||
| 	} | ||||
| 
 | ||||
| 	verify := hs.finishedHash.clientSum(hs.masterSecret) | ||||
| 	if len(verify) != len(clientFinished.verifyData) || | ||||
| 		subtle.ConstantTimeCompare(verify, clientFinished.verifyData) != 1 { | ||||
| 		c.sendAlert(alertHandshakeFailure) | ||||
| 		return errors.New("tls: client's Finished message is incorrect") | ||||
| 	} | ||||
| 
 | ||||
| 	hs.finishedHash.Write(clientFinished.marshal()) | ||||
| 	copy(out, verify) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) sendSessionTicket() error { | ||||
| 	if !hs.hello.ticketSupported { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	c := hs.c | ||||
| 	m := new(newSessionTicketMsg) | ||||
| 
 | ||||
| 	var err error | ||||
| 	state := sessionState{ | ||||
| 		vers:         c.vers, | ||||
| 		cipherSuite:  hs.suite.id, | ||||
| 		masterSecret: hs.masterSecret, | ||||
| 		certificates: hs.certsFromClient, | ||||
| 	} | ||||
| 	m.ticket, err = c.encryptTicket(&state) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	hs.finishedHash.Write(m.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, m.marshal()) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (hs *serverHandshakeState) sendFinished(out []byte) error { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) | ||||
| 
 | ||||
| 	finished := new(finishedMsg) | ||||
| 	finished.verifyData = hs.finishedHash.serverSum(hs.masterSecret) | ||||
| 	hs.finishedHash.Write(finished.marshal()) | ||||
| 	c.writeRecord(recordTypeHandshake, finished.marshal()) | ||||
| 
 | ||||
| 	c.cipherSuite = hs.suite.id | ||||
| 	copy(out, finished.verifyData) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // processCertsFromClient takes a chain of client certificates either from a
 | ||||
| // Certificates message or from a sessionState and verifies them. It returns
 | ||||
| // the public key of the leaf certificate.
 | ||||
| func (hs *serverHandshakeState) processCertsFromClient(certificates [][]byte) (crypto.PublicKey, error) { | ||||
| 	c := hs.c | ||||
| 
 | ||||
| 	hs.certsFromClient = certificates | ||||
| 	certs := make([]*x509.Certificate, len(certificates)) | ||||
| 	var err error | ||||
| 	for i, asn1Data := range certificates { | ||||
| 		if certs[i], err = x509.ParseCertificate(asn1Data); err != nil { | ||||
| 			c.sendAlert(alertBadCertificate) | ||||
| 			return nil, errors.New("tls: failed to parse client certificate: " + err.Error()) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if c.config.ClientAuth >= VerifyClientCertIfGiven && len(certs) > 0 { | ||||
| 		opts := x509.VerifyOptions{ | ||||
| 			Roots:         c.config.ClientCAs, | ||||
| 			CurrentTime:   c.config.time(), | ||||
| 			Intermediates: x509.NewCertPool(), | ||||
| 			KeyUsages:     []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, | ||||
| 		} | ||||
| 
 | ||||
| 		for _, cert := range certs[1:] { | ||||
| 			opts.Intermediates.AddCert(cert) | ||||
| 		} | ||||
| 
 | ||||
| 		chains, err := certs[0].Verify(opts) | ||||
| 		if err != nil { | ||||
| 			c.sendAlert(alertBadCertificate) | ||||
| 			return nil, errors.New("tls: failed to verify client's certificate: " + err.Error()) | ||||
| 		} | ||||
| 
 | ||||
| 		ok := false | ||||
| 		for _, ku := range certs[0].ExtKeyUsage { | ||||
| 			if ku == x509.ExtKeyUsageClientAuth { | ||||
| 				ok = true | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		if !ok { | ||||
| 			c.sendAlert(alertHandshakeFailure) | ||||
| 			return nil, errors.New("tls: client's certificate's extended key usage doesn't permit it to be used for client authentication") | ||||
| 		} | ||||
| 
 | ||||
| 		c.verifiedChains = chains | ||||
| 	} | ||||
| 
 | ||||
| 	if len(certs) > 0 { | ||||
| 		var pub crypto.PublicKey | ||||
| 		switch key := certs[0].PublicKey.(type) { | ||||
| 		case *ecdsa.PublicKey, *rsa.PublicKey: | ||||
| 			pub = key | ||||
| 		default: | ||||
| 			c.sendAlert(alertUnsupportedCertificate) | ||||
| 			return nil, fmt.Errorf("tls: client's certificate contains an unsupported public key of type %T", certs[0].PublicKey) | ||||
| 		} | ||||
| 		c.peerCertificates = certs | ||||
| 		return pub, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // tryCipherSuite returns a cipherSuite with the given id if that cipher suite
 | ||||
| // is acceptable to use.
 | ||||
| func (c *Conn) tryCipherSuite(id uint16, supportedCipherSuites []uint16, version uint16, ellipticOk, ecdsaOk bool) *cipherSuite { | ||||
| 	for _, supported := range supportedCipherSuites { | ||||
| 		if id == supported { | ||||
| 			var candidate *cipherSuite | ||||
| 
 | ||||
| 			for _, s := range cipherSuites { | ||||
| 				if s.id == id { | ||||
| 					candidate = s | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if candidate == nil { | ||||
| 				continue | ||||
| 			} | ||||
| 			// Don't select a ciphersuite which we can't
 | ||||
| 			// support for this client.
 | ||||
| 			if (candidate.flags&suiteECDHE != 0) && !ellipticOk { | ||||
| 				continue | ||||
| 			} | ||||
| 			if (candidate.flags&suiteECDSA != 0) != ecdsaOk { | ||||
| 				continue | ||||
| 			} | ||||
| 			if version < VersionTLS12 && candidate.flags&suiteTLS12 != 0 { | ||||
| 				continue | ||||
| 			} | ||||
| 			return candidate | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										928
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_server_test.go
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										928
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/handshake_server_test.go
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,928 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/rsa" | ||||
| 	"encoding/hex" | ||||
| 	"encoding/pem" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"math/big" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // zeroSource is an io.Reader that returns an unlimited number of zero bytes.
 | ||||
| type zeroSource struct{} | ||||
| 
 | ||||
| func (zeroSource) Read(b []byte) (n int, err error) { | ||||
| 	for i := range b { | ||||
| 		b[i] = 0 | ||||
| 	} | ||||
| 
 | ||||
| 	return len(b), nil | ||||
| } | ||||
| 
 | ||||
| var testConfig *Config | ||||
| 
 | ||||
| func init() { | ||||
| 	testConfig = &Config{ | ||||
| 		Time:               func() time.Time { return time.Unix(0, 0) }, | ||||
| 		Rand:               zeroSource{}, | ||||
| 		Certificates:       make([]Certificate, 2), | ||||
| 		InsecureSkipVerify: true, | ||||
| 		MinVersion:         VersionSSL30, | ||||
| 		MaxVersion:         VersionTLS12, | ||||
| 	} | ||||
| 	testConfig.Certificates[0].Certificate = [][]byte{testRSACertificate} | ||||
| 	testConfig.Certificates[0].PrivateKey = testRSAPrivateKey | ||||
| 	testConfig.Certificates[1].Certificate = [][]byte{testSNICertificate} | ||||
| 	testConfig.Certificates[1].PrivateKey = testRSAPrivateKey | ||||
| 	testConfig.BuildNameToCertificate() | ||||
| } | ||||
| 
 | ||||
| func testClientHelloFailure(t *testing.T, m handshakeMessage, expectedSubStr string) { | ||||
| 	// Create in-memory network connection,
 | ||||
| 	// send message to server.  Should return
 | ||||
| 	// expected error.
 | ||||
| 	c, s := net.Pipe() | ||||
| 	go func() { | ||||
| 		cli := Client(c, testConfig) | ||||
| 		if ch, ok := m.(*clientHelloMsg); ok { | ||||
| 			cli.vers = ch.vers | ||||
| 		} | ||||
| 		cli.writeRecord(recordTypeHandshake, m.marshal()) | ||||
| 		c.Close() | ||||
| 	}() | ||||
| 	err := Server(s, testConfig).Handshake() | ||||
| 	s.Close() | ||||
| 	if err == nil || !strings.Contains(err.Error(), expectedSubStr) { | ||||
| 		t.Errorf("Got error: %s; expected to match substring '%s'", err, expectedSubStr) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestSimpleError(t *testing.T) { | ||||
| 	testClientHelloFailure(t, &serverHelloDoneMsg{}, "unexpected handshake message") | ||||
| } | ||||
| 
 | ||||
| var badProtocolVersions = []uint16{0x0000, 0x0005, 0x0100, 0x0105, 0x0200, 0x0205} | ||||
| 
 | ||||
| func TestRejectBadProtocolVersion(t *testing.T) { | ||||
| 	for _, v := range badProtocolVersions { | ||||
| 		testClientHelloFailure(t, &clientHelloMsg{vers: v}, "unsupported, maximum protocol version") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNoSuiteOverlap(t *testing.T) { | ||||
| 	clientHello := &clientHelloMsg{ | ||||
| 		vers:               0x0301, | ||||
| 		cipherSuites:       []uint16{0xff00}, | ||||
| 		compressionMethods: []uint8{0}, | ||||
| 	} | ||||
| 	testClientHelloFailure(t, clientHello, "no cipher suite supported by both client and server") | ||||
| } | ||||
| 
 | ||||
| func TestNoCompressionOverlap(t *testing.T) { | ||||
| 	clientHello := &clientHelloMsg{ | ||||
| 		vers:               0x0301, | ||||
| 		cipherSuites:       []uint16{TLS_RSA_WITH_RC4_128_SHA}, | ||||
| 		compressionMethods: []uint8{0xff}, | ||||
| 	} | ||||
| 	testClientHelloFailure(t, clientHello, "client does not support uncompressed connections") | ||||
| } | ||||
| 
 | ||||
| func TestRenegotiationExtension(t *testing.T) { | ||||
| 	clientHello := &clientHelloMsg{ | ||||
| 		vers:                VersionTLS12, | ||||
| 		compressionMethods:  []uint8{compressionNone}, | ||||
| 		random:              make([]byte, 32), | ||||
| 		secureRenegotiation: true, | ||||
| 		cipherSuites:        []uint16{TLS_RSA_WITH_RC4_128_SHA}, | ||||
| 	} | ||||
| 
 | ||||
| 	var buf []byte | ||||
| 	c, s := net.Pipe() | ||||
| 
 | ||||
| 	go func() { | ||||
| 		cli := Client(c, testConfig) | ||||
| 		cli.vers = clientHello.vers | ||||
| 		cli.writeRecord(recordTypeHandshake, clientHello.marshal()) | ||||
| 
 | ||||
| 		buf = make([]byte, 1024) | ||||
| 		n, err := c.Read(buf) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("Server read returned error: %s", err) | ||||
| 		} | ||||
| 		buf = buf[:n] | ||||
| 		c.Close() | ||||
| 	}() | ||||
| 
 | ||||
| 	Server(s, testConfig).Handshake() | ||||
| 
 | ||||
| 	if len(buf) < 5+4 { | ||||
| 		t.Fatalf("Server returned short message of length %d", len(buf)) | ||||
| 	} | ||||
| 	// buf contains a TLS record, with a 5 byte record header and a 4 byte
 | ||||
| 	// handshake header. The length of the ServerHello is taken from the
 | ||||
| 	// handshake header.
 | ||||
| 	serverHelloLen := int(buf[6])<<16 | int(buf[7])<<8 | int(buf[8]) | ||||
| 
 | ||||
| 	var serverHello serverHelloMsg | ||||
| 	// unmarshal expects to be given the handshake header, but
 | ||||
| 	// serverHelloLen doesn't include it.
 | ||||
| 	if !serverHello.unmarshal(buf[5 : 9+serverHelloLen]) { | ||||
| 		t.Fatalf("Failed to parse ServerHello") | ||||
| 	} | ||||
| 
 | ||||
| 	if !serverHello.secureRenegotiation { | ||||
| 		t.Errorf("Secure renegotiation extension was not echoed.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestTLS12OnlyCipherSuites(t *testing.T) { | ||||
| 	// Test that a Server doesn't select a TLS 1.2-only cipher suite when
 | ||||
| 	// the client negotiates TLS 1.1.
 | ||||
| 	var zeros [32]byte | ||||
| 
 | ||||
| 	clientHello := &clientHelloMsg{ | ||||
| 		vers:   VersionTLS11, | ||||
| 		random: zeros[:], | ||||
| 		cipherSuites: []uint16{ | ||||
| 			// The Server, by default, will use the client's
 | ||||
| 			// preference order. So the GCM cipher suite
 | ||||
| 			// will be selected unless it's excluded because
 | ||||
| 			// of the version in this ClientHello.
 | ||||
| 			TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | ||||
| 			TLS_RSA_WITH_RC4_128_SHA, | ||||
| 		}, | ||||
| 		compressionMethods: []uint8{compressionNone}, | ||||
| 		supportedCurves:    []CurveID{CurveP256, CurveP384, CurveP521}, | ||||
| 		supportedPoints:    []uint8{pointFormatUncompressed}, | ||||
| 	} | ||||
| 
 | ||||
| 	c, s := net.Pipe() | ||||
| 	var reply interface{} | ||||
| 	var clientErr error | ||||
| 	go func() { | ||||
| 		cli := Client(c, testConfig) | ||||
| 		cli.vers = clientHello.vers | ||||
| 		cli.writeRecord(recordTypeHandshake, clientHello.marshal()) | ||||
| 		reply, clientErr = cli.readHandshake() | ||||
| 		c.Close() | ||||
| 	}() | ||||
| 	config := *testConfig | ||||
| 	config.CipherSuites = clientHello.cipherSuites | ||||
| 	Server(s, &config).Handshake() | ||||
| 	s.Close() | ||||
| 	if clientErr != nil { | ||||
| 		t.Fatal(clientErr) | ||||
| 	} | ||||
| 	serverHello, ok := reply.(*serverHelloMsg) | ||||
| 	if !ok { | ||||
| 		t.Fatalf("didn't get ServerHello message in reply. Got %v\n", reply) | ||||
| 	} | ||||
| 	if s := serverHello.cipherSuite; s != TLS_RSA_WITH_RC4_128_SHA { | ||||
| 		t.Fatalf("bad cipher suite from server: %x", s) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestAlertForwarding(t *testing.T) { | ||||
| 	c, s := net.Pipe() | ||||
| 	go func() { | ||||
| 		Client(c, testConfig).sendAlert(alertUnknownCA) | ||||
| 		c.Close() | ||||
| 	}() | ||||
| 
 | ||||
| 	err := Server(s, testConfig).Handshake() | ||||
| 	s.Close() | ||||
| 	if e, ok := err.(*net.OpError); !ok || e.Err != error(alertUnknownCA) { | ||||
| 		t.Errorf("Got error: %s; expected: %s", err, error(alertUnknownCA)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestClose(t *testing.T) { | ||||
| 	c, s := net.Pipe() | ||||
| 	go c.Close() | ||||
| 
 | ||||
| 	err := Server(s, testConfig).Handshake() | ||||
| 	s.Close() | ||||
| 	if err != io.EOF { | ||||
| 		t.Errorf("Got error: %s; expected: %s", err, io.EOF) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func testHandshake(clientConfig, serverConfig *Config) (state ConnectionState, err error) { | ||||
| 	c, s := net.Pipe() | ||||
| 	done := make(chan bool) | ||||
| 	go func() { | ||||
| 		cli := Client(c, clientConfig) | ||||
| 		cli.Handshake() | ||||
| 		c.Close() | ||||
| 		done <- true | ||||
| 	}() | ||||
| 	server := Server(s, serverConfig) | ||||
| 	err = server.Handshake() | ||||
| 	if err == nil { | ||||
| 		state = server.ConnectionState() | ||||
| 	} | ||||
| 	s.Close() | ||||
| 	<-done | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func TestVersion(t *testing.T) { | ||||
| 	serverConfig := &Config{ | ||||
| 		Certificates: testConfig.Certificates, | ||||
| 		MaxVersion:   VersionTLS11, | ||||
| 	} | ||||
| 	clientConfig := &Config{ | ||||
| 		InsecureSkipVerify: true, | ||||
| 	} | ||||
| 	state, err := testHandshake(clientConfig, serverConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("handshake failed: %s", err) | ||||
| 	} | ||||
| 	if state.Version != VersionTLS11 { | ||||
| 		t.Fatalf("Incorrect version %x, should be %x", state.Version, VersionTLS11) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCipherSuitePreference(t *testing.T) { | ||||
| 	serverConfig := &Config{ | ||||
| 		CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA}, | ||||
| 		Certificates: testConfig.Certificates, | ||||
| 		MaxVersion:   VersionTLS11, | ||||
| 	} | ||||
| 	clientConfig := &Config{ | ||||
| 		CipherSuites:       []uint16{TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_RC4_128_SHA}, | ||||
| 		InsecureSkipVerify: true, | ||||
| 	} | ||||
| 	state, err := testHandshake(clientConfig, serverConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("handshake failed: %s", err) | ||||
| 	} | ||||
| 	if state.CipherSuite != TLS_RSA_WITH_AES_128_CBC_SHA { | ||||
| 		// By default the server should use the client's preference.
 | ||||
| 		t.Fatalf("Client's preference was not used, got %x", state.CipherSuite) | ||||
| 	} | ||||
| 
 | ||||
| 	serverConfig.PreferServerCipherSuites = true | ||||
| 	state, err = testHandshake(clientConfig, serverConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("handshake failed: %s", err) | ||||
| 	} | ||||
| 	if state.CipherSuite != TLS_RSA_WITH_RC4_128_SHA { | ||||
| 		t.Fatalf("Server's preference was not used, got %x", state.CipherSuite) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Note: see comment in handshake_test.go for details of how the reference
 | ||||
| // tests work.
 | ||||
| 
 | ||||
| // serverTest represents a test of the TLS server handshake against a reference
 | ||||
| // implementation.
 | ||||
| type serverTest struct { | ||||
| 	// name is a freeform string identifying the test and the file in which
 | ||||
| 	// the expected results will be stored.
 | ||||
| 	name string | ||||
| 	// command, if not empty, contains a series of arguments for the
 | ||||
| 	// command to run for the reference server.
 | ||||
| 	command []string | ||||
| 	// expectedPeerCerts contains a list of PEM blocks of expected
 | ||||
| 	// certificates from the client.
 | ||||
| 	expectedPeerCerts []string | ||||
| 	// config, if not nil, contains a custom Config to use for this test.
 | ||||
| 	config *Config | ||||
| 	// expectAlert, if true, indicates that a fatal alert should be returned
 | ||||
| 	// when handshaking with the server.
 | ||||
| 	expectAlert bool | ||||
| 	// expectHandshakeErrorIncluding, when not empty, contains a string
 | ||||
| 	// that must be a substring of the error resulting from the handshake.
 | ||||
| 	expectHandshakeErrorIncluding string | ||||
| 	// validate, if not nil, is a function that will be called with the
 | ||||
| 	// ConnectionState of the resulting connection. It returns false if the
 | ||||
| 	// ConnectionState is unacceptable.
 | ||||
| 	validate func(ConnectionState) error | ||||
| } | ||||
| 
 | ||||
| var defaultClientCommand = []string{"openssl", "s_client", "-no_ticket"} | ||||
| 
 | ||||
| // connFromCommand starts opens a listening socket and starts the reference
 | ||||
| // client to connect to it. It returns a recordingConn that wraps the resulting
 | ||||
| // connection.
 | ||||
| func (test *serverTest) connFromCommand() (conn *recordingConn, child *exec.Cmd, err error) { | ||||
| 	l, err := net.ListenTCP("tcp", &net.TCPAddr{ | ||||
| 		IP:   net.IPv4(127, 0, 0, 1), | ||||
| 		Port: 0, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	defer l.Close() | ||||
| 
 | ||||
| 	port := l.Addr().(*net.TCPAddr).Port | ||||
| 
 | ||||
| 	var command []string | ||||
| 	command = append(command, test.command...) | ||||
| 	if len(command) == 0 { | ||||
| 		command = defaultClientCommand | ||||
| 	} | ||||
| 	command = append(command, "-connect") | ||||
| 	command = append(command, fmt.Sprintf("127.0.0.1:%d", port)) | ||||
| 	cmd := exec.Command(command[0], command[1:]...) | ||||
| 	cmd.Stdin = nil | ||||
| 	var output bytes.Buffer | ||||
| 	cmd.Stdout = &output | ||||
| 	cmd.Stderr = &output | ||||
| 	if err := cmd.Start(); err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	connChan := make(chan interface{}) | ||||
| 	go func() { | ||||
| 		tcpConn, err := l.Accept() | ||||
| 		if err != nil { | ||||
| 			connChan <- err | ||||
| 		} | ||||
| 		connChan <- tcpConn | ||||
| 	}() | ||||
| 
 | ||||
| 	var tcpConn net.Conn | ||||
| 	select { | ||||
| 	case connOrError := <-connChan: | ||||
| 		if err, ok := connOrError.(error); ok { | ||||
| 			return nil, nil, err | ||||
| 		} | ||||
| 		tcpConn = connOrError.(net.Conn) | ||||
| 	case <-time.After(2 * time.Second): | ||||
| 		output.WriteTo(os.Stdout) | ||||
| 		return nil, nil, errors.New("timed out waiting for connection from child process") | ||||
| 	} | ||||
| 
 | ||||
| 	record := &recordingConn{ | ||||
| 		Conn: tcpConn, | ||||
| 	} | ||||
| 
 | ||||
| 	return record, cmd, nil | ||||
| } | ||||
| 
 | ||||
| func (test *serverTest) dataPath() string { | ||||
| 	return filepath.Join("testdata", "Server-"+test.name) | ||||
| } | ||||
| 
 | ||||
| func (test *serverTest) loadData() (flows [][]byte, err error) { | ||||
| 	in, err := os.Open(test.dataPath()) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer in.Close() | ||||
| 	return parseTestData(in) | ||||
| } | ||||
| 
 | ||||
| func (test *serverTest) run(t *testing.T, write bool) { | ||||
| 	var clientConn, serverConn net.Conn | ||||
| 	var recordingConn *recordingConn | ||||
| 	var childProcess *exec.Cmd | ||||
| 
 | ||||
| 	if write { | ||||
| 		var err error | ||||
| 		recordingConn, childProcess, err = test.connFromCommand() | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("Failed to start subcommand: %s", err) | ||||
| 		} | ||||
| 		serverConn = recordingConn | ||||
| 	} else { | ||||
| 		clientConn, serverConn = net.Pipe() | ||||
| 	} | ||||
| 	config := test.config | ||||
| 	if config == nil { | ||||
| 		config = testConfig | ||||
| 	} | ||||
| 	server := Server(serverConn, config) | ||||
| 	connStateChan := make(chan ConnectionState, 1) | ||||
| 	go func() { | ||||
| 		var err error | ||||
| 		if _, err = server.Write([]byte("hello, world\n")); err != nil { | ||||
| 			t.Logf("Error from Server.Write: %s", err) | ||||
| 		} | ||||
| 		if len(test.expectHandshakeErrorIncluding) > 0 { | ||||
| 			if err == nil { | ||||
| 				t.Errorf("Error expected, but no error returned") | ||||
| 			} else if s := err.Error(); !strings.Contains(s, test.expectHandshakeErrorIncluding) { | ||||
| 				t.Errorf("Error expected containing '%s' but got '%s'", test.expectHandshakeErrorIncluding, s) | ||||
| 			} | ||||
| 		} | ||||
| 		server.Close() | ||||
| 		serverConn.Close() | ||||
| 		connStateChan <- server.ConnectionState() | ||||
| 	}() | ||||
| 
 | ||||
| 	if !write { | ||||
| 		flows, err := test.loadData() | ||||
| 		if err != nil { | ||||
| 			if !test.expectAlert { | ||||
| 				t.Fatalf("%s: failed to load data from %s", test.name, test.dataPath()) | ||||
| 			} | ||||
| 		} | ||||
| 		for i, b := range flows { | ||||
| 			if i%2 == 0 { | ||||
| 				clientConn.Write(b) | ||||
| 				continue | ||||
| 			} | ||||
| 			bb := make([]byte, len(b)) | ||||
| 			n, err := io.ReadFull(clientConn, bb) | ||||
| 			if test.expectAlert { | ||||
| 				if err == nil { | ||||
| 					t.Fatal("Expected read failure but read succeeded") | ||||
| 				} | ||||
| 			} else { | ||||
| 				if err != nil { | ||||
| 					t.Fatalf("%s #%d: %s\nRead %d, wanted %d, got %x, wanted %x\n", test.name, i+1, err, n, len(bb), bb[:n], b) | ||||
| 				} | ||||
| 				if !bytes.Equal(b, bb) { | ||||
| 					t.Fatalf("%s #%d: mismatch on read: got:%x want:%x", test.name, i+1, bb, b) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		clientConn.Close() | ||||
| 	} | ||||
| 
 | ||||
| 	connState := <-connStateChan | ||||
| 	peerCerts := connState.PeerCertificates | ||||
| 	if len(peerCerts) == len(test.expectedPeerCerts) { | ||||
| 		for i, peerCert := range peerCerts { | ||||
| 			block, _ := pem.Decode([]byte(test.expectedPeerCerts[i])) | ||||
| 			if !bytes.Equal(block.Bytes, peerCert.Raw) { | ||||
| 				t.Fatalf("%s: mismatch on peer cert %d", test.name, i+1) | ||||
| 			} | ||||
| 		} | ||||
| 	} else { | ||||
| 		t.Fatalf("%s: mismatch on peer list length: %d (wanted) != %d (got)", test.name, len(test.expectedPeerCerts), len(peerCerts)) | ||||
| 	} | ||||
| 
 | ||||
| 	if test.validate != nil { | ||||
| 		if err := test.validate(connState); err != nil { | ||||
| 			t.Fatalf("validate callback returned error: %s", err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if write { | ||||
| 		path := test.dataPath() | ||||
| 		out, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("Failed to create output file: %s", err) | ||||
| 		} | ||||
| 		defer out.Close() | ||||
| 		recordingConn.Close() | ||||
| 		if len(recordingConn.flows) < 3 { | ||||
| 			childProcess.Stdout.(*bytes.Buffer).WriteTo(os.Stdout) | ||||
| 			if len(test.expectHandshakeErrorIncluding) == 0 { | ||||
| 				t.Fatalf("Handshake failed") | ||||
| 			} | ||||
| 		} | ||||
| 		recordingConn.WriteTo(out) | ||||
| 		fmt.Printf("Wrote %s\n", path) | ||||
| 		childProcess.Wait() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func runServerTestForVersion(t *testing.T, template *serverTest, prefix, option string) { | ||||
| 	test := *template | ||||
| 	test.name = prefix + test.name | ||||
| 	if len(test.command) == 0 { | ||||
| 		test.command = defaultClientCommand | ||||
| 	} | ||||
| 	test.command = append([]string(nil), test.command...) | ||||
| 	test.command = append(test.command, option) | ||||
| 	test.run(t, *update) | ||||
| } | ||||
| 
 | ||||
| func runServerTestSSLv3(t *testing.T, template *serverTest) { | ||||
| 	runServerTestForVersion(t, template, "SSLv3-", "-ssl3") | ||||
| } | ||||
| 
 | ||||
| func runServerTestTLS10(t *testing.T, template *serverTest) { | ||||
| 	runServerTestForVersion(t, template, "TLSv10-", "-tls1") | ||||
| } | ||||
| 
 | ||||
| func runServerTestTLS11(t *testing.T, template *serverTest) { | ||||
| 	runServerTestForVersion(t, template, "TLSv11-", "-tls1_1") | ||||
| } | ||||
| 
 | ||||
| func runServerTestTLS12(t *testing.T, template *serverTest) { | ||||
| 	runServerTestForVersion(t, template, "TLSv12-", "-tls1_2") | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerRSARC4(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "RSA-RC4", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "RC4-SHA"}, | ||||
| 	} | ||||
| 	runServerTestSSLv3(t, test) | ||||
| 	runServerTestTLS10(t, test) | ||||
| 	runServerTestTLS11(t, test) | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerRSA3DES(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "RSA-3DES", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "DES-CBC3-SHA"}, | ||||
| 	} | ||||
| 	runServerTestSSLv3(t, test) | ||||
| 	runServerTestTLS10(t, test) | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerRSAAES(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "RSA-AES", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA"}, | ||||
| 	} | ||||
| 	runServerTestSSLv3(t, test) | ||||
| 	runServerTestTLS10(t, test) | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerAESGCM(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "RSA-AES-GCM", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "ECDHE-RSA-AES128-GCM-SHA256"}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerAES256GCMSHA384(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "RSA-AES256-GCM-SHA384", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "ECDHE-RSA-AES256-GCM-SHA384"}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerECDHEECDSAAES(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.Certificates = make([]Certificate, 1) | ||||
| 	config.Certificates[0].Certificate = [][]byte{testECDSACertificate} | ||||
| 	config.Certificates[0].PrivateKey = testECDSAPrivateKey | ||||
| 	config.BuildNameToCertificate() | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name:    "ECDHE-ECDSA-AES", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "ECDHE-ECDSA-AES256-SHA"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS10(t, test) | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerALPN(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.NextProtos = []string{"proto1", "proto2"} | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name: "ALPN", | ||||
| 		// Note that this needs OpenSSL 1.0.2 because that is the first
 | ||||
| 		// version that supports the -alpn flag.
 | ||||
| 		command: []string{"openssl", "s_client", "-alpn", "proto2,proto1"}, | ||||
| 		config:  &config, | ||||
| 		validate: func(state ConnectionState) error { | ||||
| 			// The server's preferences should override the client.
 | ||||
| 			if state.NegotiatedProtocol != "proto1" { | ||||
| 				return fmt.Errorf("Got protocol %q, wanted proto1", state.NegotiatedProtocol) | ||||
| 			} | ||||
| 			return nil | ||||
| 		}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestHandshakeServerALPNNoMatch(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.NextProtos = []string{"proto3"} | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name: "ALPN-NoMatch", | ||||
| 		// Note that this needs OpenSSL 1.0.2 because that is the first
 | ||||
| 		// version that supports the -alpn flag.
 | ||||
| 		command: []string{"openssl", "s_client", "-alpn", "proto2,proto1"}, | ||||
| 		config:  &config, | ||||
| 		validate: func(state ConnectionState) error { | ||||
| 			// Rather than reject the connection, Go doesn't select
 | ||||
| 			// a protocol when there is no overlap.
 | ||||
| 			if state.NegotiatedProtocol != "" { | ||||
| 				return fmt.Errorf("Got protocol %q, wanted ''", state.NegotiatedProtocol) | ||||
| 			} | ||||
| 			return nil | ||||
| 		}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| // TestHandshakeServerSNI involves a client sending an SNI extension of
 | ||||
| // "snitest.com", which happens to match the CN of testSNICertificate. The test
 | ||||
| // verifies that the server correctly selects that certificate.
 | ||||
| func TestHandshakeServerSNI(t *testing.T) { | ||||
| 	test := &serverTest{ | ||||
| 		name:    "SNI", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA", "-servername", "snitest.com"}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| // TestHandshakeServerSNICertForName is similar to TestHandshakeServerSNI, but
 | ||||
| // tests the dynamic GetCertificate method
 | ||||
| func TestHandshakeServerSNIGetCertificate(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 
 | ||||
| 	// Replace the NameToCertificate map with a GetCertificate function
 | ||||
| 	nameToCert := config.NameToCertificate | ||||
| 	config.NameToCertificate = nil | ||||
| 	config.GetCertificate = func(clientHello *ClientHelloInfo) (*Certificate, error) { | ||||
| 		cert, _ := nameToCert[clientHello.ServerName] | ||||
| 		return cert, nil | ||||
| 	} | ||||
| 	test := &serverTest{ | ||||
| 		name:    "SNI", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA", "-servername", "snitest.com"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| // TestHandshakeServerSNICertForNameNotFound is similar to
 | ||||
| // TestHandshakeServerSNICertForName, but tests to make sure that when the
 | ||||
| // GetCertificate method doesn't return a cert, we fall back to what's in
 | ||||
| // the NameToCertificate map.
 | ||||
| func TestHandshakeServerSNIGetCertificateNotFound(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 
 | ||||
| 	config.GetCertificate = func(clientHello *ClientHelloInfo) (*Certificate, error) { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 	test := &serverTest{ | ||||
| 		name:    "SNI", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA", "-servername", "snitest.com"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| // TestHandshakeServerSNICertForNameError tests to make sure that errors in
 | ||||
| // GetCertificate result in a tls alert.
 | ||||
| func TestHandshakeServerSNIGetCertificateError(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 
 | ||||
| 	config.GetCertificate = func(clientHello *ClientHelloInfo) (*Certificate, error) { | ||||
| 		return nil, fmt.Errorf("Test error in GetCertificate") | ||||
| 	} | ||||
| 	test := &serverTest{ | ||||
| 		name:        "SNI", | ||||
| 		command:     []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA", "-servername", "snitest.com"}, | ||||
| 		config:      &config, | ||||
| 		expectAlert: true, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| // TestCipherSuiteCertPreferance ensures that we select an RSA ciphersuite with
 | ||||
| // an RSA certificate and an ECDSA ciphersuite with an ECDSA certificate.
 | ||||
| func TestCipherSuiteCertPreferenceECDSA(t *testing.T) { | ||||
| 	config := *testConfig | ||||
| 	config.CipherSuites = []uint16{TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA} | ||||
| 	config.PreferServerCipherSuites = true | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name:   "CipherSuiteCertPreferenceRSA", | ||||
| 		config: &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	config = *testConfig | ||||
| 	config.CipherSuites = []uint16{TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA} | ||||
| 	config.Certificates = []Certificate{ | ||||
| 		{ | ||||
| 			Certificate: [][]byte{testECDSACertificate}, | ||||
| 			PrivateKey:  testECDSAPrivateKey, | ||||
| 		}, | ||||
| 	} | ||||
| 	config.BuildNameToCertificate() | ||||
| 	config.PreferServerCipherSuites = true | ||||
| 
 | ||||
| 	test = &serverTest{ | ||||
| 		name:   "CipherSuiteCertPreferenceECDSA", | ||||
| 		config: &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestResumption(t *testing.T) { | ||||
| 	sessionFilePath := tempFile("") | ||||
| 	defer os.Remove(sessionFilePath) | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name:    "IssueTicket", | ||||
| 		command: []string{"openssl", "s_client", "-cipher", "RC4-SHA", "-sess_out", sessionFilePath}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	test = &serverTest{ | ||||
| 		name:    "Resume", | ||||
| 		command: []string{"openssl", "s_client", "-cipher", "RC4-SHA", "-sess_in", sessionFilePath}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func TestResumptionDisabled(t *testing.T) { | ||||
| 	sessionFilePath := tempFile("") | ||||
| 	defer os.Remove(sessionFilePath) | ||||
| 
 | ||||
| 	config := *testConfig | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name:    "IssueTicketPreDisable", | ||||
| 		command: []string{"openssl", "s_client", "-cipher", "RC4-SHA", "-sess_out", sessionFilePath}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	config.SessionTicketsDisabled = true | ||||
| 
 | ||||
| 	test = &serverTest{ | ||||
| 		name:    "ResumeDisabled", | ||||
| 		command: []string{"openssl", "s_client", "-cipher", "RC4-SHA", "-sess_in", sessionFilePath}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	// One needs to manually confirm that the handshake in the golden data
 | ||||
| 	// file for ResumeDisabled does not include a resumption handshake.
 | ||||
| } | ||||
| 
 | ||||
| func TestFallbackSCSV(t *testing.T) { | ||||
| 	serverConfig := &Config{ | ||||
| 		Certificates: testConfig.Certificates, | ||||
| 	} | ||||
| 	test := &serverTest{ | ||||
| 		name:   "FallbackSCSV", | ||||
| 		config: serverConfig, | ||||
| 		// OpenSSL 1.0.1j is needed for the -fallback_scsv option.
 | ||||
| 		command: []string{"openssl", "s_client", "-fallback_scsv"}, | ||||
| 		expectHandshakeErrorIncluding: "inppropriate protocol fallback", | ||||
| 	} | ||||
| 	runServerTestTLS11(t, test) | ||||
| } | ||||
| 
 | ||||
| // cert.pem and key.pem were generated with generate_cert.go
 | ||||
| // Thus, they have no ExtKeyUsage fields and trigger an error
 | ||||
| // when verification is turned on.
 | ||||
| 
 | ||||
| const clientCertificatePEM = ` | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIB7TCCAVigAwIBAgIBADALBgkqhkiG9w0BAQUwJjEQMA4GA1UEChMHQWNtZSBD | ||||
| bzESMBAGA1UEAxMJMTI3LjAuMC4xMB4XDTExMTIwODA3NTUxMloXDTEyMTIwNzA4 | ||||
| MDAxMlowJjEQMA4GA1UEChMHQWNtZSBDbzESMBAGA1UEAxMJMTI3LjAuMC4xMIGc | ||||
| MAsGCSqGSIb3DQEBAQOBjAAwgYgCgYBO0Hsx44Jk2VnAwoekXh6LczPHY1PfZpIG | ||||
| hPZk1Y/kNqcdK+izIDZFI7Xjla7t4PUgnI2V339aEu+H5Fto5OkOdOwEin/ekyfE | ||||
| ARl6vfLcPRSr0FTKIQzQTW6HLlzF0rtNS0/Otiz3fojsfNcCkXSmHgwa2uNKWi7e | ||||
| E5xMQIhZkwIDAQABozIwMDAOBgNVHQ8BAf8EBAMCAKAwDQYDVR0OBAYEBAECAwQw | ||||
| DwYDVR0jBAgwBoAEAQIDBDALBgkqhkiG9w0BAQUDgYEANh+zegx1yW43RmEr1b3A | ||||
| p0vMRpqBWHyFeSnIyMZn3TJWRSt1tukkqVCavh9a+hoV2cxVlXIWg7nCto/9iIw4 | ||||
| hB2rXZIxE0/9gzvGnfERYraL7KtnvshksBFQRlgXa5kc0x38BvEO5ZaoDPl4ILdE | ||||
| GFGNEH5PlGffo05wc46QkYU= | ||||
| -----END CERTIFICATE-----` | ||||
| 
 | ||||
| const clientKeyPEM = ` | ||||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIICWgIBAAKBgE7QezHjgmTZWcDCh6ReHotzM8djU99mkgaE9mTVj+Q2px0r6LMg | ||||
| NkUjteOVru3g9SCcjZXff1oS74fkW2jk6Q507ASKf96TJ8QBGXq98tw9FKvQVMoh | ||||
| DNBNbocuXMXSu01LT862LPd+iOx81wKRdKYeDBra40paLt4TnExAiFmTAgMBAAEC | ||||
| gYBxvXd8yNteFTns8A/2yomEMC4yeosJJSpp1CsN3BJ7g8/qTnrVPxBy+RU+qr63 | ||||
| t2WquaOu/cr5P8iEsa6lk20tf8pjKLNXeX0b1RTzK8rJLbS7nGzP3tvOhL096VtQ | ||||
| dAo4ROEaro0TzYpHmpciSvxVIeEIAAdFDObDJPKqcJAxyQJBAJizfYgK8Gzx9fsx | ||||
| hxp+VteCbVPg2euASH5Yv3K5LukRdKoSzHE2grUVQgN/LafC0eZibRanxHegYSr7 | ||||
| 7qaswKUCQQCEIWor/X4XTMdVj3Oj+vpiw75y/S9gh682+myZL+d/02IEkwnB098P | ||||
| RkKVpenBHyrGg0oeN5La7URILWKj7CPXAkBKo6F+d+phNjwIFoN1Xb/RA32w/D1I | ||||
| saG9sF+UEhRt9AxUfW/U/tIQ9V0ZHHcSg1XaCM5Nvp934brdKdvTOKnJAkBD5h/3 | ||||
| Rybatlvg/fzBEaJFyq09zhngkxlZOUtBVTqzl17RVvY2orgH02U4HbCHy4phxOn7 | ||||
| qTdQRYlHRftgnWK1AkANibn9PRYJ7mJyJ9Dyj2QeNcSkSTzrt0tPvUMf4+meJymN | ||||
| 1Ntu5+S1DLLzfxlaljWG6ylW6DNxujCyuXIV2rvA | ||||
| -----END RSA PRIVATE KEY-----` | ||||
| 
 | ||||
| const clientECDSACertificatePEM = ` | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIB/DCCAV4CCQCaMIRsJjXZFzAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw | ||||
| EQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0 | ||||
| eSBMdGQwHhcNMTIxMTE0MTMyNTUzWhcNMjIxMTEyMTMyNTUzWjBBMQswCQYDVQQG | ||||
| EwJBVTEMMAoGA1UECBMDTlNXMRAwDgYDVQQHEwdQeXJtb250MRIwEAYDVQQDEwlK | ||||
| b2VsIFNpbmcwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABACVjJF1FMBexFe01MNv | ||||
| ja5oHt1vzobhfm6ySD6B5U7ixohLZNz1MLvT/2XMW/TdtWo+PtAd3kfDdq0Z9kUs | ||||
| jLzYHQFMH3CQRnZIi4+DzEpcj0B22uCJ7B0rxE4wdihBsmKo+1vx+U56jb0JuK7q | ||||
| ixgnTy5w/hOWusPTQBbNZU6sER7m8TAJBgcqhkjOPQQBA4GMADCBiAJCAOAUxGBg | ||||
| C3JosDJdYUoCdFzCgbkWqD8pyDbHgf9stlvZcPE4O1BIKJTLCRpS8V3ujfK58PDa | ||||
| 2RU6+b0DeoeiIzXsAkIBo9SKeDUcSpoj0gq+KxAxnZxfvuiRs9oa9V2jI/Umi0Vw | ||||
| jWVim34BmT0Y9hCaOGGbLlfk+syxis7iI6CH8OFnUes= | ||||
| -----END CERTIFICATE-----` | ||||
| 
 | ||||
| const clientECDSAKeyPEM = ` | ||||
| -----BEGIN EC PARAMETERS----- | ||||
| BgUrgQQAIw== | ||||
| -----END EC PARAMETERS----- | ||||
| -----BEGIN EC PRIVATE KEY----- | ||||
| MIHcAgEBBEIBkJN9X4IqZIguiEVKMqeBUP5xtRsEv4HJEtOpOGLELwO53SD78Ew8 | ||||
| k+wLWoqizS3NpQyMtrU8JFdWfj+C57UNkOugBwYFK4EEACOhgYkDgYYABACVjJF1 | ||||
| FMBexFe01MNvja5oHt1vzobhfm6ySD6B5U7ixohLZNz1MLvT/2XMW/TdtWo+PtAd | ||||
| 3kfDdq0Z9kUsjLzYHQFMH3CQRnZIi4+DzEpcj0B22uCJ7B0rxE4wdihBsmKo+1vx | ||||
| +U56jb0JuK7qixgnTy5w/hOWusPTQBbNZU6sER7m8Q== | ||||
| -----END EC PRIVATE KEY-----` | ||||
| 
 | ||||
| func TestClientAuth(t *testing.T) { | ||||
| 	var certPath, keyPath, ecdsaCertPath, ecdsaKeyPath string | ||||
| 
 | ||||
| 	if *update { | ||||
| 		certPath = tempFile(clientCertificatePEM) | ||||
| 		defer os.Remove(certPath) | ||||
| 		keyPath = tempFile(clientKeyPEM) | ||||
| 		defer os.Remove(keyPath) | ||||
| 		ecdsaCertPath = tempFile(clientECDSACertificatePEM) | ||||
| 		defer os.Remove(ecdsaCertPath) | ||||
| 		ecdsaKeyPath = tempFile(clientECDSAKeyPEM) | ||||
| 		defer os.Remove(ecdsaKeyPath) | ||||
| 	} | ||||
| 
 | ||||
| 	config := *testConfig | ||||
| 	config.ClientAuth = RequestClientCert | ||||
| 
 | ||||
| 	test := &serverTest{ | ||||
| 		name:    "ClientAuthRequestedNotGiven", | ||||
| 		command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "RC4-SHA"}, | ||||
| 		config:  &config, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	test = &serverTest{ | ||||
| 		name:              "ClientAuthRequestedAndGiven", | ||||
| 		command:           []string{"openssl", "s_client", "-no_ticket", "-cipher", "RC4-SHA", "-cert", certPath, "-key", keyPath}, | ||||
| 		config:            &config, | ||||
| 		expectedPeerCerts: []string{clientCertificatePEM}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| 
 | ||||
| 	test = &serverTest{ | ||||
| 		name:              "ClientAuthRequestedAndECDSAGiven", | ||||
| 		command:           []string{"openssl", "s_client", "-no_ticket", "-cipher", "RC4-SHA", "-cert", ecdsaCertPath, "-key", ecdsaKeyPath}, | ||||
| 		config:            &config, | ||||
| 		expectedPeerCerts: []string{clientECDSACertificatePEM}, | ||||
| 	} | ||||
| 	runServerTestTLS12(t, test) | ||||
| } | ||||
| 
 | ||||
| func bigFromString(s string) *big.Int { | ||||
| 	ret := new(big.Int) | ||||
| 	ret.SetString(s, 10) | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| func fromHex(s string) []byte { | ||||
| 	b, _ := hex.DecodeString(s) | ||||
| 	return b | ||||
| } | ||||
| 
 | ||||
| var testRSACertificate = fromHex("308202b030820219a00302010202090085b0bba48a7fb8ca300d06092a864886f70d01010505003045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c7464301e170d3130303432343039303933385a170d3131303432343039303933385a3045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c746430819f300d06092a864886f70d010101050003818d0030818902818100bb79d6f517b5e5bf4610d0dc69bee62b07435ad0032d8a7a4385b71452e7a5654c2c78b8238cb5b482e5de1f953b7e62a52ca533d6fe125c7a56fcf506bffa587b263fb5cd04d3d0c921964ac7f4549f5abfef427100fe1899077f7e887d7df10439c4a22edb51c97ce3c04c3b326601cfafb11db8719a1ddbdb896baeda2d790203010001a381a73081a4301d0603551d0e04160414b1ade2855acfcb28db69ce2369ded3268e18883930750603551d23046e306c8014b1ade2855acfcb28db69ce2369ded3268e188839a149a4473045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c746482090085b0bba48a7fb8ca300c0603551d13040530030101ff300d06092a864886f70d010105050003818100086c4524c76bb159ab0c52ccf2b014d7879d7a6475b55a9566e4c52b8eae12661feb4f38b36e60d392fdf74108b52513b1187a24fb301dbaed98b917ece7d73159db95d31d78ea50565cd5825a2d5a5f33c4b6d8c97590968c0f5298b5cd981f89205ff2a01ca31b9694dda9fd57e970e8266d71999b266e3850296c90a7bdd9") | ||||
| 
 | ||||
| var testECDSACertificate = fromHex("3082020030820162020900b8bf2d47a0d2ebf4300906072a8648ce3d04013045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c7464301e170d3132313132323135303633325a170d3232313132303135303633325a3045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c746430819b301006072a8648ce3d020106052b81040023038186000400c4a1edbe98f90b4873367ec316561122f23d53c33b4d213dcd6b75e6f6b0dc9adf26c1bcb287f072327cb3642f1c90bcea6823107efee325c0483a69e0286dd33700ef0462dd0da09c706283d881d36431aa9e9731bd96b068c09b23de76643f1a5c7fe9120e5858b65f70dd9bd8ead5d7f5d5ccb9b69f30665b669a20e227e5bffe3b300906072a8648ce3d040103818c0030818802420188a24febe245c5487d1bacf5ed989dae4770c05e1bb62fbdf1b64db76140d311a2ceee0b7e927eff769dc33b7ea53fcefa10e259ec472d7cacda4e970e15a06fd00242014dfcbe67139c2d050ebd3fa38c25c13313830d9406bbd4377af6ec7ac9862eddd711697f857c56defb31782be4c7780daecbbe9e4e3624317b6a0f399512078f2a") | ||||
| 
 | ||||
| var testSNICertificate = fromHex("308201f23082015da003020102020100300b06092a864886f70d01010530283110300e060355040a130741636d6520436f311430120603550403130b736e69746573742e636f6d301e170d3132303431313137343033355a170d3133303431313137343533355a30283110300e060355040a130741636d6520436f311430120603550403130b736e69746573742e636f6d30819d300b06092a864886f70d01010103818d0030818902818100bb79d6f517b5e5bf4610d0dc69bee62b07435ad0032d8a7a4385b71452e7a5654c2c78b8238cb5b482e5de1f953b7e62a52ca533d6fe125c7a56fcf506bffa587b263fb5cd04d3d0c921964ac7f4549f5abfef427100fe1899077f7e887d7df10439c4a22edb51c97ce3c04c3b326601cfafb11db8719a1ddbdb896baeda2d790203010001a3323030300e0603551d0f0101ff0404030200a0300d0603551d0e0406040401020304300f0603551d2304083006800401020304300b06092a864886f70d0101050381810089c6455f1c1f5ef8eb1ab174ee2439059f5c4259bb1a8d86cdb1d056f56a717da40e95ab90f59e8deaf627c157995094db0802266eb34fc6842dea8a4b68d9c1389103ab84fb9e1f85d9b5d23ff2312c8670fbb540148245a4ebafe264d90c8a4cf4f85b0fac12ac2fc4a3154bad52462868af96c62c6525d652b6e31845bdcc") | ||||
| 
 | ||||
| var testRSAPrivateKey = &rsa.PrivateKey{ | ||||
| 	PublicKey: rsa.PublicKey{ | ||||
| 		N: bigFromString("131650079503776001033793877885499001334664249354723305978524647182322416328664556247316495448366990052837680518067798333412266673813370895702118944398081598789828837447552603077848001020611640547221687072142537202428102790818451901395596882588063427854225330436740647715202971973145151161964464812406232198521"), | ||||
| 		E: 65537, | ||||
| 	}, | ||||
| 	D: bigFromString("29354450337804273969007277378287027274721892607543397931919078829901848876371746653677097639302788129485893852488285045793268732234230875671682624082413996177431586734171663258657462237320300610850244186316880055243099640544518318093544057213190320837094958164973959123058337475052510833916491060913053867729"), | ||||
| 	Primes: []*big.Int{ | ||||
| 		bigFromString("11969277782311800166562047708379380720136961987713178380670422671426759650127150688426177829077494755200794297055316163155755835813760102405344560929062149"), | ||||
| 		bigFromString("10998999429884441391899182616418192492905073053684657075974935218461686523870125521822756579792315215543092255516093840728890783887287417039645833477273829"), | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| var testECDSAPrivateKey = &ecdsa.PrivateKey{ | ||||
| 	PublicKey: ecdsa.PublicKey{ | ||||
| 		Curve: elliptic.P521(), | ||||
| 		X:     bigFromString("2636411247892461147287360222306590634450676461695221912739908880441342231985950069527906976759812296359387337367668045707086543273113073382714101597903639351"), | ||||
| 		Y:     bigFromString("3204695818431246682253994090650952614555094516658732116404513121125038617915183037601737180082382202488628239201196033284060130040574800684774115478859677243"), | ||||
| 	}, | ||||
| 	D: bigFromString("5477294338614160138026852784385529180817726002953041720191098180813046231640184669647735805135001309477695746518160084669446643325196003346204701381388769751"), | ||||
| } | ||||
|  | @ -1,167 +0,0 @@ | |||
| // Copyright 2013 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"encoding/hex" | ||||
| 	"errors" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| // TLS reference tests run a connection against a reference implementation
 | ||||
| // (OpenSSL) of TLS and record the bytes of the resulting connection. The Go
 | ||||
| // code, during a test, is configured with deterministic randomness and so the
 | ||||
| // reference test can be reproduced exactly in the future.
 | ||||
| //
 | ||||
| // In order to save everyone who wishes to run the tests from needing the
 | ||||
| // reference implementation installed, the reference connections are saved in
 | ||||
| // files in the testdata directory. Thus running the tests involves nothing
 | ||||
| // external, but creating and updating them requires the reference
 | ||||
| // implementation.
 | ||||
| //
 | ||||
| // Tests can be updated by running them with the -update flag. This will cause
 | ||||
| // the test files. Generally one should combine the -update flag with -test.run
 | ||||
| // to updated a specific test. Since the reference implementation will always
 | ||||
| // generate fresh random numbers, large parts of the reference connection will
 | ||||
| // always change.
 | ||||
| 
 | ||||
| var update = flag.Bool("update", false, "update golden files on disk") | ||||
| 
 | ||||
| // recordingConn is a net.Conn that records the traffic that passes through it.
 | ||||
| // WriteTo can be used to produce output that can be later be loaded with
 | ||||
| // ParseTestData.
 | ||||
| type recordingConn struct { | ||||
| 	net.Conn | ||||
| 	sync.Mutex | ||||
| 	flows   [][]byte | ||||
| 	reading bool | ||||
| } | ||||
| 
 | ||||
| func (r *recordingConn) Read(b []byte) (n int, err error) { | ||||
| 	if n, err = r.Conn.Read(b); n == 0 { | ||||
| 		return | ||||
| 	} | ||||
| 	b = b[:n] | ||||
| 
 | ||||
| 	r.Lock() | ||||
| 	defer r.Unlock() | ||||
| 
 | ||||
| 	if l := len(r.flows); l == 0 || !r.reading { | ||||
| 		buf := make([]byte, len(b)) | ||||
| 		copy(buf, b) | ||||
| 		r.flows = append(r.flows, buf) | ||||
| 	} else { | ||||
| 		r.flows[l-1] = append(r.flows[l-1], b[:n]...) | ||||
| 	} | ||||
| 	r.reading = true | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func (r *recordingConn) Write(b []byte) (n int, err error) { | ||||
| 	if n, err = r.Conn.Write(b); n == 0 { | ||||
| 		return | ||||
| 	} | ||||
| 	b = b[:n] | ||||
| 
 | ||||
| 	r.Lock() | ||||
| 	defer r.Unlock() | ||||
| 
 | ||||
| 	if l := len(r.flows); l == 0 || r.reading { | ||||
| 		buf := make([]byte, len(b)) | ||||
| 		copy(buf, b) | ||||
| 		r.flows = append(r.flows, buf) | ||||
| 	} else { | ||||
| 		r.flows[l-1] = append(r.flows[l-1], b[:n]...) | ||||
| 	} | ||||
| 	r.reading = false | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // WriteTo writes Go source code to w that contains the recorded traffic.
 | ||||
| func (r *recordingConn) WriteTo(w io.Writer) { | ||||
| 	// TLS always starts with a client to server flow.
 | ||||
| 	clientToServer := true | ||||
| 
 | ||||
| 	for i, flow := range r.flows { | ||||
| 		source, dest := "client", "server" | ||||
| 		if !clientToServer { | ||||
| 			source, dest = dest, source | ||||
| 		} | ||||
| 		fmt.Fprintf(w, ">>> Flow %d (%s to %s)\n", i+1, source, dest) | ||||
| 		dumper := hex.Dumper(w) | ||||
| 		dumper.Write(flow) | ||||
| 		dumper.Close() | ||||
| 		clientToServer = !clientToServer | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func parseTestData(r io.Reader) (flows [][]byte, err error) { | ||||
| 	var currentFlow []byte | ||||
| 
 | ||||
| 	scanner := bufio.NewScanner(r) | ||||
| 	for scanner.Scan() { | ||||
| 		line := scanner.Text() | ||||
| 		// If the line starts with ">>> " then it marks the beginning
 | ||||
| 		// of a new flow.
 | ||||
| 		if strings.HasPrefix(line, ">>> ") { | ||||
| 			if len(currentFlow) > 0 || len(flows) > 0 { | ||||
| 				flows = append(flows, currentFlow) | ||||
| 				currentFlow = nil | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		// Otherwise the line is a line of hex dump that looks like:
 | ||||
| 		// 00000170  fc f5 06 bf (...)  |.....X{&?......!|
 | ||||
| 		// (Some bytes have been omitted from the middle section.)
 | ||||
| 
 | ||||
| 		if i := strings.IndexByte(line, ' '); i >= 0 { | ||||
| 			line = line[i:] | ||||
| 		} else { | ||||
| 			return nil, errors.New("invalid test data") | ||||
| 		} | ||||
| 
 | ||||
| 		if i := strings.IndexByte(line, '|'); i >= 0 { | ||||
| 			line = line[:i] | ||||
| 		} else { | ||||
| 			return nil, errors.New("invalid test data") | ||||
| 		} | ||||
| 
 | ||||
| 		hexBytes := strings.Fields(line) | ||||
| 		for _, hexByte := range hexBytes { | ||||
| 			val, err := strconv.ParseUint(hexByte, 16, 8) | ||||
| 			if err != nil { | ||||
| 				return nil, errors.New("invalid hex byte in test data: " + err.Error()) | ||||
| 			} | ||||
| 			currentFlow = append(currentFlow, byte(val)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(currentFlow) > 0 { | ||||
| 		flows = append(flows, currentFlow) | ||||
| 	} | ||||
| 
 | ||||
| 	return flows, nil | ||||
| } | ||||
| 
 | ||||
| // tempFile creates a temp file containing contents and returns its path.
 | ||||
| func tempFile(contents string) string { | ||||
| 	file, err := ioutil.TempFile("", "go-tls-test") | ||||
| 	if err != nil { | ||||
| 		panic("failed to create temp file: " + err.Error()) | ||||
| 	} | ||||
| 	path := file.Name() | ||||
| 	file.WriteString(contents) | ||||
| 	file.Close() | ||||
| 	return path | ||||
| } | ||||
|  | @ -1,413 +0,0 @@ | |||
| // Copyright 2010 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/md5" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/sha1" | ||||
| 	"crypto/sha256" | ||||
| 	"crypto/x509" | ||||
| 	"encoding/asn1" | ||||
| 	"errors" | ||||
| 	"io" | ||||
| 	"math/big" | ||||
| ) | ||||
| 
 | ||||
| var errClientKeyExchange = errors.New("tls: invalid ClientKeyExchange message") | ||||
| var errServerKeyExchange = errors.New("tls: invalid ServerKeyExchange message") | ||||
| 
 | ||||
| // rsaKeyAgreement implements the standard TLS key agreement where the client
 | ||||
| // encrypts the pre-master secret to the server's public key.
 | ||||
| type rsaKeyAgreement struct{} | ||||
| 
 | ||||
| func (ka rsaKeyAgreement) generateServerKeyExchange(config *Config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| func (ka rsaKeyAgreement) processClientKeyExchange(config *Config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { | ||||
| 	preMasterSecret := make([]byte, 48) | ||||
| 	_, err := io.ReadFull(config.rand(), preMasterSecret[2:]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if len(ckx.ciphertext) < 2 { | ||||
| 		return nil, errClientKeyExchange | ||||
| 	} | ||||
| 
 | ||||
| 	ciphertext := ckx.ciphertext | ||||
| 	if version != VersionSSL30 { | ||||
| 		ciphertextLen := int(ckx.ciphertext[0])<<8 | int(ckx.ciphertext[1]) | ||||
| 		if ciphertextLen != len(ckx.ciphertext)-2 { | ||||
| 			return nil, errClientKeyExchange | ||||
| 		} | ||||
| 		ciphertext = ckx.ciphertext[2:] | ||||
| 	} | ||||
| 
 | ||||
| 	err = rsa.DecryptPKCS1v15SessionKey(config.rand(), cert.PrivateKey.(*rsa.PrivateKey), ciphertext, preMasterSecret) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// We don't check the version number in the premaster secret.  For one,
 | ||||
| 	// by checking it, we would leak information about the validity of the
 | ||||
| 	// encrypted pre-master secret. Secondly, it provides only a small
 | ||||
| 	// benefit against a downgrade attack and some implementations send the
 | ||||
| 	// wrong version anyway. See the discussion at the end of section
 | ||||
| 	// 7.4.7.1 of RFC 4346.
 | ||||
| 	return preMasterSecret, nil | ||||
| } | ||||
| 
 | ||||
| func (ka rsaKeyAgreement) processServerKeyExchange(config *Config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { | ||||
| 	return errors.New("tls: unexpected ServerKeyExchange") | ||||
| } | ||||
| 
 | ||||
| func (ka rsaKeyAgreement) generateClientKeyExchange(config *Config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { | ||||
| 	preMasterSecret := make([]byte, 48) | ||||
| 	preMasterSecret[0] = byte(clientHello.vers >> 8) | ||||
| 	preMasterSecret[1] = byte(clientHello.vers) | ||||
| 	_, err := io.ReadFull(config.rand(), preMasterSecret[2:]) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	encrypted, err := rsa.EncryptPKCS1v15(config.rand(), cert.PublicKey.(*rsa.PublicKey), preMasterSecret) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	ckx := new(clientKeyExchangeMsg) | ||||
| 	ckx.ciphertext = make([]byte, len(encrypted)+2) | ||||
| 	ckx.ciphertext[0] = byte(len(encrypted) >> 8) | ||||
| 	ckx.ciphertext[1] = byte(len(encrypted)) | ||||
| 	copy(ckx.ciphertext[2:], encrypted) | ||||
| 	return preMasterSecret, ckx, nil | ||||
| } | ||||
| 
 | ||||
| // sha1Hash calculates a SHA1 hash over the given byte slices.
 | ||||
| func sha1Hash(slices [][]byte) []byte { | ||||
| 	hsha1 := sha1.New() | ||||
| 	for _, slice := range slices { | ||||
| 		hsha1.Write(slice) | ||||
| 	} | ||||
| 	return hsha1.Sum(nil) | ||||
| } | ||||
| 
 | ||||
| // md5SHA1Hash implements TLS 1.0's hybrid hash function which consists of the
 | ||||
| // concatenation of an MD5 and SHA1 hash.
 | ||||
| func md5SHA1Hash(slices [][]byte) []byte { | ||||
| 	md5sha1 := make([]byte, md5.Size+sha1.Size) | ||||
| 	hmd5 := md5.New() | ||||
| 	for _, slice := range slices { | ||||
| 		hmd5.Write(slice) | ||||
| 	} | ||||
| 	copy(md5sha1, hmd5.Sum(nil)) | ||||
| 	copy(md5sha1[md5.Size:], sha1Hash(slices)) | ||||
| 	return md5sha1 | ||||
| } | ||||
| 
 | ||||
| // sha256Hash implements TLS 1.2's hash function.
 | ||||
| func sha256Hash(slices [][]byte) []byte { | ||||
| 	h := sha256.New() | ||||
| 	for _, slice := range slices { | ||||
| 		h.Write(slice) | ||||
| 	} | ||||
| 	return h.Sum(nil) | ||||
| } | ||||
| 
 | ||||
| // hashForServerKeyExchange hashes the given slices and returns their digest
 | ||||
| // and the identifier of the hash function used. The hashFunc argument is only
 | ||||
| // used for >= TLS 1.2 and precisely identifies the hash function to use.
 | ||||
| func hashForServerKeyExchange(sigType, hashFunc uint8, version uint16, slices ...[]byte) ([]byte, crypto.Hash, error) { | ||||
| 	if version >= VersionTLS12 { | ||||
| 		switch hashFunc { | ||||
| 		case hashSHA256: | ||||
| 			return sha256Hash(slices), crypto.SHA256, nil | ||||
| 		case hashSHA1: | ||||
| 			return sha1Hash(slices), crypto.SHA1, nil | ||||
| 		default: | ||||
| 			return nil, crypto.Hash(0), errors.New("tls: unknown hash function used by peer") | ||||
| 		} | ||||
| 	} | ||||
| 	if sigType == signatureECDSA { | ||||
| 		return sha1Hash(slices), crypto.SHA1, nil | ||||
| 	} | ||||
| 	return md5SHA1Hash(slices), crypto.MD5SHA1, nil | ||||
| } | ||||
| 
 | ||||
| // pickTLS12HashForSignature returns a TLS 1.2 hash identifier for signing a
 | ||||
| // ServerKeyExchange given the signature type being used and the client's
 | ||||
| // advertised list of supported signature and hash combinations.
 | ||||
| func pickTLS12HashForSignature(sigType uint8, clientSignatureAndHashes []signatureAndHash) (uint8, error) { | ||||
| 	if len(clientSignatureAndHashes) == 0 { | ||||
| 		// If the client didn't specify any signature_algorithms
 | ||||
| 		// extension then we can assume that it supports SHA1. See
 | ||||
| 		// http://tools.ietf.org/html/rfc5246#section-7.4.1.4.1
 | ||||
| 		return hashSHA1, nil | ||||
| 	} | ||||
| 
 | ||||
| 	for _, sigAndHash := range clientSignatureAndHashes { | ||||
| 		if sigAndHash.signature != sigType { | ||||
| 			continue | ||||
| 		} | ||||
| 		switch sigAndHash.hash { | ||||
| 		case hashSHA1, hashSHA256: | ||||
| 			return sigAndHash.hash, nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 0, errors.New("tls: client doesn't support any common hash functions") | ||||
| } | ||||
| 
 | ||||
| func curveForCurveID(id CurveID) (elliptic.Curve, bool) { | ||||
| 	switch id { | ||||
| 	case CurveP256: | ||||
| 		return elliptic.P256(), true | ||||
| 	case CurveP384: | ||||
| 		return elliptic.P384(), true | ||||
| 	case CurveP521: | ||||
| 		return elliptic.P521(), true | ||||
| 	default: | ||||
| 		return nil, false | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // ecdheRSAKeyAgreement implements a TLS key agreement where the server
 | ||||
| // generates a ephemeral EC public/private key pair and signs it. The
 | ||||
| // pre-master secret is then calculated using ECDH. The signature may
 | ||||
| // either be ECDSA or RSA.
 | ||||
| type ecdheKeyAgreement struct { | ||||
| 	version    uint16 | ||||
| 	sigType    uint8 | ||||
| 	privateKey []byte | ||||
| 	curve      elliptic.Curve | ||||
| 	x, y       *big.Int | ||||
| } | ||||
| 
 | ||||
| func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *Config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) { | ||||
| 	var curveid CurveID | ||||
| 	preferredCurves := config.curvePreferences() | ||||
| 
 | ||||
| NextCandidate: | ||||
| 	for _, candidate := range preferredCurves { | ||||
| 		for _, c := range clientHello.supportedCurves { | ||||
| 			if candidate == c { | ||||
| 				curveid = c | ||||
| 				break NextCandidate | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if curveid == 0 { | ||||
| 		return nil, errors.New("tls: no supported elliptic curves offered") | ||||
| 	} | ||||
| 
 | ||||
| 	var ok bool | ||||
| 	if ka.curve, ok = curveForCurveID(curveid); !ok { | ||||
| 		return nil, errors.New("tls: preferredCurves includes unsupported curve") | ||||
| 	} | ||||
| 
 | ||||
| 	var x, y *big.Int | ||||
| 	var err error | ||||
| 	ka.privateKey, x, y, err = elliptic.GenerateKey(ka.curve, config.rand()) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	ecdhePublic := elliptic.Marshal(ka.curve, x, y) | ||||
| 
 | ||||
| 	// http://tools.ietf.org/html/rfc4492#section-5.4
 | ||||
| 	serverECDHParams := make([]byte, 1+2+1+len(ecdhePublic)) | ||||
| 	serverECDHParams[0] = 3 // named curve
 | ||||
| 	serverECDHParams[1] = byte(curveid >> 8) | ||||
| 	serverECDHParams[2] = byte(curveid) | ||||
| 	serverECDHParams[3] = byte(len(ecdhePublic)) | ||||
| 	copy(serverECDHParams[4:], ecdhePublic) | ||||
| 
 | ||||
| 	var tls12HashId uint8 | ||||
| 	if ka.version >= VersionTLS12 { | ||||
| 		if tls12HashId, err = pickTLS12HashForSignature(ka.sigType, clientHello.signatureAndHashes); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	digest, hashFunc, err := hashForServerKeyExchange(ka.sigType, tls12HashId, ka.version, clientHello.random, hello.random, serverECDHParams) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	var sig []byte | ||||
| 	switch ka.sigType { | ||||
| 	case signatureECDSA: | ||||
| 		privKey, ok := cert.PrivateKey.(*ecdsa.PrivateKey) | ||||
| 		if !ok { | ||||
| 			return nil, errors.New("ECDHE ECDSA requires an ECDSA server private key") | ||||
| 		} | ||||
| 		r, s, err := ecdsa.Sign(config.rand(), privKey, digest) | ||||
| 		if err != nil { | ||||
| 			return nil, errors.New("failed to sign ECDHE parameters: " + err.Error()) | ||||
| 		} | ||||
| 		sig, err = asn1.Marshal(ecdsaSignature{r, s}) | ||||
| 	case signatureRSA: | ||||
| 		privKey, ok := cert.PrivateKey.(*rsa.PrivateKey) | ||||
| 		if !ok { | ||||
| 			return nil, errors.New("ECDHE RSA requires a RSA server private key") | ||||
| 		} | ||||
| 		sig, err = rsa.SignPKCS1v15(config.rand(), privKey, hashFunc, digest) | ||||
| 		if err != nil { | ||||
| 			return nil, errors.New("failed to sign ECDHE parameters: " + err.Error()) | ||||
| 		} | ||||
| 	default: | ||||
| 		return nil, errors.New("unknown ECDHE signature algorithm") | ||||
| 	} | ||||
| 
 | ||||
| 	skx := new(serverKeyExchangeMsg) | ||||
| 	sigAndHashLen := 0 | ||||
| 	if ka.version >= VersionTLS12 { | ||||
| 		sigAndHashLen = 2 | ||||
| 	} | ||||
| 	skx.key = make([]byte, len(serverECDHParams)+sigAndHashLen+2+len(sig)) | ||||
| 	copy(skx.key, serverECDHParams) | ||||
| 	k := skx.key[len(serverECDHParams):] | ||||
| 	if ka.version >= VersionTLS12 { | ||||
| 		k[0] = tls12HashId | ||||
| 		k[1] = ka.sigType | ||||
| 		k = k[2:] | ||||
| 	} | ||||
| 	k[0] = byte(len(sig) >> 8) | ||||
| 	k[1] = byte(len(sig)) | ||||
| 	copy(k[2:], sig) | ||||
| 
 | ||||
| 	return skx, nil | ||||
| } | ||||
| 
 | ||||
| func (ka *ecdheKeyAgreement) processClientKeyExchange(config *Config, cert *Certificate, ckx *clientKeyExchangeMsg, version uint16) ([]byte, error) { | ||||
| 	if len(ckx.ciphertext) == 0 || int(ckx.ciphertext[0]) != len(ckx.ciphertext)-1 { | ||||
| 		return nil, errClientKeyExchange | ||||
| 	} | ||||
| 	x, y := elliptic.Unmarshal(ka.curve, ckx.ciphertext[1:]) | ||||
| 	if x == nil { | ||||
| 		return nil, errClientKeyExchange | ||||
| 	} | ||||
| 	if !ka.curve.IsOnCurve(x, y) { | ||||
| 		return nil, errClientKeyExchange | ||||
| 	} | ||||
| 	x, _ = ka.curve.ScalarMult(x, y, ka.privateKey) | ||||
| 	preMasterSecret := make([]byte, (ka.curve.Params().BitSize+7)>>3) | ||||
| 	xBytes := x.Bytes() | ||||
| 	copy(preMasterSecret[len(preMasterSecret)-len(xBytes):], xBytes) | ||||
| 
 | ||||
| 	return preMasterSecret, nil | ||||
| } | ||||
| 
 | ||||
| func (ka *ecdheKeyAgreement) processServerKeyExchange(config *Config, clientHello *clientHelloMsg, serverHello *serverHelloMsg, cert *x509.Certificate, skx *serverKeyExchangeMsg) error { | ||||
| 	if len(skx.key) < 4 { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 	if skx.key[0] != 3 { // named curve
 | ||||
| 		return errors.New("tls: server selected unsupported curve") | ||||
| 	} | ||||
| 	curveid := CurveID(skx.key[1])<<8 | CurveID(skx.key[2]) | ||||
| 
 | ||||
| 	var ok bool | ||||
| 	if ka.curve, ok = curveForCurveID(curveid); !ok { | ||||
| 		return errors.New("tls: server selected unsupported curve") | ||||
| 	} | ||||
| 
 | ||||
| 	publicLen := int(skx.key[3]) | ||||
| 	if publicLen+4 > len(skx.key) { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 	ka.x, ka.y = elliptic.Unmarshal(ka.curve, skx.key[4:4+publicLen]) | ||||
| 	if ka.x == nil { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 	if !ka.curve.IsOnCurve(ka.x, ka.y) { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 	serverECDHParams := skx.key[:4+publicLen] | ||||
| 
 | ||||
| 	sig := skx.key[4+publicLen:] | ||||
| 	if len(sig) < 2 { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 
 | ||||
| 	var tls12HashId uint8 | ||||
| 	if ka.version >= VersionTLS12 { | ||||
| 		// handle SignatureAndHashAlgorithm
 | ||||
| 		var sigAndHash []uint8 | ||||
| 		sigAndHash, sig = sig[:2], sig[2:] | ||||
| 		if sigAndHash[1] != ka.sigType { | ||||
| 			return errServerKeyExchange | ||||
| 		} | ||||
| 		tls12HashId = sigAndHash[0] | ||||
| 		if len(sig) < 2 { | ||||
| 			return errServerKeyExchange | ||||
| 		} | ||||
| 	} | ||||
| 	sigLen := int(sig[0])<<8 | int(sig[1]) | ||||
| 	if sigLen+2 != len(sig) { | ||||
| 		return errServerKeyExchange | ||||
| 	} | ||||
| 	sig = sig[2:] | ||||
| 
 | ||||
| 	digest, hashFunc, err := hashForServerKeyExchange(ka.sigType, tls12HashId, ka.version, clientHello.random, serverHello.random, serverECDHParams) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	switch ka.sigType { | ||||
| 	case signatureECDSA: | ||||
| 		pubKey, ok := cert.PublicKey.(*ecdsa.PublicKey) | ||||
| 		if !ok { | ||||
| 			return errors.New("ECDHE ECDSA requires a ECDSA server public key") | ||||
| 		} | ||||
| 		ecdsaSig := new(ecdsaSignature) | ||||
| 		if _, err := asn1.Unmarshal(sig, ecdsaSig); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if ecdsaSig.R.Sign() <= 0 || ecdsaSig.S.Sign() <= 0 { | ||||
| 			return errors.New("ECDSA signature contained zero or negative values") | ||||
| 		} | ||||
| 		if !ecdsa.Verify(pubKey, digest, ecdsaSig.R, ecdsaSig.S) { | ||||
| 			return errors.New("ECDSA verification failure") | ||||
| 		} | ||||
| 	case signatureRSA: | ||||
| 		pubKey, ok := cert.PublicKey.(*rsa.PublicKey) | ||||
| 		if !ok { | ||||
| 			return errors.New("ECDHE RSA requires a RSA server public key") | ||||
| 		} | ||||
| 		if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, digest, sig); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	default: | ||||
| 		return errors.New("unknown ECDHE signature algorithm") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (ka *ecdheKeyAgreement) generateClientKeyExchange(config *Config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { | ||||
| 	if ka.curve == nil { | ||||
| 		return nil, nil, errors.New("missing ServerKeyExchange message") | ||||
| 	} | ||||
| 	priv, mx, my, err := elliptic.GenerateKey(ka.curve, config.rand()) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	x, _ := ka.curve.ScalarMult(ka.x, ka.y, priv) | ||||
| 	preMasterSecret := make([]byte, (ka.curve.Params().BitSize+7)>>3) | ||||
| 	xBytes := x.Bytes() | ||||
| 	copy(preMasterSecret[len(preMasterSecret)-len(xBytes):], xBytes) | ||||
| 
 | ||||
| 	serialized := elliptic.Marshal(ka.curve, mx, my) | ||||
| 
 | ||||
| 	ckx := new(clientKeyExchangeMsg) | ||||
| 	ckx.ciphertext = make([]byte, 1+len(serialized)) | ||||
| 	ckx.ciphertext[0] = byte(len(serialized)) | ||||
| 	copy(ckx.ciphertext[1:], serialized) | ||||
| 
 | ||||
| 	return preMasterSecret, ckx, nil | ||||
| } | ||||
|  | @ -1,293 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/hmac" | ||||
| 	"crypto/md5" | ||||
| 	"crypto/sha1" | ||||
| 	"hash" | ||||
| ) | ||||
| 
 | ||||
| // Split a premaster secret in two as specified in RFC 4346, section 5.
 | ||||
| func splitPreMasterSecret(secret []byte) (s1, s2 []byte) { | ||||
| 	s1 = secret[0 : (len(secret)+1)/2] | ||||
| 	s2 = secret[len(secret)/2:] | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // pHash implements the P_hash function, as defined in RFC 4346, section 5.
 | ||||
| func pHash(result, secret, seed []byte, hash func() hash.Hash) { | ||||
| 	h := hmac.New(hash, secret) | ||||
| 	h.Write(seed) | ||||
| 	a := h.Sum(nil) | ||||
| 
 | ||||
| 	j := 0 | ||||
| 	for j < len(result) { | ||||
| 		h.Reset() | ||||
| 		h.Write(a) | ||||
| 		h.Write(seed) | ||||
| 		b := h.Sum(nil) | ||||
| 		todo := len(b) | ||||
| 		if j+todo > len(result) { | ||||
| 			todo = len(result) - j | ||||
| 		} | ||||
| 		copy(result[j:j+todo], b) | ||||
| 		j += todo | ||||
| 
 | ||||
| 		h.Reset() | ||||
| 		h.Write(a) | ||||
| 		a = h.Sum(nil) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // prf10 implements the TLS 1.0 pseudo-random function, as defined in RFC 2246, section 5.
 | ||||
| func prf10(result, secret, label, seed []byte) { | ||||
| 	hashSHA1 := sha1.New | ||||
| 	hashMD5 := md5.New | ||||
| 
 | ||||
| 	labelAndSeed := make([]byte, len(label)+len(seed)) | ||||
| 	copy(labelAndSeed, label) | ||||
| 	copy(labelAndSeed[len(label):], seed) | ||||
| 
 | ||||
| 	s1, s2 := splitPreMasterSecret(secret) | ||||
| 	pHash(result, s1, labelAndSeed, hashMD5) | ||||
| 	result2 := make([]byte, len(result)) | ||||
| 	pHash(result2, s2, labelAndSeed, hashSHA1) | ||||
| 
 | ||||
| 	for i, b := range result2 { | ||||
| 		result[i] ^= b | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // prf12New returns a function implementing the TLS 1.2 pseudo-random function,
 | ||||
| // as defined in RFC 5246, section 5, using the given hash.
 | ||||
| func prf12New(tls12Hash crypto.Hash) func(result, secret, label, seed []byte) { | ||||
| 	return func(result, secret, label, seed []byte) { | ||||
| 		labelAndSeed := make([]byte, len(label)+len(seed)) | ||||
| 		copy(labelAndSeed, label) | ||||
| 		copy(labelAndSeed[len(label):], seed) | ||||
| 		pHash(result, secret, labelAndSeed, tls12Hash.New) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // prf30 implements the SSL 3.0 pseudo-random function, as defined in
 | ||||
| // www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt section 6.
 | ||||
| func prf30(result, secret, label, seed []byte) { | ||||
| 	hashSHA1 := sha1.New() | ||||
| 	hashMD5 := md5.New() | ||||
| 
 | ||||
| 	done := 0 | ||||
| 	i := 0 | ||||
| 	// RFC5246 section 6.3 says that the largest PRF output needed is 128
 | ||||
| 	// bytes. Since no more ciphersuites will be added to SSLv3, this will
 | ||||
| 	// remain true. Each iteration gives us 16 bytes so 10 iterations will
 | ||||
| 	// be sufficient.
 | ||||
| 	var b [11]byte | ||||
| 	for done < len(result) { | ||||
| 		for j := 0; j <= i; j++ { | ||||
| 			b[j] = 'A' + byte(i) | ||||
| 		} | ||||
| 
 | ||||
| 		hashSHA1.Reset() | ||||
| 		hashSHA1.Write(b[:i+1]) | ||||
| 		hashSHA1.Write(secret) | ||||
| 		hashSHA1.Write(seed) | ||||
| 		digest := hashSHA1.Sum(nil) | ||||
| 
 | ||||
| 		hashMD5.Reset() | ||||
| 		hashMD5.Write(secret) | ||||
| 		hashMD5.Write(digest) | ||||
| 
 | ||||
| 		done += copy(result[done:], hashMD5.Sum(nil)) | ||||
| 		i++ | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	tlsRandomLength      = 32 // Length of a random nonce in TLS 1.1.
 | ||||
| 	masterSecretLength   = 48 // Length of a master secret in TLS 1.1.
 | ||||
| 	finishedVerifyLength = 12 // Length of verify_data in a Finished message.
 | ||||
| ) | ||||
| 
 | ||||
| var masterSecretLabel = []byte("master secret") | ||||
| var keyExpansionLabel = []byte("key expansion") | ||||
| var clientFinishedLabel = []byte("client finished") | ||||
| var serverFinishedLabel = []byte("server finished") | ||||
| 
 | ||||
| func prfForVersion(version uint16, tls12Hash crypto.Hash) func(result, secret, label, seed []byte) { | ||||
| 	switch version { | ||||
| 	case VersionSSL30: | ||||
| 		return prf30 | ||||
| 	case VersionTLS10, VersionTLS11: | ||||
| 		return prf10 | ||||
| 	case VersionTLS12: | ||||
| 		return prf12New(tls12Hash) | ||||
| 	default: | ||||
| 		panic("unknown version") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // masterFromPreMasterSecret generates the master secret from the pre-master
 | ||||
| // secret. See http://tools.ietf.org/html/rfc5246#section-8.1
 | ||||
| func masterFromPreMasterSecret(version uint16, tls12Hash crypto.Hash, preMasterSecret, clientRandom, serverRandom []byte) []byte { | ||||
| 	var seed [tlsRandomLength * 2]byte | ||||
| 	copy(seed[0:len(clientRandom)], clientRandom) | ||||
| 	copy(seed[len(clientRandom):], serverRandom) | ||||
| 	masterSecret := make([]byte, masterSecretLength) | ||||
| 	prfForVersion(version, tls12Hash)(masterSecret, preMasterSecret, masterSecretLabel, seed[0:]) | ||||
| 	return masterSecret | ||||
| } | ||||
| 
 | ||||
| // keysFromMasterSecret generates the connection keys from the master
 | ||||
| // secret, given the lengths of the MAC key, cipher key and IV, as defined in
 | ||||
| // RFC 2246, section 6.3.
 | ||||
| func keysFromMasterSecret(version uint16, tls12Hash crypto.Hash, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int) (clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV []byte) { | ||||
| 	var seed [tlsRandomLength * 2]byte | ||||
| 	copy(seed[0:len(clientRandom)], serverRandom) | ||||
| 	copy(seed[len(serverRandom):], clientRandom) | ||||
| 
 | ||||
| 	n := 2*macLen + 2*keyLen + 2*ivLen | ||||
| 	keyMaterial := make([]byte, n) | ||||
| 	prfForVersion(version, tls12Hash)(keyMaterial, masterSecret, keyExpansionLabel, seed[0:]) | ||||
| 	clientMAC = keyMaterial[:macLen] | ||||
| 	keyMaterial = keyMaterial[macLen:] | ||||
| 	serverMAC = keyMaterial[:macLen] | ||||
| 	keyMaterial = keyMaterial[macLen:] | ||||
| 	clientKey = keyMaterial[:keyLen] | ||||
| 	keyMaterial = keyMaterial[keyLen:] | ||||
| 	serverKey = keyMaterial[:keyLen] | ||||
| 	keyMaterial = keyMaterial[keyLen:] | ||||
| 	clientIV = keyMaterial[:ivLen] | ||||
| 	keyMaterial = keyMaterial[ivLen:] | ||||
| 	serverIV = keyMaterial[:ivLen] | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func newFinishedHash(version uint16, tls12Hash crypto.Hash) finishedHash { | ||||
| 	if version >= VersionTLS12 { | ||||
| 		return finishedHash{tls12Hash.New(), tls12Hash.New(), nil, nil, version, prfForVersion(version, tls12Hash)} | ||||
| 	} | ||||
| 	return finishedHash{sha1.New(), sha1.New(), md5.New(), md5.New(), version, prfForVersion(version, tls12Hash)} | ||||
| } | ||||
| 
 | ||||
| // A finishedHash calculates the hash of a set of handshake messages suitable
 | ||||
| // for including in a Finished message.
 | ||||
| type finishedHash struct { | ||||
| 	client hash.Hash | ||||
| 	server hash.Hash | ||||
| 
 | ||||
| 	// Prior to TLS 1.2, an additional MD5 hash is required.
 | ||||
| 	clientMD5 hash.Hash | ||||
| 	serverMD5 hash.Hash | ||||
| 
 | ||||
| 	version uint16 | ||||
| 	prf     func(result, secret, label, seed []byte) | ||||
| } | ||||
| 
 | ||||
| func (h finishedHash) Write(msg []byte) (n int, err error) { | ||||
| 	h.client.Write(msg) | ||||
| 	h.server.Write(msg) | ||||
| 
 | ||||
| 	if h.version < VersionTLS12 { | ||||
| 		h.clientMD5.Write(msg) | ||||
| 		h.serverMD5.Write(msg) | ||||
| 	} | ||||
| 	return len(msg), nil | ||||
| } | ||||
| 
 | ||||
| // finishedSum30 calculates the contents of the verify_data member of a SSLv3
 | ||||
| // Finished message given the MD5 and SHA1 hashes of a set of handshake
 | ||||
| // messages.
 | ||||
| func finishedSum30(md5, sha1 hash.Hash, masterSecret []byte, magic [4]byte) []byte { | ||||
| 	md5.Write(magic[:]) | ||||
| 	md5.Write(masterSecret) | ||||
| 	md5.Write(ssl30Pad1[:]) | ||||
| 	md5Digest := md5.Sum(nil) | ||||
| 
 | ||||
| 	md5.Reset() | ||||
| 	md5.Write(masterSecret) | ||||
| 	md5.Write(ssl30Pad2[:]) | ||||
| 	md5.Write(md5Digest) | ||||
| 	md5Digest = md5.Sum(nil) | ||||
| 
 | ||||
| 	sha1.Write(magic[:]) | ||||
| 	sha1.Write(masterSecret) | ||||
| 	sha1.Write(ssl30Pad1[:40]) | ||||
| 	sha1Digest := sha1.Sum(nil) | ||||
| 
 | ||||
| 	sha1.Reset() | ||||
| 	sha1.Write(masterSecret) | ||||
| 	sha1.Write(ssl30Pad2[:40]) | ||||
| 	sha1.Write(sha1Digest) | ||||
| 	sha1Digest = sha1.Sum(nil) | ||||
| 
 | ||||
| 	ret := make([]byte, len(md5Digest)+len(sha1Digest)) | ||||
| 	copy(ret, md5Digest) | ||||
| 	copy(ret[len(md5Digest):], sha1Digest) | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| var ssl3ClientFinishedMagic = [4]byte{0x43, 0x4c, 0x4e, 0x54} | ||||
| var ssl3ServerFinishedMagic = [4]byte{0x53, 0x52, 0x56, 0x52} | ||||
| 
 | ||||
| // clientSum returns the contents of the verify_data member of a client's
 | ||||
| // Finished message.
 | ||||
| func (h finishedHash) clientSum(masterSecret []byte) []byte { | ||||
| 	if h.version == VersionSSL30 { | ||||
| 		return finishedSum30(h.clientMD5, h.client, masterSecret, ssl3ClientFinishedMagic) | ||||
| 	} | ||||
| 
 | ||||
| 	out := make([]byte, finishedVerifyLength) | ||||
| 	if h.version >= VersionTLS12 { | ||||
| 		seed := h.client.Sum(nil) | ||||
| 		h.prf(out, masterSecret, clientFinishedLabel, seed) | ||||
| 	} else { | ||||
| 		seed := make([]byte, 0, md5.Size+sha1.Size) | ||||
| 		seed = h.clientMD5.Sum(seed) | ||||
| 		seed = h.client.Sum(seed) | ||||
| 		h.prf(out, masterSecret, clientFinishedLabel, seed) | ||||
| 	} | ||||
| 	return out | ||||
| } | ||||
| 
 | ||||
| // serverSum returns the contents of the verify_data member of a server's
 | ||||
| // Finished message.
 | ||||
| func (h finishedHash) serverSum(masterSecret []byte) []byte { | ||||
| 	if h.version == VersionSSL30 { | ||||
| 		return finishedSum30(h.serverMD5, h.server, masterSecret, ssl3ServerFinishedMagic) | ||||
| 	} | ||||
| 
 | ||||
| 	out := make([]byte, finishedVerifyLength) | ||||
| 	if h.version >= VersionTLS12 { | ||||
| 		seed := h.server.Sum(nil) | ||||
| 		h.prf(out, masterSecret, serverFinishedLabel, seed) | ||||
| 	} else { | ||||
| 		seed := make([]byte, 0, md5.Size+sha1.Size) | ||||
| 		seed = h.serverMD5.Sum(seed) | ||||
| 		seed = h.server.Sum(seed) | ||||
| 		h.prf(out, masterSecret, serverFinishedLabel, seed) | ||||
| 	} | ||||
| 	return out | ||||
| } | ||||
| 
 | ||||
| // hashForClientCertificate returns a digest, hash function, and TLS 1.2 hash
 | ||||
| // id suitable for signing by a TLS client certificate.
 | ||||
| func (h finishedHash) hashForClientCertificate(sigType uint8) ([]byte, crypto.Hash, uint8) { | ||||
| 	if h.version >= VersionTLS12 { | ||||
| 		digest := h.server.Sum(nil) | ||||
| 		return digest, crypto.SHA256, hashSHA256 | ||||
| 	} | ||||
| 	if sigType == signatureECDSA { | ||||
| 		digest := h.server.Sum(nil) | ||||
| 		return digest, crypto.SHA1, hashSHA1 | ||||
| 	} | ||||
| 
 | ||||
| 	digest := make([]byte, 0, 36) | ||||
| 	digest = h.serverMD5.Sum(digest) | ||||
| 	digest = h.server.Sum(digest) | ||||
| 	return digest, crypto.MD5SHA1, 0 /* not specified in TLS 1.2. */ | ||||
| } | ||||
|  | @ -1,132 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"encoding/hex" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| type testSplitPreMasterSecretTest struct { | ||||
| 	in, out1, out2 string | ||||
| } | ||||
| 
 | ||||
| var testSplitPreMasterSecretTests = []testSplitPreMasterSecretTest{ | ||||
| 	{"", "", ""}, | ||||
| 	{"00", "00", "00"}, | ||||
| 	{"0011", "00", "11"}, | ||||
| 	{"001122", "0011", "1122"}, | ||||
| 	{"00112233", "0011", "2233"}, | ||||
| } | ||||
| 
 | ||||
| func TestSplitPreMasterSecret(t *testing.T) { | ||||
| 	for i, test := range testSplitPreMasterSecretTests { | ||||
| 		in, _ := hex.DecodeString(test.in) | ||||
| 		out1, out2 := splitPreMasterSecret(in) | ||||
| 		s1 := hex.EncodeToString(out1) | ||||
| 		s2 := hex.EncodeToString(out2) | ||||
| 		if s1 != test.out1 || s2 != test.out2 { | ||||
| 			t.Errorf("#%d: got: (%s, %s) want: (%s, %s)", i, s1, s2, test.out1, test.out2) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type testKeysFromTest struct { | ||||
| 	version                    uint16 | ||||
| 	hash                       crypto.Hash | ||||
| 	preMasterSecret            string | ||||
| 	clientRandom, serverRandom string | ||||
| 	masterSecret               string | ||||
| 	clientMAC, serverMAC       string | ||||
| 	clientKey, serverKey       string | ||||
| 	macLen, keyLen             int | ||||
| } | ||||
| 
 | ||||
| func TestKeysFromPreMasterSecret(t *testing.T) { | ||||
| 	for i, test := range testKeysFromTests { | ||||
| 		in, _ := hex.DecodeString(test.preMasterSecret) | ||||
| 		clientRandom, _ := hex.DecodeString(test.clientRandom) | ||||
| 		serverRandom, _ := hex.DecodeString(test.serverRandom) | ||||
| 
 | ||||
| 		masterSecret := masterFromPreMasterSecret(test.version, test.hash, in, clientRandom, serverRandom) | ||||
| 		if s := hex.EncodeToString(masterSecret); s != test.masterSecret { | ||||
| 			t.Errorf("#%d: bad master secret %s, want %s", i, s, test.masterSecret) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		clientMAC, serverMAC, clientKey, serverKey, _, _ := keysFromMasterSecret(test.version, test.hash, masterSecret, clientRandom, serverRandom, test.macLen, test.keyLen, 0) | ||||
| 		clientMACString := hex.EncodeToString(clientMAC) | ||||
| 		serverMACString := hex.EncodeToString(serverMAC) | ||||
| 		clientKeyString := hex.EncodeToString(clientKey) | ||||
| 		serverKeyString := hex.EncodeToString(serverKey) | ||||
| 		if clientMACString != test.clientMAC || | ||||
| 			serverMACString != test.serverMAC || | ||||
| 			clientKeyString != test.clientKey || | ||||
| 			serverKeyString != test.serverKey { | ||||
| 			t.Errorf("#%d: got: (%s, %s, %s, %s) want: (%s, %s, %s, %s)", i, clientMACString, serverMACString, clientKeyString, serverKeyString, test.clientMAC, test.serverMAC, test.clientKey, test.serverKey) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // These test vectors were generated from GnuTLS using `gnutls-cli --insecure -d 9 `
 | ||||
| var testKeysFromTests = []testKeysFromTest{ | ||||
| 	{ | ||||
| 		VersionTLS10, | ||||
| 		crypto.SHA1, | ||||
| 		"0302cac83ad4b1db3b9ab49ad05957de2a504a634a386fc600889321e1a971f57479466830ac3e6f468e87f5385fa0c5", | ||||
| 		"4ae66303755184a3917fcb44880605fcc53baa01912b22ed94473fc69cebd558", | ||||
| 		"4ae663020ec16e6bb5130be918cfcafd4d765979a3136a5d50c593446e4e44db", | ||||
| 		"3d851bab6e5556e959a16bc36d66cfae32f672bfa9ecdef6096cbb1b23472df1da63dbbd9827606413221d149ed08ceb", | ||||
| 		"805aaa19b3d2c0a0759a4b6c9959890e08480119", | ||||
| 		"2d22f9fe519c075c16448305ceee209fc24ad109", | ||||
| 		"d50b5771244f850cd8117a9ccafe2cf1", | ||||
| 		"e076e33206b30507a85c32855acd0919", | ||||
| 		20, | ||||
| 		16, | ||||
| 	}, | ||||
| 	{ | ||||
| 		VersionTLS10, | ||||
| 		crypto.SHA1, | ||||
| 		"03023f7527316bc12cbcd69e4b9e8275d62c028f27e65c745cfcddc7ce01bd3570a111378b63848127f1c36e5f9e4890", | ||||
| 		"4ae66364b5ea56b20ce4e25555aed2d7e67f42788dd03f3fee4adae0459ab106", | ||||
| 		"4ae66363ab815cbf6a248b87d6b556184e945e9b97fbdf247858b0bdafacfa1c", | ||||
| 		"7d64be7c80c59b740200b4b9c26d0baaa1c5ae56705acbcf2307fe62beb4728c19392c83f20483801cce022c77645460", | ||||
| 		"97742ed60a0554ca13f04f97ee193177b971e3b0", | ||||
| 		"37068751700400e03a8477a5c7eec0813ab9e0dc", | ||||
| 		"207cddbc600d2a200abac6502053ee5c", | ||||
| 		"df3f94f6e1eacc753b815fe16055cd43", | ||||
| 		20, | ||||
| 		16, | ||||
| 	}, | ||||
| 	{ | ||||
| 		VersionTLS10, | ||||
| 		crypto.SHA1, | ||||
| 		"832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1", | ||||
| 		"4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e", | ||||
| 		"4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e", | ||||
| 		"1aff2e7a2c4279d0126f57a65a77a8d9d0087cf2733366699bec27eb53d5740705a8574bb1acc2abbe90e44f0dd28d6c", | ||||
| 		"3c7647c93c1379a31a609542aa44e7f117a70085", | ||||
| 		"0d73102994be74a575a3ead8532590ca32a526d4", | ||||
| 		"ac7581b0b6c10d85bbd905ffbf36c65e", | ||||
| 		"ff07edde49682b45466bd2e39464b306", | ||||
| 		20, | ||||
| 		16, | ||||
| 	}, | ||||
| 	{ | ||||
| 		VersionSSL30, | ||||
| 		crypto.SHA1, | ||||
| 		"832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1", | ||||
| 		"4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e", | ||||
| 		"4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e", | ||||
| 		"a614863e56299dcffeea2938f22c2ba023768dbe4b3f6877bc9c346c6ae529b51d9cb87ff9695ea4d01f2205584405b2", | ||||
| 		"2c450d5b6f6e2013ac6bea6a0b32200d4e1ffb94", | ||||
| 		"7a7a7438769536f2fb1ae49a61f0703b79b2dc53", | ||||
| 		"f8f6b26c10f12855c9aafb1e0e839ccf", | ||||
| 		"2b9d4b4a60cb7f396780ebff50650419", | ||||
| 		20, | ||||
| 		16, | ||||
| 	}, | ||||
| } | ||||
|  | @ -1,129 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 59 02 00 00  55 03 01 43 60 d4 9a c4  |....Y...U..C`...| | ||||
| 00000010  28 6c b9 56 de 43 c6 e4  05 f5 ab 71 87 ef ae b8  |(l.V.C.....q....| | ||||
| 00000020  cf da 13 b5 98 b7 ab cc  35 44 48 20 2c 7f 10 60  |........5DH ,..`| | ||||
| 00000030  98 a8 13 4d a8 7c d6 45  48 aa c5 aa f2 f7 bb 98  |...M.|.EH.......| | ||||
| 00000040  53 6e 5d 3f 56 de 17 ba  c9 a8 d1 81 c0 09 00 00  |Sn]?V...........| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  01 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 01 00 d4 0c 00  00 d0 03 00 17 41 04 ef  |*............A..| | ||||
| 00000280  89 a9 4f 05 2f ee ee c9  cb 73 d0 57 cc c9 45 ca  |..O./....s.W..E.| | ||||
| 00000290  d8 61 4d 0d 5b cf 83 c1  19 bd 6d a7 49 de ba 6c  |.aM.[.....m.I..l| | ||||
| 000002a0  63 b5 88 c9 4d a8 44 9f  f2 ec 3c 88 d6 ec 20 f3  |c...M.D...<... .| | ||||
| 000002b0  6f 25 cd 99 0a 42 71 19  67 6d dd 65 6a 52 f8 00  |o%...Bq.gm.ejR..| | ||||
| 000002c0  89 30 81 86 02 41 42 4f  70 eb fa 2a bf 06 0f 16  |.0...ABOp..*....| | ||||
| 000002d0  62 d8 25 d5 d4 c4 bb 2e  d1 f9 84 3b a0 57 78 7f  |b.%........;.Wx.| | ||||
| 000002e0  fe 29 50 49 e1 f0 a1 c6  1f 87 98 7f d5 63 b9 72  |.)PI.........c.r| | ||||
| 000002f0  f5 2f 70 a8 bc 5f 45 22  57 07 99 e1 f8 51 30 b0  |./p.._E"W....Q0.| | ||||
| 00000300  2f 6e 6d 8c b5 4a 34 02  41 05 86 7d e4 16 b2 bf  |/nm..J4.A..}....| | ||||
| 00000310  70 de 5a 69 43 6e e2 ec  a2 4f 97 b0 ae 99 07 08  |p.ZiCn...O......| | ||||
| 00000320  32 d2 9d f4 56 80 71 d7  96 94 36 59 b5 95 7f 10  |2...V.q...6Y....| | ||||
| 00000330  8a aa a5 90 db cc a3 47  02 53 b1 9e 2d c7 db bc  |.......G.S..-...| | ||||
| 00000340  58 1d b5 01 07 9c 9c 74  b5 a7 16 03 01 00 0e 0d  |X......t........| | ||||
| 00000350  00 00 06 03 01 02 40 00  00 0e 00 00 00           |......@......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0| | ||||
| 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5| | ||||
| 00000020  d9 17 30 09 06 07 2a 86  48 ce 3d 04 01 30 45 31  |..0...*.H.=..0E1| | ||||
| 00000030  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000040  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 00000050  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 00000060  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 00000070  20 4c 74 64 30 1e 17 0d  31 32 31 31 31 34 31 33  | Ltd0...12111413| | ||||
| 00000080  32 35 35 33 5a 17 0d 32  32 31 31 31 32 31 33 32  |2553Z..221112132| | ||||
| 00000090  35 35 33 5a 30 41 31 0b  30 09 06 03 55 04 06 13  |553Z0A1.0...U...| | ||||
| 000000a0  02 41 55 31 0c 30 0a 06  03 55 04 08 13 03 4e 53  |.AU1.0...U....NS| | ||||
| 000000b0  57 31 10 30 0e 06 03 55  04 07 13 07 50 79 72 6d  |W1.0...U....Pyrm| | ||||
| 000000c0  6f 6e 74 31 12 30 10 06  03 55 04 03 13 09 4a 6f  |ont1.0...U....Jo| | ||||
| 000000d0  65 6c 20 53 69 6e 67 30  81 9b 30 10 06 07 2a 86  |el Sing0..0...*.| | ||||
| 000000e0  48 ce 3d 02 01 06 05 2b  81 04 00 23 03 81 86 00  |H.=....+...#....| | ||||
| 000000f0  04 00 95 8c 91 75 14 c0  5e c4 57 b4 d4 c3 6f 8d  |.....u..^.W...o.| | ||||
| 00000100  ae 68 1e dd 6f ce 86 e1  7e 6e b2 48 3e 81 e5 4e  |.h..o...~n.H>..N| | ||||
| 00000110  e2 c6 88 4b 64 dc f5 30  bb d3 ff 65 cc 5b f4 dd  |...Kd..0...e.[..| | ||||
| 00000120  b5 6a 3e 3e d0 1d de 47  c3 76 ad 19 f6 45 2c 8c  |.j>>...G.v...E,.| | ||||
| 00000130  bc d8 1d 01 4c 1f 70 90  46 76 48 8b 8f 83 cc 4a  |....L.p.FvH....J| | ||||
| 00000140  5c 8f 40 76 da e0 89 ec  1d 2b c4 4e 30 76 28 41  |\.@v.....+.N0v(A| | ||||
| 00000150  b2 62 a8 fb 5b f1 f9 4e  7a 8d bd 09 b8 ae ea 8b  |.b..[..Nz.......| | ||||
| 00000160  18 27 4f 2e 70 fe 13 96  ba c3 d3 40 16 cd 65 4e  |.'O.p......@..eN| | ||||
| 00000170  ac 11 1e e6 f1 30 09 06  07 2a 86 48 ce 3d 04 01  |.....0...*.H.=..| | ||||
| 00000180  03 81 8c 00 30 81 88 02  42 00 e0 14 c4 60 60 0b  |....0...B....``.| | ||||
| 00000190  72 68 b0 32 5d 61 4a 02  74 5c c2 81 b9 16 a8 3f  |rh.2]aJ.t\.....?| | ||||
| 000001a0  29 c8 36 c7 81 ff 6c b6  5b d9 70 f1 38 3b 50 48  |).6...l.[.p.8;PH| | ||||
| 000001b0  28 94 cb 09 1a 52 f1 5d  ee 8d f2 b9 f0 f0 da d9  |(....R.]........| | ||||
| 000001c0  15 3a f9 bd 03 7a 87 a2  23 35 ec 02 42 01 a3 d4  |.:...z..#5..B...| | ||||
| 000001d0  8a 78 35 1c 4a 9a 23 d2  0a be 2b 10 31 9d 9c 5f  |.x5.J.#...+.1.._| | ||||
| 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.| | ||||
| 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W| | ||||
| 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..| | ||||
| 00000210  03 01 00 46 10 00 00 42  41 04 1e 18 37 ef 0d 19  |...F...BA...7...| | ||||
| 00000220  51 88 35 75 71 b5 e5 54  5b 12 2e 8f 09 67 fd a7  |Q.5uq..T[....g..| | ||||
| 00000230  24 20 3e b2 56 1c ce 97  28 5e f8 2b 2d 4f 9e f1  |$ >.V...(^.+-O..| | ||||
| 00000240  07 9f 6c 4b 5b 83 56 e2  32 42 e9 58 b6 d7 49 a6  |..lK[.V.2B.X..I.| | ||||
| 00000250  b5 68 1a 41 03 56 6b dc  5a 89 16 03 01 00 90 0f  |.h.A.Vk.Z.......| | ||||
| 00000260  00 00 8c 00 8a 30 81 87  02 42 01 0f 51 63 8f 2e  |.....0...B..Qc..| | ||||
| 00000270  fa 3a 3a 15 a9 4b 7f 04  c9 23 73 be 44 f5 28 37  |.::..K...#s.D.(7| | ||||
| 00000280  2c 00 34 20 86 e6 94 00  bf 11 40 ec de a9 54 03  |,.4 ......@...T.| | ||||
| 00000290  dc 9d 19 67 39 22 5e c4  55 3b f4 b6 9a a8 4f 6e  |...g9"^.U;....On| | ||||
| 000002a0  21 20 f0 9a 9a 10 a8 01  3a 20 ac 8b 02 41 34 ad  |! ......: ...A4.| | ||||
| 000002b0  89 da ec cc 8b b7 d7 5a  6c fe 6f 13 fa 58 40 2e  |.......Zl.o..X@.| | ||||
| 000002c0  a6 bf 32 69 97 a5 21 44  7c 3d d2 51 b3 b3 bb 9c  |..2i..!D|=.Q....| | ||||
| 000002d0  ed fa 5d bd 09 f3 c0 71  ee 3d 98 24 13 e1 e2 c8  |..]....q.=.$....| | ||||
| 000002e0  e7 75 fc ac c3 61 9a f3  47 b2 7c 97 01 99 2d 14  |.u...a..G.|...-.| | ||||
| 000002f0  03 01 00 01 01 16 03 01  00 30 d7 d1 c3 57 a3 f8  |.........0...W..| | ||||
| 00000300  71 eb 97 9d a8 ac 15 88  f4 b4 f7 e6 8c 2e eb fe  |q...............| | ||||
| 00000310  25 d1 77 82 20 06 d1 36  20 3d bc 82 ab 30 4d 85  |%.w. ..6 =...0M.| | ||||
| 00000320  1b 7b c2 9e 60 8f 7e 05  73 3e                    |.{..`.~.s>| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 7a 5e 9e 4b 7d  |..........0z^.K}| | ||||
| 00000010  44 8f 70 5f fd a9 50 a9  d8 52 cf 89 f9 b0 08 ea  |D.p_..P..R......| | ||||
| 00000020  bb a2 80 44 73 09 da 81  98 33 b1 44 88 0c ef e3  |...Ds....3.D....| | ||||
| 00000030  c6 8b 2f 28 9b e1 f7 59  26 9c 54                 |../(...Y&.T| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 20 f1 61 1b  1f 1e 91 85 c1 ce 93 38  |.... .a........8| | ||||
| 00000010  6b d0 ee c5 2e 00 f0 42  e3 a9 f0 82 92 a6 9b df  |k......B........| | ||||
| 00000020  ac 3c e3 18 aa 17 03 01  00 20 2a 72 5b 1a 57 10  |.<....... *r[.W.| | ||||
| 00000030  cb 64 c4 5f b2 2d f9 03  41 ca 8d 72 93 f7 ae 19  |.d._.-..A..r....| | ||||
| 00000040  37 3a 8c d5 f5 ad d8 83  20 9c 15 03 01 00 20 f9  |7:...... ..... .| | ||||
| 00000050  53 1a 9f 34 27 91 f1 3f  7c 33 eb 1f 5d 0e bc 89  |S..4'..?|3..]...| | ||||
| 00000060  5e 08 20 9e 5c e4 a0 70  8d 03 63 c6 9a 62 14     |^. .\..p..c..b.| | ||||
|  | @ -1,125 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 51 02 00 00  4d 03 01 8b 2e 89 18 f7  |....Q...M.......| | ||||
| 00000010  c8 0f 16 f0 81 91 e7 88  7c e8 20 a2 de 0e 28 ce  |........|. ...(.| | ||||
| 00000020  f3 12 54 68 79 ec b2 05  0b d1 74 20 bc c6 22 fd  |..Thy.....t ..".| | ||||
| 00000030  45 00 2c a6 bf 65 38 fd  2f 6e 71 9c b8 14 7a 0a  |E.,..e8./nq...z.| | ||||
| 00000040  5b 8e 71 c9 b6 32 99 41  f7 43 91 ad 00 05 00 00  |[.q..2.A.C......| | ||||
| 00000050  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 0e 0d 00  |n8P)l...........| | ||||
| 00000320  00 06 03 01 02 40 00 00  0e 00 00 00              |.....@......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0| | ||||
| 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5| | ||||
| 00000020  d9 17 30 09 06 07 2a 86  48 ce 3d 04 01 30 45 31  |..0...*.H.=..0E1| | ||||
| 00000030  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000040  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 00000050  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 00000060  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 00000070  20 4c 74 64 30 1e 17 0d  31 32 31 31 31 34 31 33  | Ltd0...12111413| | ||||
| 00000080  32 35 35 33 5a 17 0d 32  32 31 31 31 32 31 33 32  |2553Z..221112132| | ||||
| 00000090  35 35 33 5a 30 41 31 0b  30 09 06 03 55 04 06 13  |553Z0A1.0...U...| | ||||
| 000000a0  02 41 55 31 0c 30 0a 06  03 55 04 08 13 03 4e 53  |.AU1.0...U....NS| | ||||
| 000000b0  57 31 10 30 0e 06 03 55  04 07 13 07 50 79 72 6d  |W1.0...U....Pyrm| | ||||
| 000000c0  6f 6e 74 31 12 30 10 06  03 55 04 03 13 09 4a 6f  |ont1.0...U....Jo| | ||||
| 000000d0  65 6c 20 53 69 6e 67 30  81 9b 30 10 06 07 2a 86  |el Sing0..0...*.| | ||||
| 000000e0  48 ce 3d 02 01 06 05 2b  81 04 00 23 03 81 86 00  |H.=....+...#....| | ||||
| 000000f0  04 00 95 8c 91 75 14 c0  5e c4 57 b4 d4 c3 6f 8d  |.....u..^.W...o.| | ||||
| 00000100  ae 68 1e dd 6f ce 86 e1  7e 6e b2 48 3e 81 e5 4e  |.h..o...~n.H>..N| | ||||
| 00000110  e2 c6 88 4b 64 dc f5 30  bb d3 ff 65 cc 5b f4 dd  |...Kd..0...e.[..| | ||||
| 00000120  b5 6a 3e 3e d0 1d de 47  c3 76 ad 19 f6 45 2c 8c  |.j>>...G.v...E,.| | ||||
| 00000130  bc d8 1d 01 4c 1f 70 90  46 76 48 8b 8f 83 cc 4a  |....L.p.FvH....J| | ||||
| 00000140  5c 8f 40 76 da e0 89 ec  1d 2b c4 4e 30 76 28 41  |\.@v.....+.N0v(A| | ||||
| 00000150  b2 62 a8 fb 5b f1 f9 4e  7a 8d bd 09 b8 ae ea 8b  |.b..[..Nz.......| | ||||
| 00000160  18 27 4f 2e 70 fe 13 96  ba c3 d3 40 16 cd 65 4e  |.'O.p......@..eN| | ||||
| 00000170  ac 11 1e e6 f1 30 09 06  07 2a 86 48 ce 3d 04 01  |.....0...*.H.=..| | ||||
| 00000180  03 81 8c 00 30 81 88 02  42 00 e0 14 c4 60 60 0b  |....0...B....``.| | ||||
| 00000190  72 68 b0 32 5d 61 4a 02  74 5c c2 81 b9 16 a8 3f  |rh.2]aJ.t\.....?| | ||||
| 000001a0  29 c8 36 c7 81 ff 6c b6  5b d9 70 f1 38 3b 50 48  |).6...l.[.p.8;PH| | ||||
| 000001b0  28 94 cb 09 1a 52 f1 5d  ee 8d f2 b9 f0 f0 da d9  |(....R.]........| | ||||
| 000001c0  15 3a f9 bd 03 7a 87 a2  23 35 ec 02 42 01 a3 d4  |.:...z..#5..B...| | ||||
| 000001d0  8a 78 35 1c 4a 9a 23 d2  0a be 2b 10 31 9d 9c 5f  |.x5.J.#...+.1.._| | ||||
| 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.| | ||||
| 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W| | ||||
| 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..| | ||||
| 00000210  03 01 00 86 10 00 00 82  00 80 6d 51 f3 7f f9 3e  |..........mQ...>| | ||||
| 00000220  fb 75 82 41 36 83 e8 6a  ee 2a 2e 25 90 67 4c 8e  |.u.A6..j.*.%.gL.| | ||||
| 00000230  62 2f 30 81 17 e0 85 09  0c 2b b7 23 d7 b0 e2 1d  |b/0......+.#....| | ||||
| 00000240  f7 3b d7 f5 a1 27 b6 ee  24 b6 1b cc 5b ea 66 0d  |.;...'..$...[.f.| | ||||
| 00000250  6a f4 e5 85 f9 da 43 b4  0e 86 85 e1 f5 aa be c8  |j.....C.........| | ||||
| 00000260  ce 39 4c 9c 86 00 08 c2  4b e2 c6 ec 2f f7 ce e6  |.9L.....K.../...| | ||||
| 00000270  bd 77 82 6f 23 b6 e0 bd  a2 92 b7 3a ac e8 56 f1  |.w.o#......:..V.| | ||||
| 00000280  af 54 5e 46 87 e9 3b 33  e7 b8 28 b7 d6 c8 90 35  |.T^F..;3..(....5| | ||||
| 00000290  d4 1c 43 d1 30 6f 55 4e  0a 70 16 03 01 00 90 0f  |..C.0oUN.p......| | ||||
| 000002a0  00 00 8c 00 8a 30 81 87  02 41 59 10 98 e1 27 39  |.....0...AY...'9| | ||||
| 000002b0  62 42 32 98 8d 04 14 6a  95 27 b0 3b 62 46 f3 8e  |bB2....j.'.;bF..| | ||||
| 000002c0  5a 86 28 4f 3d a8 49 44  85 d8 8d 02 15 52 72 4f  |Z.(O=.ID.....RrO| | ||||
| 000002d0  87 4c 16 73 98 f6 6f 93  bb 9a c3 11 be 7f 35 81  |.L.s..o.......5.| | ||||
| 000002e0  52 9f 17 6e 10 5e 33 ad  c9 24 ad 02 42 01 c3 cb  |R..n.^3..$..B...| | ||||
| 000002f0  e7 4f a9 c5 b1 5f ab c7  d2 42 92 05 a0 9b ca a6  |.O..._...B......| | ||||
| 00000300  33 ad 5c bd 22 94 c2 f7  d3 b4 3a 25 ae b4 bc c4  |3.\.".....:%....| | ||||
| 00000310  f3 b6 38 8a a2 aa e7 e8  55 d9 8a 32 1f c7 05 a0  |..8.....U..2....| | ||||
| 00000320  55 58 46 aa 78 37 d8 c6  57 bc 9b 2a 31 b4 15 14  |UXF.x7..W..*1...| | ||||
| 00000330  03 01 00 01 01 16 03 01  00 24 fd 98 09 ef 50 d2  |.........$....P.| | ||||
| 00000340  a5 90 9c 55 eb aa 67 33  24 a3 1e db 4b 2e 6b cb  |...U..g3$...K.k.| | ||||
| 00000350  b5 17 8b c0 c1 2e a6 c6  49 7d 84 0c d7 96        |........I}....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 24 b3 e4 bb 70 4b  |..........$...pK| | ||||
| 00000010  21 71 de 80 27 48 7f 15  60 23 65 a5 3f 94 b3 e7  |!q..'H..`#e.?...| | ||||
| 00000020  91 3a fe 4c 70 60 22 6c  67 ca 85 85 23 f4 83     |.:.Lp`"lg...#..| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 1a d6 19 a3  b8 82 ff dc 69 4f ee 36  |............iO.6| | ||||
| 00000010  2b 95 c8 c0 e6 d8 84 ea  e7 d9 40 39 10 ba 33 15  |+.........@9..3.| | ||||
| 00000020  03 01 00 16 85 1b 41 3b  e8 71 07 3c 6e 9f b9 e0  |......A;.q.<n...| | ||||
| 00000030  0d 67 77 d8 b2 84 9f 76  05 9e                    |.gw....v..| | ||||
|  | @ -1,128 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 59 02 00 00  55 03 01 60 fd 2a c3 90  |....Y...U..`.*..| | ||||
| 00000010  e3 1d e7 96 4a e7 2c d3  c7 35 80 67 7f 7e 57 8f  |....J.,..5.g.~W.| | ||||
| 00000020  f1 9c 65 35 36 cd e3 98  ae ed 1e 20 58 3f 0d 2f  |..e56...... X?./| | ||||
| 00000030  77 10 eb 1a b6 03 96 09  f3 6d 22 9f 4b 96 21 06  |w........m".K.!.| | ||||
| 00000040  84 d2 da 9a 14 09 b4 d8  be 62 45 91 c0 09 00 00  |.........bE.....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  01 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 01 00 d5 0c 00  00 d1 03 00 17 41 04 b2  |*............A..| | ||||
| 00000280  dd fb 15 7b ac 21 6d 89  5f 18 69 18 d7 b2 ef f7  |...{.!m._.i.....| | ||||
| 00000290  b6 83 99 2d 06 98 38 72  5b 58 b6 6d 09 d3 00 2e  |...-..8r[X.m....| | ||||
| 000002a0  a0 06 02 46 4d c6 d0 1f  a8 cb c9 74 7e e1 1e 0d  |...FM......t~...| | ||||
| 000002b0  f4 36 2b 38 b7 ab 29 bd  39 73 a8 b8 55 2a b1 00  |.6+8..).9s..U*..| | ||||
| 000002c0  8a 30 81 87 02 41 7d 26  e5 9f 73 c4 eb ea d7 59  |.0...A}&..s....Y| | ||||
| 000002d0  ab b8 7a b9 b7 f6 70 6d  9e 8b a6 4a c2 fc 73 5a  |..z...pm...J..sZ| | ||||
| 000002e0  78 2c 27 ef ff 52 91 4a  74 12 43 2f 49 d7 55 18  |x,'..R.Jt.C/I.U.| | ||||
| 000002f0  9f 72 c6 a6 25 0a 2a 94  47 5d 66 08 13 e8 ef af  |.r..%.*.G]f.....| | ||||
| 00000300  df 12 fa 70 91 86 87 02  42 00 dc 98 50 24 fa 27  |...p....B...P$.'| | ||||
| 00000310  95 cb 01 c1 ee e9 18 7e  5b b0 b1 e3 f9 e2 56 ff  |.......~[.....V.| | ||||
| 00000320  d7 d7 41 f3 f1 b1 28 1f  a1 19 62 29 74 1d 0e 4d  |..A...(...b)t..M| | ||||
| 00000330  57 3f 99 50 c6 a8 78 57  4d 36 1a 42 6b 64 1c 14  |W?.P..xWM6.Bkd..| | ||||
| 00000340  e8 36 c6 a8 cc f7 75 f7  f7 7d c9 16 03 01 00 0e  |.6....u..}......| | ||||
| 00000350  0d 00 00 06 03 01 02 40  00 00 0e 00 00 00        |.......@......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 01 fb 0b 00 01  f7 00 01 f4 00 01 f1 30  |...............0| | ||||
| 00000010  82 01 ed 30 82 01 58 a0  03 02 01 02 02 01 00 30  |...0..X........0| | ||||
| 00000020  0b 06 09 2a 86 48 86 f7  0d 01 01 05 30 26 31 10  |...*.H......0&1.| | ||||
| 00000030  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 00000040  31 12 30 10 06 03 55 04  03 13 09 31 32 37 2e 30  |1.0...U....127.0| | ||||
| 00000050  2e 30 2e 31 30 1e 17 0d  31 31 31 32 30 38 30 37  |.0.10...11120807| | ||||
| 00000060  35 35 31 32 5a 17 0d 31  32 31 32 30 37 30 38 30  |5512Z..121207080| | ||||
| 00000070  30 31 32 5a 30 26 31 10  30 0e 06 03 55 04 0a 13  |012Z0&1.0...U...| | ||||
| 00000080  07 41 63 6d 65 20 43 6f  31 12 30 10 06 03 55 04  |.Acme Co1.0...U.| | ||||
| 00000090  03 13 09 31 32 37 2e 30  2e 30 2e 31 30 81 9c 30  |...127.0.0.10..0| | ||||
| 000000a0  0b 06 09 2a 86 48 86 f7  0d 01 01 01 03 81 8c 00  |...*.H..........| | ||||
| 000000b0  30 81 88 02 81 80 4e d0  7b 31 e3 82 64 d9 59 c0  |0.....N.{1..d.Y.| | ||||
| 000000c0  c2 87 a4 5e 1e 8b 73 33  c7 63 53 df 66 92 06 84  |...^..s3.cS.f...| | ||||
| 000000d0  f6 64 d5 8f e4 36 a7 1d  2b e8 b3 20 36 45 23 b5  |.d...6..+.. 6E#.| | ||||
| 000000e0  e3 95 ae ed e0 f5 20 9c  8d 95 df 7f 5a 12 ef 87  |...... .....Z...| | ||||
| 000000f0  e4 5b 68 e4 e9 0e 74 ec  04 8a 7f de 93 27 c4 01  |.[h...t......'..| | ||||
| 00000100  19 7a bd f2 dc 3d 14 ab  d0 54 ca 21 0c d0 4d 6e  |.z...=...T.!..Mn| | ||||
| 00000110  87 2e 5c c5 d2 bb 4d 4b  4f ce b6 2c f7 7e 88 ec  |..\...MKO..,.~..| | ||||
| 00000120  7c d7 02 91 74 a6 1e 0c  1a da e3 4a 5a 2e de 13  ||...t......JZ...| | ||||
| 00000130  9c 4c 40 88 59 93 02 03  01 00 01 a3 32 30 30 30  |.L@.Y.......2000| | ||||
| 00000140  0e 06 03 55 1d 0f 01 01  ff 04 04 03 02 00 a0 30  |...U...........0| | ||||
| 00000150  0d 06 03 55 1d 0e 04 06  04 04 01 02 03 04 30 0f  |...U..........0.| | ||||
| 00000160  06 03 55 1d 23 04 08 30  06 80 04 01 02 03 04 30  |..U.#..0.......0| | ||||
| 00000170  0b 06 09 2a 86 48 86 f7  0d 01 01 05 03 81 81 00  |...*.H..........| | ||||
| 00000180  36 1f b3 7a 0c 75 c9 6e  37 46 61 2b d5 bd c0 a7  |6..z.u.n7Fa+....| | ||||
| 00000190  4b cc 46 9a 81 58 7c 85  79 29 c8 c8 c6 67 dd 32  |K.F..X|.y)...g.2| | ||||
| 000001a0  56 45 2b 75 b6 e9 24 a9  50 9a be 1f 5a fa 1a 15  |VE+u..$.P...Z...| | ||||
| 000001b0  d9 cc 55 95 72 16 83 b9  c2 b6 8f fd 88 8c 38 84  |..U.r.........8.| | ||||
| 000001c0  1d ab 5d 92 31 13 4f fd  83 3b c6 9d f1 11 62 b6  |..].1.O..;....b.| | ||||
| 000001d0  8b ec ab 67 be c8 64 b0  11 50 46 58 17 6b 99 1c  |...g..d..PFX.k..| | ||||
| 000001e0  d3 1d fc 06 f1 0e e5 96  a8 0c f9 78 20 b7 44 18  |...........x .D.| | ||||
| 000001f0  51 8d 10 7e 4f 94 67 df  a3 4e 70 73 8e 90 91 85  |Q..~O.g..Nps....| | ||||
| 00000200  16 03 01 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000210  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000220  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000230  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000240  a6 b5 68 1a 41 03 56 6b  dc 5a 89 16 03 01 00 86  |..h.A.Vk.Z......| | ||||
| 00000250  0f 00 00 82 00 80 1c 5e  19 d9 f9 4f 97 8d 92 a5  |.......^...O....| | ||||
| 00000260  73 87 be 46 df 6b 39 be  2c f2 13 73 da a4 04 47  |s..F.k9.,..s...G| | ||||
| 00000270  44 11 72 6f ea a9 2d ea  fc 6a aa e4 e5 85 d3 60  |D.ro..-..j.....`| | ||||
| 00000280  3c aa 2f 81 dd bc 4f 7b  bb 77 58 f7 78 15 6f 21  |<./...O{.wX.x.o!| | ||||
| 00000290  7c c4 bb 95 af 85 49 ab  3f 68 cf bd 18 be e1 3e  ||.....I.?h.....>| | ||||
| 000002a0  9e 59 64 47 39 37 d5 cf  ba 84 44 2a 4b 8b 2d cb  |.YdG97....D*K.-.| | ||||
| 000002b0  36 24 87 c4 c5 ba 96 91  b2 b3 d0 30 87 b3 7e 2d  |6$.........0..~-| | ||||
| 000002c0  8f 51 0e 47 af c6 0c 33  48 fd 37 d8 bb f2 95 2c  |.Q.G...3H.7....,| | ||||
| 000002d0  72 ca c6 3c ab 8d 14 03  01 00 01 01 16 03 01 00  |r..<............| | ||||
| 000002e0  30 52 e6 b2 ba 4c be e7  e9 ad bf 9b 86 2d fb 90  |0R...L.......-..| | ||||
| 000002f0  1c 90 86 55 7e 3e 75 63  df 38 54 d6 20 25 37 ae  |...U~>uc.8T. %7.| | ||||
| 00000300  ab 4f ab 85 84 03 61 f7  eb 56 bd 1a 17 f3 da f6  |.O....a..V......| | ||||
| 00000310  6d                                                |m| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 ae 6b 02 f3 d5  |..........0.k...| | ||||
| 00000010  ff 91 fb 05 87 22 c6 f7  ac a8 83 d8 2a 10 89 69  |....."......*..i| | ||||
| 00000020  e8 16 83 a9 5c 64 14 d2  15 40 94 ac 14 15 8f 75  |....\d...@.....u| | ||||
| 00000030  27 19 a7 75 e9 8d e7 48  8b 62 0c                 |'..u...H.b.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 20 09 0e f5  bb d9 7a 54 db 9e e6 22  |.... .....zT..."| | ||||
| 00000010  ea 9d 98 7e e6 af ba b1  dc c3 55 ad cc 4a f0 fa  |...~......U..J..| | ||||
| 00000020  0d 3a 9f 49 80 17 03 01  00 20 d0 96 b0 1d 37 42  |.:.I..... ....7B| | ||||
| 00000030  0d 03 64 1d 87 24 84 ff  f1 62 28 e3 6b 86 a1 54  |..d..$...b(.k..T| | ||||
| 00000040  f2 65 5e ae 01 db 59 77  b1 c3 15 03 01 00 20 a0  |.e^...Yw...... .| | ||||
| 00000050  88 b0 60 07 a6 05 13 dd  cd f4 7c e7 57 09 b1 98  |..`.......|.W...| | ||||
| 00000060  bf b1 93 f1 02 cb 86 67  36 c5 e2 a8 81 c8 8f     |.......g6......| | ||||
|  | @ -1,124 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 51 02 00 00  4d 03 01 ba 22 84 d4 ec  |....Q...M..."...| | ||||
| 00000010  cb 49 cc 28 17 ea 00 19  6f 89 6f 4a c7 36 32 f2  |.I.(....o.oJ.62.| | ||||
| 00000020  db da de 60 a7 93 b9 4e  64 9e ee 20 48 76 9f d5  |...`...Nd.. Hv..| | ||||
| 00000030  c9 8a 74 95 ef 4b 7c 92  fd da 04 88 76 d3 6f 5a  |..t..K|.....v.oZ| | ||||
| 00000040  b5 7f fa f3 3a d0 c3 b2  b1 19 09 a6 00 05 00 00  |....:...........| | ||||
| 00000050  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 0e 0d 00  |n8P)l...........| | ||||
| 00000320  00 06 03 01 02 40 00 00  0e 00 00 00              |.....@......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 01 fb 0b 00 01  f7 00 01 f4 00 01 f1 30  |...............0| | ||||
| 00000010  82 01 ed 30 82 01 58 a0  03 02 01 02 02 01 00 30  |...0..X........0| | ||||
| 00000020  0b 06 09 2a 86 48 86 f7  0d 01 01 05 30 26 31 10  |...*.H......0&1.| | ||||
| 00000030  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 00000040  31 12 30 10 06 03 55 04  03 13 09 31 32 37 2e 30  |1.0...U....127.0| | ||||
| 00000050  2e 30 2e 31 30 1e 17 0d  31 31 31 32 30 38 30 37  |.0.10...11120807| | ||||
| 00000060  35 35 31 32 5a 17 0d 31  32 31 32 30 37 30 38 30  |5512Z..121207080| | ||||
| 00000070  30 31 32 5a 30 26 31 10  30 0e 06 03 55 04 0a 13  |012Z0&1.0...U...| | ||||
| 00000080  07 41 63 6d 65 20 43 6f  31 12 30 10 06 03 55 04  |.Acme Co1.0...U.| | ||||
| 00000090  03 13 09 31 32 37 2e 30  2e 30 2e 31 30 81 9c 30  |...127.0.0.10..0| | ||||
| 000000a0  0b 06 09 2a 86 48 86 f7  0d 01 01 01 03 81 8c 00  |...*.H..........| | ||||
| 000000b0  30 81 88 02 81 80 4e d0  7b 31 e3 82 64 d9 59 c0  |0.....N.{1..d.Y.| | ||||
| 000000c0  c2 87 a4 5e 1e 8b 73 33  c7 63 53 df 66 92 06 84  |...^..s3.cS.f...| | ||||
| 000000d0  f6 64 d5 8f e4 36 a7 1d  2b e8 b3 20 36 45 23 b5  |.d...6..+.. 6E#.| | ||||
| 000000e0  e3 95 ae ed e0 f5 20 9c  8d 95 df 7f 5a 12 ef 87  |...... .....Z...| | ||||
| 000000f0  e4 5b 68 e4 e9 0e 74 ec  04 8a 7f de 93 27 c4 01  |.[h...t......'..| | ||||
| 00000100  19 7a bd f2 dc 3d 14 ab  d0 54 ca 21 0c d0 4d 6e  |.z...=...T.!..Mn| | ||||
| 00000110  87 2e 5c c5 d2 bb 4d 4b  4f ce b6 2c f7 7e 88 ec  |..\...MKO..,.~..| | ||||
| 00000120  7c d7 02 91 74 a6 1e 0c  1a da e3 4a 5a 2e de 13  ||...t......JZ...| | ||||
| 00000130  9c 4c 40 88 59 93 02 03  01 00 01 a3 32 30 30 30  |.L@.Y.......2000| | ||||
| 00000140  0e 06 03 55 1d 0f 01 01  ff 04 04 03 02 00 a0 30  |...U...........0| | ||||
| 00000150  0d 06 03 55 1d 0e 04 06  04 04 01 02 03 04 30 0f  |...U..........0.| | ||||
| 00000160  06 03 55 1d 23 04 08 30  06 80 04 01 02 03 04 30  |..U.#..0.......0| | ||||
| 00000170  0b 06 09 2a 86 48 86 f7  0d 01 01 05 03 81 81 00  |...*.H..........| | ||||
| 00000180  36 1f b3 7a 0c 75 c9 6e  37 46 61 2b d5 bd c0 a7  |6..z.u.n7Fa+....| | ||||
| 00000190  4b cc 46 9a 81 58 7c 85  79 29 c8 c8 c6 67 dd 32  |K.F..X|.y)...g.2| | ||||
| 000001a0  56 45 2b 75 b6 e9 24 a9  50 9a be 1f 5a fa 1a 15  |VE+u..$.P...Z...| | ||||
| 000001b0  d9 cc 55 95 72 16 83 b9  c2 b6 8f fd 88 8c 38 84  |..U.r.........8.| | ||||
| 000001c0  1d ab 5d 92 31 13 4f fd  83 3b c6 9d f1 11 62 b6  |..].1.O..;....b.| | ||||
| 000001d0  8b ec ab 67 be c8 64 b0  11 50 46 58 17 6b 99 1c  |...g..d..PFX.k..| | ||||
| 000001e0  d3 1d fc 06 f1 0e e5 96  a8 0c f9 78 20 b7 44 18  |...........x .D.| | ||||
| 000001f0  51 8d 10 7e 4f 94 67 df  a3 4e 70 73 8e 90 91 85  |Q..~O.g..Nps....| | ||||
| 00000200  16 03 01 00 86 10 00 00  82 00 80 6d 51 f3 7f f9  |...........mQ...| | ||||
| 00000210  3e fb 75 82 41 36 83 e8  6a ee 2a 2e 25 90 67 4c  |>.u.A6..j.*.%.gL| | ||||
| 00000220  8e 62 2f 30 81 17 e0 85  09 0c 2b b7 23 d7 b0 e2  |.b/0......+.#...| | ||||
| 00000230  1d f7 3b d7 f5 a1 27 b6  ee 24 b6 1b cc 5b ea 66  |..;...'..$...[.f| | ||||
| 00000240  0d 6a f4 e5 85 f9 da 43  b4 0e 86 85 e1 f5 aa be  |.j.....C........| | ||||
| 00000250  c8 ce 39 4c 9c 86 00 08  c2 4b e2 c6 ec 2f f7 ce  |..9L.....K.../..| | ||||
| 00000260  e6 bd 77 82 6f 23 b6 e0  bd a2 92 b7 3a ac e8 56  |..w.o#......:..V| | ||||
| 00000270  f1 af 54 5e 46 87 e9 3b  33 e7 b8 28 b7 d6 c8 90  |..T^F..;3..(....| | ||||
| 00000280  35 d4 1c 43 d1 30 6f 55  4e 0a 70 16 03 01 00 86  |5..C.0oUN.p.....| | ||||
| 00000290  0f 00 00 82 00 80 20 f0  61 14 6c 45 b1 29 c0 56  |...... .a.lE.).V| | ||||
| 000002a0  9d 26 45 01 50 d5 56 04  6d cd 66 79 81 e0 cf 5c  |.&E.P.V.m.fy...\| | ||||
| 000002b0  ee bc 39 f0 a1 a1 3a 43  9d 1f 8f a2 52 6e 5c 77  |..9...:C....Rn\w| | ||||
| 000002c0  90 2e b3 56 37 ec 78 bd  79 53 a2 a4 8e 7d 49 13  |...V7.x.yS...}I.| | ||||
| 000002d0  3a cb 88 0c d4 d8 9d d9  33 ef 47 dd d8 08 64 4a  |:.......3.G...dJ| | ||||
| 000002e0  69 33 84 c4 c4 78 59 6b  84 50 70 2c d9 f8 8a 39  |i3...xYk.Pp,...9| | ||||
| 000002f0  37 78 3c b4 c3 70 73 8d  ff aa be 8e 93 54 05 7d  |7x<..ps......T.}| | ||||
| 00000300  a2 cd 8b ef 8c 8c 64 7a  b3 2a af 3e 20 67 a1 7b  |......dz.*.> g.{| | ||||
| 00000310  a3 07 3b f1 d3 88 14 03  01 00 01 01 16 03 01 00  |..;.............| | ||||
| 00000320  24 93 a0 0a 95 c2 ee 2c  4b 92 f2 09 e0 a6 80 c8  |$......,K.......| | ||||
| 00000330  95 fb b1 ef a0 41 bb 27  e6 ad c9 d2 11 29 8a e4  |.....A.'.....)..| | ||||
| 00000340  1e 9a d6 92 2b                                    |....+| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 24 a4 54 34 b8 11  |..........$.T4..| | ||||
| 00000010  2b ad bc 55 7d 8b 71 e3  c5 7a a1 9b 0b 7f c3 48  |+..U}.q..z.....H| | ||||
| 00000020  69 32 5a 8d 0a f4 43 a0  c6 b7 e8 7d a4 f4 62     |i2Z...C....}..b| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 1a 26 c4 9a  35 54 80 41 f6 28 6b 0e  |.....&..5T.A.(k.| | ||||
| 00000010  d9 e2 3d 37 ad fa db 91  3b fc 1b 5b 82 da 72 15  |..=7....;..[..r.| | ||||
| 00000020  03 01 00 16 99 b3 54 b5  20 f4 3e bf e2 00 0e 4e  |......T. .>....N| | ||||
| 00000030  2a 1e 37 55 56 c2 3b 30  62 20                    |*.7UV.;0b | | ||||
|  | @ -1,87 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 59 02 00 00  55 03 01 49 fe 00 1f fb  |....Y...U..I....| | ||||
| 00000010  be ed 3e 36 55 b8 01 4b  a0 ea 7f e4 0e db 8a d0  |..>6U..K........| | ||||
| 00000020  70 b3 0f 51 47 f3 d6 bd  1f f0 fa 20 60 0c b2 85  |p..QG...... `...| | ||||
| 00000030  e3 f3 b9 90 25 e5 35 d2  9a 75 31 86 d6 7e 6c b6  |....%.5..u1..~l.| | ||||
| 00000040  75 96 1c 35 54 10 3a 79  85 7d 3c ce c0 09 00 00  |u..5T.:y.}<.....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  01 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 01 00 d5 0c 00  00 d1 03 00 17 41 04 f3  |*............A..| | ||||
| 00000280  35 bb 79 ff 75 d2 57 d2  e8 8f ac b5 4b 39 ae fa  |5.y.u.W.....K9..| | ||||
| 00000290  d4 22 b0 74 57 c3 55 aa  cd 26 b8 e0 8c f9 35 85  |.".tW.U..&....5.| | ||||
| 000002a0  da 55 95 e0 cd e1 49 2c  ff 4b 20 de 88 de c2 4c  |.U....I,.K ....L| | ||||
| 000002b0  36 e3 ca c6 69 cc 04 c6  ca 99 52 60 7f b4 cb 00  |6...i.....R`....| | ||||
| 000002c0  8a 30 81 87 02 42 01 e0  54 72 b0 6b 7e 33 73 68  |.0...B..Tr.k~3sh| | ||||
| 000002d0  8f 3f 81 4b c5 4c a7 bd  78 01 f4 15 54 1a 23 3a  |.?.K.L..x...T.#:| | ||||
| 000002e0  dd 58 90 a9 27 5d b0 06  fa e5 b8 e7 f5 aa e8 0a  |.X..']..........| | ||||
| 000002f0  fe 16 14 5e b8 0d 13 9e  8f 5a 29 a8 e2 c4 fd 34  |...^.....Z)....4| | ||||
| 00000300  78 89 44 42 24 98 d9 24  02 41 2a b0 f6 1a f8 9d  |x.DB$..$.A*.....| | ||||
| 00000310  60 8a 5f 3e f2 d4 cd bd  d2 73 6f 83 cf b4 87 1d  |`._>.....so.....| | ||||
| 00000320  29 e5 e2 f0 d5 0c 49 96  82 2f bf ce ab b2 bd e7  |).....I../......| | ||||
| 00000330  6a ab 1b fe 1a 32 94 43  55 5c b1 76 61 e4 00 c1  |j....2.CU\.va...| | ||||
| 00000340  f3 cf b2 74 fe b6 a1 ac  f8 1f 11 16 03 01 00 04  |...t............| | ||||
| 00000350  0e 00 00 00                                       |....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 01 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 01 00 30 fd 33  1e 7c cb c1 58 78 d3 ab  |.....0.3.|..Xx..| | ||||
| 00000060  d9 a0 1b d8 d2 e6 1d ff  f0 4e 07 9f e5 dc eb be  |.........N......| | ||||
| 00000070  b9 49 b6 d9 26 53 96 c4  70 f1 ea 01 ec c9 49 2f  |.I..&S..p.....I/| | ||||
| 00000080  63 9e ed c1 d3 16                                 |c.....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 b9 bc fb cc 21  |..........0....!| | ||||
| 00000010  b7 06 cd 88 a4 f5 36 c9  ef 0a 77 fe 11 25 30 83  |......6...w..%0.| | ||||
| 00000020  a7 34 9b 1e bb 67 80 89  3c 43 a9 4d b6 70 fd cf  |.4...g..<C.M.p..| | ||||
| 00000030  f6 86 7e ba 09 26 19 2f  25 9e 3a                 |..~..&./%.:| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 20 aa 90 92  5c a6 07 91 99 3e 54 0b  |.... ...\....>T.| | ||||
| 00000010  dd 9c 59 4a 9e 91 f9 4f  e4 fb 14 9e 65 18 ef 1a  |..YJ...O....e...| | ||||
| 00000020  8c ad a7 d4 b9 17 03 01  00 20 d7 73 8a 1a fe cb  |......... .s....| | ||||
| 00000030  fd f7 fc 3e 03 5e 2f 03  97 12 a2 a9 31 df e4 76  |...>.^/.....1..v| | ||||
| 00000040  88 c4 32 5a 90 6e bb 40  49 5c 15 03 01 00 20 c1  |..2Z.n.@I\.... .| | ||||
| 00000050  92 ce bd 9e 23 50 8e da  96 d4 98 98 bc 18 e6 e7  |....#P..........| | ||||
| 00000060  33 74 be 8b b7 d8 d4 19  62 1d e8 f1 4c fd 1c     |3t......b...L..| | ||||
|  | @ -1,97 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 59 02 00 00  55 03 01 52 5c cd ba 77  |....Y...U..R\..w| | ||||
| 00000010  cd 8e 48 de c2 b6 d7 eb  88 c2 e3 b3 8e fd 36 37  |..H...........67| | ||||
| 00000020  71 c6 79 43 89 13 48 99  98 dc 78 20 cd 26 72 7b  |q.yC..H...x .&r{| | ||||
| 00000030  84 c3 dd 55 e3 83 99 af  da 65 a7 5f 10 ef 8b 3a  |...U.....e._...:| | ||||
| 00000040  4c 59 7b 11 d6 6a 61 68  d6 20 3c 3e c0 13 00 00  |LY{..jah. <>....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  01 02 be 0b 00 02 ba 00  02 b7 00 02 b4 30 82 02  |.............0..| | ||||
| 00000070  b0 30 82 02 19 a0 03 02  01 02 02 09 00 85 b0 bb  |.0..............| | ||||
| 00000080  a4 8a 7f b8 ca 30 0d 06  09 2a 86 48 86 f7 0d 01  |.....0...*.H....| | ||||
| 00000090  01 05 05 00 30 45 31 0b  30 09 06 03 55 04 06 13  |....0E1.0...U...| | ||||
| 000000a0  02 41 55 31 13 30 11 06  03 55 04 08 13 0a 53 6f  |.AU1.0...U....So| | ||||
| 000000b0  6d 65 2d 53 74 61 74 65  31 21 30 1f 06 03 55 04  |me-State1!0...U.| | ||||
| 000000c0  0a 13 18 49 6e 74 65 72  6e 65 74 20 57 69 64 67  |...Internet Widg| | ||||
| 000000d0  69 74 73 20 50 74 79 20  4c 74 64 30 1e 17 0d 31  |its Pty Ltd0...1| | ||||
| 000000e0  30 30 34 32 34 30 39 30  39 33 38 5a 17 0d 31 31  |00424090938Z..11| | ||||
| 000000f0  30 34 32 34 30 39 30 39  33 38 5a 30 45 31 0b 30  |0424090938Z0E1.0| | ||||
| 00000100  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 00000110  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 00000120  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 00000130  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 00000140  74 64 30 81 9f 30 0d 06  09 2a 86 48 86 f7 0d 01  |td0..0...*.H....| | ||||
| 00000150  01 01 05 00 03 81 8d 00  30 81 89 02 81 81 00 bb  |........0.......| | ||||
| 00000160  79 d6 f5 17 b5 e5 bf 46  10 d0 dc 69 be e6 2b 07  |y......F...i..+.| | ||||
| 00000170  43 5a d0 03 2d 8a 7a 43  85 b7 14 52 e7 a5 65 4c  |CZ..-.zC...R..eL| | ||||
| 00000180  2c 78 b8 23 8c b5 b4 82  e5 de 1f 95 3b 7e 62 a5  |,x.#........;~b.| | ||||
| 00000190  2c a5 33 d6 fe 12 5c 7a  56 fc f5 06 bf fa 58 7b  |,.3...\zV.....X{| | ||||
| 000001a0  26 3f b5 cd 04 d3 d0 c9  21 96 4a c7 f4 54 9f 5a  |&?......!.J..T.Z| | ||||
| 000001b0  bf ef 42 71 00 fe 18 99  07 7f 7e 88 7d 7d f1 04  |..Bq......~.}}..| | ||||
| 000001c0  39 c4 a2 2e db 51 c9 7c  e3 c0 4c 3b 32 66 01 cf  |9....Q.|..L;2f..| | ||||
| 000001d0  af b1 1d b8 71 9a 1d db  db 89 6b ae da 2d 79 02  |....q.....k..-y.| | ||||
| 000001e0  03 01 00 01 a3 81 a7 30  81 a4 30 1d 06 03 55 1d  |.......0..0...U.| | ||||
| 000001f0  0e 04 16 04 14 b1 ad e2  85 5a cf cb 28 db 69 ce  |.........Z..(.i.| | ||||
| 00000200  23 69 de d3 26 8e 18 88  39 30 75 06 03 55 1d 23  |#i..&...90u..U.#| | ||||
| 00000210  04 6e 30 6c 80 14 b1 ad  e2 85 5a cf cb 28 db 69  |.n0l......Z..(.i| | ||||
| 00000220  ce 23 69 de d3 26 8e 18  88 39 a1 49 a4 47 30 45  |.#i..&...9.I.G0E| | ||||
| 00000230  31 0b 30 09 06 03 55 04  06 13 02 41 55 31 13 30  |1.0...U....AU1.0| | ||||
| 00000240  11 06 03 55 04 08 13 0a  53 6f 6d 65 2d 53 74 61  |...U....Some-Sta| | ||||
| 00000250  74 65 31 21 30 1f 06 03  55 04 0a 13 18 49 6e 74  |te1!0...U....Int| | ||||
| 00000260  65 72 6e 65 74 20 57 69  64 67 69 74 73 20 50 74  |ernet Widgits Pt| | ||||
| 00000270  79 20 4c 74 64 82 09 00  85 b0 bb a4 8a 7f b8 ca  |y Ltd...........| | ||||
| 00000280  30 0c 06 03 55 1d 13 04  05 30 03 01 01 ff 30 0d  |0...U....0....0.| | ||||
| 00000290  06 09 2a 86 48 86 f7 0d  01 01 05 05 00 03 81 81  |..*.H...........| | ||||
| 000002a0  00 08 6c 45 24 c7 6b b1  59 ab 0c 52 cc f2 b0 14  |..lE$.k.Y..R....| | ||||
| 000002b0  d7 87 9d 7a 64 75 b5 5a  95 66 e4 c5 2b 8e ae 12  |...zdu.Z.f..+...| | ||||
| 000002c0  66 1f eb 4f 38 b3 6e 60  d3 92 fd f7 41 08 b5 25  |f..O8.n`....A..%| | ||||
| 000002d0  13 b1 18 7a 24 fb 30 1d  ba ed 98 b9 17 ec e7 d7  |...z$.0.........| | ||||
| 000002e0  31 59 db 95 d3 1d 78 ea  50 56 5c d5 82 5a 2d 5a  |1Y....x.PV\..Z-Z| | ||||
| 000002f0  5f 33 c4 b6 d8 c9 75 90  96 8c 0f 52 98 b5 cd 98  |_3....u....R....| | ||||
| 00000300  1f 89 20 5f f2 a0 1c a3  1b 96 94 dd a9 fd 57 e9  |.. _..........W.| | ||||
| 00000310  70 e8 26 6d 71 99 9b 26  6e 38 50 29 6c 90 a7 bd  |p.&mq..&n8P)l...| | ||||
| 00000320  d9 16 03 01 00 cb 0c 00  00 c7 03 00 17 41 04 25  |.............A.%| | ||||
| 00000330  0b 65 90 de 1c eb d0 7c  fe cb 71 2c 62 dd f9 7c  |.e.....|..q,b..|| | ||||
| 00000340  bd bc f5 bd a9 79 df a1  38 36 2a 98 7b 5d ce 17  |.....y..86*.{]..| | ||||
| 00000350  67 a7 71 b9 9e 0a f2 02  f4 f3 19 a6 96 bc 53 45  |g.q...........SE| | ||||
| 00000360  2e e0 df f1 e6 50 8b a2  36 a1 e9 59 1e d2 8f 00  |.....P..6..Y....| | ||||
| 00000370  80 5a c1 19 13 94 5e ee  89 33 4a 22 e6 5d fa bc  |.Z....^..3J".]..| | ||||
| 00000380  78 20 f2 5d 73 39 c9 84  1f e0 de 77 99 72 2b 77  |x .]s9.....w.r+w| | ||||
| 00000390  58 f2 b6 a7 6e 3d e3 f9  95 b6 23 6e 27 36 45 f7  |X...n=....#n'6E.| | ||||
| 000003a0  75 87 ff 4a 49 e1 d0 ea  83 52 97 b1 77 c6 00 8e  |u..JI....R..w...| | ||||
| 000003b0  62 af 4f d0 cd 5e a4 9b  2f 72 ca dc 87 96 6b 73  |b.O..^../r....ks| | ||||
| 000003c0  08 2c a5 75 d8 9d d5 a3  ba 25 45 78 07 db f1 86  |.,.u.....%Ex....| | ||||
| 000003d0  08 4a 56 26 9d da f6 10  43 74 c1 93 ae 89 17 f1  |.JV&....Ct......| | ||||
| 000003e0  1c 22 10 15 30 81 47 78  25 de fe 30 6d da 7d 0f  |."..0.Gx%..0m.}.| | ||||
| 000003f0  36 16 03 01 00 04 0e 00  00 00                    |6.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 01 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 01 00 30 fa 12  bd 34 6f ca 53 e6 9a 77  |.....0...4o.S..w| | ||||
| 00000060  ec 0c de 3e 96 ab fe ac  52 7b 04 61 21 29 ab 86  |...>....R{.a!)..| | ||||
| 00000070  7a 0b 4f 4b 9a f2 2d fe  89 96 07 a5 20 38 71 8b  |z.OK..-..... 8q.| | ||||
| 00000080  2e 76 9c 4e de 26                                 |.v.N.&| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 54 5d dc 18 0e  |..........0T]...| | ||||
| 00000010  76 37 48 8c 06 e6 6c 26  6d af 3d 57 fa 57 4f 6b  |v7H...l&m.=W.WOk| | ||||
| 00000020  3d 00 e5 d6 81 ac 86 ae  1c 82 9c 08 4d 37 fd fc  |=...........M7..| | ||||
| 00000030  27 d4 38 1e 28 8e 2b 0e  50 23 80                 |'.8.(.+.P#.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 20 28 98 f6  dd a7 6f 74 c6 5c 6d 54  |.... (....ot.\mT| | ||||
| 00000010  8a 69 99 c8 db 88 73 9e  94 a6 d7 81 9e be 5f ba  |.i....s......._.| | ||||
| 00000020  9e 6d 46 72 be 17 03 01  00 20 a9 d1 38 e1 eb 0f  |.mFr..... ..8...| | ||||
| 00000030  7a fd c7 81 12 8b 5e 8e  4e e8 e2 8b 40 af 74 e3  |z.....^.N...@.t.| | ||||
| 00000040  80 6d 52 40 13 d5 d4 a0  d9 29 15 03 01 00 20 7c  |.mR@.....).... || | ||||
| 00000050  3f d7 27 13 2b d5 41 4e  17 93 10 79 20 f2 f6 21  |?.'.+.AN...y ..!| | ||||
| 00000060  c7 21 08 f4 bc 5f 97 61  46 2e 4f 35 86 15 79     |.!..._.aF.O5..y| | ||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv10-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv10-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,83 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 51 02 00 00  4d 03 01 5c 40 79 8d 40  |....Q...M..\@y.@| | ||||
| 00000010  c0 fd 1f 3c 2d 85 e1 19  12 c8 dc 95 8a 52 44 a5  |...<-........RD.| | ||||
| 00000020  3a c1 9a 41 9a 72 9d cf  d8 8e 3c 20 76 d2 7d 3d  |:..A.r....< v.}=| | ||||
| 00000030  b9 0f a9 b0 05 a6 c7 ac  53 7a fa 0f 7a d5 25 ec  |........Sz..z.%.| | ||||
| 00000040  51 5f fb da a4 9e f2 45  10 40 38 13 00 05 00 00  |Q_.....E.@8.....| | ||||
| 00000050  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 04 0e 00  |n8P)l...........| | ||||
| 00000320  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 86 10 00 00  82 00 80 6d 51 f3 7f f9  |...........mQ...| | ||||
| 00000010  3e fb 75 82 41 36 83 e8  6a ee 2a 2e 25 90 67 4c  |>.u.A6..j.*.%.gL| | ||||
| 00000020  8e 62 2f 30 81 17 e0 85  09 0c 2b b7 23 d7 b0 e2  |.b/0......+.#...| | ||||
| 00000030  1d f7 3b d7 f5 a1 27 b6  ee 24 b6 1b cc 5b ea 66  |..;...'..$...[.f| | ||||
| 00000040  0d 6a f4 e5 85 f9 da 43  b4 0e 86 85 e1 f5 aa be  |.j.....C........| | ||||
| 00000050  c8 ce 39 4c 9c 86 00 08  c2 4b e2 c6 ec 2f f7 ce  |..9L.....K.../..| | ||||
| 00000060  e6 bd 77 82 6f 23 b6 e0  bd a2 92 b7 3a ac e8 56  |..w.o#......:..V| | ||||
| 00000070  f1 af 54 5e 46 87 e9 3b  33 e7 b8 28 b7 d6 c8 90  |..T^F..;3..(....| | ||||
| 00000080  35 d4 1c 43 d1 30 6f 55  4e 0a 70 14 03 01 00 01  |5..C.0oUN.p.....| | ||||
| 00000090  01 16 03 01 00 24 c0 e9  f1 c2 c5 a1 75 6b b8 84  |.....$......uk..| | ||||
| 000000a0  cf d8 46 e6 e1 d4 a0 65  d9 89 29 55 91 4c 38 5e  |..F....e..)U.L8^| | ||||
| 000000b0  8c 90 ac 2e db 28 68 e6  00 b4                    |.....(h...| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 24 20 d1 dd c0 6f  |..........$ ...o| | ||||
| 00000010  2c f2 1e 30 c6 8c 59 e9  5b 31 e6 a6 ce ea 57 06  |,..0..Y.[1....W.| | ||||
| 00000020  59 39 a2 b9 78 6e a4 fc  cb 0c 9c 26 05 3b 16     |Y9..xn.....&.;.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 01 00 1a 25 ef 34  80 3d 18 91 ae ba 40 79  |.....%.4.=....@y| | ||||
| 00000010  0e 2e 59 ac 30 0d 47 77  bd 61 b8 16 a7 08 b0 15  |..Y.0.Gw.a......| | ||||
| 00000020  03 01 00 16 54 73 7f 48  c4 49 55 97 2a 2d 00 71  |....Ts.H.IU.*-.q| | ||||
| 00000030  fc 82 c8 7a 63 2a ea 9e  8d 6f                    |...zc*...o| | ||||
|  | @ -1,89 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 02 00 59 02 00 00  55 03 02 48 99 38 25 1c  |....Y...U..H.8%.| | ||||
| 00000010  df 79 d9 78 68 90 92 ad  3f e7 a0 38 b2 d8 ab 50  |.y.xh...?..8...P| | ||||
| 00000020  2c fb b0 16 00 5a 5c 87  a6 dc 16 20 70 3f 2a fd  |,....Z\.... p?*.| | ||||
| 00000030  ef 14 aa 68 d5 08 c4 1e  4c 04 7a 08 63 ec cb 0d  |...h....L.z.c...| | ||||
| 00000040  1f 2b 08 17 f2 29 7c da  a3 d0 6f 07 c0 09 00 00  |.+...)|...o.....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  02 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 02 00 d6 0c 00  00 d2 03 00 17 41 04 5f  |*............A._| | ||||
| 00000280  ea cb dd 6a 2c 16 40 15  d1 e7 ea 41 19 08 5d 1c  |...j,.@....A..].| | ||||
| 00000290  e8 f2 f2 75 84 96 f5 d4  c8 5b fd 4b ba 3b 79 8c  |...u.....[.K.;y.| | ||||
| 000002a0  86 a3 2a ce 77 2d 97 ea  39 3d 52 8e a4 c7 da bd  |..*.w-..9=R.....| | ||||
| 000002b0  52 68 46 b4 f2 ba 1f 73  30 29 2f 29 d4 82 66 00  |RhF....s0)/)..f.| | ||||
| 000002c0  8b 30 81 88 02 42 00 c3  d3 8d 5e f9 a8 03 27 d8  |.0...B....^...'.| | ||||
| 000002d0  be 19 80 53 8e 5a 58 4f  13 2a 04 25 8c 73 71 9a  |...S.ZXO.*.%.sq.| | ||||
| 000002e0  15 7e 05 09 d4 a2 8d 3e  16 0e 2d a8 73 97 bc 1a  |.~.....>..-.s...| | ||||
| 000002f0  b4 48 81 f0 c9 2a e7 c2  39 13 5d 25 3e b1 82 d1  |.H...*..9.]%>...| | ||||
| 00000300  cf 3e 46 f5 f6 f8 e3 e2  02 42 01 a2 ba f5 05 eb  |.>F......B......| | ||||
| 00000310  84 26 34 06 f2 85 ae e0  54 95 cd f9 8a 2e 01 a5  |.&4.....T.......| | ||||
| 00000320  65 d0 ab da cd ec 33 7a  12 51 1c 75 3f 4f be 7f  |e.....3z.Q.u?O..| | ||||
| 00000330  f7 a6 02 81 2e 6d 3b 58  d6 5f 2d 53 d0 43 61 2d  |.....m;X._-S.Ca-| | ||||
| 00000340  0c d8 7d e5 08 48 48 da  51 47 8b a5 16 03 02 00  |..}..HH.QG......| | ||||
| 00000350  04 0e 00 00 00                                    |.....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 02 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 02 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 02 00 40 00 00  00 00 00 00 00 00 00 00  |.....@..........| | ||||
| 00000060  00 00 00 00 00 00 20 a1  aa ad 8d db ed 19 63 64  |...... .......cd| | ||||
| 00000070  60 73 8a 59 0d 59 81 51  b8 44 7b c8 86 ac fe db  |`s.Y.Y.Q.D{.....| | ||||
| 00000080  9f da 5e af fd 54 a3 6e  c6 f0 d6 45 fe 93 70 f1  |..^..T.n...E..p.| | ||||
| 00000090  45 99 06 3e 6a 28                                 |E..>j(| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 02 00 01 01 16 03  02 00 40 b7 6f dc 1c 48  |..........@.o..H| | ||||
| 00000010  cc 3d ac 1d 6b b2 bc 9c  dd 25 02 9d b0 77 8d ca  |.=..k....%...w..| | ||||
| 00000020  5a 4c d6 d3 c0 e0 a6 8c  03 00 e5 85 3a 2f 5e df  |ZL..........:/^.| | ||||
| 00000030  17 5b 9a 2e e3 54 20 60  fe 39 ef 51 23 bc 13 ea  |.[...T `.9.Q#...| | ||||
| 00000040  86 6f 4f e5 8c 5f a0 3e  ae e9 69                 |.oO.._.>..i| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 02 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 31 e9 1b  b8 b7 ed a1 dd 34 87 9c  |.....1.......4..| | ||||
| 00000020  3c 8a 0d 41 8c d3 3f 0e  54 62 d5 31 07 4a a5 8f  |<..A..?.Tb.1.J..| | ||||
| 00000030  0e 07 3d da 91 15 03 02  00 30 00 00 00 00 00 00  |..=......0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 d2 62 91 56 10 c8  |...........b.V..| | ||||
| 00000050  c9 f8 25 3f ef ab b1 a7  88 a6 85 2b 1b 02 47 36  |..%?.......+..G6| | ||||
| 00000060  3a 08 b0 63 da c1 cb ea  11 2c                    |:..c.....,| | ||||
|  | @ -1,99 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 02 00 59 02 00 00  55 03 02 95 77 16 4d 9c  |....Y...U...w.M.| | ||||
| 00000010  0c e7 a4 de e2 49 a2 28  d5 5b ec 44 24 89 7c 47  |.....I.(.[.D$.|G| | ||||
| 00000020  f2 a6 03 d4 76 08 92 99  5f 3f af 20 f9 55 14 a9  |....v..._?. .U..| | ||||
| 00000030  de 8c 1a 77 37 9c 1b d9  95 30 e6 25 93 9a 3f 6f  |...w7....0.%..?o| | ||||
| 00000040  cc c0 27 4c 4a cd 61 eb  53 a0 b2 59 c0 13 00 00  |..'LJ.a.S..Y....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  02 02 be 0b 00 02 ba 00  02 b7 00 02 b4 30 82 02  |.............0..| | ||||
| 00000070  b0 30 82 02 19 a0 03 02  01 02 02 09 00 85 b0 bb  |.0..............| | ||||
| 00000080  a4 8a 7f b8 ca 30 0d 06  09 2a 86 48 86 f7 0d 01  |.....0...*.H....| | ||||
| 00000090  01 05 05 00 30 45 31 0b  30 09 06 03 55 04 06 13  |....0E1.0...U...| | ||||
| 000000a0  02 41 55 31 13 30 11 06  03 55 04 08 13 0a 53 6f  |.AU1.0...U....So| | ||||
| 000000b0  6d 65 2d 53 74 61 74 65  31 21 30 1f 06 03 55 04  |me-State1!0...U.| | ||||
| 000000c0  0a 13 18 49 6e 74 65 72  6e 65 74 20 57 69 64 67  |...Internet Widg| | ||||
| 000000d0  69 74 73 20 50 74 79 20  4c 74 64 30 1e 17 0d 31  |its Pty Ltd0...1| | ||||
| 000000e0  30 30 34 32 34 30 39 30  39 33 38 5a 17 0d 31 31  |00424090938Z..11| | ||||
| 000000f0  30 34 32 34 30 39 30 39  33 38 5a 30 45 31 0b 30  |0424090938Z0E1.0| | ||||
| 00000100  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 00000110  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 00000120  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 00000130  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 00000140  74 64 30 81 9f 30 0d 06  09 2a 86 48 86 f7 0d 01  |td0..0...*.H....| | ||||
| 00000150  01 01 05 00 03 81 8d 00  30 81 89 02 81 81 00 bb  |........0.......| | ||||
| 00000160  79 d6 f5 17 b5 e5 bf 46  10 d0 dc 69 be e6 2b 07  |y......F...i..+.| | ||||
| 00000170  43 5a d0 03 2d 8a 7a 43  85 b7 14 52 e7 a5 65 4c  |CZ..-.zC...R..eL| | ||||
| 00000180  2c 78 b8 23 8c b5 b4 82  e5 de 1f 95 3b 7e 62 a5  |,x.#........;~b.| | ||||
| 00000190  2c a5 33 d6 fe 12 5c 7a  56 fc f5 06 bf fa 58 7b  |,.3...\zV.....X{| | ||||
| 000001a0  26 3f b5 cd 04 d3 d0 c9  21 96 4a c7 f4 54 9f 5a  |&?......!.J..T.Z| | ||||
| 000001b0  bf ef 42 71 00 fe 18 99  07 7f 7e 88 7d 7d f1 04  |..Bq......~.}}..| | ||||
| 000001c0  39 c4 a2 2e db 51 c9 7c  e3 c0 4c 3b 32 66 01 cf  |9....Q.|..L;2f..| | ||||
| 000001d0  af b1 1d b8 71 9a 1d db  db 89 6b ae da 2d 79 02  |....q.....k..-y.| | ||||
| 000001e0  03 01 00 01 a3 81 a7 30  81 a4 30 1d 06 03 55 1d  |.......0..0...U.| | ||||
| 000001f0  0e 04 16 04 14 b1 ad e2  85 5a cf cb 28 db 69 ce  |.........Z..(.i.| | ||||
| 00000200  23 69 de d3 26 8e 18 88  39 30 75 06 03 55 1d 23  |#i..&...90u..U.#| | ||||
| 00000210  04 6e 30 6c 80 14 b1 ad  e2 85 5a cf cb 28 db 69  |.n0l......Z..(.i| | ||||
| 00000220  ce 23 69 de d3 26 8e 18  88 39 a1 49 a4 47 30 45  |.#i..&...9.I.G0E| | ||||
| 00000230  31 0b 30 09 06 03 55 04  06 13 02 41 55 31 13 30  |1.0...U....AU1.0| | ||||
| 00000240  11 06 03 55 04 08 13 0a  53 6f 6d 65 2d 53 74 61  |...U....Some-Sta| | ||||
| 00000250  74 65 31 21 30 1f 06 03  55 04 0a 13 18 49 6e 74  |te1!0...U....Int| | ||||
| 00000260  65 72 6e 65 74 20 57 69  64 67 69 74 73 20 50 74  |ernet Widgits Pt| | ||||
| 00000270  79 20 4c 74 64 82 09 00  85 b0 bb a4 8a 7f b8 ca  |y Ltd...........| | ||||
| 00000280  30 0c 06 03 55 1d 13 04  05 30 03 01 01 ff 30 0d  |0...U....0....0.| | ||||
| 00000290  06 09 2a 86 48 86 f7 0d  01 01 05 05 00 03 81 81  |..*.H...........| | ||||
| 000002a0  00 08 6c 45 24 c7 6b b1  59 ab 0c 52 cc f2 b0 14  |..lE$.k.Y..R....| | ||||
| 000002b0  d7 87 9d 7a 64 75 b5 5a  95 66 e4 c5 2b 8e ae 12  |...zdu.Z.f..+...| | ||||
| 000002c0  66 1f eb 4f 38 b3 6e 60  d3 92 fd f7 41 08 b5 25  |f..O8.n`....A..%| | ||||
| 000002d0  13 b1 18 7a 24 fb 30 1d  ba ed 98 b9 17 ec e7 d7  |...z$.0.........| | ||||
| 000002e0  31 59 db 95 d3 1d 78 ea  50 56 5c d5 82 5a 2d 5a  |1Y....x.PV\..Z-Z| | ||||
| 000002f0  5f 33 c4 b6 d8 c9 75 90  96 8c 0f 52 98 b5 cd 98  |_3....u....R....| | ||||
| 00000300  1f 89 20 5f f2 a0 1c a3  1b 96 94 dd a9 fd 57 e9  |.. _..........W.| | ||||
| 00000310  70 e8 26 6d 71 99 9b 26  6e 38 50 29 6c 90 a7 bd  |p.&mq..&n8P)l...| | ||||
| 00000320  d9 16 03 02 00 cb 0c 00  00 c7 03 00 17 41 04 cc  |.............A..| | ||||
| 00000330  93 4b 67 67 12 37 c6 c4  77 3d 6b 3e ce 16 04 82  |.Kgg.7..w=k>....| | ||||
| 00000340  09 9d b0 bc 67 a8 43 e8  06 ab 9d 8b dd fe ad 00  |....g.C.........| | ||||
| 00000350  9e 32 19 f3 5f d8 2d de  18 76 1d 46 18 f1 1f ac  |.2.._.-..v.F....| | ||||
| 00000360  19 79 9b 6c 5b c8 92 d4  6b 91 e9 58 f7 92 b6 00  |.y.l[...k..X....| | ||||
| 00000370  80 0c d6 d5 6c 2c 89 fa  8b a6 59 f8 48 cb f2 9d  |....l,....Y.H...| | ||||
| 00000380  02 61 b0 2d 83 5e e6 5f  41 b9 91 96 30 fb 09 85  |.a.-.^._A...0...| | ||||
| 00000390  4f 9f ea 92 1a dc a2 c3  59 49 6c 46 85 91 b0 2f  |O.......YIlF.../| | ||||
| 000003a0  80 47 bc f2 ab 3a 0c 33  5f 46 ef fb bf 2e b7 14  |.G...:.3_F......| | ||||
| 000003b0  03 ae 6d ac d6 3f 7f 0c  8e c8 18 c3 0d fd ba f3  |..m..?..........| | ||||
| 000003c0  dd b1 8b a8 c9 ed 53 7c  9c d2 31 91 cc 05 2a f1  |......S|..1...*.| | ||||
| 000003d0  86 f3 79 c8 d0 55 0d 9d  80 fd 0f 6f 1a 15 c4 dd  |..y..U.....o....| | ||||
| 000003e0  f3 37 41 2e 4f 51 10 27  80 11 82 c4 a8 4b 7f a3  |.7A.OQ.'.....K..| | ||||
| 000003f0  e2 16 03 02 00 04 0e 00  00 00                    |..........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 02 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 02 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 02 00 40 00 00  00 00 00 00 00 00 00 00  |.....@..........| | ||||
| 00000060  00 00 00 00 00 00 cc 4d  33 16 3b 7e 8d 15 6f cf  |.......M3.;~..o.| | ||||
| 00000070  00 7b e2 5c 00 34 5e 53  30 92 2c 0b 5f 5a df bc  |.{.\.4^S0.,._Z..| | ||||
| 00000080  05 a1 eb e5 9b 2b 2a 94  26 60 57 cd 81 74 9f 31  |.....+*.&`W..t.1| | ||||
| 00000090  55 64 b5 52 89 c8                                 |Ud.R..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 02 00 01 01 16 03  02 00 40 10 4d 3e ad a3  |..........@.M>..| | ||||
| 00000010  6a c6 06 43 7f 5a b6 99  b0 70 22 fe dc 8e a9 a0  |j..C.Z...p".....| | ||||
| 00000020  9e 0a 8f 0d ed d6 de 8d  16 18 df f9 cc 81 55 a5  |..............U.| | ||||
| 00000030  56 6b 00 81 c1 8f eb 29  cb 46 16 e5 0f 10 9f 57  |Vk.....).F.....W| | ||||
| 00000040  b9 28 6e c1 51 d7 c2 e3  46 ee 0b                 |.(n.Q...F..| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 02 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 9e 9c cb  3c 7c b9 d9 03 1b b9 2c  |........<|.....,| | ||||
| 00000020  6b e8 d9 eb 9a 9d 29 5f  00 77 a2 f5 b7 cc 0e f1  |k.....)_.w......| | ||||
| 00000030  78 cb 5d 3f e0 15 03 02  00 30 00 00 00 00 00 00  |x.]?.....0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 ca af f9 d3 73 44  |..............sD| | ||||
| 00000050  f2 43 cc ad 30 5c 41 d4  c8 03 bc 77 96 76 ef 8d  |.C..0\A....w.v..| | ||||
| 00000060  3c 61 3c bf f3 ae 0d 41  80 96                    |<a<....A..| | ||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv11-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv11-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,83 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 02 00 51 02 00 00  4d 03 02 4d 2e 22 e8 40  |....Q...M..M.".@| | ||||
| 00000010  e2 be 4a dd cc 74 ce 49  40 04 76 fa 30 11 04 64  |..J..t.I@.v.0..d| | ||||
| 00000020  d3 d8 28 cc ef cb 1b 08  70 ca 28 20 74 90 27 2e  |..(.....p.( t.'.| | ||||
| 00000030  c7 bb 53 66 93 49 da 00  d9 96 06 cf ac 08 40 66  |..Sf.I........@f| | ||||
| 00000040  41 eb 6e c8 32 2d 10 a6  42 7b 0d 5e 00 05 00 00  |A.n.2-..B{.^....| | ||||
| 00000050  05 ff 01 00 01 00 16 03  02 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 02 00 04 0e 00  |n8P)l...........| | ||||
| 00000320  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 02 00 86 10 00 00  82 00 80 6d 51 f3 7f f9  |...........mQ...| | ||||
| 00000010  3e fb 75 82 41 36 83 e8  6a ee 2a 2e 25 90 67 4c  |>.u.A6..j.*.%.gL| | ||||
| 00000020  8e 62 2f 30 81 17 e0 85  09 0c 2b b7 23 d7 b0 e2  |.b/0......+.#...| | ||||
| 00000030  1d f7 3b d7 f5 a1 27 b6  ee 24 b6 1b cc 5b ea 66  |..;...'..$...[.f| | ||||
| 00000040  0d 6a f4 e5 85 f9 da 43  b4 0e 86 85 e1 f5 aa be  |.j.....C........| | ||||
| 00000050  c8 ce 39 4c 9c 86 00 08  c2 4b e2 c6 ec 2f f7 ce  |..9L.....K.../..| | ||||
| 00000060  e6 bd 77 82 6f 23 b6 e0  bd a2 92 b7 3a ac e8 56  |..w.o#......:..V| | ||||
| 00000070  f1 af 54 5e 46 87 e9 3b  33 e7 b8 28 b7 d6 c8 90  |..T^F..;3..(....| | ||||
| 00000080  35 d4 1c 43 d1 30 6f 55  4e 0a 70 14 03 02 00 01  |5..C.0oUN.p.....| | ||||
| 00000090  01 16 03 02 00 24 2b 06  10 fe 60 26 58 7d 59 47  |.....$+...`&X}YG| | ||||
| 000000a0  83 2d 84 43 e3 8d fe ab  e6 c0 3b b8 68 78 e3 73  |.-.C......;.hx.s| | ||||
| 000000b0  6c 59 d8 53 86 81 42 69  22 74                    |lY.S..Bi"t| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 02 00 01 01 16 03  02 00 24 62 dc 82 ed 69  |..........$b...i| | ||||
| 00000010  cc e2 19 72 9c 1b 84 15  77 d8 a0 35 7d b7 47 55  |...r....w..5}.GU| | ||||
| 00000020  95 4f 67 ad f1 8f 91 01  c0 31 2f 54 64 40 35     |.Og......1/Td@5| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 02 00 1a 63 52 52  39 6a 98 7a a8 41 cd b4  |.....cRR9j.z.A..| | ||||
| 00000010  e4 de 75 32 76 9a ee 44  96 d0 e9 66 b8 0a b5 15  |..u2v..D...f....| | ||||
| 00000020  03 02 00 16 9f 06 3f 07  78 12 b7 70 db 48 fc ef  |......?.x..p.H..| | ||||
| 00000030  ff 6e a7 4f e5 82 7f 0c  f2 35                    |.n.O.....5| | ||||
							
								
								
									
										97
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv12-ALPN
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										97
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv12-ALPN
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,97 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 91 01 00 00  8d 03 03 00 00 00 00 00  |................| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 46  |...../.5.......F| | ||||
| 00000050  33 74 00 00 00 05 00 05  01 00 00 00 00 00 0a 00  |3t..............| | ||||
| 00000060  08 00 06 00 17 00 18 00  19 00 0b 00 02 01 00 00  |................| | ||||
| 00000070  0d 00 0a 00 08 04 01 04  03 02 01 02 03 ff 01 00  |................| | ||||
| 00000080  01 00 00 10 00 10 00 0e  06 70 72 6f 74 6f 32 06  |.........proto2.| | ||||
| 00000090  70 72 6f 74 6f 31                                 |proto1| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 66 02 00 00  62 03 03 7e 48 0b 4a 89  |....f...b..~H.J.| | ||||
| 00000010  d3 3a a1 8a 8c 8b 11 bb  ea c5 21 5c df 3c 81 2b  |.:........!\.<.+| | ||||
| 00000020  c5 c0 7c f9 fd d7 cb 10  1b dd d4 20 b4 8a a5 07  |..|........ ....| | ||||
| 00000030  32 e7 04 9c 1c 73 87 cd  e3 ae ff 8b 5c d7 56 6c  |2....s......\.Vl| | ||||
| 00000040  03 24 7d 35 4c ad 31 52  c3 cd 5c b0 c0 2f 00 00  |.$}5L.1R..\../..| | ||||
| 00000050  1a ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 10  |................| | ||||
| 00000060  00 09 00 07 06 70 72 6f  74 6f 31 16 03 03 02 be  |.....proto1.....| | ||||
| 00000070  0b 00 02 ba 00 02 b7 00  02 b4 30 82 02 b0 30 82  |..........0...0.| | ||||
| 00000080  02 19 a0 03 02 01 02 02  09 00 85 b0 bb a4 8a 7f  |................| | ||||
| 00000090  b8 ca 30 0d 06 09 2a 86  48 86 f7 0d 01 01 05 05  |..0...*.H.......| | ||||
| 000000a0  00 30 45 31 0b 30 09 06  03 55 04 06 13 02 41 55  |.0E1.0...U....AU| | ||||
| 000000b0  31 13 30 11 06 03 55 04  08 13 0a 53 6f 6d 65 2d  |1.0...U....Some-| | ||||
| 000000c0  53 74 61 74 65 31 21 30  1f 06 03 55 04 0a 13 18  |State1!0...U....| | ||||
| 000000d0  49 6e 74 65 72 6e 65 74  20 57 69 64 67 69 74 73  |Internet Widgits| | ||||
| 000000e0  20 50 74 79 20 4c 74 64  30 1e 17 0d 31 30 30 34  | Pty Ltd0...1004| | ||||
| 000000f0  32 34 30 39 30 39 33 38  5a 17 0d 31 31 30 34 32  |24090938Z..11042| | ||||
| 00000100  34 30 39 30 39 33 38 5a  30 45 31 0b 30 09 06 03  |4090938Z0E1.0...| | ||||
| 00000110  55 04 06 13 02 41 55 31  13 30 11 06 03 55 04 08  |U....AU1.0...U..| | ||||
| 00000120  13 0a 53 6f 6d 65 2d 53  74 61 74 65 31 21 30 1f  |..Some-State1!0.| | ||||
| 00000130  06 03 55 04 0a 13 18 49  6e 74 65 72 6e 65 74 20  |..U....Internet | | ||||
| 00000140  57 69 64 67 69 74 73 20  50 74 79 20 4c 74 64 30  |Widgits Pty Ltd0| | ||||
| 00000150  81 9f 30 0d 06 09 2a 86  48 86 f7 0d 01 01 01 05  |..0...*.H.......| | ||||
| 00000160  00 03 81 8d 00 30 81 89  02 81 81 00 bb 79 d6 f5  |.....0.......y..| | ||||
| 00000170  17 b5 e5 bf 46 10 d0 dc  69 be e6 2b 07 43 5a d0  |....F...i..+.CZ.| | ||||
| 00000180  03 2d 8a 7a 43 85 b7 14  52 e7 a5 65 4c 2c 78 b8  |.-.zC...R..eL,x.| | ||||
| 00000190  23 8c b5 b4 82 e5 de 1f  95 3b 7e 62 a5 2c a5 33  |#........;~b.,.3| | ||||
| 000001a0  d6 fe 12 5c 7a 56 fc f5  06 bf fa 58 7b 26 3f b5  |...\zV.....X{&?.| | ||||
| 000001b0  cd 04 d3 d0 c9 21 96 4a  c7 f4 54 9f 5a bf ef 42  |.....!.J..T.Z..B| | ||||
| 000001c0  71 00 fe 18 99 07 7f 7e  88 7d 7d f1 04 39 c4 a2  |q......~.}}..9..| | ||||
| 000001d0  2e db 51 c9 7c e3 c0 4c  3b 32 66 01 cf af b1 1d  |..Q.|..L;2f.....| | ||||
| 000001e0  b8 71 9a 1d db db 89 6b  ae da 2d 79 02 03 01 00  |.q.....k..-y....| | ||||
| 000001f0  01 a3 81 a7 30 81 a4 30  1d 06 03 55 1d 0e 04 16  |....0..0...U....| | ||||
| 00000200  04 14 b1 ad e2 85 5a cf  cb 28 db 69 ce 23 69 de  |......Z..(.i.#i.| | ||||
| 00000210  d3 26 8e 18 88 39 30 75  06 03 55 1d 23 04 6e 30  |.&...90u..U.#.n0| | ||||
| 00000220  6c 80 14 b1 ad e2 85 5a  cf cb 28 db 69 ce 23 69  |l......Z..(.i.#i| | ||||
| 00000230  de d3 26 8e 18 88 39 a1  49 a4 47 30 45 31 0b 30  |..&...9.I.G0E1.0| | ||||
| 00000240  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 00000250  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 00000260  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 00000270  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 00000280  74 64 82 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0c 06  |td...........0..| | ||||
| 00000290  03 55 1d 13 04 05 30 03  01 01 ff 30 0d 06 09 2a  |.U....0....0...*| | ||||
| 000002a0  86 48 86 f7 0d 01 01 05  05 00 03 81 81 00 08 6c  |.H.............l| | ||||
| 000002b0  45 24 c7 6b b1 59 ab 0c  52 cc f2 b0 14 d7 87 9d  |E$.k.Y..R.......| | ||||
| 000002c0  7a 64 75 b5 5a 95 66 e4  c5 2b 8e ae 12 66 1f eb  |zdu.Z.f..+...f..| | ||||
| 000002d0  4f 38 b3 6e 60 d3 92 fd  f7 41 08 b5 25 13 b1 18  |O8.n`....A..%...| | ||||
| 000002e0  7a 24 fb 30 1d ba ed 98  b9 17 ec e7 d7 31 59 db  |z$.0.........1Y.| | ||||
| 000002f0  95 d3 1d 78 ea 50 56 5c  d5 82 5a 2d 5a 5f 33 c4  |...x.PV\..Z-Z_3.| | ||||
| 00000300  b6 d8 c9 75 90 96 8c 0f  52 98 b5 cd 98 1f 89 20  |...u....R...... | | ||||
| 00000310  5f f2 a0 1c a3 1b 96 94  dd a9 fd 57 e9 70 e8 26  |_..........W.p.&| | ||||
| 00000320  6d 71 99 9b 26 6e 38 50  29 6c 90 a7 bd d9 16 03  |mq..&n8P)l......| | ||||
| 00000330  03 00 cd 0c 00 00 c9 03  00 17 41 04 36 ae 35 52  |..........A.6.5R| | ||||
| 00000340  e2 d1 7b 5f 96 91 06 73  30 0c c8 cb 42 e3 95 11  |..{_...s0...B...| | ||||
| 00000350  52 02 5a 8a 8a a4 b3 f9  03 f0 6d 8b 23 3e 73 44  |R.Z.......m.#>sD| | ||||
| 00000360  2d 3e fb 05 ac c2 0a f4  96 07 58 aa fc 9f f4 8b  |->........X.....| | ||||
| 00000370  38 af 46 6a a6 87 b7 6d  65 eb 75 17 04 01 00 80  |8.Fj...me.u.....| | ||||
| 00000380  44 0d 99 2f 79 3d 66 0b  7c 76 f8 95 14 78 90 f9  |D../y=f.|v...x..| | ||||
| 00000390  ee bb 74 9b 01 25 62 a3  58 d6 8d 4b 43 0a 18 16  |..t..%b.X..KC...| | ||||
| 000003a0  4d 44 fa 01 13 de 32 36  16 6a 4d 9a 6d ab dd e5  |MD....26.jM.m...| | ||||
| 000003b0  a8 9d 9e 4a f8 18 fd da  95 99 02 20 29 b3 79 f6  |...J....... ).y.| | ||||
| 000003c0  c7 c4 eb 81 45 ef 20 5f  2b ed 5f 72 a5 5f 99 0b  |....E. _+._r._..| | ||||
| 000003d0  54 25 0d db 11 7f 64 ec  5a 2f 38 c7 74 29 77 f0  |T%....d.Z/8.t)w.| | ||||
| 000003e0  4b 9c 92 72 02 4c f3 bf  ee ba e1 51 fb b4 ac e6  |K..r.L.....Q....| | ||||
| 000003f0  0c 4c 19 bc 9a b7 e9 fd  8a 86 bf 37 d5 0b 1d 2a  |.L.........7...*| | ||||
| 00000400  16 03 03 00 04 0e 00 00  00                       |.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 27 e5  |.....(........'.| | ||||
| 00000060  ee c8 9a 3e d6 70 d6 1a  1b ad d2 1a 88 be 77 fd  |...>.p........w.| | ||||
| 00000070  bc e2 33 13 22 52 df be  67 30 da 10 5c cf        |..3."R..g0..\.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 81 ad 88 a5 2e  |..........(.....| | ||||
| 00000010  1f 26 3c 53 16 a7 d4 c2  13 08 52 6e ac 3b 00 9d  |.&<S......Rn.;..| | ||||
| 00000020  d9 ee d4 93 86 3f 8a 0e  d8 06 d9 61 a6 6f bf f9  |.....?.....a.o..| | ||||
| 00000030  a9 1f fe                                          |...| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 ab b6 ac  |................| | ||||
| 00000010  55 5d 72 b0 7a a1 0e 17  8d 1b 71 77 79 ef 32 6b  |U]r.z.....qwy.2k| | ||||
| 00000020  4e c2 df 15 03 03 00 1a  00 00 00 00 00 00 00 02  |N...............| | ||||
| 00000030  34 1e 22 35 71 60 cd cf  75 2b 73 94 b6 5f 09 1d  |4."5q`..u+s.._..| | ||||
| 00000040  1b b5                                             |..| | ||||
|  | @ -1,95 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 8a 01 00 00  86 03 03 00 00 00 00 00  |................| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 3f  |...../.5.......?| | ||||
| 00000050  33 74 00 00 00 05 00 05  01 00 00 00 00 00 0a 00  |3t..............| | ||||
| 00000060  08 00 06 00 17 00 18 00  19 00 0b 00 02 01 00 00  |................| | ||||
| 00000070  0d 00 0a 00 08 04 01 04  03 02 01 02 03 ff 01 00  |................| | ||||
| 00000080  01 00 00 10 00 09 00 07  06 70 72 6f 74 6f 33     |.........proto3| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 f0 ff a6 91 ca  |....Y...U.......| | ||||
| 00000010  e9 d7 bc 31 4c 5e 15 b0  24 41 78 17 87 a8 1c 7d  |...1L^..$Ax....}| | ||||
| 00000020  eb bd 28 f6 57 7f 01 ab  b4 02 a7 20 38 08 43 7e  |..(.W...... 8.C~| | ||||
| 00000030  ca 3c 5f ba 62 bb b0 10  30 f3 f2 03 68 ef 01 43  |.<_.b...0...h..C| | ||||
| 00000040  3b 70 2c 37 80 fe 1c af  bc f5 db 60 c0 2f 00 00  |;p,7.......`./..| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 be 0b 00 02 ba 00  02 b7 00 02 b4 30 82 02  |.............0..| | ||||
| 00000070  b0 30 82 02 19 a0 03 02  01 02 02 09 00 85 b0 bb  |.0..............| | ||||
| 00000080  a4 8a 7f b8 ca 30 0d 06  09 2a 86 48 86 f7 0d 01  |.....0...*.H....| | ||||
| 00000090  01 05 05 00 30 45 31 0b  30 09 06 03 55 04 06 13  |....0E1.0...U...| | ||||
| 000000a0  02 41 55 31 13 30 11 06  03 55 04 08 13 0a 53 6f  |.AU1.0...U....So| | ||||
| 000000b0  6d 65 2d 53 74 61 74 65  31 21 30 1f 06 03 55 04  |me-State1!0...U.| | ||||
| 000000c0  0a 13 18 49 6e 74 65 72  6e 65 74 20 57 69 64 67  |...Internet Widg| | ||||
| 000000d0  69 74 73 20 50 74 79 20  4c 74 64 30 1e 17 0d 31  |its Pty Ltd0...1| | ||||
| 000000e0  30 30 34 32 34 30 39 30  39 33 38 5a 17 0d 31 31  |00424090938Z..11| | ||||
| 000000f0  30 34 32 34 30 39 30 39  33 38 5a 30 45 31 0b 30  |0424090938Z0E1.0| | ||||
| 00000100  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 00000110  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 00000120  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 00000130  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 00000140  74 64 30 81 9f 30 0d 06  09 2a 86 48 86 f7 0d 01  |td0..0...*.H....| | ||||
| 00000150  01 01 05 00 03 81 8d 00  30 81 89 02 81 81 00 bb  |........0.......| | ||||
| 00000160  79 d6 f5 17 b5 e5 bf 46  10 d0 dc 69 be e6 2b 07  |y......F...i..+.| | ||||
| 00000170  43 5a d0 03 2d 8a 7a 43  85 b7 14 52 e7 a5 65 4c  |CZ..-.zC...R..eL| | ||||
| 00000180  2c 78 b8 23 8c b5 b4 82  e5 de 1f 95 3b 7e 62 a5  |,x.#........;~b.| | ||||
| 00000190  2c a5 33 d6 fe 12 5c 7a  56 fc f5 06 bf fa 58 7b  |,.3...\zV.....X{| | ||||
| 000001a0  26 3f b5 cd 04 d3 d0 c9  21 96 4a c7 f4 54 9f 5a  |&?......!.J..T.Z| | ||||
| 000001b0  bf ef 42 71 00 fe 18 99  07 7f 7e 88 7d 7d f1 04  |..Bq......~.}}..| | ||||
| 000001c0  39 c4 a2 2e db 51 c9 7c  e3 c0 4c 3b 32 66 01 cf  |9....Q.|..L;2f..| | ||||
| 000001d0  af b1 1d b8 71 9a 1d db  db 89 6b ae da 2d 79 02  |....q.....k..-y.| | ||||
| 000001e0  03 01 00 01 a3 81 a7 30  81 a4 30 1d 06 03 55 1d  |.......0..0...U.| | ||||
| 000001f0  0e 04 16 04 14 b1 ad e2  85 5a cf cb 28 db 69 ce  |.........Z..(.i.| | ||||
| 00000200  23 69 de d3 26 8e 18 88  39 30 75 06 03 55 1d 23  |#i..&...90u..U.#| | ||||
| 00000210  04 6e 30 6c 80 14 b1 ad  e2 85 5a cf cb 28 db 69  |.n0l......Z..(.i| | ||||
| 00000220  ce 23 69 de d3 26 8e 18  88 39 a1 49 a4 47 30 45  |.#i..&...9.I.G0E| | ||||
| 00000230  31 0b 30 09 06 03 55 04  06 13 02 41 55 31 13 30  |1.0...U....AU1.0| | ||||
| 00000240  11 06 03 55 04 08 13 0a  53 6f 6d 65 2d 53 74 61  |...U....Some-Sta| | ||||
| 00000250  74 65 31 21 30 1f 06 03  55 04 0a 13 18 49 6e 74  |te1!0...U....Int| | ||||
| 00000260  65 72 6e 65 74 20 57 69  64 67 69 74 73 20 50 74  |ernet Widgits Pt| | ||||
| 00000270  79 20 4c 74 64 82 09 00  85 b0 bb a4 8a 7f b8 ca  |y Ltd...........| | ||||
| 00000280  30 0c 06 03 55 1d 13 04  05 30 03 01 01 ff 30 0d  |0...U....0....0.| | ||||
| 00000290  06 09 2a 86 48 86 f7 0d  01 01 05 05 00 03 81 81  |..*.H...........| | ||||
| 000002a0  00 08 6c 45 24 c7 6b b1  59 ab 0c 52 cc f2 b0 14  |..lE$.k.Y..R....| | ||||
| 000002b0  d7 87 9d 7a 64 75 b5 5a  95 66 e4 c5 2b 8e ae 12  |...zdu.Z.f..+...| | ||||
| 000002c0  66 1f eb 4f 38 b3 6e 60  d3 92 fd f7 41 08 b5 25  |f..O8.n`....A..%| | ||||
| 000002d0  13 b1 18 7a 24 fb 30 1d  ba ed 98 b9 17 ec e7 d7  |...z$.0.........| | ||||
| 000002e0  31 59 db 95 d3 1d 78 ea  50 56 5c d5 82 5a 2d 5a  |1Y....x.PV\..Z-Z| | ||||
| 000002f0  5f 33 c4 b6 d8 c9 75 90  96 8c 0f 52 98 b5 cd 98  |_3....u....R....| | ||||
| 00000300  1f 89 20 5f f2 a0 1c a3  1b 96 94 dd a9 fd 57 e9  |.. _..........W.| | ||||
| 00000310  70 e8 26 6d 71 99 9b 26  6e 38 50 29 6c 90 a7 bd  |p.&mq..&n8P)l...| | ||||
| 00000320  d9 16 03 03 00 cd 0c 00  00 c9 03 00 17 41 04 4e  |.............A.N| | ||||
| 00000330  38 ec 28 ce cb f6 6b 74  96 74 92 46 9a 41 4a 02  |8.(...kt.t.F.AJ.| | ||||
| 00000340  33 cb f0 d9 24 20 fd e0  d4 8b 24 b2 1f 24 ac 38  |3...$ ....$..$.8| | ||||
| 00000350  79 cc ec ff 25 c9 30 f6  85 84 51 ee cb 59 8b 0d  |y...%.0...Q..Y..| | ||||
| 00000360  e2 38 3d e0 24 83 84 da  ef 67 f5 f7 8a 0a c0 04  |.8=.$....g......| | ||||
| 00000370  01 00 80 82 72 af cb 74  fb 8c 02 d5 d4 d9 26 04  |....r..t......&.| | ||||
| 00000380  06 59 64 f0 50 ce cf ed  15 b4 24 95 47 8a c6 17  |.Yd.P.....$.G...| | ||||
| 00000390  b0 da a4 13 20 88 e9 b8  ef cd b2 f1 35 5a 88 81  |.... .......5Z..| | ||||
| 000003a0  19 03 ee f4 74 a2 23 27  bc e9 bf f2 06 06 58 f3  |....t.#'......X.| | ||||
| 000003b0  ef b6 5e de 76 58 8c ec  a6 d0 d3 1e 44 ec ac 61  |..^.vX......D..a| | ||||
| 000003c0  62 91 a6 9e 36 ef 64 e9  a5 2e e8 88 69 30 0f b3  |b...6.d.....i0..| | ||||
| 000003d0  84 0a b4 d1 3b a5 fe 9e  96 1a ad 7b 8a 24 7e a7  |....;......{.$~.| | ||||
| 000003e0  af 5b 6d 11 be 1f 2b 7a  5f 62 f7 ae be 2e 99 ec  |.[m...+z_b......| | ||||
| 000003f0  05 b6 7c 16 03 03 00 04  0e 00 00 00              |..|.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 d4 91  |.....(..........| | ||||
| 00000060  e7 17 05 14 7a ce cf 0c  3b c1 a6 a7 4a 57 70 9a  |....z...;...JWp.| | ||||
| 00000070  cf 0e ec 59 19 d3 ba 90  97 51 8b 60 8e 03        |...Y.....Q.`..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 55 64 22 e3 20  |..........(Ud". | | ||||
| 00000010  eb 69 63 44 b4 68 89 29  d6 c8 83 d8 6c 30 2f af  |.icD.h.)....l0/.| | ||||
| 00000020  2a 86 b0 ea ce 57 b8 9c  69 9a e3 fe 86 7e 0a bf  |*....W..i....~..| | ||||
| 00000030  08 f1 fe                                          |...| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 29 39 41  |.............)9A| | ||||
| 00000010  c4 ff e3 3e 38 bf 06 09  d2 d9 05 84 66 60 58 e8  |...>8.......f`X.| | ||||
| 00000020  3a 74 f5 15 03 03 00 1a  00 00 00 00 00 00 00 02  |:t..............| | ||||
| 00000030  b4 1f e4 7b 84 1e 87 57  97 f6 f2 12 df 40 85 fe  |...{...W.....@..| | ||||
| 00000040  d0 d1                                             |..| | ||||
|  | @ -1,134 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 e1 64 a4 cd 65  |....Y...U...d..e| | ||||
| 00000010  5a 19 5f 07 68 cb af f2  74 76 a2 99 18 e4 9e 00  |Z._.h...tv......| | ||||
| 00000020  6a 72 6b 84 dd 1c ec cd  64 45 34 20 96 c3 54 88  |jrk.....dE4 ..T.| | ||||
| 00000030  00 ec aa 32 95 2c ad 08  47 64 fd 2e d4 1f 8e 5e  |...2.,..Gd.....^| | ||||
| 00000040  ec 39 aa ba 6a 3c 8c c7  a6 63 55 8e c0 09 00 00  |.9..j<...cU.....| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 03 00 d8 0c 00  00 d4 03 00 17 41 04 bb  |*............A..| | ||||
| 00000280  6d 5c 62 98 a7 6c bd f1  9b 4b 09 16 31 59 6a 51  |m\b..l...K..1YjQ| | ||||
| 00000290  83 c8 9f 75 9c f8 09 b0  ee 39 01 e3 7a 25 9d 66  |...u.....9..z%.f| | ||||
| 000002a0  fe 14 14 15 45 1b 51 a4  47 fe 1e 58 01 28 96 13  |....E.Q.G..X.(..| | ||||
| 000002b0  2a 0e 0b 40 b2 22 db 2f  e6 f4 88 0a 58 92 10 04  |*..@."./....X...| | ||||
| 000002c0  03 00 8b 30 81 88 02 42  01 13 f5 38 52 04 f7 3b  |...0...B...8R..;| | ||||
| 000002d0  55 96 ef 39 77 be 4f 85  07 18 e9 47 49 b4 bb 57  |U..9w.O....GI..W| | ||||
| 000002e0  c9 c0 93 2e 9e b2 5e 3f  14 ce 43 f0 93 b5 a4 66  |......^?..C....f| | ||||
| 000002f0  8c fe 3a 06 fc a7 bb 9d  87 46 b8 20 1f 0a 31 c6  |..:......F. ..1.| | ||||
| 00000300  80 b0 2d fa e5 06 5f 78  b2 da 02 42 01 c0 bd 12  |..-..._x...B....| | ||||
| 00000310  5b ec 79 dd bf a4 54 f1  3b a8 b8 9a 50 ac a9 7c  |[.y...T.;...P..|| | ||||
| 00000320  d2 a6 b5 dd 84 ee dd eb  3e c7 52 1c 65 ac 1e 37  |........>.R.e..7| | ||||
| 00000330  4f a8 87 fa 05 8a a4 69  c9 59 53 65 ee 8e 4c 1b  |O......i.YSe..L.| | ||||
| 00000340  6c d0 88 b8 65 de 85 f8  fe f9 27 96 b8 c0 16 03  |l...e.....'.....| | ||||
| 00000350  03 00 2e 0d 00 00 26 03  01 02 40 00 1e 06 01 06  |......&...@.....| | ||||
| 00000360  02 06 03 05 01 05 02 05  03 04 01 04 02 04 03 03  |................| | ||||
| 00000370  01 03 02 03 03 02 01 02  02 02 03 00 00 0e 00 00  |................| | ||||
| 00000380  00                                                |.| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0| | ||||
| 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5| | ||||
| 00000020  d9 17 30 09 06 07 2a 86  48 ce 3d 04 01 30 45 31  |..0...*.H.=..0E1| | ||||
| 00000030  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000040  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 00000050  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 00000060  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 00000070  20 4c 74 64 30 1e 17 0d  31 32 31 31 31 34 31 33  | Ltd0...12111413| | ||||
| 00000080  32 35 35 33 5a 17 0d 32  32 31 31 31 32 31 33 32  |2553Z..221112132| | ||||
| 00000090  35 35 33 5a 30 41 31 0b  30 09 06 03 55 04 06 13  |553Z0A1.0...U...| | ||||
| 000000a0  02 41 55 31 0c 30 0a 06  03 55 04 08 13 03 4e 53  |.AU1.0...U....NS| | ||||
| 000000b0  57 31 10 30 0e 06 03 55  04 07 13 07 50 79 72 6d  |W1.0...U....Pyrm| | ||||
| 000000c0  6f 6e 74 31 12 30 10 06  03 55 04 03 13 09 4a 6f  |ont1.0...U....Jo| | ||||
| 000000d0  65 6c 20 53 69 6e 67 30  81 9b 30 10 06 07 2a 86  |el Sing0..0...*.| | ||||
| 000000e0  48 ce 3d 02 01 06 05 2b  81 04 00 23 03 81 86 00  |H.=....+...#....| | ||||
| 000000f0  04 00 95 8c 91 75 14 c0  5e c4 57 b4 d4 c3 6f 8d  |.....u..^.W...o.| | ||||
| 00000100  ae 68 1e dd 6f ce 86 e1  7e 6e b2 48 3e 81 e5 4e  |.h..o...~n.H>..N| | ||||
| 00000110  e2 c6 88 4b 64 dc f5 30  bb d3 ff 65 cc 5b f4 dd  |...Kd..0...e.[..| | ||||
| 00000120  b5 6a 3e 3e d0 1d de 47  c3 76 ad 19 f6 45 2c 8c  |.j>>...G.v...E,.| | ||||
| 00000130  bc d8 1d 01 4c 1f 70 90  46 76 48 8b 8f 83 cc 4a  |....L.p.FvH....J| | ||||
| 00000140  5c 8f 40 76 da e0 89 ec  1d 2b c4 4e 30 76 28 41  |\.@v.....+.N0v(A| | ||||
| 00000150  b2 62 a8 fb 5b f1 f9 4e  7a 8d bd 09 b8 ae ea 8b  |.b..[..Nz.......| | ||||
| 00000160  18 27 4f 2e 70 fe 13 96  ba c3 d3 40 16 cd 65 4e  |.'O.p......@..eN| | ||||
| 00000170  ac 11 1e e6 f1 30 09 06  07 2a 86 48 ce 3d 04 01  |.....0...*.H.=..| | ||||
| 00000180  03 81 8c 00 30 81 88 02  42 00 e0 14 c4 60 60 0b  |....0...B....``.| | ||||
| 00000190  72 68 b0 32 5d 61 4a 02  74 5c c2 81 b9 16 a8 3f  |rh.2]aJ.t\.....?| | ||||
| 000001a0  29 c8 36 c7 81 ff 6c b6  5b d9 70 f1 38 3b 50 48  |).6...l.[.p.8;PH| | ||||
| 000001b0  28 94 cb 09 1a 52 f1 5d  ee 8d f2 b9 f0 f0 da d9  |(....R.]........| | ||||
| 000001c0  15 3a f9 bd 03 7a 87 a2  23 35 ec 02 42 01 a3 d4  |.:...z..#5..B...| | ||||
| 000001d0  8a 78 35 1c 4a 9a 23 d2  0a be 2b 10 31 9d 9c 5f  |.x5.J.#...+.1.._| | ||||
| 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.| | ||||
| 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W| | ||||
| 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..| | ||||
| 00000210  03 03 00 46 10 00 00 42  41 04 1e 18 37 ef 0d 19  |...F...BA...7...| | ||||
| 00000220  51 88 35 75 71 b5 e5 54  5b 12 2e 8f 09 67 fd a7  |Q.5uq..T[....g..| | ||||
| 00000230  24 20 3e b2 56 1c ce 97  28 5e f8 2b 2d 4f 9e f1  |$ >.V...(^.+-O..| | ||||
| 00000240  07 9f 6c 4b 5b 83 56 e2  32 42 e9 58 b6 d7 49 a6  |..lK[.V.2B.X..I.| | ||||
| 00000250  b5 68 1a 41 03 56 6b dc  5a 89 16 03 03 00 93 0f  |.h.A.Vk.Z.......| | ||||
| 00000260  00 00 8f 04 03 00 8b 30  81 88 02 42 00 e9 db 80  |.......0...B....| | ||||
| 00000270  e2 67 5d 00 21 88 67 99  7f df de 90 77 86 1e b7  |.g].!.g.....w...| | ||||
| 00000280  28 b1 2d 08 8d 02 de 9a  29 2b ca b9 9c 48 ad bd  |(.-.....)+...H..| | ||||
| 00000290  58 16 68 ad a3 0f 08 4c  01 52 e7 54 97 7c 06 0a  |X.h....L.R.T.|..| | ||||
| 000002a0  9e c8 97 61 e6 a9 53 62  fb b1 e3 b1 d7 03 02 42  |...a..Sb.......B| | ||||
| 000002b0  01 f3 99 af dc e6 69 af  1d fb d5 d0 63 bd d1 17  |......i.....c...| | ||||
| 000002c0  d2 ca a5 10 97 1a 94 93  df c4 94 27 53 77 1a 9e  |...........'Sw..| | ||||
| 000002d0  9b a5 e6 dd 0d cf 49 46  4c 5b 83 a4 52 f2 8b d6  |......IFL[..R...| | ||||
| 000002e0  b2 5f 40 e5 c3 d6 7f a2  2c 50 4d 4c 81 54 80 5b  |._@.....,PML.T.[| | ||||
| 000002f0  72 c7 14 03 03 00 01 01  16 03 03 00 40 00 00 00  |r...........@...| | ||||
| 00000300  00 00 00 00 00 00 00 00  00 00 00 00 00 96 9f 5a  |...............Z| | ||||
| 00000310  9c e3 d0 6c 5f 11 c4 cf  e4 34 1a 54 7e dc ec 1d  |...l_....4.T~...| | ||||
| 00000320  cd 08 eb 5c b4 32 1b d0  e5 12 1f 7a e7 86 16 56  |...\.2.....z...V| | ||||
| 00000330  a7 10 20 e1 59 31 65 63  12 7d 45 2d 2a           |.. .Y1ec.}E-*| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 54 bd b1 39 e6  |..........@T..9.| | ||||
| 00000010  a7 d0 76 5e 7e 91 0d 81  d1 c6 82 05 79 90 24 fc  |..v^~.......y.$.| | ||||
| 00000020  26 b7 ec e6 b8 72 05 59  bd 00 99 f7 dd f4 44 1e  |&....r.Y......D.| | ||||
| 00000030  79 4d 6d a1 22 4a e3 2c  41 05 ec 5a f7 32 17 ff  |yMm."J.,A..Z.2..| | ||||
| 00000040  d3 1b ee 21 71 98 99 b7  85 34 b3                 |...!q....4.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 b9 81 3f  48 14 95 9b 39 85 2a 9e  |.......?H...9.*.| | ||||
| 00000020  44 ec bb cf c2 29 a9 44  f7 8a 6b 3f 92 13 dd 0e  |D....).D..k?....| | ||||
| 00000030  c6 6b a1 51 79 15 03 03  00 30 00 00 00 00 00 00  |.k.Qy....0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 1c 93 91 23 12 11  |.............#..| | ||||
| 00000050  cc 30 fb 22 9e 23 b7 60  8a 3d 4c e6 52 2b 3e 6b  |.0.".#.`.=L.R+>k| | ||||
| 00000060  8e 47 91 b1 68 50 07 8a  d1 6f                    |.G..hP...o| | ||||
|  | @ -1,128 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 51 02 00 00  4d 03 03 7a 6c c2 d1 69  |....Q...M..zl..i| | ||||
| 00000010  af 86 6f 03 3c e4 70 ae  03 39 fd c6 3a a9 a4 b2  |..o.<.p..9..:...| | ||||
| 00000020  96 1e 50 f2 f4 16 50 e4  a2 f2 41 20 f8 83 3b 45  |..P...P...A ..;E| | ||||
| 00000030  0d 5b 88 bc 87 6c 81 23  e3 1d e0 7e 22 f5 6d 95  |.[...l.#...~".m.| | ||||
| 00000040  58 63 39 cf 4f 80 80 cc  41 bb b1 4c 00 05 00 00  |Xc9.O...A..L....| | ||||
| 00000050  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 2e 0d 00  |n8P)l...........| | ||||
| 00000320  00 26 03 01 02 40 00 1e  06 01 06 02 06 03 05 01  |.&...@..........| | ||||
| 00000330  05 02 05 03 04 01 04 02  04 03 03 01 03 02 03 03  |................| | ||||
| 00000340  02 01 02 02 02 03 00 00  0e 00 00 00              |............| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0| | ||||
| 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5| | ||||
| 00000020  d9 17 30 09 06 07 2a 86  48 ce 3d 04 01 30 45 31  |..0...*.H.=..0E1| | ||||
| 00000030  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000040  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 00000050  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 00000060  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 00000070  20 4c 74 64 30 1e 17 0d  31 32 31 31 31 34 31 33  | Ltd0...12111413| | ||||
| 00000080  32 35 35 33 5a 17 0d 32  32 31 31 31 32 31 33 32  |2553Z..221112132| | ||||
| 00000090  35 35 33 5a 30 41 31 0b  30 09 06 03 55 04 06 13  |553Z0A1.0...U...| | ||||
| 000000a0  02 41 55 31 0c 30 0a 06  03 55 04 08 13 03 4e 53  |.AU1.0...U....NS| | ||||
| 000000b0  57 31 10 30 0e 06 03 55  04 07 13 07 50 79 72 6d  |W1.0...U....Pyrm| | ||||
| 000000c0  6f 6e 74 31 12 30 10 06  03 55 04 03 13 09 4a 6f  |ont1.0...U....Jo| | ||||
| 000000d0  65 6c 20 53 69 6e 67 30  81 9b 30 10 06 07 2a 86  |el Sing0..0...*.| | ||||
| 000000e0  48 ce 3d 02 01 06 05 2b  81 04 00 23 03 81 86 00  |H.=....+...#....| | ||||
| 000000f0  04 00 95 8c 91 75 14 c0  5e c4 57 b4 d4 c3 6f 8d  |.....u..^.W...o.| | ||||
| 00000100  ae 68 1e dd 6f ce 86 e1  7e 6e b2 48 3e 81 e5 4e  |.h..o...~n.H>..N| | ||||
| 00000110  e2 c6 88 4b 64 dc f5 30  bb d3 ff 65 cc 5b f4 dd  |...Kd..0...e.[..| | ||||
| 00000120  b5 6a 3e 3e d0 1d de 47  c3 76 ad 19 f6 45 2c 8c  |.j>>...G.v...E,.| | ||||
| 00000130  bc d8 1d 01 4c 1f 70 90  46 76 48 8b 8f 83 cc 4a  |....L.p.FvH....J| | ||||
| 00000140  5c 8f 40 76 da e0 89 ec  1d 2b c4 4e 30 76 28 41  |\.@v.....+.N0v(A| | ||||
| 00000150  b2 62 a8 fb 5b f1 f9 4e  7a 8d bd 09 b8 ae ea 8b  |.b..[..Nz.......| | ||||
| 00000160  18 27 4f 2e 70 fe 13 96  ba c3 d3 40 16 cd 65 4e  |.'O.p......@..eN| | ||||
| 00000170  ac 11 1e e6 f1 30 09 06  07 2a 86 48 ce 3d 04 01  |.....0...*.H.=..| | ||||
| 00000180  03 81 8c 00 30 81 88 02  42 00 e0 14 c4 60 60 0b  |....0...B....``.| | ||||
| 00000190  72 68 b0 32 5d 61 4a 02  74 5c c2 81 b9 16 a8 3f  |rh.2]aJ.t\.....?| | ||||
| 000001a0  29 c8 36 c7 81 ff 6c b6  5b d9 70 f1 38 3b 50 48  |).6...l.[.p.8;PH| | ||||
| 000001b0  28 94 cb 09 1a 52 f1 5d  ee 8d f2 b9 f0 f0 da d9  |(....R.]........| | ||||
| 000001c0  15 3a f9 bd 03 7a 87 a2  23 35 ec 02 42 01 a3 d4  |.:...z..#5..B...| | ||||
| 000001d0  8a 78 35 1c 4a 9a 23 d2  0a be 2b 10 31 9d 9c 5f  |.x5.J.#...+.1.._| | ||||
| 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.| | ||||
| 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W| | ||||
| 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..| | ||||
| 00000210  03 03 00 86 10 00 00 82  00 80 6d 51 f3 7f f9 3e  |..........mQ...>| | ||||
| 00000220  fb 75 82 41 36 83 e8 6a  ee 2a 2e 25 90 67 4c 8e  |.u.A6..j.*.%.gL.| | ||||
| 00000230  62 2f 30 81 17 e0 85 09  0c 2b b7 23 d7 b0 e2 1d  |b/0......+.#....| | ||||
| 00000240  f7 3b d7 f5 a1 27 b6 ee  24 b6 1b cc 5b ea 66 0d  |.;...'..$...[.f.| | ||||
| 00000250  6a f4 e5 85 f9 da 43 b4  0e 86 85 e1 f5 aa be c8  |j.....C.........| | ||||
| 00000260  ce 39 4c 9c 86 00 08 c2  4b e2 c6 ec 2f f7 ce e6  |.9L.....K.../...| | ||||
| 00000270  bd 77 82 6f 23 b6 e0 bd  a2 92 b7 3a ac e8 56 f1  |.w.o#......:..V.| | ||||
| 00000280  af 54 5e 46 87 e9 3b 33  e7 b8 28 b7 d6 c8 90 35  |.T^F..;3..(....5| | ||||
| 00000290  d4 1c 43 d1 30 6f 55 4e  0a 70 16 03 03 00 93 0f  |..C.0oUN.p......| | ||||
| 000002a0  00 00 8f 04 03 00 8b 30  81 88 02 42 00 87 a3 50  |.......0...B...P| | ||||
| 000002b0  77 2a 46 97 68 1e ca 47  d2 46 a3 f7 37 e7 1c 3c  |w*F.h..G.F..7..<| | ||||
| 000002c0  e3 16 dc b9 93 b9 76 af  da 46 b1 da 47 bc 8b 9c  |......v..F..G...| | ||||
| 000002d0  ff 61 76 45 2b cf a6 85  4a 45 d4 51 98 18 31 c5  |.avE+...JE.Q..1.| | ||||
| 000002e0  61 54 3b ae 88 ca 56 ac  90 29 de f2 20 a6 02 42  |aT;...V..).. ..B| | ||||
| 000002f0  01 0d 54 c6 a5 14 c2 c0  83 5d ee 32 d3 c6 05 d7  |..T......].2....| | ||||
| 00000300  0c 40 42 ca 8a 69 5e cc  9b f5 c4 9b 7c 81 e9 b7  |.@B..i^.....|...| | ||||
| 00000310  dd 01 c0 e5 93 de 75 d2  6b 26 dd 16 2a ec d0 0e  |......u.k&..*...| | ||||
| 00000320  50 76 ee 36 ac 42 a3 0b  64 dd 4d 47 18 3e 5c 18  |Pv.6.B..d.MG.>\.| | ||||
| 00000330  16 3b 14 03 03 00 01 01  16 03 03 00 24 c2 c7 3a  |.;..........$..:| | ||||
| 00000340  a2 9b 93 ea 75 1c b6 47  60 2e 15 cf b8 63 73 8a  |....u..G`....cs.| | ||||
| 00000350  2c b8 86 a8 12 1d cb 30  e2 38 fe 0f 02 57 43 f0  |,......0.8...WC.| | ||||
| 00000360  07                                                |.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 ca e7 84 5c 1b  |..........$...\.| | ||||
| 00000010  94 4c d8 78 6f 3f 80 b2  f9 9f fd c5 a5 fd 6f 89  |.L.xo?........o.| | ||||
| 00000020  d7 50 a1 81 bf d0 9d eb  75 10 69 97 35 74 06     |.P......u.i.5t.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1a 4a 11 45  18 75 a7 47 d3 36 ad 24  |.....J.E.u.G.6.$| | ||||
| 00000010  fc d0 68 44 f2 9a 05 54  a2 44 e3 a7 33 74 99 15  |..hD...T.D..3t..| | ||||
| 00000020  03 03 00 16 d5 d5 75 a9  a9 ef f5 31 50 f7 00 08  |......u....1P...| | ||||
| 00000030  78 0a 00 1f c8 42 db c7  15 6b                    |x....B...k| | ||||
|  | @ -1,133 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 ef cd 72 a3 35  |....Y...U....r.5| | ||||
| 00000010  e7 11 9f 67 a4 42 9e 34  03 b4 ab e1 0d 4f a4 09  |...g.B.4.....O..| | ||||
| 00000020  4e e1 8d 52 d2 d0 0e 0e  f0 7a 74 20 da 3f 9c d8  |N..R.....zt .?..| | ||||
| 00000030  e3 c6 5c a1 e8 5e a0 48  50 e8 70 aa 96 a7 84 4a  |..\..^.HP.p....J| | ||||
| 00000040  3a b3 c3 21 24 30 6c 7a  d5 b4 9b 9c c0 09 00 00  |:..!$0lz........| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 03 00 d8 0c 00  00 d4 03 00 17 41 04 7e  |*............A.~| | ||||
| 00000280  3b ae 99 3d b7 3b da 7a  44 b1 b3 0d 41 36 c5 47  |;..=.;.zD...A6.G| | ||||
| 00000290  b2 b9 65 44 79 2a c4 a9  e3 a8 ee 6a 77 3b ee d8  |..eDy*.....jw;..| | ||||
| 000002a0  ee 11 0a 20 61 9b be 03  54 29 63 b3 fb 91 6f 34  |... a...T)c...o4| | ||||
| 000002b0  cb ad 6c 5e 00 5f 0a c7  fd 70 d4 d6 de 5a 00 04  |..l^._...p...Z..| | ||||
| 000002c0  03 00 8b 30 81 88 02 42  00 c2 21 72 c5 61 07 2f  |...0...B..!r.a./| | ||||
| 000002d0  0e af fd d5 22 43 e5 2e  06 51 29 73 c2 ec 50 34  |...."C...Q)s..P4| | ||||
| 000002e0  76 ab 67 fe 37 49 68 54  4b 16 d2 7a 4c 04 02 b2  |v.g.7IhTK..zL...| | ||||
| 000002f0  0a 66 28 fb b5 bf 5b 00  4b dc bf e2 9e 99 a7 0c  |.f(...[.K.......| | ||||
| 00000300  7c 64 36 79 d6 4e 99 70  5f 97 02 42 01 bb 4b 10  ||d6y.N.p_..B..K.| | ||||
| 00000310  36 f1 38 c1 42 de e9 68  41 2d 0a 4b 19 eb 3c 6b  |6.8.B..hA-.K..<k| | ||||
| 00000320  cd 11 3e 20 3f 95 c3 c7  ba 18 0c 4a 6a da 45 77  |..> ?......Jj.Ew| | ||||
| 00000330  8c 8d f4 01 d3 15 91 3e  64 22 16 bd b5 2a 07 52  |.......>d"...*.R| | ||||
| 00000340  63 e5 de 0c 22 90 2e 2f  e9 b4 3f ab b8 27 16 03  |c..."../..?..'..| | ||||
| 00000350  03 00 2e 0d 00 00 26 03  01 02 40 00 1e 06 01 06  |......&...@.....| | ||||
| 00000360  02 06 03 05 01 05 02 05  03 04 01 04 02 04 03 03  |................| | ||||
| 00000370  01 03 02 03 03 02 01 02  02 02 03 00 00 0e 00 00  |................| | ||||
| 00000380  00                                                |.| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 01 fb 0b 00 01  f7 00 01 f4 00 01 f1 30  |...............0| | ||||
| 00000010  82 01 ed 30 82 01 58 a0  03 02 01 02 02 01 00 30  |...0..X........0| | ||||
| 00000020  0b 06 09 2a 86 48 86 f7  0d 01 01 05 30 26 31 10  |...*.H......0&1.| | ||||
| 00000030  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 00000040  31 12 30 10 06 03 55 04  03 13 09 31 32 37 2e 30  |1.0...U....127.0| | ||||
| 00000050  2e 30 2e 31 30 1e 17 0d  31 31 31 32 30 38 30 37  |.0.10...11120807| | ||||
| 00000060  35 35 31 32 5a 17 0d 31  32 31 32 30 37 30 38 30  |5512Z..121207080| | ||||
| 00000070  30 31 32 5a 30 26 31 10  30 0e 06 03 55 04 0a 13  |012Z0&1.0...U...| | ||||
| 00000080  07 41 63 6d 65 20 43 6f  31 12 30 10 06 03 55 04  |.Acme Co1.0...U.| | ||||
| 00000090  03 13 09 31 32 37 2e 30  2e 30 2e 31 30 81 9c 30  |...127.0.0.10..0| | ||||
| 000000a0  0b 06 09 2a 86 48 86 f7  0d 01 01 01 03 81 8c 00  |...*.H..........| | ||||
| 000000b0  30 81 88 02 81 80 4e d0  7b 31 e3 82 64 d9 59 c0  |0.....N.{1..d.Y.| | ||||
| 000000c0  c2 87 a4 5e 1e 8b 73 33  c7 63 53 df 66 92 06 84  |...^..s3.cS.f...| | ||||
| 000000d0  f6 64 d5 8f e4 36 a7 1d  2b e8 b3 20 36 45 23 b5  |.d...6..+.. 6E#.| | ||||
| 000000e0  e3 95 ae ed e0 f5 20 9c  8d 95 df 7f 5a 12 ef 87  |...... .....Z...| | ||||
| 000000f0  e4 5b 68 e4 e9 0e 74 ec  04 8a 7f de 93 27 c4 01  |.[h...t......'..| | ||||
| 00000100  19 7a bd f2 dc 3d 14 ab  d0 54 ca 21 0c d0 4d 6e  |.z...=...T.!..Mn| | ||||
| 00000110  87 2e 5c c5 d2 bb 4d 4b  4f ce b6 2c f7 7e 88 ec  |..\...MKO..,.~..| | ||||
| 00000120  7c d7 02 91 74 a6 1e 0c  1a da e3 4a 5a 2e de 13  ||...t......JZ...| | ||||
| 00000130  9c 4c 40 88 59 93 02 03  01 00 01 a3 32 30 30 30  |.L@.Y.......2000| | ||||
| 00000140  0e 06 03 55 1d 0f 01 01  ff 04 04 03 02 00 a0 30  |...U...........0| | ||||
| 00000150  0d 06 03 55 1d 0e 04 06  04 04 01 02 03 04 30 0f  |...U..........0.| | ||||
| 00000160  06 03 55 1d 23 04 08 30  06 80 04 01 02 03 04 30  |..U.#..0.......0| | ||||
| 00000170  0b 06 09 2a 86 48 86 f7  0d 01 01 05 03 81 81 00  |...*.H..........| | ||||
| 00000180  36 1f b3 7a 0c 75 c9 6e  37 46 61 2b d5 bd c0 a7  |6..z.u.n7Fa+....| | ||||
| 00000190  4b cc 46 9a 81 58 7c 85  79 29 c8 c8 c6 67 dd 32  |K.F..X|.y)...g.2| | ||||
| 000001a0  56 45 2b 75 b6 e9 24 a9  50 9a be 1f 5a fa 1a 15  |VE+u..$.P...Z...| | ||||
| 000001b0  d9 cc 55 95 72 16 83 b9  c2 b6 8f fd 88 8c 38 84  |..U.r.........8.| | ||||
| 000001c0  1d ab 5d 92 31 13 4f fd  83 3b c6 9d f1 11 62 b6  |..].1.O..;....b.| | ||||
| 000001d0  8b ec ab 67 be c8 64 b0  11 50 46 58 17 6b 99 1c  |...g..d..PFX.k..| | ||||
| 000001e0  d3 1d fc 06 f1 0e e5 96  a8 0c f9 78 20 b7 44 18  |...........x .D.| | ||||
| 000001f0  51 8d 10 7e 4f 94 67 df  a3 4e 70 73 8e 90 91 85  |Q..~O.g..Nps....| | ||||
| 00000200  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000210  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000220  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000230  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000240  a6 b5 68 1a 41 03 56 6b  dc 5a 89 16 03 03 00 88  |..h.A.Vk.Z......| | ||||
| 00000250  0f 00 00 84 04 01 00 80  07 7e 14 14 83 b9 d9 52  |.........~.....R| | ||||
| 00000260  fd db c0 a4 79 37 b7 91  0b bb d6 ab d0 d1 c8 2e  |....y7..........| | ||||
| 00000270  35 5b 58 3f ce 6b f6 a9  01 95 34 a9 8b da 6b 23  |5[X?.k....4...k#| | ||||
| 00000280  b7 99 11 75 3e f8 db bc  ab 9b d4 8f 4f 89 12 d9  |...u>.......O...| | ||||
| 00000290  2d 18 0e 54 2d 61 ff 9a  0e 3d 50 66 1d c2 e0 f6  |-..T-a...=Pf....| | ||||
| 000002a0  4d 65 ca e2 08 af 29 cf  6d ab 63 72 ad 7c 03 a1  |Me....).m.cr.|..| | ||||
| 000002b0  1e a1 f4 75 f5 54 58 28  3b 7d f7 21 d5 67 ec 60  |...u.TX(;}.!.g.`| | ||||
| 000002c0  3b 59 81 ac f5 9a c6 cb  6a af da 7e 29 c4 c2 68  |;Y......j..~)..h| | ||||
| 000002d0  53 34 aa b8 0e 58 61 24  14 03 03 00 01 01 16 03  |S4...Xa$........| | ||||
| 000002e0  03 00 40 00 00 00 00 00  00 00 00 00 00 00 00 00  |..@.............| | ||||
| 000002f0  00 00 00 a4 af 4b 95 ec  53 cf 49 8d b4 6c e0 3b  |.....K..S.I..l.;| | ||||
| 00000300  76 60 23 9b 2a f3 2c 12  61 18 cf 56 7c 1d 8c 01  |v`#.*.,.a..V|...| | ||||
| 00000310  a8 bb 19 4d 1f ff ff 73  a2 90 e5 87 7b 85 d3 1b  |...M...s....{...| | ||||
| 00000320  74 6d 36                                          |tm6| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 fb 28 05 0a 99  |..........@.(...| | ||||
| 00000010  61 d1 c7 52 a7 9e 95 a5  c1 11 3c 81 ee f2 b8 68  |a..R......<....h| | ||||
| 00000020  a6 35 e2 7e bb 3c e7 7b  61 72 08 29 3a a5 e9 d3  |.5.~.<.{ar.):...| | ||||
| 00000030  39 9c d2 0f 38 12 9b 92  79 36 58 bc f3 23 85 76  |9...8...y6X..#.v| | ||||
| 00000040  1c 7b 6c 49 0c bc 00 61  20 1b ff                 |.{lI...a ..| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 fa f6 0b  1f f6 28 c7 4c 6c c8 8d  |..........(.Ll..| | ||||
| 00000020  9c 97 5f 3d 22 bb 45 fc  07 ae 3a 7e 74 01 7c 71  |.._=".E...:~t.|q| | ||||
| 00000030  39 45 15 d3 c7 15 03 03  00 30 00 00 00 00 00 00  |9E.......0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 a1 43 03 79 a4 4e  |...........C.y.N| | ||||
| 00000050  bd 0f 17 c4 d0 29 1a 8a  dd 7b e7 48 3c e4 4b 8a  |.....)...{.H<.K.| | ||||
| 00000060  53 3d 1d 18 f9 05 fd 4b  73 4a                    |S=.....KsJ| | ||||
|  | @ -1,126 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 51 02 00 00  4d 03 03 32 d8 c5 23 e3  |....Q...M..2..#.| | ||||
| 00000010  c7 4c d9 e9 d9 bd 1d d4  70 60 df 01 46 dc ca c5  |.L......p`..F...| | ||||
| 00000020  d3 1b 57 28 f0 c4 4b 1c  b3 8d 13 20 4a b8 d7 eb  |..W(..K.... J...| | ||||
| 00000030  70 9e e5 6d 6f 8c d4 0d  a4 25 3a ce 91 e0 25 68  |p..mo....%:...%h| | ||||
| 00000040  6f 25 38 0d 91 57 af 28  39 9c 61 85 00 05 00 00  |o%8..W.(9.a.....| | ||||
| 00000050  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 2e 0d 00  |n8P)l...........| | ||||
| 00000320  00 26 03 01 02 40 00 1e  06 01 06 02 06 03 05 01  |.&...@..........| | ||||
| 00000330  05 02 05 03 04 01 04 02  04 03 03 01 03 02 03 03  |................| | ||||
| 00000340  02 01 02 02 02 03 00 00  0e 00 00 00              |............| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 01 fb 0b 00 01  f7 00 01 f4 00 01 f1 30  |...............0| | ||||
| 00000010  82 01 ed 30 82 01 58 a0  03 02 01 02 02 01 00 30  |...0..X........0| | ||||
| 00000020  0b 06 09 2a 86 48 86 f7  0d 01 01 05 30 26 31 10  |...*.H......0&1.| | ||||
| 00000030  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 00000040  31 12 30 10 06 03 55 04  03 13 09 31 32 37 2e 30  |1.0...U....127.0| | ||||
| 00000050  2e 30 2e 31 30 1e 17 0d  31 31 31 32 30 38 30 37  |.0.10...11120807| | ||||
| 00000060  35 35 31 32 5a 17 0d 31  32 31 32 30 37 30 38 30  |5512Z..121207080| | ||||
| 00000070  30 31 32 5a 30 26 31 10  30 0e 06 03 55 04 0a 13  |012Z0&1.0...U...| | ||||
| 00000080  07 41 63 6d 65 20 43 6f  31 12 30 10 06 03 55 04  |.Acme Co1.0...U.| | ||||
| 00000090  03 13 09 31 32 37 2e 30  2e 30 2e 31 30 81 9c 30  |...127.0.0.10..0| | ||||
| 000000a0  0b 06 09 2a 86 48 86 f7  0d 01 01 01 03 81 8c 00  |...*.H..........| | ||||
| 000000b0  30 81 88 02 81 80 4e d0  7b 31 e3 82 64 d9 59 c0  |0.....N.{1..d.Y.| | ||||
| 000000c0  c2 87 a4 5e 1e 8b 73 33  c7 63 53 df 66 92 06 84  |...^..s3.cS.f...| | ||||
| 000000d0  f6 64 d5 8f e4 36 a7 1d  2b e8 b3 20 36 45 23 b5  |.d...6..+.. 6E#.| | ||||
| 000000e0  e3 95 ae ed e0 f5 20 9c  8d 95 df 7f 5a 12 ef 87  |...... .....Z...| | ||||
| 000000f0  e4 5b 68 e4 e9 0e 74 ec  04 8a 7f de 93 27 c4 01  |.[h...t......'..| | ||||
| 00000100  19 7a bd f2 dc 3d 14 ab  d0 54 ca 21 0c d0 4d 6e  |.z...=...T.!..Mn| | ||||
| 00000110  87 2e 5c c5 d2 bb 4d 4b  4f ce b6 2c f7 7e 88 ec  |..\...MKO..,.~..| | ||||
| 00000120  7c d7 02 91 74 a6 1e 0c  1a da e3 4a 5a 2e de 13  ||...t......JZ...| | ||||
| 00000130  9c 4c 40 88 59 93 02 03  01 00 01 a3 32 30 30 30  |.L@.Y.......2000| | ||||
| 00000140  0e 06 03 55 1d 0f 01 01  ff 04 04 03 02 00 a0 30  |...U...........0| | ||||
| 00000150  0d 06 03 55 1d 0e 04 06  04 04 01 02 03 04 30 0f  |...U..........0.| | ||||
| 00000160  06 03 55 1d 23 04 08 30  06 80 04 01 02 03 04 30  |..U.#..0.......0| | ||||
| 00000170  0b 06 09 2a 86 48 86 f7  0d 01 01 05 03 81 81 00  |...*.H..........| | ||||
| 00000180  36 1f b3 7a 0c 75 c9 6e  37 46 61 2b d5 bd c0 a7  |6..z.u.n7Fa+....| | ||||
| 00000190  4b cc 46 9a 81 58 7c 85  79 29 c8 c8 c6 67 dd 32  |K.F..X|.y)...g.2| | ||||
| 000001a0  56 45 2b 75 b6 e9 24 a9  50 9a be 1f 5a fa 1a 15  |VE+u..$.P...Z...| | ||||
| 000001b0  d9 cc 55 95 72 16 83 b9  c2 b6 8f fd 88 8c 38 84  |..U.r.........8.| | ||||
| 000001c0  1d ab 5d 92 31 13 4f fd  83 3b c6 9d f1 11 62 b6  |..].1.O..;....b.| | ||||
| 000001d0  8b ec ab 67 be c8 64 b0  11 50 46 58 17 6b 99 1c  |...g..d..PFX.k..| | ||||
| 000001e0  d3 1d fc 06 f1 0e e5 96  a8 0c f9 78 20 b7 44 18  |...........x .D.| | ||||
| 000001f0  51 8d 10 7e 4f 94 67 df  a3 4e 70 73 8e 90 91 85  |Q..~O.g..Nps....| | ||||
| 00000200  16 03 03 00 86 10 00 00  82 00 80 6d 51 f3 7f f9  |...........mQ...| | ||||
| 00000210  3e fb 75 82 41 36 83 e8  6a ee 2a 2e 25 90 67 4c  |>.u.A6..j.*.%.gL| | ||||
| 00000220  8e 62 2f 30 81 17 e0 85  09 0c 2b b7 23 d7 b0 e2  |.b/0......+.#...| | ||||
| 00000230  1d f7 3b d7 f5 a1 27 b6  ee 24 b6 1b cc 5b ea 66  |..;...'..$...[.f| | ||||
| 00000240  0d 6a f4 e5 85 f9 da 43  b4 0e 86 85 e1 f5 aa be  |.j.....C........| | ||||
| 00000250  c8 ce 39 4c 9c 86 00 08  c2 4b e2 c6 ec 2f f7 ce  |..9L.....K.../..| | ||||
| 00000260  e6 bd 77 82 6f 23 b6 e0  bd a2 92 b7 3a ac e8 56  |..w.o#......:..V| | ||||
| 00000270  f1 af 54 5e 46 87 e9 3b  33 e7 b8 28 b7 d6 c8 90  |..T^F..;3..(....| | ||||
| 00000280  35 d4 1c 43 d1 30 6f 55  4e 0a 70 16 03 03 00 88  |5..C.0oUN.p.....| | ||||
| 00000290  0f 00 00 84 04 01 00 80  3a 55 0a c6 97 2d 71 bc  |........:U...-q.| | ||||
| 000002a0  9d e1 ec 5b cb 3d de 64  8e fd 99 c0 55 1f d5 d1  |...[.=.d....U...| | ||||
| 000002b0  ae 74 79 b8 1d 25 3e 4d  19 32 62 ca 04 82 f4 3f  |.ty..%>M.2b....?| | ||||
| 000002c0  7c 2b 7a 82 a6 86 2b d3  ba b0 ad 48 c4 c9 33 e6  ||+z...+....H..3.| | ||||
| 000002d0  c8 2c 4a 06 75 a6 e7 49  65 53 54 33 27 55 7a 30  |.,J.u..IeST3'Uz0| | ||||
| 000002e0  55 64 ef a0 d9 96 29 69  3f 90 ba b3 e4 aa 4e 5f  |Ud....)i?.....N_| | ||||
| 000002f0  1d 00 c2 90 c2 04 f9 9b  7f f1 e5 fd f2 1e 57 fd  |..............W.| | ||||
| 00000300  fc 0b 70 81 71 9a 43 9b  80 ff 96 42 f5 8d ff 2f  |..p.q.C....B.../| | ||||
| 00000310  4f d9 48 e2 6e bf 9e f2  14 03 03 00 01 01 16 03  |O.H.n...........| | ||||
| 00000320  03 00 24 32 b3 61 bd 9a  e1 21 79 60 f0 4b 6c 26  |..$2.a...!y`.Kl&| | ||||
| 00000330  15 91 14 6d bc 42 9b c0  21 5f 93 2d d0 f7 db 9f  |...m.B..!_.-....| | ||||
| 00000340  81 60 bd d6 34 fa 31                              |.`..4.1| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 5c 99 fe 86 6f  |..........$\...o| | ||||
| 00000010  89 c3 e1 ed 24 1f a5 81  a8 fd 2a 8d 28 01 cd 86  |....$.....*.(...| | ||||
| 00000020  11 48 5c 13 fe f4 29 dd  ff 15 70 da 68 3b d8     |.H\...)...p.h;.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1a a9 5b 30  f3 9d 98 b0 a6 a6 4c 52  |......[0......LR| | ||||
| 00000010  35 c9 aa 88 24 12 0f b0  53 88 21 8a 39 56 62 15  |5...$...S.!.9Vb.| | ||||
| 00000020  03 03 00 16 ff 5f 0a cf  48 2a bd 2f e9 db 50 bc  |....._..H*./..P.| | ||||
| 00000030  11 3c c8 d2 61 69 6c 84  22 bf                    |.<..ail.".| | ||||
|  | @ -1,89 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 97 dc 20 65 0f  |....Y...U.... e.| | ||||
| 00000010  3f 83 4a 55 06 27 32 2f  68 81 f9 4a 6d 0a 8c 3e  |?.JU.'2/h..Jm..>| | ||||
| 00000020  c0 aa c1 c2 e1 09 a8 a0  a5 e3 42 20 7b ed 80 22  |..........B {.."| | ||||
| 00000030  22 f9 84 ab 6d f5 63 18  bc f8 dc 7d 13 31 6b 4b  |"...m.c....}.1kK| | ||||
| 00000040  85 c0 63 8d e5 d8 29 c8  ad 09 d7 b7 c0 09 00 00  |..c...).........| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 03 00 d8 0c 00  00 d4 03 00 17 41 04 dd  |*............A..| | ||||
| 00000280  34 64 e4 ba 63 e0 25 f2  6b cd 24 21 58 8b e1 08  |4d..c.%.k.$!X...| | ||||
| 00000290  eb 09 6f 93 e2 cd 19 13  d0 e6 5a 0c ee 57 b9 ab  |..o.......Z..W..| | ||||
| 000002a0  21 be 8d b5 47 1e a8 01  a4 de c4 de a7 d5 eb dd  |!...G...........| | ||||
| 000002b0  d9 bd 66 1a 71 0a b7 a1  3d 10 8e b6 2d 73 ba 04  |..f.q...=...-s..| | ||||
| 000002c0  03 00 8b 30 81 88 02 42  01 c6 4a 64 2b 66 7f cb  |...0...B..Jd+f..| | ||||
| 000002d0  28 eb ad 05 d4 86 a0 d6  0f 12 52 03 fc 66 3f 76  |(.........R..f?v| | ||||
| 000002e0  db 85 8f b4 f1 45 04 f5  10 27 b3 76 62 9a bc 7b  |.....E...'.vb..{| | ||||
| 000002f0  f9 6e f6 45 fb 15 9c eb  5c 70 ca b2 40 00 f8 18  |.n.E....\p..@...| | ||||
| 00000300  b9 e4 28 fc e4 b7 d8 15  70 1a 02 42 01 d3 8f 53  |..(.....p..B...S| | ||||
| 00000310  57 b5 e4 f5 84 97 a2 e9  07 5a f8 67 bd 03 02 6d  |W........Z.g...m| | ||||
| 00000320  ea 4e 14 da 12 2c d0 7c  89 a0 93 97 46 c9 62 ee  |.N...,.|....F.b.| | ||||
| 00000330  c0 d3 d6 bf 04 11 af 19  96 6b a9 86 f8 2c 2f ab  |.........k...,/.| | ||||
| 00000340  89 20 45 94 b6 d1 43 64  fc eb 2e ff 80 37 16 03  |. E...Cd.....7..| | ||||
| 00000350  03 00 04 0e 00 00 00                              |.......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 40 00 00  00 00 00 00 00 00 00 00  |.....@..........| | ||||
| 00000060  00 00 00 00 00 00 21 2a  44 9c f5 f7 b5 0f 43 f4  |......!*D.....C.| | ||||
| 00000070  19 03 02 64 c0 9a a0 d1  50 89 f2 f2 dd a1 dc 72  |...d....P......r| | ||||
| 00000080  da 08 d1 5c 75 fa 54 ee  bf c8 76 5f 57 df 62 2b  |...\u.T...v_W.b+| | ||||
| 00000090  36 48 40 c4 a4 ac                                 |6H@...| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 72 a7 fe d8 23  |..........@r...#| | ||||
| 00000010  6a 4f 4c 11 09 5d 0e d3  86 4e d6 e8 96 cb ac 71  |jOL..]...N.....q| | ||||
| 00000020  68 e2 50 94 eb e4 d2 9b  61 56 e2 17 50 5e fb b2  |h.P.....aV..P^..| | ||||
| 00000030  fe a0 1f 8d 74 2c c6 d0  ba 5e f7 73 b8 00 8d b5  |....t,...^.s....| | ||||
| 00000040  57 e1 41 90 21 15 91 6d  69 25 83                 |W.A.!..mi%.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 80 70 b8  c4 f1 ef 0c 2e 87 5c fc  |......p.......\.| | ||||
| 00000020  fb 54 19 4d 42 42 09 32  32 dd 54 b9 6e 35 ea 13  |.T.MBB.22.T.n5..| | ||||
| 00000030  e1 2b 4c 7e e6 15 03 03  00 30 00 00 00 00 00 00  |.+L~.....0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 3e aa 24 38 78 63  |..........>.$8xc| | ||||
| 00000050  ae 5c d4 28 2d 3b 7c 1b  66 2f 07 02 00 e1 78 dd  |.\.(-;|.f/....x.| | ||||
| 00000060  6e 43 e7 23 da 55 55 33  a2 d8                    |nC.#.UU3..| | ||||
|  | @ -1,84 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 c9 39 e6 18 c8  |....Y...U...9...| | ||||
| 00000010  4a 7f f3 23 75 99 22 80  48 bc e3 a7 eb 49 d5 95  |J..#u.".H....I..| | ||||
| 00000020  b1 ec 1d 9e 44 09 6e d9  b7 b2 f8 20 30 fd 2b 50  |....D.n.... 0.+P| | ||||
| 00000030  d2 91 de c3 d0 84 a9 d5  ba c0 45 0f 18 c4 98 73  |..........E....s| | ||||
| 00000040  4b cf c6 82 dd 88 0d 35  28 8e f8 d3 c0 2b 00 00  |K......5(....+..| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 03 00 d8 0c 00  00 d4 03 00 17 41 04 91  |*............A..| | ||||
| 00000280  d0 f0 1b df 51 57 74 f3  62 ee d5 9e e8 7d bd 65  |....QWt.b....}.e| | ||||
| 00000290  69 0a 5a 2b 75 c3 3c f7  24 3f 91 26 34 fe d8 8f  |i.Z+u.<.$?.&4...| | ||||
| 000002a0  fa d3 7e f6 f5 01 89 7b  f5 69 5c c2 52 41 81 93  |..~....{.i\.RA..| | ||||
| 000002b0  c4 9e 01 5d 96 fa db 41  3d 0b 78 58 ad 29 b5 04  |...]...A=.xX.)..| | ||||
| 000002c0  03 00 8b 30 81 88 02 42  01 92 7c 0a 7c 79 d1 41  |...0...B..|.|y.A| | ||||
| 000002d0  98 b7 57 37 10 d9 31 41  2e fe d5 a8 94 26 fa 59  |..W7..1A.....&.Y| | ||||
| 000002e0  78 bf 15 c0 cf e7 a9 09  a8 6f 97 45 1b 3f e6 60  |x........o.E.?.`| | ||||
| 000002f0  2d 78 dc ec 99 0f 92 43  64 20 c4 6b 59 16 df 66  |-x.....Cd .kY..f| | ||||
| 00000300  83 a0 f1 d1 91 c1 8a 29  ce 4d 02 42 01 61 a2 6c  |.......).M.B.a.l| | ||||
| 00000310  84 58 58 0b 74 fa 9e 4c  33 6a b5 b1 a9 da ad 1c  |.XX.t..L3j......| | ||||
| 00000320  d9 33 25 91 59 a0 f2 21  ae b1 14 15 4a d1 65 50  |.3%.Y..!....J.eP| | ||||
| 00000330  0e 1d 1e bc f6 29 da 22  09 20 de 75 30 ac 0a 1e  |.....).". .u0...| | ||||
| 00000340  7e 46 98 89 dd 6d e4 6a  9b 83 b5 85 f3 74 16 03  |~F...m.j.....t..| | ||||
| 00000350  03 00 04 0e 00 00 00                              |.......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 b0 4d  |.....(.........M| | ||||
| 00000060  e2 ad 33 40 f2 44 e3 c7  ad a5 c6 c7 e5 00 07 68  |..3@.D.........h| | ||||
| 00000070  72 80 d5 89 f0 aa 72 2b  36 5a 51 f6 f0 6a        |r.....r+6ZQ..j| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 5d b6 1b 59 71  |..........(]..Yq| | ||||
| 00000010  f0 7a 2c 4f d5 f0 7b a7  ab 56 48 4d b4 f7 5c bc  |.z,O..{..VHM..\.| | ||||
| 00000020  34 d6 cc 02 4f 1f 45 b2  e9 ff 96 0e a2 47 d6 4e  |4...O.E......G.N| | ||||
| 00000030  47 83 68                                          |G.h| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 2f f1 95  |............./..| | ||||
| 00000010  75 5e 0d fb 48 9b 40 10  6d bb 81 7e d2 ca 68 ae  |u^..H.@.m..~..h.| | ||||
| 00000020  84 47 d2 15 03 03 00 1a  00 00 00 00 00 00 00 02  |.G..............| | ||||
| 00000030  26 87 82 85 fa 5f a2 b2  19 b2 4e 81 f6 0f c6 c5  |&...._....N.....| | ||||
| 00000040  e0 3e                                             |.>| | ||||
|  | @ -1,84 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 d2 dd 5a 60 0d  |....Y...U....Z`.| | ||||
| 00000010  25 72 ed e6 89 6e 4d d8  1c 75 76 e4 37 5f 06 80  |%r...nM..uv.7_..| | ||||
| 00000020  26 23 48 02 cd c6 b1 e5  59 89 b2 20 99 9e e6 31  |&#H.....Y.. ...1| | ||||
| 00000030  8f ca b2 aa 68 b2 6b 2e  c0 f3 f8 e9 56 f4 60 90  |....h.k.....V.`.| | ||||
| 00000040  bb 5d 79 fd 4f f5 71 15  5b e7 31 20 c0 2c 00 00  |.]y.O.q.[.1 .,..| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 0e 0b 00 02 0a 00  02 07 00 02 04 30 82 02  |.............0..| | ||||
| 00000070  00 30 82 01 62 02 09 00  b8 bf 2d 47 a0 d2 eb f4  |.0..b.....-G....| | ||||
| 00000080  30 09 06 07 2a 86 48 ce  3d 04 01 30 45 31 0b 30  |0...*.H.=..0E1.0| | ||||
| 00000090  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 000000a0  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 000000b0  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 000000c0  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 000000d0  74 64 30 1e 17 0d 31 32  31 31 32 32 31 35 30 36  |td0...1211221506| | ||||
| 000000e0  33 32 5a 17 0d 32 32 31  31 32 30 31 35 30 36 33  |32Z..22112015063| | ||||
| 000000f0  32 5a 30 45 31 0b 30 09  06 03 55 04 06 13 02 41  |2Z0E1.0...U....A| | ||||
| 00000100  55 31 13 30 11 06 03 55  04 08 13 0a 53 6f 6d 65  |U1.0...U....Some| | ||||
| 00000110  2d 53 74 61 74 65 31 21  30 1f 06 03 55 04 0a 13  |-State1!0...U...| | ||||
| 00000120  18 49 6e 74 65 72 6e 65  74 20 57 69 64 67 69 74  |.Internet Widgit| | ||||
| 00000130  73 20 50 74 79 20 4c 74  64 30 81 9b 30 10 06 07  |s Pty Ltd0..0...| | ||||
| 00000140  2a 86 48 ce 3d 02 01 06  05 2b 81 04 00 23 03 81  |*.H.=....+...#..| | ||||
| 00000150  86 00 04 00 c4 a1 ed be  98 f9 0b 48 73 36 7e c3  |...........Hs6~.| | ||||
| 00000160  16 56 11 22 f2 3d 53 c3  3b 4d 21 3d cd 6b 75 e6  |.V.".=S.;M!=.ku.| | ||||
| 00000170  f6 b0 dc 9a df 26 c1 bc  b2 87 f0 72 32 7c b3 64  |.....&.....r2|.d| | ||||
| 00000180  2f 1c 90 bc ea 68 23 10  7e fe e3 25 c0 48 3a 69  |/....h#.~..%.H:i| | ||||
| 00000190  e0 28 6d d3 37 00 ef 04  62 dd 0d a0 9c 70 62 83  |.(m.7...b....pb.| | ||||
| 000001a0  d8 81 d3 64 31 aa 9e 97  31 bd 96 b0 68 c0 9b 23  |...d1...1...h..#| | ||||
| 000001b0  de 76 64 3f 1a 5c 7f e9  12 0e 58 58 b6 5f 70 dd  |.vd?.\....XX._p.| | ||||
| 000001c0  9b d8 ea d5 d7 f5 d5 cc  b9 b6 9f 30 66 5b 66 9a  |...........0f[f.| | ||||
| 000001d0  20 e2 27 e5 bf fe 3b 30  09 06 07 2a 86 48 ce 3d  | .'...;0...*.H.=| | ||||
| 000001e0  04 01 03 81 8c 00 30 81  88 02 42 01 88 a2 4f eb  |......0...B...O.| | ||||
| 000001f0  e2 45 c5 48 7d 1b ac f5  ed 98 9d ae 47 70 c0 5e  |.E.H}.......Gp.^| | ||||
| 00000200  1b b6 2f bd f1 b6 4d b7  61 40 d3 11 a2 ce ee 0b  |../...M.a@......| | ||||
| 00000210  7e 92 7e ff 76 9d c3 3b  7e a5 3f ce fa 10 e2 59  |~.~.v..;~.?....Y| | ||||
| 00000220  ec 47 2d 7c ac da 4e 97  0e 15 a0 6f d0 02 42 01  |.G-|..N....o..B.| | ||||
| 00000230  4d fc be 67 13 9c 2d 05  0e bd 3f a3 8c 25 c1 33  |M..g..-...?..%.3| | ||||
| 00000240  13 83 0d 94 06 bb d4 37  7a f6 ec 7a c9 86 2e dd  |.......7z..z....| | ||||
| 00000250  d7 11 69 7f 85 7c 56 de  fb 31 78 2b e4 c7 78 0d  |..i..|V..1x+..x.| | ||||
| 00000260  ae cb be 9e 4e 36 24 31  7b 6a 0f 39 95 12 07 8f  |....N6$1{j.9....| | ||||
| 00000270  2a 16 03 03 00 d8 0c 00  00 d4 03 00 17 41 04 16  |*............A..| | ||||
| 00000280  80 a7 71 18 d7 2e 0e 9b  a0 ae 58 8b ff 56 c5 21  |..q.......X..V.!| | ||||
| 00000290  44 b1 ff 7e 2a 1a c4 39  91 d8 f5 cb 67 6c eb 24  |D..~*..9....gl.$| | ||||
| 000002a0  86 e3 2f 79 ca 07 a4 6a  ad 92 3e 36 79 f0 00 25  |../y...j..>6y..%| | ||||
| 000002b0  b5 b8 31 e5 3c 2e f1 5e  16 23 69 c4 14 a5 93 04  |..1.<..^.#i.....| | ||||
| 000002c0  03 00 8b 30 81 88 02 42  01 68 cb 9b f4 22 71 10  |...0...B.h..."q.| | ||||
| 000002d0  c5 5f 02 7c ab b4 db 6e  af 35 89 3b ad 4d 6b 40  |._.|...n.5.;.Mk@| | ||||
| 000002e0  62 64 8b e5 6c e1 9a bd  21 05 25 cb e9 b4 7a 31  |bd..l...!.%...z1| | ||||
| 000002f0  2e 63 4f 77 4c 3f ab 7b  67 21 02 ae 8b 0a 7b 7e  |.cOwL?.{g!....{~| | ||||
| 00000300  f9 0f a8 df b1 14 0e ef  5e 66 02 42 01 c7 50 11  |........^f.B..P.| | ||||
| 00000310  28 e9 aa 1d ea 52 60 af  37 35 73 13 bd f9 dd 54  |(....R`.75s....T| | ||||
| 00000320  8e 34 db 9a 78 20 61 d4  6c 7f 72 06 4e 7a 58 07  |.4..x a.l.r.NzX.| | ||||
| 00000330  d9 87 01 82 b8 dc 39 72  48 41 a4 ef 58 8e dd c6  |......9rHA..X...| | ||||
| 00000340  8c 0d d3 c1 c6 36 79 e1  d0 78 dd 1c 89 9a 16 03  |.....6y..x......| | ||||
| 00000350  03 00 04 0e 00 00 00                              |.......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 5f f3  |.....(........_.| | ||||
| 00000060  89 d5 29 18 bb 58 6f 28  f6 15 46 a2 1b 0a 49 9a  |..)..Xo(..F...I.| | ||||
| 00000070  66 ab 83 31 36 f7 f6 74  35 45 2e db 80 b9        |f..16..t5E....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 ef 24 92 74 6b  |..........(.$.tk| | ||||
| 00000010  d1 a7 26 2a 52 6e 15 70  10 65 e4 a9 89 8d 56 04  |..&*Rn.p.e....V.| | ||||
| 00000020  29 d1 36 f5 aa 64 9b 34  b9 53 df fa de 47 c4 1b  |).6..d.4.S...G..| | ||||
| 00000030  36 59 88                                          |6Y.| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 36 2e 40  |.............6.@| | ||||
| 00000010  ed b9 f0 05 2e 08 64 28  3a da 3f 4b 80 26 6b e3  |......d(:.?K.&k.| | ||||
| 00000020  97 0e 43 15 03 03 00 1a  00 00 00 00 00 00 00 02  |..C.............| | ||||
| 00000030  bd 85 57 7c 08 f1 76 bf  57 16 fe 5f f7 b4 de 43  |..W|..v.W.._...C| | ||||
| 00000040  64 36                                             |d6| | ||||
|  | @ -1,99 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 59 02 00 00  55 03 03 81 ab f4 92 ec  |....Y...U.......| | ||||
| 00000010  b8 99 85 43 62 31 8e 58  63 c0 04 03 82 b4 f5 49  |...Cb1.Xc......I| | ||||
| 00000020  d5 2d cd 24 de a0 24 29  39 93 90 20 ad 9c 35 ad  |.-.$..$)9.. ..5.| | ||||
| 00000030  20 1d 35 0a 6e 29 99 48  72 e6 fc 19 ae e6 7f 4f  | .5.n).Hr......O| | ||||
| 00000040  47 01 24 f4 9d 9e d7 0e  06 25 a8 93 c0 13 00 00  |G.$......%......| | ||||
| 00000050  0d ff 01 00 01 00 00 0b  00 04 03 00 01 02 16 03  |................| | ||||
| 00000060  03 02 be 0b 00 02 ba 00  02 b7 00 02 b4 30 82 02  |.............0..| | ||||
| 00000070  b0 30 82 02 19 a0 03 02  01 02 02 09 00 85 b0 bb  |.0..............| | ||||
| 00000080  a4 8a 7f b8 ca 30 0d 06  09 2a 86 48 86 f7 0d 01  |.....0...*.H....| | ||||
| 00000090  01 05 05 00 30 45 31 0b  30 09 06 03 55 04 06 13  |....0E1.0...U...| | ||||
| 000000a0  02 41 55 31 13 30 11 06  03 55 04 08 13 0a 53 6f  |.AU1.0...U....So| | ||||
| 000000b0  6d 65 2d 53 74 61 74 65  31 21 30 1f 06 03 55 04  |me-State1!0...U.| | ||||
| 000000c0  0a 13 18 49 6e 74 65 72  6e 65 74 20 57 69 64 67  |...Internet Widg| | ||||
| 000000d0  69 74 73 20 50 74 79 20  4c 74 64 30 1e 17 0d 31  |its Pty Ltd0...1| | ||||
| 000000e0  30 30 34 32 34 30 39 30  39 33 38 5a 17 0d 31 31  |00424090938Z..11| | ||||
| 000000f0  30 34 32 34 30 39 30 39  33 38 5a 30 45 31 0b 30  |0424090938Z0E1.0| | ||||
| 00000100  09 06 03 55 04 06 13 02  41 55 31 13 30 11 06 03  |...U....AU1.0...| | ||||
| 00000110  55 04 08 13 0a 53 6f 6d  65 2d 53 74 61 74 65 31  |U....Some-State1| | ||||
| 00000120  21 30 1f 06 03 55 04 0a  13 18 49 6e 74 65 72 6e  |!0...U....Intern| | ||||
| 00000130  65 74 20 57 69 64 67 69  74 73 20 50 74 79 20 4c  |et Widgits Pty L| | ||||
| 00000140  74 64 30 81 9f 30 0d 06  09 2a 86 48 86 f7 0d 01  |td0..0...*.H....| | ||||
| 00000150  01 01 05 00 03 81 8d 00  30 81 89 02 81 81 00 bb  |........0.......| | ||||
| 00000160  79 d6 f5 17 b5 e5 bf 46  10 d0 dc 69 be e6 2b 07  |y......F...i..+.| | ||||
| 00000170  43 5a d0 03 2d 8a 7a 43  85 b7 14 52 e7 a5 65 4c  |CZ..-.zC...R..eL| | ||||
| 00000180  2c 78 b8 23 8c b5 b4 82  e5 de 1f 95 3b 7e 62 a5  |,x.#........;~b.| | ||||
| 00000190  2c a5 33 d6 fe 12 5c 7a  56 fc f5 06 bf fa 58 7b  |,.3...\zV.....X{| | ||||
| 000001a0  26 3f b5 cd 04 d3 d0 c9  21 96 4a c7 f4 54 9f 5a  |&?......!.J..T.Z| | ||||
| 000001b0  bf ef 42 71 00 fe 18 99  07 7f 7e 88 7d 7d f1 04  |..Bq......~.}}..| | ||||
| 000001c0  39 c4 a2 2e db 51 c9 7c  e3 c0 4c 3b 32 66 01 cf  |9....Q.|..L;2f..| | ||||
| 000001d0  af b1 1d b8 71 9a 1d db  db 89 6b ae da 2d 79 02  |....q.....k..-y.| | ||||
| 000001e0  03 01 00 01 a3 81 a7 30  81 a4 30 1d 06 03 55 1d  |.......0..0...U.| | ||||
| 000001f0  0e 04 16 04 14 b1 ad e2  85 5a cf cb 28 db 69 ce  |.........Z..(.i.| | ||||
| 00000200  23 69 de d3 26 8e 18 88  39 30 75 06 03 55 1d 23  |#i..&...90u..U.#| | ||||
| 00000210  04 6e 30 6c 80 14 b1 ad  e2 85 5a cf cb 28 db 69  |.n0l......Z..(.i| | ||||
| 00000220  ce 23 69 de d3 26 8e 18  88 39 a1 49 a4 47 30 45  |.#i..&...9.I.G0E| | ||||
| 00000230  31 0b 30 09 06 03 55 04  06 13 02 41 55 31 13 30  |1.0...U....AU1.0| | ||||
| 00000240  11 06 03 55 04 08 13 0a  53 6f 6d 65 2d 53 74 61  |...U....Some-Sta| | ||||
| 00000250  74 65 31 21 30 1f 06 03  55 04 0a 13 18 49 6e 74  |te1!0...U....Int| | ||||
| 00000260  65 72 6e 65 74 20 57 69  64 67 69 74 73 20 50 74  |ernet Widgits Pt| | ||||
| 00000270  79 20 4c 74 64 82 09 00  85 b0 bb a4 8a 7f b8 ca  |y Ltd...........| | ||||
| 00000280  30 0c 06 03 55 1d 13 04  05 30 03 01 01 ff 30 0d  |0...U....0....0.| | ||||
| 00000290  06 09 2a 86 48 86 f7 0d  01 01 05 05 00 03 81 81  |..*.H...........| | ||||
| 000002a0  00 08 6c 45 24 c7 6b b1  59 ab 0c 52 cc f2 b0 14  |..lE$.k.Y..R....| | ||||
| 000002b0  d7 87 9d 7a 64 75 b5 5a  95 66 e4 c5 2b 8e ae 12  |...zdu.Z.f..+...| | ||||
| 000002c0  66 1f eb 4f 38 b3 6e 60  d3 92 fd f7 41 08 b5 25  |f..O8.n`....A..%| | ||||
| 000002d0  13 b1 18 7a 24 fb 30 1d  ba ed 98 b9 17 ec e7 d7  |...z$.0.........| | ||||
| 000002e0  31 59 db 95 d3 1d 78 ea  50 56 5c d5 82 5a 2d 5a  |1Y....x.PV\..Z-Z| | ||||
| 000002f0  5f 33 c4 b6 d8 c9 75 90  96 8c 0f 52 98 b5 cd 98  |_3....u....R....| | ||||
| 00000300  1f 89 20 5f f2 a0 1c a3  1b 96 94 dd a9 fd 57 e9  |.. _..........W.| | ||||
| 00000310  70 e8 26 6d 71 99 9b 26  6e 38 50 29 6c 90 a7 bd  |p.&mq..&n8P)l...| | ||||
| 00000320  d9 16 03 03 00 cd 0c 00  00 c9 03 00 17 41 04 a3  |.............A..| | ||||
| 00000330  b7 75 d0 ba b1 e1 4e aa  08 36 e2 90 52 3c e8 8c  |.u....N..6..R<..| | ||||
| 00000340  78 54 61 e6 ec 60 ad 95  9b 1e a0 de a4 14 95 31  |xTa..`.........1| | ||||
| 00000350  fb fc 23 5b e7 22 da 68  a1 c4 68 da 7e 62 08 6e  |..#[.".h..h.~b.n| | ||||
| 00000360  40 0a 3d ac 28 f2 70 17  44 24 43 b6 12 f0 0e 04  |@.=.(.p.D$C.....| | ||||
| 00000370  01 00 80 3c 1e 25 16 dc  f0 d0 ac 3e 63 d3 c6 ee  |...<.%.....>c...| | ||||
| 00000380  ed 1b 1c 8b 9d ec 41 d9  10 56 f6 19 35 61 49 fc  |......A..V..5aI.| | ||||
| 00000390  e6 03 f5 29 89 a1 61 46  78 0b 9b 4e f9 26 18 58  |...)..aFx..N.&.X| | ||||
| 000003a0  50 64 c2 a6 fb 61 d0 29  e2 f9 b1 56 07 91 69 8d  |Pd...a.)...V..i.| | ||||
| 000003b0  ec 69 0e ab 91 70 a9 82  52 4f b1 d8 31 28 e2 49  |.i...p..RO..1(.I| | ||||
| 000003c0  fa fa 26 c7 f9 cf 30 6e  01 59 3f de 0d 56 c8 9e  |..&...0n.Y?..V..| | ||||
| 000003d0  ae fd 49 2a 66 a0 bb 0b  b4 f8 02 7f c8 b2 53 14  |..I*f.........S.| | ||||
| 000003e0  f1 7f a9 3a 02 cd 33 04  cf 73 8b 5a 61 f3 d3 5e  |...:..3..s.Za..^| | ||||
| 000003f0  24 78 43 16 03 03 00 04  0e 00 00 00              |$xC.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..| | ||||
| 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......| | ||||
| 00000050  01 16 03 03 00 40 00 00  00 00 00 00 00 00 00 00  |.....@..........| | ||||
| 00000060  00 00 00 00 00 00 58 40  67 61 f4 eb d6 54 b5 f4  |......X@ga...T..| | ||||
| 00000070  08 d8 27 18 ff 7f c5 58  d1 1e 43 d3 92 74 fe a8  |..'....X..C..t..| | ||||
| 00000080  a6 f8 09 4e 44 0e 0e 6a  3b 72 7e 12 1f b2 bd 9c  |...ND..j;r~.....| | ||||
| 00000090  f8 f3 c0 f0 4e 5e                                 |....N^| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 ac 13 13 7a 41  |..........@...zA| | ||||
| 00000010  ef 34 2e 9c 03 52 01 84  6b c3 f4 67 48 f5 32 fb  |.4...R..k..gH.2.| | ||||
| 00000020  07 b2 6a cf a8 57 c5 7a  16 03 02 b5 9f 90 4c 28  |..j..W.z......L(| | ||||
| 00000030  65 48 0d e6 43 48 f2 06  22 88 db 90 d9 6e da 07  |eH..CH.."....n..| | ||||
| 00000040  59 1f 1c 6e af 74 ab 83  68 12 15                 |Y..n.t..h..| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 00000010  00 00 00 00 00 87 cf e1  7e 13 ec 82 ca 75 e0 4d  |........~....u.M| | ||||
| 00000020  ca 17 a3 de c0 2a 54 b3  3e 4d cf 73 46 c8 a3 cf  |.....*T.>M.sF...| | ||||
| 00000030  ad 54 1c 74 46 15 03 03  00 30 00 00 00 00 00 00  |.T.tF....0......| | ||||
| 00000040  00 00 00 00 00 00 00 00  00 00 d3 9d a4 fd 16 8d  |................| | ||||
| 00000050  83 1b 7c c2 53 8e 10 7b  e3 3c d5 23 8e c4 9c 74  |..|.S..{.<.#...t| | ||||
| 00000060  86 9e 66 59 81 41 a1 14  8e 59                    |..fY.A...Y| | ||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv12-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Client-TLSv12-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,83 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 79 01 00 00  75 03 03 00 00 00 00 00  |....y...u.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 1e c0 2f  |.............../| | ||||
| 00000030  c0 2b c0 30 c0 2c c0 11  c0 07 c0 13 c0 09 c0 14  |.+.0.,..........| | ||||
| 00000040  c0 0a 00 05 00 2f 00 35  c0 12 00 0a 01 00 00 2e  |...../.5........| | ||||
| 00000050  00 05 00 05 01 00 00 00  00 00 0a 00 08 00 06 00  |................| | ||||
| 00000060  17 00 18 00 19 00 0b 00  02 01 00 00 0d 00 0a 00  |................| | ||||
| 00000070  08 04 01 04 03 02 01 02  03 ff 01 00 01 00        |..............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 51 02 00 00  4d 03 03 39 d1 22 07 3f  |....Q...M..9.".?| | ||||
| 00000010  57 87 49 e1 92 8f c8 45  b6 8d 49 f2 dd 91 e0 6f  |W.I....E..I....o| | ||||
| 00000020  86 cd 38 c4 f5 8f d1 f2  ff 13 19 20 5f 98 f8 87  |..8........ _...| | ||||
| 00000030  8e 6b 63 53 67 65 88 fc  e4 02 47 4d 0b 52 bc 0c  |.kcSge....GM.R..| | ||||
| 00000040  8a 08 23 45 74 89 ce 77  ac 15 1c 16 00 05 00 00  |..#Et..w........| | ||||
| 00000050  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000060  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000070  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000080  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000090  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 000000a0  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 000000b0  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000c0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000d0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000e0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000f0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 00000100  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000110  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000120  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000130  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000140  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000150  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000160  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000170  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000180  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000190  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 000001a0  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 000001b0  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001c0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001d0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001e0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001f0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 00000200  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 00000210  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000220  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000230  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000240  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000250  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000260  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000270  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000280  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000290  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 000002a0  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 000002b0  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002c0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002d0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002e0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002f0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 00000300  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 00000310  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 04 0e 00  |n8P)l...........| | ||||
| 00000320  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 6d 51 f3 7f f9  |...........mQ...| | ||||
| 00000010  3e fb 75 82 41 36 83 e8  6a ee 2a 2e 25 90 67 4c  |>.u.A6..j.*.%.gL| | ||||
| 00000020  8e 62 2f 30 81 17 e0 85  09 0c 2b b7 23 d7 b0 e2  |.b/0......+.#...| | ||||
| 00000030  1d f7 3b d7 f5 a1 27 b6  ee 24 b6 1b cc 5b ea 66  |..;...'..$...[.f| | ||||
| 00000040  0d 6a f4 e5 85 f9 da 43  b4 0e 86 85 e1 f5 aa be  |.j.....C........| | ||||
| 00000050  c8 ce 39 4c 9c 86 00 08  c2 4b e2 c6 ec 2f f7 ce  |..9L.....K.../..| | ||||
| 00000060  e6 bd 77 82 6f 23 b6 e0  bd a2 92 b7 3a ac e8 56  |..w.o#......:..V| | ||||
| 00000070  f1 af 54 5e 46 87 e9 3b  33 e7 b8 28 b7 d6 c8 90  |..T^F..;3..(....| | ||||
| 00000080  35 d4 1c 43 d1 30 6f 55  4e 0a 70 14 03 03 00 01  |5..C.0oUN.p.....| | ||||
| 00000090  01 16 03 03 00 24 d3 d5  a4 0c ae 33 1e d4 d8 ba  |.....$.....3....| | ||||
| 000000a0  67 e5 93 31 e2 e9 08 c8  9e 27 d8 9b 20 d5 59 4d  |g..1.....'.. .YM| | ||||
| 000000b0  d0 f9 d9 bd 82 f7 62 7c  95 0b                    |......b|..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 b2 af 7d da e2  |..........$..}..| | ||||
| 00000010  b4 4f 9e ee 68 d4 bf eb  d3 09 63 de 61 e1 c2 12  |.O..h.....c.a...| | ||||
| 00000020  ba 56 d8 dc 5f 9e 31 fe  1c d4 70 2a 1a 80 3c     |.V.._.1...p*..<| | ||||
| >>> Flow 5 (client to server) | ||||
| 00000000  17 03 03 00 1a 43 f5 b5  0e 1b 1f 20 2a 09 27 e5  |.....C..... *.'.| | ||||
| 00000010  dc 11 cf e6 07 31 2b fc  60 52 86 2b 41 b0 c2 15  |.....1+.`R.+A...| | ||||
| 00000020  03 03 00 16 6a b9 06 9b  c6 e9 6d ad ed 2d cc 0f  |....j.....m..-..| | ||||
| 00000030  bc 0a f1 0c 2d 0d 74 29  17 6b                    |....-.t).k| | ||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,83 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 00 00 2f 01 00 00  2b 03 00 52 cc 57 59 d8  |..../...+..R.WY.| | ||||
| 00000010  86 d6 07 ae e0 8d 63 b7  1e cb aa c6 67 32 c8 dd  |......c.....g2..| | ||||
| 00000020  68 03 d8 3d 37 18 72 c3  c0 f1 9d 00 00 04 00 0a  |h..=7.r.........| | ||||
| 00000030  00 ff 01 00                                       |....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 00 00 31 02 00 00  2d 03 00 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  00 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 00 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 00 00 84 10 00 00  80 75 e0 c9 76 d6 e9 34  |.........u..v..4| | ||||
| 00000010  1d e3 31 9e db 3b 03 41  93 e8 db 73 7c e9 3f 6a  |..1..;.A...s|.?j| | ||||
| 00000020  d8 2a 7b 25 83 4f 45 de  3f 78 3f b6 53 a7 b4 6c  |.*{%.OE.?x?.S..l| | ||||
| 00000030  e3 87 c4 c3 70 55 71 79  55 dc 74 98 84 21 19 13  |....pUqyU.t..!..| | ||||
| 00000040  be d5 8e 0a ff 2f 9f 7a  6b d4 6c ef 78 d1 cb 65  |...../.zk.l.x..e| | ||||
| 00000050  32 4c 0c c5 29 b9 60 94  c6 79 56 a2 aa 2d d9 ad  |2L..).`..yV..-..| | ||||
| 00000060  51 2c 54 1b 28 23 33 54  cd 48 cb 80 13 45 3d 4a  |Q,T.(#3T.H...E=J| | ||||
| 00000070  8e 2f f2 da bd 68 3e 1b  eb 73 f9 2d 35 6b b1 40  |./...h>..s.-5k.@| | ||||
| 00000080  2e 6d 9d 1c e9 c1 02 80  37 14 03 00 00 01 01 16  |.m......7.......| | ||||
| 00000090  03 00 00 40 f7 c3 dd a4  64 3d 81 24 de a2 81 7d  |...@....d=.$...}| | ||||
| 000000a0  e4 df 78 46 e7 ba 93 6c  36 43 05 96 fc 75 ef ec  |..xF...l6C...u..| | ||||
| 000000b0  a5 46 6d 47 a5 be 74 ad  15 93 d9 87 4f 1d e2 b3  |.FmG..t.....O...| | ||||
| 000000c0  03 ff 2e 89 6e 50 f4 d6  a6 e2 b3 54 cb 74 07 f7  |....nP.....T.t..| | ||||
| 000000d0  ca 1b 8c 0a                                       |....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 00 00 01 01 16 03  00 00 40 6d 3d d8 d5 cf  |..........@m=...| | ||||
| 00000010  05 7d 98 8c 28 28 e2 43  ab ad 4a fa ae bf ec c3  |.}..((.C..J.....| | ||||
| 00000020  9c 0a 13 4d 28 a4 45 c4  b9 f2 bc c5 12 a2 68 91  |...M(.E.......h.| | ||||
| 00000030  77 fa 72 f8 9e 4e b7 1f  b4 02 02 e3 5d 57 b0 8b  |w.r..N......]W..| | ||||
| 00000040  d8 90 0c 9d e6 df 5b 90  92 a1 0d 17 03 00 00 18  |......[.........| | ||||
| 00000050  91 48 8a e1 d6 bf 79 1c  d5 0a 70 d5 94 20 25 78  |.H....y...p.. %x| | ||||
| 00000060  d8 84 c8 6e 54 f0 99 01  17 03 00 00 28 74 19 90  |...nT.......(t..| | ||||
| 00000070  41 44 53 27 bb fb 1f fd  71 34 20 61 a0 eb a4 7c  |ADS'....q4 a...|| | ||||
| 00000080  fe 36 f8 4b d7 b0 27 d3  b9 36 e1 67 af 2d 0e 23  |.6.K..'..6.g.-.#| | ||||
| 00000090  2b 76 a7 2f c3 15 03 00  00 18 db fc e9 fd 87 5f  |+v./..........._| | ||||
| 000000a0  92 a8 3d 4b 35 f5 c6 48  2c b4 42 50 c3 81 28 f0  |..=K5..H,.BP..(.| | ||||
| 000000b0  2b 41                                             |+A| | ||||
							
								
								
									
										84
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										84
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,84 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 00 00 2f 01 00 00  2b 03 00 52 cc 57 59 30  |..../...+..R.WY0| | ||||
| 00000010  e1 ee 8c 60 5b 40 dd 95  bd b4 84 87 2f 01 15 e7  |...`[@....../...| | ||||
| 00000020  50 88 4c 82 6b 6d 93 8a  57 d0 27 00 00 04 00 2f  |P.L.km..W.'..../| | ||||
| 00000030  00 ff 01 00                                       |....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 00 00 31 02 00 00  2d 03 00 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 2f 00 00  |............./..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  00 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 00 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 00 00 84 10 00 00  80 74 50 05 6f f5 83 c9  |.........tP.o...| | ||||
| 00000010  f5 0c 5a 65 c7 4e c6 f3  87 96 d7 5d 3e 88 27 32  |..Ze.N.....]>.'2| | ||||
| 00000020  89 12 ba ec db ef c0 85  70 84 ed b6 83 03 8f 44  |........p......D| | ||||
| 00000030  f5 6f fa fa d0 1f 95 30  d1 ae a7 71 cf ee e9 b1  |.o.....0...q....| | ||||
| 00000040  80 7b 34 a9 ea 1b 5e e5  71 40 3f e8 7d 30 d1 8b  |.{4...^.q@?.}0..| | ||||
| 00000050  11 f1 68 1f c8 25 f0 77  c5 af b3 92 6e d9 81 cc  |..h..%.w....n...| | ||||
| 00000060  f8 fd 82 95 cc 1f 4a b1  05 15 7a b3 a1 22 33 09  |......J...z.."3.| | ||||
| 00000070  e7 a5 c2 89 7f 03 e0 91  b6 61 a3 a0 4e 17 0d 7a  |.........a..N..z| | ||||
| 00000080  13 01 c4 b6 50 c7 d9 81  15 14 03 00 00 01 01 16  |....P...........| | ||||
| 00000090  03 00 00 40 56 da 56 ab  e6 26 98 58 53 1f 36 b5  |...@V.V..&.XS.6.| | ||||
| 000000a0  03 14 bd 42 29 ee 9c 7c  e4 48 26 82 68 ae fd fe  |...B)..|.H&.h...| | ||||
| 000000b0  5e a4 43 22 75 95 7b c8  77 88 fd d6 d4 9b c9 b5  |^.C"u.{.w.......| | ||||
| 000000c0  ee 3e a6 e8 c5 04 90 63  3f ac be 56 67 da 30 d4  |.>.....c?..Vg.0.| | ||||
| 000000d0  64 fb a8 a0                                       |d...| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 00 00 01 01 16 03  00 00 40 96 af fb 79 96  |..........@...y.| | ||||
| 00000010  92 97 2d d0 67 46 1e 08  b5 35 65 ef dc bc 8e 57  |..-.gF...5e....W| | ||||
| 00000020  53 b7 36 58 74 d7 88 b1  55 fc eb fa 2e f3 17 b7  |S.6Xt...U.......| | ||||
| 00000030  62 58 a0 9d 99 e1 85 d4  33 e0 b4 1f 1d 94 f2 88  |bX......3.......| | ||||
| 00000040  d5 9a 34 5b 74 cd d2 ff  87 bd 52 17 03 00 00 20  |..4[t.....R.... | | ||||
| 00000050  c6 61 c2 28 ac d2 0c 08  7f f1 c2 62 af 37 7e 78  |.a.(.......b.7~x| | ||||
| 00000060  e8 e2 a1 54 f2 3a 80 97  f8 47 64 f2 cd 94 dd 0b  |...T.:...Gd.....| | ||||
| 00000070  17 03 00 00 30 b8 40 8f  a3 18 ff 03 84 d4 1c 28  |....0.@........(| | ||||
| 00000080  82 ce d8 9a 81 3a dd 23  7c 65 d8 ca f7 f1 46 1b  |.....:.#|e....F.| | ||||
| 00000090  70 f0 d7 d9 54 a7 71 e6  4d d4 25 61 5a e4 30 d3  |p...T.q.M.%aZ.0.| | ||||
| 000000a0  4a 42 ae 26 a5 15 03 00  00 20 c4 e8 ed 40 57 00  |JB.&..... ...@W.| | ||||
| 000000b0  dc a5 0e 82 90 47 92 08  dd 7e 50 6b 30 66 5e 90  |.....G...~Pk0f^.| | ||||
| 000000c0  73 7c 81 93 8d 24 b1 06  e7 39                    |s|...$...9| | ||||
							
								
								
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-SSLv3-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,79 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 00 00 2f 01 00 00  2b 03 00 52 cc 57 59 79  |..../...+..R.WYy| | ||||
| 00000010  b9 3b ef df 53 fb 09 f6  01 e5 18 0a fc 3d 65 bb  |.;..S........=e.| | ||||
| 00000020  cf 9c 4c 77 b1 e8 6b 4f  5f c7 94 00 00 04 00 05  |..Lw..kO_.......| | ||||
| 00000030  00 ff 01 00                                       |....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 00 00 31 02 00 00  2d 03 00 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  00 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 00 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 00 00 84 10 00 00  80 4d 66 7a f3 f8 ab 86  |.........Mfz....| | ||||
| 00000010  43 4c 5f 7c 52 ca e7 3f  ba 62 b3 82 88 16 7d ca  |CL_|R..?.b....}.| | ||||
| 00000020  3a 66 15 c0 36 55 2c ab  bf 30 6b cd 9c d8 b9 48  |:f..6U,..0k....H| | ||||
| 00000030  03 c9 d0 98 ab 0b a6 5b  39 c8 fe 82 8e bb f0 16  |.......[9.......| | ||||
| 00000040  6f 96 62 81 f2 dc 52 02  c9 de e4 47 73 21 6e 1e  |o.b...R....Gs!n.| | ||||
| 00000050  3a 11 89 7a e2 6b 9e 04  64 72 15 ba 2d 10 a2 69  |:..z.k..dr..-..i| | ||||
| 00000060  07 e6 ba 17 cf 54 d6 4e  5f 99 e8 59 8b 54 ce 8e  |.....T.N_..Y.T..| | ||||
| 00000070  6b 58 ba 83 68 46 4a 5f  43 3e 9b e1 32 a2 19 42  |kX..hFJ_C>..2..B| | ||||
| 00000080  46 0f e4 47 1a 3b 16 5f  e1 14 03 00 00 01 01 16  |F..G.;._........| | ||||
| 00000090  03 00 00 3c 78 7e ee da  0d 38 0b 1a d6 d4 8e d5  |...<x~...8......| | ||||
| 000000a0  6a c5 3a 0f 85 e7 37 a6  3c 8d 1e 4b da 02 94 bf  |j.:...7.<..K....| | ||||
| 000000b0  ae 2c 50 3b 4e 1c 0c 3c  4f cc d5 1c da 33 13 43  |.,P;N..<O....3.C| | ||||
| 000000c0  37 64 44 ac 26 43 28 0b  d0 c2 04 09 b5 0f 23 1d  |7dD.&C(.......#.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 00 00 01 01 16 03  00 00 3c 23 29 64 62 23  |..........<#)db#| | ||||
| 00000010  19 20 f8 2e 15 07 ee c8  f4 ab f0 3e 66 c3 ed 7b  |. .........>f..{| | ||||
| 00000020  7c a7 c2 7e c3 25 3c 8f  f3 04 dc 37 e8 fc 0a 1d  ||..~.%<....7....| | ||||
| 00000030  fa 7a 09 d4 21 11 e3 24  21 4b 37 d1 85 cc 40 bf  |.z..!..$!K7...@.| | ||||
| 00000040  bd bd f8 59 6b cd 73 17  03 00 00 21 47 1d ac 54  |...Yk.s....!G..T| | ||||
| 00000050  bd 58 a6 c0 04 e2 0c 6b  66 64 5a 85 09 0e 47 fc  |.X.....kfdZ...G.| | ||||
| 00000060  0b 57 ee f1 24 b6 89 57  46 be 6b 0d f2 15 03 00  |.W..$..WF.k.....| | ||||
| 00000070  00 16 b4 f7 34 99 19 43  b6 b3 5a 8b c3 d2 67 2f  |....4..C..Z...g/| | ||||
| 00000080  3b 19 1c 31 d4 f9 bd 96                           |;..1....| | ||||
|  | @ -1,85 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 7d 01 00 00  79 03 01 65 14 3f 40 e4  |....}...y..e.?@.| | ||||
| 00000010  2f 74 65 7e d0 c8 87 03  59 61 9d c3 84 5e c9 62  |/te~....Ya...^.b| | ||||
| 00000020  e6 46 b8 0c 4a 5e 3f 33  43 a5 dd 00 00 04 c0 0a  |.F..J^?3C.......| | ||||
| 00000030  00 ff 02 01 00 00 4b 00  0b 00 04 03 00 01 02 00  |......K.........| | ||||
| 00000040  0a 00 3a 00 38 00 0e 00  0d 00 19 00 1c 00 0b 00  |..:.8...........| | ||||
| 00000050  0c 00 1b 00 18 00 09 00  0a 00 1a 00 16 00 17 00  |................| | ||||
| 00000060  08 00 06 00 07 00 14 00  15 00 04 00 05 00 12 00  |................| | ||||
| 00000070  13 00 01 00 02 00 03 00  0f 00 10 00 11 00 0f 00  |................| | ||||
| 00000080  01 01                                             |..| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 31 02 00 00  2d 03 01 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  01 02 0e 0b 00 02 0a 00  |................| | ||||
| 00000040  02 07 00 02 04 30 82 02  00 30 82 01 62 02 09 00  |.....0...0..b...| | ||||
| 00000050  b8 bf 2d 47 a0 d2 eb f4  30 09 06 07 2a 86 48 ce  |..-G....0...*.H.| | ||||
| 00000060  3d 04 01 30 45 31 0b 30  09 06 03 55 04 06 13 02  |=..0E1.0...U....| | ||||
| 00000070  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000080  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000090  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 000000a0  74 73 20 50 74 79 20 4c  74 64 30 1e 17 0d 31 32  |ts Pty Ltd0...12| | ||||
| 000000b0  31 31 32 32 31 35 30 36  33 32 5a 17 0d 32 32 31  |1122150632Z..221| | ||||
| 000000c0  31 32 30 31 35 30 36 33  32 5a 30 45 31 0b 30 09  |120150632Z0E1.0.| | ||||
| 000000d0  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 000000e0  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 000000f0  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000100  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000110  64 30 81 9b 30 10 06 07  2a 86 48 ce 3d 02 01 06  |d0..0...*.H.=...| | ||||
| 00000120  05 2b 81 04 00 23 03 81  86 00 04 00 c4 a1 ed be  |.+...#..........| | ||||
| 00000130  98 f9 0b 48 73 36 7e c3  16 56 11 22 f2 3d 53 c3  |...Hs6~..V.".=S.| | ||||
| 00000140  3b 4d 21 3d cd 6b 75 e6  f6 b0 dc 9a df 26 c1 bc  |;M!=.ku......&..| | ||||
| 00000150  b2 87 f0 72 32 7c b3 64  2f 1c 90 bc ea 68 23 10  |...r2|.d/....h#.| | ||||
| 00000160  7e fe e3 25 c0 48 3a 69  e0 28 6d d3 37 00 ef 04  |~..%.H:i.(m.7...| | ||||
| 00000170  62 dd 0d a0 9c 70 62 83  d8 81 d3 64 31 aa 9e 97  |b....pb....d1...| | ||||
| 00000180  31 bd 96 b0 68 c0 9b 23  de 76 64 3f 1a 5c 7f e9  |1...h..#.vd?.\..| | ||||
| 00000190  12 0e 58 58 b6 5f 70 dd  9b d8 ea d5 d7 f5 d5 cc  |..XX._p.........| | ||||
| 000001a0  b9 b6 9f 30 66 5b 66 9a  20 e2 27 e5 bf fe 3b 30  |...0f[f. .'...;0| | ||||
| 000001b0  09 06 07 2a 86 48 ce 3d  04 01 03 81 8c 00 30 81  |...*.H.=......0.| | ||||
| 000001c0  88 02 42 01 88 a2 4f eb  e2 45 c5 48 7d 1b ac f5  |..B...O..E.H}...| | ||||
| 000001d0  ed 98 9d ae 47 70 c0 5e  1b b6 2f bd f1 b6 4d b7  |....Gp.^../...M.| | ||||
| 000001e0  61 40 d3 11 a2 ce ee 0b  7e 92 7e ff 76 9d c3 3b  |a@......~.~.v..;| | ||||
| 000001f0  7e a5 3f ce fa 10 e2 59  ec 47 2d 7c ac da 4e 97  |~.?....Y.G-|..N.| | ||||
| 00000200  0e 15 a0 6f d0 02 42 01  4d fc be 67 13 9c 2d 05  |...o..B.M..g..-.| | ||||
| 00000210  0e bd 3f a3 8c 25 c1 33  13 83 0d 94 06 bb d4 37  |..?..%.3.......7| | ||||
| 00000220  7a f6 ec 7a c9 86 2e dd  d7 11 69 7f 85 7c 56 de  |z..z......i..|V.| | ||||
| 00000230  fb 31 78 2b e4 c7 78 0d  ae cb be 9e 4e 36 24 31  |.1x+..x.....N6$1| | ||||
| 00000240  7b 6a 0f 39 95 12 07 8f  2a 16 03 01 00 d6 0c 00  |{j.9....*.......| | ||||
| 00000250  00 d2 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000260  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000270  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000280  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000290  41 03 56 6b dc 5a 89 00  8b 30 81 88 02 42 01 3e  |A.Vk.Z...0...B.>| | ||||
| 000002a0  79 81 6e 89 cd 3e 3f ec  e4 b5 75 17 28 ee fb 09  |y.n..>?...u.(...| | ||||
| 000002b0  21 19 6f 3c e6 ca 1e f2  18 b6 47 f8 37 05 1c 85  |!.o<......G.7...| | ||||
| 000002c0  0f a4 b8 6b 40 04 50 77  e3 05 9b 24 b8 93 e8 4d  |...k@.Pw...$...M| | ||||
| 000002d0  ef 30 cd 51 90 58 a2 49  71 b3 3f b9 46 ab a9 72  |.0.Q.X.Iq.?.F..r| | ||||
| 000002e0  02 42 01 58 ef 20 c1 0a  33 f8 fd 50 9e 65 f5 ef  |.B.X. ..3..P.e..| | ||||
| 000002f0  f4 91 49 2d d2 de 66 2b  97 69 7d b1 d0 ef d6 91  |..I-..f+.i}.....| | ||||
| 00000300  0f fc 57 2b 73 b9 49 01  33 d2 1b 5b 9a 2c 51 35  |..W+s.I.3..[.,Q5| | ||||
| 00000310  0e eb 38 53 fa 20 07 84  52 b3 43 24 09 5a 32 c0  |..8S. ..R.C$.Z2.| | ||||
| 00000320  32 17 34 6c 16 03 01 00  04 0e 00 00 00           |2.4l.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 46 10 00 00  42 41 04 31 74 f8 f6 18  |....F...BA.1t...| | ||||
| 00000010  55 6a 9b 3b 78 0a 0e f0  c9 91 aa 8e 77 39 0a 88  |Uj.;x.......w9..| | ||||
| 00000020  a4 d4 f6 04 9d de 89 18  b6 50 12 72 26 9c 8f e1  |.........P.r&...| | ||||
| 00000030  f0 b2 e6 df ce 3b 46 be  e9 2a 9a e3 7f d1 d5 92  |.....;F..*......| | ||||
| 00000040  ff e3 ae 0a 2d a1 3b 07  f6 04 59 14 03 01 00 01  |....-.;...Y.....| | ||||
| 00000050  01 16 03 01 00 30 02 4f  df 41 30 97 6f f7 18 ca  |.....0.O.A0.o...| | ||||
| 00000060  05 35 17 a1 a2 a5 71 61  b1 d8 dd 9a c6 f3 54 53  |.5....qa......TS| | ||||
| 00000070  84 f6 fb 93 1e 0e 9d e7  fe 35 85 9e 73 d0 2e a1  |.........5..s...| | ||||
| 00000080  a7 63 d9 40 c6 ac                                 |.c.@..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 07 7e 4e 9c 19  |..........0.~N..| | ||||
| 00000010  f0 35 cd 02 b7 a6 0a 1a  b1 a8 11 a3 f9 b1 35 7b  |.5............5{| | ||||
| 00000020  96 7f e6 e1 00 c6 6d 9e  e6 8a bb a2 b8 bd a3 9d  |......m.........| | ||||
| 00000030  05 22 1b f1 f5 28 4a 00  6e f1 71 17 03 01 00 20  |."...(J.n.q.... | | ||||
| 00000040  ad c7 4c dc f4 81 1a 39  3d 86 5e 8e f5 0d a3 33  |..L....9=.^....3| | ||||
| 00000050  88 32 e7 be 8b 6a 8d 44  29 7b 47 fd e5 33 01 1e  |.2...j.D){G..3..| | ||||
| 00000060  17 03 01 00 30 61 47 ee  ae 89 25 ac 85 3b 8a 84  |....0aG...%..;..| | ||||
| 00000070  47 61 ea 3e 4c 70 57 07  d6 f1 1c 21 cb 44 7e de  |Ga.>LpW....!.D~.| | ||||
| 00000080  b5 01 9e fb fe ad bc be  74 c0 65 a0 6b c1 0c 8c  |........t.e.k...| | ||||
| 00000090  2b 00 24 c6 b7 15 03 01  00 20 b7 8b 6b e5 77 ab  |+.$...... ..k.w.| | ||||
| 000000a0  f6 50 9e 88 4d 56 a8 25  8d 02 db cb 68 8b 3f 62  |.P..MV.%....h.?b| | ||||
| 000000b0  be aa 02 24 75 b1 e5 4b  18 c9                    |...$u..K..| | ||||
							
								
								
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,79 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 36 01 00 00  32 03 01 52 cc 57 59 13  |....6...2..R.WY.| | ||||
| 00000010  8b e6 5b a3 1d cb 94 ef  48 e4 59 7e 20 6d 07 67  |..[.....H.Y~ m.g| | ||||
| 00000020  1e 28 6d 31 a2 e7 96 b3  7d 32 cc 00 00 04 00 0a  |.(m1....}2......| | ||||
| 00000030  00 ff 01 00 00 05 00 0f  00 01 01                 |...........| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 31 02 00 00  2d 03 01 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 86 10 00 00  82 00 80 2e af d2 61 f6  |..............a.| | ||||
| 00000010  e2 b8 24 da 28 17 55 99  fd 11 bd 7a ab 98 dd f2  |..$.(.U....z....| | ||||
| 00000020  f6 5f e0 11 6b 12 61 6f  86 48 b2 6e db f0 dd d5  |._..k.ao.H.n....| | ||||
| 00000030  07 88 e5 95 f4 2d 6b 0c  d0 09 1a 5e 5f 50 1f dc  |.....-k....^_P..| | ||||
| 00000040  f2 e7 02 7d 5e a0 70 29  80 ef 87 aa cc 95 3f 2e  |...}^.p)......?.| | ||||
| 00000050  24 d1 40 b6 62 53 1d 25  31 87 1e 2f 77 d3 e1 1c  |$.@.bS.%1../w...| | ||||
| 00000060  c4 99 89 bc 99 09 e9 ad  1f ce 09 e6 36 1c 3e 97  |............6.>.| | ||||
| 00000070  be 62 69 a0 4e 14 20 9c  82 2a 3e fc 7e 9b c4 7a  |.bi.N. ..*>.~..z| | ||||
| 00000080  5a f7 ad 1a 03 17 2a f8  7a 5f 44 14 03 01 00 01  |Z.....*.z_D.....| | ||||
| 00000090  01 16 03 01 00 28 49 6b  da 73 07 ad 85 9a 0e fb  |.....(Ik.s......| | ||||
| 000000a0  dd e0 69 ef c9 22 2d 86  91 51 26 63 d0 24 7d 16  |..i.."-..Q&c.$}.| | ||||
| 000000b0  3c db 9b 00 c9 7e 64 e2  69 02 85 7d f7 47        |<....~d.i..}.G| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 28 dc 60 83 43 6c  |..........(.`.Cl| | ||||
| 00000010  37 79 ab 6e 92 1f 66 d0  b1 12 ce c1 64 9d 2b 68  |7y.n..f.....d.+h| | ||||
| 00000020  c7 1a e5 1f 8c 80 08 d2  86 3e a1 2c e3 7e f4 64  |.........>.,.~.d| | ||||
| 00000030  e7 96 b2 17 03 01 00 18  8d b5 7c 03 78 cf dc 09  |..........|.x...| | ||||
| 00000040  95 06 4b a6 82 f9 30 d2  6b 26 cb 0a 9a 9d 47 9f  |..K...0.k&....G.| | ||||
| 00000050  17 03 01 00 28 30 a9 55  dd b9 4d 6a 76 00 39 96  |....(0.U..Mjv.9.| | ||||
| 00000060  a3 94 6a df e5 af 1e a2  eb bb e4 ac 95 2c f7 93  |..j..........,..| | ||||
| 00000070  ef d1 b5 13 d8 e2 06 1a  ad 5c 00 dd 0c 15 03 01  |.........\......| | ||||
| 00000080  00 18 a5 62 e4 8b 51 1d  28 46 bc 8a c8 50 a3 32  |...b..Q.(F...P.2| | ||||
| 00000090  6b 7b f1 b6 19 43 63 1f  7d 38                    |k{...Cc.}8| | ||||
							
								
								
									
										82
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										82
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,82 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 36 01 00 00  32 03 01 52 cc 57 59 5d  |....6...2..R.WY]| | ||||
| 00000010  0d 77 24 3e b3 32 3d ba  0f b0 aa 1d e3 13 06 f6  |.w$>.2=.........| | ||||
| 00000020  0f be 3c 92 ba 93 bd a6  6d 69 53 00 00 04 00 2f  |..<.....miS..../| | ||||
| 00000030  00 ff 01 00 00 05 00 0f  00 01 01                 |...........| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 31 02 00 00  2d 03 01 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 2f 00 00  |............./..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 86 10 00 00  82 00 80 20 e6 80 f7 48  |........... ...H| | ||||
| 00000010  7e 7d 08 08 54 e1 b4 e3  98 27 5f 90 9d 3b e3 c2  |~}..T....'_..;..| | ||||
| 00000020  c8 8b dc 9e ff 75 fa fc  60 e1 9e 67 7c c4 08 27  |.....u..`..g|..'| | ||||
| 00000030  cc 6f 15 6c bc 7c 96 de  83 8f 98 6d 4a c7 b7 20  |.o.l.|.....mJ.. | | ||||
| 00000040  8c 19 47 5a ff 76 92 0a  df df 66 d2 b6 9d 2d 06  |..GZ.v....f...-.| | ||||
| 00000050  fb ac 07 cf 38 08 f1 fd  0d fe 07 d7 69 3e 8a 79  |....8.......i>.y| | ||||
| 00000060  dc 2d ab bb f7 18 3c 51  14 6e c6 70 95 a2 59 b1  |.-....<Q.n.p..Y.| | ||||
| 00000070  39 04 9f ae f3 5f fb a7  2b d3 5a c0 96 d9 4d 2a  |9...._..+.Z...M*| | ||||
| 00000080  2a 6c 6d 39 ee fc ce 76  1a 92 1b 14 03 01 00 01  |*lm9...v........| | ||||
| 00000090  01 16 03 01 00 30 10 20  90 7b 0e e6 c2 05 81 c3  |.....0. .{......| | ||||
| 000000a0  bc da 84 67 dd 5f 97 e2  74 c4 35 4e bf d2 1b 90  |...g._..t.5N....| | ||||
| 000000b0  2f e0 af dd 6b f5 52 db  36 cd 3e e1 e6 bd 99 30  |/...k.R.6.>....0| | ||||
| 000000c0  ed c6 bc c2 38 b6                                 |....8.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 30 5d 0c a2 18 13  |..........0]....| | ||||
| 00000010  40 a1 84 ce c5 d8 4e fc  a4 8a 14 b5 94 18 b1 86  |@.....N.........| | ||||
| 00000020  da 6a 7d 26 08 d6 a0 f8  78 5b 42 7e f8 83 54 56  |.j}&....x[B~..TV| | ||||
| 00000030  36 a4 91 37 67 5a d7 68  37 c4 4f 17 03 01 00 20  |6..7gZ.h7.O.... | | ||||
| 00000040  fd aa 5e cf 4b 12 c5 be  a4 a2 65 5d 6e 65 46 5f  |..^.K.....e]neF_| | ||||
| 00000050  d2 fe 46 e7 77 2d 9c 1e  0b 39 40 48 c2 2f be 21  |..F.w-...9@H./.!| | ||||
| 00000060  17 03 01 00 30 03 af 9e  6b d6 76 ed 9e 1d 8b 8b  |....0...k.v.....| | ||||
| 00000070  2e 2a 5d da c4 73 95 ac  0e 6f 69 cb 63 df 50 27  |.*]..s...oi.c.P'| | ||||
| 00000080  30 de 2e 55 86 85 ad 3e  33 22 49 72 f2 e2 9f 8f  |0..U...>3"Ir....| | ||||
| 00000090  ba cf 4e 30 34 15 03 01  00 20 4c 4c 97 61 70 ea  |..N04.... LL.ap.| | ||||
| 000000a0  ae fc a2 e9 c6 c2 b6 2e  4d 85 f6 ae 2b 56 46 82  |........M...+VF.| | ||||
| 000000b0  9d d8 a5 82 17 fa 3e 62  67 7e                    |......>bg~| | ||||
							
								
								
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv10-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,76 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 36 01 00 00  32 03 01 52 cc 57 59 cf  |....6...2..R.WY.| | ||||
| 00000010  00 a1 49 a4 37 69 74 d8  a7 93 ea 8d e7 50 b7 b3  |..I.7it......P..| | ||||
| 00000020  8c ec e5 56 fb dc 5f 1a  2e ab 18 00 00 04 00 05  |...V.._.........| | ||||
| 00000030  00 ff 01 00 00 05 00 0f  00 01 01                 |...........| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 01 00 31 02 00 00  2d 03 01 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  01 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 01 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 01 00 86 10 00 00  82 00 80 b1 96 7b 6f f5  |.............{o.| | ||||
| 00000010  a0 cb 0d 60 9b 64 d3 f5  17 76 47 7b bc a5 0e 96  |...`.d...vG{....| | ||||
| 00000020  53 af 68 0c 96 22 f7 28  0c 24 37 9c 51 69 ed b2  |S.h..".(.$7.Qi..| | ||||
| 00000030  47 14 ba 33 c5 79 6b 96  f2 ab 3c 02 5c 37 a4 97  |G..3.yk...<.\7..| | ||||
| 00000040  23 fc 7f d3 95 2d 85 99  1a 10 1b 38 e5 f1 83 55  |#....-.....8...U| | ||||
| 00000050  4a ab 60 f8 89 0a 6a c4  eb 45 f5 b0 f4 f8 09 31  |J.`...j..E.....1| | ||||
| 00000060  6e f0 25 30 fd 5e 68 61  bc cb 0d 9e 05 73 0a f4  |n.%0.^ha.....s..| | ||||
| 00000070  a5 2e d9 d5 4e 08 f6 3b  8d 2d 21 f5 79 b6 97 55  |....N..;.-!.y..U| | ||||
| 00000080  b9 99 03 49 ea 96 36 49  21 56 bf 14 03 01 00 01  |...I..6I!V......| | ||||
| 00000090  01 16 03 01 00 24 f0 4f  30 06 c3 25 01 93 34 ab  |.....$.O0..%..4.| | ||||
| 000000a0  93 8f 59 26 83 6e 8a fd  5a a6 cf af ad b1 a2 83  |..Y&.n..Z.......| | ||||
| 000000b0  28 ff c2 66 5f ac e5 a5  a5 03                    |(..f_.....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 01 00 01 01 16 03  01 00 24 9d b4 ea d8 be  |..........$.....| | ||||
| 00000010  b5 9f 00 fd b5 99 04 12  6b 7a 3f b8 52 d7 52 a9  |........kz?.R.R.| | ||||
| 00000020  e9 bd 5b 63 ad b0 53 ac  46 80 be 48 6e dd ee 17  |..[c..S.F..Hn...| | ||||
| 00000030  03 01 00 21 07 ac c4 fb  21 e4 b8 6b 64 3b b5 27  |...!....!..kd;.'| | ||||
| 00000040  29 67 a1 10 2e d2 71 d5  59 5e fc 1d 84 31 15 6e  |)g....q.Y^...1.n| | ||||
| 00000050  4d 4b dc a9 3a 15 03 01  00 16 25 22 a5 78 23 5a  |MK..:.....%".x#Z| | ||||
| 00000060  69 6f 99 a1 b3 1c 8d bf  f3 bd 1b c8 1c 57 15 75  |io...........W.u| | ||||
|  | @ -1,17 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 d4 01 00 00  d0 03 02 74 2d da 6d 98  |...........t-.m.| | ||||
| 00000010  ad 3e a5 ec 90 ea d1 5b  f0 e0 a7 45 33 d9 5e 8d  |.>.....[...E3.^.| | ||||
| 00000020  0f 1d 01 16 6d 00 31 65  ed 50 88 00 00 5e c0 14  |....m.1e.P...^..| | ||||
| 00000030  c0 0a 00 39 00 38 00 88  00 87 c0 0f c0 05 00 35  |...9.8.........5| | ||||
| 00000040  00 84 c0 13 c0 09 00 33  00 32 00 9a 00 99 00 45  |.......3.2.....E| | ||||
| 00000050  00 44 c0 0e c0 04 00 2f  00 96 00 41 00 07 c0 11  |.D...../...A....| | ||||
| 00000060  c0 07 c0 0c c0 02 00 05  00 04 c0 12 c0 08 00 16  |................| | ||||
| 00000070  00 13 c0 0d c0 03 00 0a  00 15 00 12 00 09 00 14  |................| | ||||
| 00000080  00 11 00 08 00 06 00 03  00 ff 56 00 01 00 00 49  |..........V....I| | ||||
| 00000090  00 0b 00 04 03 00 01 02  00 0a 00 34 00 32 00 0e  |...........4.2..| | ||||
| 000000a0  00 0d 00 19 00 0b 00 0c  00 18 00 09 00 0a 00 16  |................| | ||||
| 000000b0  00 17 00 08 00 06 00 07  00 14 00 15 00 04 00 05  |................| | ||||
| 000000c0  00 12 00 13 00 01 00 02  00 03 00 0f 00 10 00 11  |................| | ||||
| 000000d0  00 23 00 00 00 0f 00 01  01                       |.#.......| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  15 03 02 00 02 02 56                              |......V| | ||||
							
								
								
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv11-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv11-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,76 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 36 01 00 00  32 03 02 52 cc 57 59 bd  |....6...2..R.WY.| | ||||
| 00000010  cd 9d 1e 17 38 43 a5 e3  e7 30 e4 2b 2a ef f7 5b  |....8C...0.+*..[| | ||||
| 00000020  81 91 0c 0b 52 f8 2d 2c  61 d3 13 00 00 04 00 05  |....R.-,a.......| | ||||
| 00000030  00 ff 01 00 00 05 00 0f  00 01 01                 |...........| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 02 00 31 02 00 00  2d 03 02 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  02 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 02 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 02 00 86 10 00 00  82 00 80 71 2b 19 25 86  |...........q+.%.| | ||||
| 00000010  a0 ff ba d5 1c a6 0c 8b  6b 0a b8 e9 42 93 2f 55  |........k...B./U| | ||||
| 00000020  a8 ee 62 fa ed bc 6d e2  9d e3 76 a6 73 d7 99 58  |..b...m...v.s..X| | ||||
| 00000030  cc 0b 14 42 96 7c b6 c7  8f 21 16 cf 71 9b 2b b9  |...B.|...!..q.+.| | ||||
| 00000040  e0 34 57 76 22 d5 87 8a  ce 1f ea 26 6e 1e e6 ca  |.4Wv"......&n...| | ||||
| 00000050  55 3b 20 cd cf 42 26 b1  51 3e 8c 1d a2 ae c4 63  |U; ..B&.Q>.....c| | ||||
| 00000060  f5 ce 27 3c 1e c3 e0 e3  b1 16 c1 8a 62 bd 21 7f  |..'<........b.!.| | ||||
| 00000070  38 b5 b7 3a 3c bb 03 37  e1 a5 ff f1 29 e2 21 0a  |8..:<..7....).!.| | ||||
| 00000080  8c 20 02 e0 c0 82 97 9d  18 6d f8 14 03 02 00 01  |. .......m......| | ||||
| 00000090  01 16 03 02 00 24 bc 19  16 6e fd 0b db 9e d5 1d  |.....$...n......| | ||||
| 000000a0  65 b6 57 1c 58 b5 6a ac  f7 4f f0 cd a1 a9 0c c0  |e.W.X.j..O......| | ||||
| 000000b0  df e6 eb d5 00 f7 fd 43  bb 27                    |.......C.'| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 02 00 01 01 16 03  02 00 24 cf 4f e4 27 b0  |..........$.O.'.| | ||||
| 00000010  3d 17 34 b1 3c 37 6e c5  2b 3d 4a c3 46 50 44 b4  |=.4.<7n.+=J.FPD.| | ||||
| 00000020  de 77 18 10 4f 60 b3 4e  dc 06 fd 25 ec 05 15 17  |.w..O`.N...%....| | ||||
| 00000030  03 02 00 21 a5 c9 32 f2  21 fb 94 7e 0d 15 65 fd  |...!..2.!..~..e.| | ||||
| 00000040  3e fe e4 c1 a5 e9 88 72  b2 f1 26 39 a6 48 59 97  |>......r..&9.HY.| | ||||
| 00000050  65 e3 f0 cb 46 15 03 02  00 16 4b 02 ec cd ca 30  |e...F.....K....0| | ||||
| 00000060  42 cf 3d a0 4a fa 8e 79  bb ed b0 59 40 9b 2c 1a  |B.=.J..y...Y@.,.| | ||||
							
								
								
									
										115
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-ALPN
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										115
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-ALPN
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,115 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 01 78 01 00 01  74 03 03 73 99 93 cd 3d  |....x...t..s...=| | ||||
| 00000010  e8 60 23 0d 6a e8 f5 e3  46 ca 38 44 85 ca 79 c8  |.`#.j...F.8D..y.| | ||||
| 00000020  96 be 94 bd 43 d5 14 2b  20 da 5c 00 00 c4 c0 30  |....C..+ .\....0| | ||||
| 00000030  c0 2c c0 28 c0 24 c0 14  c0 0a 00 a5 00 a3 00 a1  |.,.(.$..........| | ||||
| 00000040  00 9f 00 6b 00 6a 00 69  00 68 00 39 00 38 00 37  |...k.j.i.h.9.8.7| | ||||
| 00000050  00 36 00 88 00 87 00 86  00 85 c0 32 c0 2e c0 2a  |.6.........2...*| | ||||
| 00000060  c0 26 c0 0f c0 05 00 9d  00 3d 00 35 00 84 c0 2f  |.&.......=.5.../| | ||||
| 00000070  c0 2b c0 27 c0 23 c0 13  c0 09 00 a4 00 a2 00 a0  |.+.'.#..........| | ||||
| 00000080  00 9e 00 67 00 40 00 3f  00 3e 00 33 00 32 00 31  |...g.@.?.>.3.2.1| | ||||
| 00000090  00 30 00 9a 00 99 00 98  00 97 00 45 00 44 00 43  |.0.........E.D.C| | ||||
| 000000a0  00 42 c0 31 c0 2d c0 29  c0 25 c0 0e c0 04 00 9c  |.B.1.-.).%......| | ||||
| 000000b0  00 3c 00 2f 00 96 00 41  00 07 c0 11 c0 07 c0 0c  |.<./...A........| | ||||
| 000000c0  c0 02 00 05 00 04 c0 12  c0 08 00 16 00 13 00 10  |................| | ||||
| 000000d0  00 0d c0 0d c0 03 00 0a  00 15 00 12 00 0f 00 0c  |................| | ||||
| 000000e0  00 09 00 14 00 11 00 0e  00 0b 00 08 00 06 00 03  |................| | ||||
| 000000f0  00 ff 01 00 00 87 00 0b  00 04 03 00 01 02 00 0a  |................| | ||||
| 00000100  00 3a 00 38 00 0e 00 0d  00 19 00 1c 00 0b 00 0c  |.:.8............| | ||||
| 00000110  00 1b 00 18 00 09 00 0a  00 1a 00 16 00 17 00 08  |................| | ||||
| 00000120  00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13  |................| | ||||
| 00000130  00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00  |.............#..| | ||||
| 00000140  00 0d 00 20 00 1e 06 01  06 02 06 03 05 01 05 02  |... ............| | ||||
| 00000150  05 03 04 01 04 02 04 03  03 01 03 02 03 03 02 01  |................| | ||||
| 00000160  02 02 02 03 00 0f 00 01  01 00 10 00 10 00 0e 06  |................| | ||||
| 00000170  70 72 6f 74 6f 32 06 70  72 6f 74 6f 31           |proto2.proto1| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 42 02 00 00  3e 03 03 00 00 00 00 00  |....B...>.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 30 00 00  |.............0..| | ||||
| 00000030  16 00 23 00 00 ff 01 00  01 00 00 10 00 09 00 07  |..#.............| | ||||
| 00000040  06 70 72 6f 74 6f 31 16  03 03 02 be 0b 00 02 ba  |.proto1.........| | ||||
| 00000050  00 02 b7 00 02 b4 30 82  02 b0 30 82 02 19 a0 03  |......0...0.....| | ||||
| 00000060  02 01 02 02 09 00 85 b0  bb a4 8a 7f b8 ca 30 0d  |..............0.| | ||||
| 00000070  06 09 2a 86 48 86 f7 0d  01 01 05 05 00 30 45 31  |..*.H........0E1| | ||||
| 00000080  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000090  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 000000a0  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 000000b0  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 000000c0  20 4c 74 64 30 1e 17 0d  31 30 30 34 32 34 30 39  | Ltd0...10042409| | ||||
| 000000d0  30 39 33 38 5a 17 0d 31  31 30 34 32 34 30 39 30  |0938Z..110424090| | ||||
| 000000e0  39 33 38 5a 30 45 31 0b  30 09 06 03 55 04 06 13  |938Z0E1.0...U...| | ||||
| 000000f0  02 41 55 31 13 30 11 06  03 55 04 08 13 0a 53 6f  |.AU1.0...U....So| | ||||
| 00000100  6d 65 2d 53 74 61 74 65  31 21 30 1f 06 03 55 04  |me-State1!0...U.| | ||||
| 00000110  0a 13 18 49 6e 74 65 72  6e 65 74 20 57 69 64 67  |...Internet Widg| | ||||
| 00000120  69 74 73 20 50 74 79 20  4c 74 64 30 81 9f 30 0d  |its Pty Ltd0..0.| | ||||
| 00000130  06 09 2a 86 48 86 f7 0d  01 01 01 05 00 03 81 8d  |..*.H...........| | ||||
| 00000140  00 30 81 89 02 81 81 00  bb 79 d6 f5 17 b5 e5 bf  |.0.......y......| | ||||
| 00000150  46 10 d0 dc 69 be e6 2b  07 43 5a d0 03 2d 8a 7a  |F...i..+.CZ..-.z| | ||||
| 00000160  43 85 b7 14 52 e7 a5 65  4c 2c 78 b8 23 8c b5 b4  |C...R..eL,x.#...| | ||||
| 00000170  82 e5 de 1f 95 3b 7e 62  a5 2c a5 33 d6 fe 12 5c  |.....;~b.,.3...\| | ||||
| 00000180  7a 56 fc f5 06 bf fa 58  7b 26 3f b5 cd 04 d3 d0  |zV.....X{&?.....| | ||||
| 00000190  c9 21 96 4a c7 f4 54 9f  5a bf ef 42 71 00 fe 18  |.!.J..T.Z..Bq...| | ||||
| 000001a0  99 07 7f 7e 88 7d 7d f1  04 39 c4 a2 2e db 51 c9  |...~.}}..9....Q.| | ||||
| 000001b0  7c e3 c0 4c 3b 32 66 01  cf af b1 1d b8 71 9a 1d  ||..L;2f......q..| | ||||
| 000001c0  db db 89 6b ae da 2d 79  02 03 01 00 01 a3 81 a7  |...k..-y........| | ||||
| 000001d0  30 81 a4 30 1d 06 03 55  1d 0e 04 16 04 14 b1 ad  |0..0...U........| | ||||
| 000001e0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 000001f0  88 39 30 75 06 03 55 1d  23 04 6e 30 6c 80 14 b1  |.90u..U.#.n0l...| | ||||
| 00000200  ad e2 85 5a cf cb 28 db  69 ce 23 69 de d3 26 8e  |...Z..(.i.#i..&.| | ||||
| 00000210  18 88 39 a1 49 a4 47 30  45 31 0b 30 09 06 03 55  |..9.I.G0E1.0...U| | ||||
| 00000220  04 06 13 02 41 55 31 13  30 11 06 03 55 04 08 13  |....AU1.0...U...| | ||||
| 00000230  0a 53 6f 6d 65 2d 53 74  61 74 65 31 21 30 1f 06  |.Some-State1!0..| | ||||
| 00000240  03 55 04 0a 13 18 49 6e  74 65 72 6e 65 74 20 57  |.U....Internet W| | ||||
| 00000250  69 64 67 69 74 73 20 50  74 79 20 4c 74 64 82 09  |idgits Pty Ltd..| | ||||
| 00000260  00 85 b0 bb a4 8a 7f b8  ca 30 0c 06 03 55 1d 13  |.........0...U..| | ||||
| 00000270  04 05 30 03 01 01 ff 30  0d 06 09 2a 86 48 86 f7  |..0....0...*.H..| | ||||
| 00000280  0d 01 01 05 05 00 03 81  81 00 08 6c 45 24 c7 6b  |...........lE$.k| | ||||
| 00000290  b1 59 ab 0c 52 cc f2 b0  14 d7 87 9d 7a 64 75 b5  |.Y..R.......zdu.| | ||||
| 000002a0  5a 95 66 e4 c5 2b 8e ae  12 66 1f eb 4f 38 b3 6e  |Z.f..+...f..O8.n| | ||||
| 000002b0  60 d3 92 fd f7 41 08 b5  25 13 b1 18 7a 24 fb 30  |`....A..%...z$.0| | ||||
| 000002c0  1d ba ed 98 b9 17 ec e7  d7 31 59 db 95 d3 1d 78  |.........1Y....x| | ||||
| 000002d0  ea 50 56 5c d5 82 5a 2d  5a 5f 33 c4 b6 d8 c9 75  |.PV\..Z-Z_3....u| | ||||
| 000002e0  90 96 8c 0f 52 98 b5 cd  98 1f 89 20 5f f2 a0 1c  |....R...... _...| | ||||
| 000002f0  a3 1b 96 94 dd a9 fd 57  e9 70 e8 26 6d 71 99 9b  |.......W.p.&mq..| | ||||
| 00000300  26 6e 38 50 29 6c 90 a7  bd d9 16 03 03 00 cd 0c  |&n8P)l..........| | ||||
| 00000310  00 00 c9 03 00 17 41 04  1e 18 37 ef 0d 19 51 88  |......A...7...Q.| | ||||
| 00000320  35 75 71 b5 e5 54 5b 12  2e 8f 09 67 fd a7 24 20  |5uq..T[....g..$ | | ||||
| 00000330  3e b2 56 1c ce 97 28 5e  f8 2b 2d 4f 9e f1 07 9f  |>.V...(^.+-O....| | ||||
| 00000340  6c 4b 5b 83 56 e2 32 42  e9 58 b6 d7 49 a6 b5 68  |lK[.V.2B.X..I..h| | ||||
| 00000350  1a 41 03 56 6b dc 5a 89  04 01 00 80 52 f3 4c 3f  |.A.Vk.Z.....R.L?| | ||||
| 00000360  c4 82 3c 4f 8f dc f5 33  c5 12 41 80 dc ea f2 84  |..<O...3..A.....| | ||||
| 00000370  cf e4 50 f6 27 90 bb d0  09 ef 9c 9a 34 58 5c 38  |..P.'.......4X\8| | ||||
| 00000380  53 27 72 e5 07 86 bb 4d  6c 17 6f 79 60 bd ca cb  |S'r....Ml.oy`...| | ||||
| 00000390  be 05 f1 0c 46 4b 1f 19  74 67 cd d9 64 2a fa 5f  |....FK..tg..d*._| | ||||
| 000003a0  b8 47 fb 98 47 a9 1f d5  20 95 19 48 70 1a 1c 57  |.G..G... ..Hp..W| | ||||
| 000003b0  81 46 2a 8c 56 35 69 48  c9 23 a0 4e 7f f0 c0 fc  |.F*.V5iH.#.N....| | ||||
| 000003c0  eb 28 8a d3 99 45 39 cc  2b 2a 93 1f c3 0b 68 60  |.(...E9.+*....h`| | ||||
| 000003d0  91 14 5e 6d be e6 40 19  38 76 d1 4c 16 03 03 00  |..^m..@.8v.L....| | ||||
| 000003e0  04 0e 00 00 00                                    |.....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 e2 86 c1 a0 c0  |....F...BA......| | ||||
| 00000010  45 9a da 1a 70 a1 3e b6  9c b7 2e ec dd 2b 0a c6  |E...p.>......+..| | ||||
| 00000020  50 59 95 fe 8e 54 83 06  b6 68 42 60 56 de b2 b3  |PY...T...hB`V...| | ||||
| 00000030  b9 14 f0 e0 e2 2e a3 7f  ec 01 4d 10 8a 43 ab 33  |..........M..C.3| | ||||
| 00000040  18 f4 b9 5d 6c ae cd 90  3e f4 64 14 03 03 00 01  |...]l...>.d.....| | ||||
| 00000050  01 16 03 03 00 28 47 e5  15 81 5b f4 a0 6a 61 d6  |.....(G...[..ja.| | ||||
| 00000060  df 5e 60 f1 d4 dc 55 45  84 0b ef 56 42 0b 42 1d  |.^`...UE...VB.B.| | ||||
| 00000070  28 b4 90 a6 2a 47 41 97  3b 91 5c 74 ab 02        |(...*GA.;.\t..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  16 03 03 00 72 04 00 00  6e 00 00 00 00 00 68 00  |....r...n.....h.| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 65  |...............e| | ||||
| 00000020  ea 8b e4 ef ba 19 39 3a  95 90 2b 6d 0d 59 ac 36  |......9:..+m.Y.6| | ||||
| 00000030  be 71 eb b4 25 51 86 cc  80 43 ea 60 e0 53 30 ba  |.q..%Q...C.`.S0.| | ||||
| 00000040  3e b9 c3 29 9b 26 94 5a  43 36 d0 65 be a7 f1 06  |>..).&.ZC6.e....| | ||||
| 00000050  99 e3 c5 d7 f2 59 23 11  c5 99 27 5c 7f 43 94 0e  |.....Y#...'\.C..| | ||||
| 00000060  b3 35 7a 66 d9 c4 49 53  2a 28 b6 3d e7 0f c5 d5  |.5zf..IS*(.=....| | ||||
| 00000070  a2 d8 15 a8 3a 88 f7 14  03 03 00 01 01 16 03 03  |....:...........| | ||||
| 00000080  00 28 00 00 00 00 00 00  00 00 07 2e 75 1d 9a 12  |.(..........u...| | ||||
| 00000090  9f e9 7e 0b 42 dd 7b 8e  ae 58 ac 49 78 8d fb 3f  |..~.B.{..X.Ix..?| | ||||
| 000000a0  21 e8 ef 91 3c 02 a6 23  d5 cc 17 03 03 00 25 00  |!...<..#......%.| | ||||
| 000000b0  00 00 00 00 00 00 01 bb  04 db f2 86 63 96 01 60  |............c..`| | ||||
| 000000c0  bb f4 68 f9 50 2a f0 15  82 f8 a1 73 bf cd 5f 4d  |..h.P*.....s.._M| | ||||
| 000000d0  1a 73 67 91 15 03 03 00  1a 00 00 00 00 00 00 00  |.sg.............| | ||||
| 000000e0  02 02 79 34 67 e2 67 d5  52 59 91 76 90 10 c8 41  |..y4g.g.RY.v...A| | ||||
| 000000f0  c5 56 c9                                          |.V.| | ||||
							
								
								
									
										114
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-ALPN-NoMatch
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										114
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-ALPN-NoMatch
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,114 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 01 78 01 00 01  74 03 03 ba 93 c5 44 7d  |....x...t.....D}| | ||||
| 00000010  cf bf e3 d4 ad 9a ff 3a  48 ec 46 11 1a e5 68 87  |.......:H.F...h.| | ||||
| 00000020  d1 f0 3b 7c da 86 b9 8f  5d a7 59 00 00 c4 c0 30  |..;|....].Y....0| | ||||
| 00000030  c0 2c c0 28 c0 24 c0 14  c0 0a 00 a5 00 a3 00 a1  |.,.(.$..........| | ||||
| 00000040  00 9f 00 6b 00 6a 00 69  00 68 00 39 00 38 00 37  |...k.j.i.h.9.8.7| | ||||
| 00000050  00 36 00 88 00 87 00 86  00 85 c0 32 c0 2e c0 2a  |.6.........2...*| | ||||
| 00000060  c0 26 c0 0f c0 05 00 9d  00 3d 00 35 00 84 c0 2f  |.&.......=.5.../| | ||||
| 00000070  c0 2b c0 27 c0 23 c0 13  c0 09 00 a4 00 a2 00 a0  |.+.'.#..........| | ||||
| 00000080  00 9e 00 67 00 40 00 3f  00 3e 00 33 00 32 00 31  |...g.@.?.>.3.2.1| | ||||
| 00000090  00 30 00 9a 00 99 00 98  00 97 00 45 00 44 00 43  |.0.........E.D.C| | ||||
| 000000a0  00 42 c0 31 c0 2d c0 29  c0 25 c0 0e c0 04 00 9c  |.B.1.-.).%......| | ||||
| 000000b0  00 3c 00 2f 00 96 00 41  00 07 c0 11 c0 07 c0 0c  |.<./...A........| | ||||
| 000000c0  c0 02 00 05 00 04 c0 12  c0 08 00 16 00 13 00 10  |................| | ||||
| 000000d0  00 0d c0 0d c0 03 00 0a  00 15 00 12 00 0f 00 0c  |................| | ||||
| 000000e0  00 09 00 14 00 11 00 0e  00 0b 00 08 00 06 00 03  |................| | ||||
| 000000f0  00 ff 01 00 00 87 00 0b  00 04 03 00 01 02 00 0a  |................| | ||||
| 00000100  00 3a 00 38 00 0e 00 0d  00 19 00 1c 00 0b 00 0c  |.:.8............| | ||||
| 00000110  00 1b 00 18 00 09 00 0a  00 1a 00 16 00 17 00 08  |................| | ||||
| 00000120  00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13  |................| | ||||
| 00000130  00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00  |.............#..| | ||||
| 00000140  00 0d 00 20 00 1e 06 01  06 02 06 03 05 01 05 02  |... ............| | ||||
| 00000150  05 03 04 01 04 02 04 03  03 01 03 02 03 03 02 01  |................| | ||||
| 00000160  02 02 02 03 00 0f 00 01  01 00 10 00 10 00 0e 06  |................| | ||||
| 00000170  70 72 6f 74 6f 32 06 70  72 6f 74 6f 31           |proto2.proto1| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 35 02 00 00  31 03 03 00 00 00 00 00  |....5...1.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 30 00 00  |.............0..| | ||||
| 00000030  09 00 23 00 00 ff 01 00  01 00 16 03 03 02 be 0b  |..#.............| | ||||
| 00000040  00 02 ba 00 02 b7 00 02  b4 30 82 02 b0 30 82 02  |.........0...0..| | ||||
| 00000050  19 a0 03 02 01 02 02 09  00 85 b0 bb a4 8a 7f b8  |................| | ||||
| 00000060  ca 30 0d 06 09 2a 86 48  86 f7 0d 01 01 05 05 00  |.0...*.H........| | ||||
| 00000070  30 45 31 0b 30 09 06 03  55 04 06 13 02 41 55 31  |0E1.0...U....AU1| | ||||
| 00000080  13 30 11 06 03 55 04 08  13 0a 53 6f 6d 65 2d 53  |.0...U....Some-S| | ||||
| 00000090  74 61 74 65 31 21 30 1f  06 03 55 04 0a 13 18 49  |tate1!0...U....I| | ||||
| 000000a0  6e 74 65 72 6e 65 74 20  57 69 64 67 69 74 73 20  |nternet Widgits | | ||||
| 000000b0  50 74 79 20 4c 74 64 30  1e 17 0d 31 30 30 34 32  |Pty Ltd0...10042| | ||||
| 000000c0  34 30 39 30 39 33 38 5a  17 0d 31 31 30 34 32 34  |4090938Z..110424| | ||||
| 000000d0  30 39 30 39 33 38 5a 30  45 31 0b 30 09 06 03 55  |090938Z0E1.0...U| | ||||
| 000000e0  04 06 13 02 41 55 31 13  30 11 06 03 55 04 08 13  |....AU1.0...U...| | ||||
| 000000f0  0a 53 6f 6d 65 2d 53 74  61 74 65 31 21 30 1f 06  |.Some-State1!0..| | ||||
| 00000100  03 55 04 0a 13 18 49 6e  74 65 72 6e 65 74 20 57  |.U....Internet W| | ||||
| 00000110  69 64 67 69 74 73 20 50  74 79 20 4c 74 64 30 81  |idgits Pty Ltd0.| | ||||
| 00000120  9f 30 0d 06 09 2a 86 48  86 f7 0d 01 01 01 05 00  |.0...*.H........| | ||||
| 00000130  03 81 8d 00 30 81 89 02  81 81 00 bb 79 d6 f5 17  |....0.......y...| | ||||
| 00000140  b5 e5 bf 46 10 d0 dc 69  be e6 2b 07 43 5a d0 03  |...F...i..+.CZ..| | ||||
| 00000150  2d 8a 7a 43 85 b7 14 52  e7 a5 65 4c 2c 78 b8 23  |-.zC...R..eL,x.#| | ||||
| 00000160  8c b5 b4 82 e5 de 1f 95  3b 7e 62 a5 2c a5 33 d6  |........;~b.,.3.| | ||||
| 00000170  fe 12 5c 7a 56 fc f5 06  bf fa 58 7b 26 3f b5 cd  |..\zV.....X{&?..| | ||||
| 00000180  04 d3 d0 c9 21 96 4a c7  f4 54 9f 5a bf ef 42 71  |....!.J..T.Z..Bq| | ||||
| 00000190  00 fe 18 99 07 7f 7e 88  7d 7d f1 04 39 c4 a2 2e  |......~.}}..9...| | ||||
| 000001a0  db 51 c9 7c e3 c0 4c 3b  32 66 01 cf af b1 1d b8  |.Q.|..L;2f......| | ||||
| 000001b0  71 9a 1d db db 89 6b ae  da 2d 79 02 03 01 00 01  |q.....k..-y.....| | ||||
| 000001c0  a3 81 a7 30 81 a4 30 1d  06 03 55 1d 0e 04 16 04  |...0..0...U.....| | ||||
| 000001d0  14 b1 ad e2 85 5a cf cb  28 db 69 ce 23 69 de d3  |.....Z..(.i.#i..| | ||||
| 000001e0  26 8e 18 88 39 30 75 06  03 55 1d 23 04 6e 30 6c  |&...90u..U.#.n0l| | ||||
| 000001f0  80 14 b1 ad e2 85 5a cf  cb 28 db 69 ce 23 69 de  |......Z..(.i.#i.| | ||||
| 00000200  d3 26 8e 18 88 39 a1 49  a4 47 30 45 31 0b 30 09  |.&...9.I.G0E1.0.| | ||||
| 00000210  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 00000220  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 00000230  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000240  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000250  64 82 09 00 85 b0 bb a4  8a 7f b8 ca 30 0c 06 03  |d...........0...| | ||||
| 00000260  55 1d 13 04 05 30 03 01  01 ff 30 0d 06 09 2a 86  |U....0....0...*.| | ||||
| 00000270  48 86 f7 0d 01 01 05 05  00 03 81 81 00 08 6c 45  |H.............lE| | ||||
| 00000280  24 c7 6b b1 59 ab 0c 52  cc f2 b0 14 d7 87 9d 7a  |$.k.Y..R.......z| | ||||
| 00000290  64 75 b5 5a 95 66 e4 c5  2b 8e ae 12 66 1f eb 4f  |du.Z.f..+...f..O| | ||||
| 000002a0  38 b3 6e 60 d3 92 fd f7  41 08 b5 25 13 b1 18 7a  |8.n`....A..%...z| | ||||
| 000002b0  24 fb 30 1d ba ed 98 b9  17 ec e7 d7 31 59 db 95  |$.0.........1Y..| | ||||
| 000002c0  d3 1d 78 ea 50 56 5c d5  82 5a 2d 5a 5f 33 c4 b6  |..x.PV\..Z-Z_3..| | ||||
| 000002d0  d8 c9 75 90 96 8c 0f 52  98 b5 cd 98 1f 89 20 5f  |..u....R...... _| | ||||
| 000002e0  f2 a0 1c a3 1b 96 94 dd  a9 fd 57 e9 70 e8 26 6d  |..........W.p.&m| | ||||
| 000002f0  71 99 9b 26 6e 38 50 29  6c 90 a7 bd d9 16 03 03  |q..&n8P)l.......| | ||||
| 00000300  00 cd 0c 00 00 c9 03 00  17 41 04 1e 18 37 ef 0d  |.........A...7..| | ||||
| 00000310  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.| | ||||
| 00000320  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.| | ||||
| 00000330  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I| | ||||
| 00000340  a6 b5 68 1a 41 03 56 6b  dc 5a 89 04 01 00 80 52  |..h.A.Vk.Z.....R| | ||||
| 00000350  78 35 42 fa 35 a6 19 22  d1 03 f4 ed 65 31 ff fe  |x5B.5.."....e1..| | ||||
| 00000360  d6 83 d5 db a1 6b 7d 88  2f 53 7a e8 2a cf a7 e4  |.....k}./Sz.*...| | ||||
| 00000370  83 0f e7 b6 60 60 91 65  ee ce b0 e9 5c bb 8c fd  |....``.e....\...| | ||||
| 00000380  10 5e c7 17 cb 1b bc db  19 59 23 5d 76 3a f8 87  |.^.......Y#]v:..| | ||||
| 00000390  d8 2d a7 a2 d8 7b cc e5  f8 82 7c ed bf 08 c4 67  |.-...{....|....g| | ||||
| 000003a0  c5 f6 a6 5a 2f 9f 59 cb  62 f6 b4 f3 3c d6 f5 dc  |...Z/.Y.b...<...| | ||||
| 000003b0  20 27 d9 14 36 5c a9 8d  f6 7b c2 db 9f 84 fc 0d  | '..6\...{......| | ||||
| 000003c0  d3 3a d2 bf 4a 3b 3c 3e  13 eb f9 03 d2 cf 6f 16  |.:..J;<>......o.| | ||||
| 000003d0  03 03 00 04 0e 00 00 00                           |........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 f2 52 42 97 0a  |....F...BA..RB..| | ||||
| 00000010  df a1 e0 cb 4e 5e 3c e5  45 0e de b3 eb 3d cd c2  |....N^<.E....=..| | ||||
| 00000020  78 77 ff ec 6e 74 c2 e5  9e 89 58 6f 2b bc 41 5b  |xw..nt....Xo+.A[| | ||||
| 00000030  d5 8f d0 ea ce c6 c9 11  74 0a c1 33 2a 52 c2 30  |........t..3*R.0| | ||||
| 00000040  73 08 5f 20 f2 0a 45 95  81 a8 eb 14 03 03 00 01  |s._ ..E.........| | ||||
| 00000050  01 16 03 03 00 28 52 9e  4c 11 49 07 9f b5 4b 2f  |.....(R.L.I...K/| | ||||
| 00000060  45 79 0c d9 cb ae 45 7d  17 1e c2 5a d3 ea bd 8b  |Ey....E}...Z....| | ||||
| 00000070  0d 94 b1 40 a2 56 6e a5  f8 a2 5b f8 63 73        |...@.Vn...[.cs| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  16 03 03 00 72 04 00 00  6e 00 00 00 00 00 68 00  |....r...n.....h.| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 65  |...............e| | ||||
| 00000020  ea 8b e4 ef ba f6 cb 68  be 7f f0 66 1a c6 3c c6  |.......h...f..<.| | ||||
| 00000030  ee 5f 60 3a 62 20 c5 e8  ea 99 92 84 c1 45 a1 76  |._`:b .......E.v| | ||||
| 00000040  7c a7 f2 cd 40 72 9b 38  51 77 f2 ae 54 dd 67 37  ||...@r.8Qw..T.g7| | ||||
| 00000050  f8 98 43 2e 55 59 23 3b  50 26 87 ca 6b 2d 45 d6  |..C.UY#;P&..k-E.| | ||||
| 00000060  3c 85 29 f4 52 58 83 98  ae ad a9 64 8b d1 cc 9c  |<.).RX.....d....| | ||||
| 00000070  88 3f a8 f9 d2 d3 33 14  03 03 00 01 01 16 03 03  |.?....3.........| | ||||
| 00000080  00 28 00 00 00 00 00 00  00 00 84 6d 6d 57 fb dc  |.(.........mmW..| | ||||
| 00000090  09 54 c4 9a fc d7 dd 45  f5 c3 57 fd e9 16 76 ab  |.T.....E..W...v.| | ||||
| 000000a0  a8 85 eb 34 e7 21 30 85  56 ed 17 03 03 00 25 00  |...4.!0.V.....%.| | ||||
| 000000b0  00 00 00 00 00 00 01 05  62 69 79 cb c0 74 ad 64  |........biy..t.d| | ||||
| 000000c0  0a 0c 2a 10 2a b7 8e e2  92 6e 12 3b d7 64 df d7  |..*.*....n.;.d..| | ||||
| 000000d0  4f da 52 c6 15 03 03 00  1a 00 00 00 00 00 00 00  |O.R.............| | ||||
| 000000e0  02 b9 dc 49 b9 2a 12 58  3a 4b 4c e0 c8 b2 e9 d9  |...I.*.X:KL.....| | ||||
| 000000f0  dc 48 17                                          |.H.| | ||||
|  | @ -1,101 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 01 61 01 00 01  5d 03 03 47 c5 84 0f 55  |....a...]..G...U| | ||||
| 00000010  83 4d 4a 1c 48 51 15 e4  74 72 84 70 2f 24 e9 ab  |.MJ.HQ..tr.p/$..| | ||||
| 00000020  42 1e 01 e1 85 27 2f b5  c1 43 14 00 00 c4 c0 30  |B....'/..C.....0| | ||||
| 00000030  c0 2c c0 28 c0 24 c0 14  c0 0a 00 a5 00 a3 00 a1  |.,.(.$..........| | ||||
| 00000040  00 9f 00 6b 00 6a 00 69  00 68 00 39 00 38 00 37  |...k.j.i.h.9.8.7| | ||||
| 00000050  00 36 00 88 00 87 00 86  00 85 c0 32 c0 2e c0 2a  |.6.........2...*| | ||||
| 00000060  c0 26 c0 0f c0 05 00 9d  00 3d 00 35 00 84 c0 2f  |.&.......=.5.../| | ||||
| 00000070  c0 2b c0 27 c0 23 c0 13  c0 09 00 a4 00 a2 00 a0  |.+.'.#..........| | ||||
| 00000080  00 9e 00 67 00 40 00 3f  00 3e 00 33 00 32 00 31  |...g.@.?.>.3.2.1| | ||||
| 00000090  00 30 00 9a 00 99 00 98  00 97 00 45 00 44 00 43  |.0.........E.D.C| | ||||
| 000000a0  00 42 c0 31 c0 2d c0 29  c0 25 c0 0e c0 04 00 9c  |.B.1.-.).%......| | ||||
| 000000b0  00 3c 00 2f 00 96 00 41  00 07 c0 11 c0 07 c0 0c  |.<./...A........| | ||||
| 000000c0  c0 02 00 05 00 04 c0 12  c0 08 00 16 00 13 00 10  |................| | ||||
| 000000d0  00 0d c0 0d c0 03 00 0a  00 15 00 12 00 0f 00 0c  |................| | ||||
| 000000e0  00 09 00 14 00 11 00 0e  00 0b 00 08 00 06 00 03  |................| | ||||
| 000000f0  00 ff 02 01 00 00 6f 00  0b 00 04 03 00 01 02 00  |......o.........| | ||||
| 00000100  0a 00 3a 00 38 00 0e 00  0d 00 19 00 1c 00 0b 00  |..:.8...........| | ||||
| 00000110  0c 00 1b 00 18 00 09 00  0a 00 1a 00 16 00 17 00  |................| | ||||
| 00000120  08 00 06 00 07 00 14 00  15 00 04 00 05 00 12 00  |................| | ||||
| 00000130  13 00 01 00 02 00 03 00  0f 00 10 00 11 00 0d 00  |................| | ||||
| 00000140  20 00 1e 06 01 06 02 06  03 05 01 05 02 05 03 04  | ...............| | ||||
| 00000150  01 04 02 04 03 03 01 03  02 03 03 02 01 02 02 02  |................| | ||||
| 00000160  03 00 0f 00 01 01                                 |......| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 0e 0b 00 02 0a 00  |................| | ||||
| 00000040  02 07 00 02 04 30 82 02  00 30 82 01 62 02 09 00  |.....0...0..b...| | ||||
| 00000050  b8 bf 2d 47 a0 d2 eb f4  30 09 06 07 2a 86 48 ce  |..-G....0...*.H.| | ||||
| 00000060  3d 04 01 30 45 31 0b 30  09 06 03 55 04 06 13 02  |=..0E1.0...U....| | ||||
| 00000070  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000080  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000090  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 000000a0  74 73 20 50 74 79 20 4c  74 64 30 1e 17 0d 31 32  |ts Pty Ltd0...12| | ||||
| 000000b0  31 31 32 32 31 35 30 36  33 32 5a 17 0d 32 32 31  |1122150632Z..221| | ||||
| 000000c0  31 32 30 31 35 30 36 33  32 5a 30 45 31 0b 30 09  |120150632Z0E1.0.| | ||||
| 000000d0  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 000000e0  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 000000f0  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000100  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000110  64 30 81 9b 30 10 06 07  2a 86 48 ce 3d 02 01 06  |d0..0...*.H.=...| | ||||
| 00000120  05 2b 81 04 00 23 03 81  86 00 04 00 c4 a1 ed be  |.+...#..........| | ||||
| 00000130  98 f9 0b 48 73 36 7e c3  16 56 11 22 f2 3d 53 c3  |...Hs6~..V.".=S.| | ||||
| 00000140  3b 4d 21 3d cd 6b 75 e6  f6 b0 dc 9a df 26 c1 bc  |;M!=.ku......&..| | ||||
| 00000150  b2 87 f0 72 32 7c b3 64  2f 1c 90 bc ea 68 23 10  |...r2|.d/....h#.| | ||||
| 00000160  7e fe e3 25 c0 48 3a 69  e0 28 6d d3 37 00 ef 04  |~..%.H:i.(m.7...| | ||||
| 00000170  62 dd 0d a0 9c 70 62 83  d8 81 d3 64 31 aa 9e 97  |b....pb....d1...| | ||||
| 00000180  31 bd 96 b0 68 c0 9b 23  de 76 64 3f 1a 5c 7f e9  |1...h..#.vd?.\..| | ||||
| 00000190  12 0e 58 58 b6 5f 70 dd  9b d8 ea d5 d7 f5 d5 cc  |..XX._p.........| | ||||
| 000001a0  b9 b6 9f 30 66 5b 66 9a  20 e2 27 e5 bf fe 3b 30  |...0f[f. .'...;0| | ||||
| 000001b0  09 06 07 2a 86 48 ce 3d  04 01 03 81 8c 00 30 81  |...*.H.=......0.| | ||||
| 000001c0  88 02 42 01 88 a2 4f eb  e2 45 c5 48 7d 1b ac f5  |..B...O..E.H}...| | ||||
| 000001d0  ed 98 9d ae 47 70 c0 5e  1b b6 2f bd f1 b6 4d b7  |....Gp.^../...M.| | ||||
| 000001e0  61 40 d3 11 a2 ce ee 0b  7e 92 7e ff 76 9d c3 3b  |a@......~.~.v..;| | ||||
| 000001f0  7e a5 3f ce fa 10 e2 59  ec 47 2d 7c ac da 4e 97  |~.?....Y.G-|..N.| | ||||
| 00000200  0e 15 a0 6f d0 02 42 01  4d fc be 67 13 9c 2d 05  |...o..B.M..g..-.| | ||||
| 00000210  0e bd 3f a3 8c 25 c1 33  13 83 0d 94 06 bb d4 37  |..?..%.3.......7| | ||||
| 00000220  7a f6 ec 7a c9 86 2e dd  d7 11 69 7f 85 7c 56 de  |z..z......i..|V.| | ||||
| 00000230  fb 31 78 2b e4 c7 78 0d  ae cb be 9e 4e 36 24 31  |.1x+..x.....N6$1| | ||||
| 00000240  7b 6a 0f 39 95 12 07 8f  2a 16 03 03 00 d7 0c 00  |{j.9....*.......| | ||||
| 00000250  00 d3 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000260  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000270  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000280  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000290  41 03 56 6b dc 5a 89 04  03 00 8a 30 81 87 02 42  |A.Vk.Z.....0...B| | ||||
| 000002a0  00 e5 db 39 b2 73 2b 4b  19 66 d6 d6 de d2 ed ae  |...9.s+K.f......| | ||||
| 000002b0  0c ac 74 96 12 b2 e0 87  73 7c 63 18 8c 58 3f 56  |..t.....s|c..X?V| | ||||
| 000002c0  4c fe 0f a5 2d b9 b8 1c  7d 4d 49 b9 ca f0 52 01  |L...-...}MI...R.| | ||||
| 000002d0  12 e2 a9 54 9f 4d ab b7  93 71 3c 1b 96 b0 87 8b  |...T.M...q<.....| | ||||
| 000002e0  87 c3 02 41 79 c3 50 88  2f 9a b8 a3 f0 14 63 ee  |...Ay.P./.....c.| | ||||
| 000002f0  d6 76 dd d4 1d 1c ce 4c  ba 53 40 ac 01 d9 62 a7  |.v.....L.S@...b.| | ||||
| 00000300  bc ee 66 67 fc da f4 b3  0f fd 50 5d 31 0e 2d 41  |..fg......P]1.-A| | ||||
| 00000310  64 d5 51 30 a3 0e ee 20  f9 9d 0e 11 df 68 a6 f4  |d.Q0... .....h..| | ||||
| 00000320  54 d4 54 7a 05 16 03 03  00 04 0e 00 00 00        |T.Tz..........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 00 a1 de 66 1d  |....F...BA....f.| | ||||
| 00000010  05 57 3b d2 0e 5f ba 4d  e9 b7 93 0a 3e bd 25 98  |.W;.._.M....>.%.| | ||||
| 00000020  76 a4 8a c9 d3 c8 04 85  f6 8d 4f 3e 32 4c 25 cb  |v.........O>2L%.| | ||||
| 00000030  b5 57 86 b5 04 9d f6 ba  f3 17 c8 43 cb eb 8b d0  |.W.........C....| | ||||
| 00000040  ed 99 23 c7 4d 63 95 e2  cd 52 ba 14 03 03 00 01  |..#.Mc...R......| | ||||
| 00000050  01 16 03 03 00 40 33 b4  f5 4a 64 88 ef dc b6 e5  |.....@3..Jd.....| | ||||
| 00000060  b6 1e 40 3e 64 5a 2c 11  97 69 4c b6 7a 4c 9a 8a  |..@>dZ,..iL.zL..| | ||||
| 00000070  71 f2 60 e9 39 db 96 2a  a3 33 1b 7f 43 15 8b 99  |q.`.9..*.3..C...| | ||||
| 00000080  0b 52 c2 92 86 fe 57 0d  da fe 62 44 89 ce 65 4f  |.R....W...bD..eO| | ||||
| 00000090  a5 8d 29 8e 10 50                                 |..)..P| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 29 56 67 0c 28  |...........)Vg.(| | ||||
| 00000020  ca 74 e1 ae c6 e2 30 3b  f2 8b f0 fd c2 eb 11 c0  |.t....0;........| | ||||
| 00000030  0e 50 eb d8 4e de e3 32  6b 69 77 d8 d7 bd 94 30  |.P..N..2kiw....0| | ||||
| 00000040  1e bf 03 f0 31 98 d8 07  c0 27 4b 17 03 03 00 40  |....1....'K....@| | ||||
| 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000060  97 7f df af a3 9e cc a1  64 5f ab 91 8a 6f fd 19  |........d_...o..| | ||||
| 00000070  be 94 95 6d bb de 12 a9  54 10 b5 95 f3 68 77 73  |...m....T....hws| | ||||
| 00000080  14 09 b7 3b ca b8 88 6d  fd 0a 2d 24 c1 94 ce ce  |...;...m..-$....| | ||||
| 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 000000a0  00 00 00 00 00 04 6d b7  9e 15 51 c7 f8 de ab d0  |......m...Q.....| | ||||
| 000000b0  a0 45 7f 4f bc 59 73 45  e9 a8 b1 0e 9b c3 36 c7  |.E.O.YsE......6.| | ||||
| 000000c0  cb db 55 19 db                                    |..U..| | ||||
|  | @ -1,112 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 01 61 01 00 01  5d 03 03 17 83 43 01 d8  |....a...]....C..| | ||||
| 00000010  14 04 ed 55 41 35 99 cd  f6 50 e6 47 10 60 7d d9  |...UA5...P.G.`}.| | ||||
| 00000020  d1 f4 0f a1 bf 27 ab 0c  44 56 a5 00 00 c4 c0 30  |.....'..DV.....0| | ||||
| 00000030  c0 2c c0 28 c0 24 c0 14  c0 0a 00 a5 00 a3 00 a1  |.,.(.$..........| | ||||
| 00000040  00 9f 00 6b 00 6a 00 69  00 68 00 39 00 38 00 37  |...k.j.i.h.9.8.7| | ||||
| 00000050  00 36 00 88 00 87 00 86  00 85 c0 32 c0 2e c0 2a  |.6.........2...*| | ||||
| 00000060  c0 26 c0 0f c0 05 00 9d  00 3d 00 35 00 84 c0 2f  |.&.......=.5.../| | ||||
| 00000070  c0 2b c0 27 c0 23 c0 13  c0 09 00 a4 00 a2 00 a0  |.+.'.#..........| | ||||
| 00000080  00 9e 00 67 00 40 00 3f  00 3e 00 33 00 32 00 31  |...g.@.?.>.3.2.1| | ||||
| 00000090  00 30 00 9a 00 99 00 98  00 97 00 45 00 44 00 43  |.0.........E.D.C| | ||||
| 000000a0  00 42 c0 31 c0 2d c0 29  c0 25 c0 0e c0 04 00 9c  |.B.1.-.).%......| | ||||
| 000000b0  00 3c 00 2f 00 96 00 41  00 07 c0 11 c0 07 c0 0c  |.<./...A........| | ||||
| 000000c0  c0 02 00 05 00 04 c0 12  c0 08 00 16 00 13 00 10  |................| | ||||
| 000000d0  00 0d c0 0d c0 03 00 0a  00 15 00 12 00 0f 00 0c  |................| | ||||
| 000000e0  00 09 00 14 00 11 00 0e  00 0b 00 08 00 06 00 03  |................| | ||||
| 000000f0  00 ff 02 01 00 00 6f 00  0b 00 04 03 00 01 02 00  |......o.........| | ||||
| 00000100  0a 00 3a 00 38 00 0e 00  0d 00 19 00 1c 00 0b 00  |..:.8...........| | ||||
| 00000110  0c 00 1b 00 18 00 09 00  0a 00 1a 00 16 00 17 00  |................| | ||||
| 00000120  08 00 06 00 07 00 14 00  15 00 04 00 05 00 12 00  |................| | ||||
| 00000130  13 00 01 00 02 00 03 00  0f 00 10 00 11 00 0d 00  |................| | ||||
| 00000140  20 00 1e 06 01 06 02 06  03 05 01 05 02 05 03 04  | ...............| | ||||
| 00000150  01 04 02 04 03 03 01 03  02 03 03 02 01 02 02 02  |................| | ||||
| 00000160  03 00 0f 00 01 01                                 |......| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 14 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 cd 0c 00  |n8P)l...........| | ||||
| 00000300  00 c9 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000310  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000320  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000330  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000340  41 03 56 6b dc 5a 89 04  01 00 80 7f 65 76 11 35  |A.Vk.Z......ev.5| | ||||
| 00000350  e1 9c c6 0c 21 41 d6 b4  22 2f a3 02 57 5c 40 5c  |....!A.."/..W\@\| | ||||
| 00000360  2e 0c 5f 07 01 d1 78 29  a3 7b 65 37 1c c6 51 a8  |.._...x).{e7..Q.| | ||||
| 00000370  e1 70 b4 73 9a cf 37 73  c8 ce 7c 8b 60 9e 0f e4  |.p.s..7s..|.`...| | ||||
| 00000380  d7 2e 2a a8 fd 5a 0c 8a  e7 e0 4c ca 0b 28 6d ea  |..*..Z....L..(m.| | ||||
| 00000390  39 da 9f ac 6c 23 f0 c6  fe 21 a8 ad fb e8 c9 6d  |9...l#...!.....m| | ||||
| 000003a0  96 86 75 4d 88 f0 e8 71  e0 dc 32 b9 81 f9 f3 fe  |..uM...q..2.....| | ||||
| 000003b0  64 e1 34 62 dc e2 0a 21  a3 7e 70 0d b0 f3 9d 13  |d.4b...!.~p.....| | ||||
| 000003c0  5c 81 58 24 97 a9 fb 1d  99 60 a7 16 03 03 00 04  |\.X$.....`......| | ||||
| 000003d0  0e 00 00 00                                       |....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 27 9e 27 b7 bf  |....F...BA.'.'..| | ||||
| 00000010  b1 a9 b0 5b 7d 1c 9a 02  51 6e 03 ba 60 5a a2 50  |...[}...Qn..`Z.P| | ||||
| 00000020  17 a6 2a e4 02 cd 6f ed  a2 97 49 49 0c 36 70 53  |..*...o...II.6pS| | ||||
| 00000030  ce 0c 79 49 14 55 9a 7f  a6 0a 10 65 4f e4 c6 10  |..yI.U.....eO...| | ||||
| 00000040  c2 31 68 5c 0e 5c ab 8a  a8 1c 52 14 03 03 00 01  |.1h\.\....R.....| | ||||
| 00000050  01 16 03 03 00 40 25 59  40 9e 5b 9a d5 95 a1 59  |.....@%Y@.[....Y| | ||||
| 00000060  d4 1d ea 0c 02 d1 66 29  c2 d5 d4 24 7a c7 9e 47  |......f)...$z..G| | ||||
| 00000070  f7 79 a1 5f 72 fb c8 10  61 81 e8 e3 fb 16 7e 30  |.y._r...a.....~0| | ||||
| 00000080  e2 cc 95 d2 24 2a 0f 94  96 b6 0a 27 1a 87 c9 36  |....$*.....'...6| | ||||
| 00000090  c7 b4 e9 21 d1 94                                 |...!..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 fe 1d f1 25 18  |..............%.| | ||||
| 00000020  dd 7a 1e 10 f0 86 7f 75  74 44 a5 89 92 c8 21 ff  |.z.....utD....!.| | ||||
| 00000030  b8 1b bf 79 3f 19 8e 12  04 65 58 a7 e5 96 52 3a  |...y?....eX...R:| | ||||
| 00000040  15 af 57 d8 9e 46 6f 3f  0d 89 67 17 03 03 00 40  |..W..Fo?..g....@| | ||||
| 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000060  1b fb 13 e3 c0 eb 94 bb  4f e1 9e 47 6a ce 9b 6c  |........O..Gj..l| | ||||
| 00000070  03 2f bf 0b 2f 08 36 48  b2 00 26 ab fb cc 3c 2f  |./../.6H..&...</| | ||||
| 00000080  8d 99 82 86 a1 b7 15 04  f0 59 97 d7 50 61 1c a1  |.........Y..Pa..| | ||||
| 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 000000a0  00 00 00 00 00 95 ed 23  80 9e f5 f2 37 ac 2d 50  |.......#....7.-P| | ||||
| 000000b0  3d 30 de 68 be 25 c0 72  cc c9 2d 80 41 82 f7 0e  |=0.h.%.r..-.A...| | ||||
| 000000c0  2e 86 0e 07 41                                    |....A| | ||||
|  | @ -1,122 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 65  |....\...X..R.WYe| | ||||
| 00000010  ae b3 ec a4 7a 05 f7 ec  39 22 7d 8c 91 96 6b e0  |....z...9"}...k.| | ||||
| 00000020  69 81 ff 88 28 17 60 ac  94 19 ff 00 00 04 00 05  |i...(.`.........| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 0f 0d 00  |n8P)l...........| | ||||
| 00000300  00 0b 02 01 40 00 04 04  01 04 03 00 00 16 03 03  |....@...........| | ||||
| 00000310  00 04 0e 00 00 00                                 |......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0| | ||||
| 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5| | ||||
| 00000020  d9 17 30 09 06 07 2a 86  48 ce 3d 04 01 30 45 31  |..0...*.H.=..0E1| | ||||
| 00000030  0b 30 09 06 03 55 04 06  13 02 41 55 31 13 30 11  |.0...U....AU1.0.| | ||||
| 00000040  06 03 55 04 08 13 0a 53  6f 6d 65 2d 53 74 61 74  |..U....Some-Stat| | ||||
| 00000050  65 31 21 30 1f 06 03 55  04 0a 13 18 49 6e 74 65  |e1!0...U....Inte| | ||||
| 00000060  72 6e 65 74 20 57 69 64  67 69 74 73 20 50 74 79  |rnet Widgits Pty| | ||||
| 00000070  20 4c 74 64 30 1e 17 0d  31 32 31 31 31 34 31 33  | Ltd0...12111413| | ||||
| 00000080  32 35 35 33 5a 17 0d 32  32 31 31 31 32 31 33 32  |2553Z..221112132| | ||||
| 00000090  35 35 33 5a 30 41 31 0b  30 09 06 03 55 04 06 13  |553Z0A1.0...U...| | ||||
| 000000a0  02 41 55 31 0c 30 0a 06  03 55 04 08 13 03 4e 53  |.AU1.0...U....NS| | ||||
| 000000b0  57 31 10 30 0e 06 03 55  04 07 13 07 50 79 72 6d  |W1.0...U....Pyrm| | ||||
| 000000c0  6f 6e 74 31 12 30 10 06  03 55 04 03 13 09 4a 6f  |ont1.0...U....Jo| | ||||
| 000000d0  65 6c 20 53 69 6e 67 30  81 9b 30 10 06 07 2a 86  |el Sing0..0...*.| | ||||
| 000000e0  48 ce 3d 02 01 06 05 2b  81 04 00 23 03 81 86 00  |H.=....+...#....| | ||||
| 000000f0  04 00 95 8c 91 75 14 c0  5e c4 57 b4 d4 c3 6f 8d  |.....u..^.W...o.| | ||||
| 00000100  ae 68 1e dd 6f ce 86 e1  7e 6e b2 48 3e 81 e5 4e  |.h..o...~n.H>..N| | ||||
| 00000110  e2 c6 88 4b 64 dc f5 30  bb d3 ff 65 cc 5b f4 dd  |...Kd..0...e.[..| | ||||
| 00000120  b5 6a 3e 3e d0 1d de 47  c3 76 ad 19 f6 45 2c 8c  |.j>>...G.v...E,.| | ||||
| 00000130  bc d8 1d 01 4c 1f 70 90  46 76 48 8b 8f 83 cc 4a  |....L.p.FvH....J| | ||||
| 00000140  5c 8f 40 76 da e0 89 ec  1d 2b c4 4e 30 76 28 41  |\.@v.....+.N0v(A| | ||||
| 00000150  b2 62 a8 fb 5b f1 f9 4e  7a 8d bd 09 b8 ae ea 8b  |.b..[..Nz.......| | ||||
| 00000160  18 27 4f 2e 70 fe 13 96  ba c3 d3 40 16 cd 65 4e  |.'O.p......@..eN| | ||||
| 00000170  ac 11 1e e6 f1 30 09 06  07 2a 86 48 ce 3d 04 01  |.....0...*.H.=..| | ||||
| 00000180  03 81 8c 00 30 81 88 02  42 00 e0 14 c4 60 60 0b  |....0...B....``.| | ||||
| 00000190  72 68 b0 32 5d 61 4a 02  74 5c c2 81 b9 16 a8 3f  |rh.2]aJ.t\.....?| | ||||
| 000001a0  29 c8 36 c7 81 ff 6c b6  5b d9 70 f1 38 3b 50 48  |).6...l.[.p.8;PH| | ||||
| 000001b0  28 94 cb 09 1a 52 f1 5d  ee 8d f2 b9 f0 f0 da d9  |(....R.]........| | ||||
| 000001c0  15 3a f9 bd 03 7a 87 a2  23 35 ec 02 42 01 a3 d4  |.:...z..#5..B...| | ||||
| 000001d0  8a 78 35 1c 4a 9a 23 d2  0a be 2b 10 31 9d 9c 5f  |.x5.J.#...+.1.._| | ||||
| 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.| | ||||
| 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W| | ||||
| 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..| | ||||
| 00000210  03 03 00 86 10 00 00 82  00 80 47 5a 2f b8 78 46  |..........GZ/.xF| | ||||
| 00000220  9f 3c fc ab 8b 35 c9 77  da c3 96 78 31 7c 2b 4f  |.<...5.w...x1|+O| | ||||
| 00000230  56 be 0f 33 bd 17 bc 1c  86 5a ae b3 0f 8b 18 2f  |V..3.....Z...../| | ||||
| 00000240  48 0d e0 0a 20 d3 53 96  88 d2 8a 7d b6 58 13 44  |H... .S....}.X.D| | ||||
| 00000250  a5 e8 19 6d 02 df a6 1b  79 c5 54 c2 ef 4d 41 4f  |...m....y.T..MAO| | ||||
| 00000260  04 1c eb 37 55 b7 2b f4  7c 6d 37 9c f1 89 a0 2c  |...7U.+.|m7....,| | ||||
| 00000270  0f ba 10 09 e4 a1 ee 0a  7e 9a fd 2c 32 63 1c 55  |........~..,2c.U| | ||||
| 00000280  85 38 de d0 7b 5f 46 03  1f cc 4d 69 51 97 d8 d7  |.8..{_F...MiQ...| | ||||
| 00000290  88 6f ba 43 04 b0 42 09  61 5e 16 03 03 00 92 0f  |.o.C..B.a^......| | ||||
| 000002a0  00 00 8e 04 03 00 8a 30  81 87 02 41 14 3d 4c 71  |.......0...A.=Lq| | ||||
| 000002b0  c2 32 4a 20 ee b7 69 17  55 e8 99 55 11 76 51 7a  |.2J ..i.U..U.vQz| | ||||
| 000002c0  74 55 e7 e8 c3 3b b3 70  db 1c 8e f6 8a d4 99 40  |tU...;.p.......@| | ||||
| 000002d0  6e da 04 fd 7a 47 41 d6  ae c0 63 ad fd 91 a8 58  |n...zGA...c....X| | ||||
| 000002e0  24 b9 ac 2f 7a 4c bf 5b  24 12 cb 3a f3 02 42 00  |$../zL.[$..:..B.| | ||||
| 000002f0  90 f9 48 97 0e d4 33 99  09 9f 1d a8 97 16 60 82  |..H...3.......`.| | ||||
| 00000300  85 cc 5a 5d 79 f7 2f 03  2a c0 b8 12 61 ac 9f 88  |..Z]y./.*...a...| | ||||
| 00000310  1d 0d 9e 0a ee 28 a8 5a  e2 42 b7 94 e2 e6 0e 13  |.....(.Z.B......| | ||||
| 00000320  c8 64 dc 4e d3 6b 10 d6  83 41 9c dc d4 53 c3 08  |.d.N.k...A...S..| | ||||
| 00000330  19 14 03 03 00 01 01 16  03 03 00 24 ef bd e3 23  |...........$...#| | ||||
| 00000340  10 23 ae 6e b5 12 eb 9c  21 78 db 36 fd bf 7f ee  |.#.n....!x.6....| | ||||
| 00000350  6f c8 00 2d b6 35 cc 2f  38 73 ae a4 34 cf 0d df  |o..-.5./8s..4...| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 a7 50 0f 50 b4  |..........$.P.P.| | ||||
| 00000010  1c c3 4d f3 7a 64 df 65  ac 35 22 13 46 cc ec 36  |..M.zd.e.5".F..6| | ||||
| 00000020  e6 d2 f3 67 94 6a 18 85  9f 4a 3c 44 a3 58 b0 17  |...g.j...J<D.X..| | ||||
| 00000030  03 03 00 21 51 0a 41 8c  fd 50 e3 54 8b 6a 1f 83  |...!Q.A..P.T.j..| | ||||
| 00000040  a5 37 98 e1 5b 1e ec 03  1d c7 0e 28 6d 79 3f 34  |.7..[......(my?4| | ||||
| 00000050  de 1c 38 6d 7e 15 03 03  00 16 06 fc b1 7d ad 70  |..8m~........}.p| | ||||
| 00000060  1a de d4 b7 b5 e7 a2 6d  1b 9a b0 31 0c cc 7b 70  |.......m...1..{p| | ||||
|  | @ -1,121 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 6b  |....\...X..R.WYk| | ||||
| 00000010  11 07 04 39 77 20 c2 b4  3f cb 0a c9 53 fe 5b 3e  |...9w ..?...S.[>| | ||||
| 00000020  5f 58 2c 7e 30 69 e1 8e  6c 9d c8 00 00 04 00 05  |_X,~0i..l.......| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 0f 0d 00  |n8P)l...........| | ||||
| 00000300  00 0b 02 01 40 00 04 04  01 04 03 00 00 16 03 03  |....@...........| | ||||
| 00000310  00 04 0e 00 00 00                                 |......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 01 fb 0b 00 01  f7 00 01 f4 00 01 f1 30  |...............0| | ||||
| 00000010  82 01 ed 30 82 01 58 a0  03 02 01 02 02 01 00 30  |...0..X........0| | ||||
| 00000020  0b 06 09 2a 86 48 86 f7  0d 01 01 05 30 26 31 10  |...*.H......0&1.| | ||||
| 00000030  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 00000040  31 12 30 10 06 03 55 04  03 13 09 31 32 37 2e 30  |1.0...U....127.0| | ||||
| 00000050  2e 30 2e 31 30 1e 17 0d  31 31 31 32 30 38 30 37  |.0.10...11120807| | ||||
| 00000060  35 35 31 32 5a 17 0d 31  32 31 32 30 37 30 38 30  |5512Z..121207080| | ||||
| 00000070  30 31 32 5a 30 26 31 10  30 0e 06 03 55 04 0a 13  |012Z0&1.0...U...| | ||||
| 00000080  07 41 63 6d 65 20 43 6f  31 12 30 10 06 03 55 04  |.Acme Co1.0...U.| | ||||
| 00000090  03 13 09 31 32 37 2e 30  2e 30 2e 31 30 81 9c 30  |...127.0.0.10..0| | ||||
| 000000a0  0b 06 09 2a 86 48 86 f7  0d 01 01 01 03 81 8c 00  |...*.H..........| | ||||
| 000000b0  30 81 88 02 81 80 4e d0  7b 31 e3 82 64 d9 59 c0  |0.....N.{1..d.Y.| | ||||
| 000000c0  c2 87 a4 5e 1e 8b 73 33  c7 63 53 df 66 92 06 84  |...^..s3.cS.f...| | ||||
| 000000d0  f6 64 d5 8f e4 36 a7 1d  2b e8 b3 20 36 45 23 b5  |.d...6..+.. 6E#.| | ||||
| 000000e0  e3 95 ae ed e0 f5 20 9c  8d 95 df 7f 5a 12 ef 87  |...... .....Z...| | ||||
| 000000f0  e4 5b 68 e4 e9 0e 74 ec  04 8a 7f de 93 27 c4 01  |.[h...t......'..| | ||||
| 00000100  19 7a bd f2 dc 3d 14 ab  d0 54 ca 21 0c d0 4d 6e  |.z...=...T.!..Mn| | ||||
| 00000110  87 2e 5c c5 d2 bb 4d 4b  4f ce b6 2c f7 7e 88 ec  |..\...MKO..,.~..| | ||||
| 00000120  7c d7 02 91 74 a6 1e 0c  1a da e3 4a 5a 2e de 13  ||...t......JZ...| | ||||
| 00000130  9c 4c 40 88 59 93 02 03  01 00 01 a3 32 30 30 30  |.L@.Y.......2000| | ||||
| 00000140  0e 06 03 55 1d 0f 01 01  ff 04 04 03 02 00 a0 30  |...U...........0| | ||||
| 00000150  0d 06 03 55 1d 0e 04 06  04 04 01 02 03 04 30 0f  |...U..........0.| | ||||
| 00000160  06 03 55 1d 23 04 08 30  06 80 04 01 02 03 04 30  |..U.#..0.......0| | ||||
| 00000170  0b 06 09 2a 86 48 86 f7  0d 01 01 05 03 81 81 00  |...*.H..........| | ||||
| 00000180  36 1f b3 7a 0c 75 c9 6e  37 46 61 2b d5 bd c0 a7  |6..z.u.n7Fa+....| | ||||
| 00000190  4b cc 46 9a 81 58 7c 85  79 29 c8 c8 c6 67 dd 32  |K.F..X|.y)...g.2| | ||||
| 000001a0  56 45 2b 75 b6 e9 24 a9  50 9a be 1f 5a fa 1a 15  |VE+u..$.P...Z...| | ||||
| 000001b0  d9 cc 55 95 72 16 83 b9  c2 b6 8f fd 88 8c 38 84  |..U.r.........8.| | ||||
| 000001c0  1d ab 5d 92 31 13 4f fd  83 3b c6 9d f1 11 62 b6  |..].1.O..;....b.| | ||||
| 000001d0  8b ec ab 67 be c8 64 b0  11 50 46 58 17 6b 99 1c  |...g..d..PFX.k..| | ||||
| 000001e0  d3 1d fc 06 f1 0e e5 96  a8 0c f9 78 20 b7 44 18  |...........x .D.| | ||||
| 000001f0  51 8d 10 7e 4f 94 67 df  a3 4e 70 73 8e 90 91 85  |Q..~O.g..Nps....| | ||||
| 00000200  16 03 03 00 86 10 00 00  82 00 80 44 89 7d aa 26  |...........D.}.&| | ||||
| 00000210  30 ce 6b db 25 70 b0 1e  16 fa 5b 3a dd 4a 4b bd  |0.k.%p....[:.JK.| | ||||
| 00000220  ec ee 50 9d 21 ba 52 b5  51 4f a8 65 d8 2e 41 e2  |..P.!.R.QO.e..A.| | ||||
| 00000230  e1 dc f3 1a df 58 4f 87  7a d3 e1 e1 1c 13 b2 0b  |.....XO.z.......| | ||||
| 00000240  b7 43 b7 92 f2 df 19 bb  79 71 e0 71 44 ab 19 2f  |.C......yq.qD../| | ||||
| 00000250  37 11 ac 62 50 b6 f1 53  fe aa b4 bc 29 8e 0b 4c  |7..bP..S....)..L| | ||||
| 00000260  0b 12 8d d5 84 a9 fa a9  ea 16 aa c3 0d da 32 c8  |..............2.| | ||||
| 00000270  e0 4c 9f 99 f8 69 cd a8  c3 b1 76 42 67 f3 ff 15  |.L...i....vBg...| | ||||
| 00000280  52 95 43 66 da 49 43 25  9d e5 eb 16 03 03 00 88  |R.Cf.IC%........| | ||||
| 00000290  0f 00 00 84 04 01 00 80  01 d5 0e 1c 75 97 89 52  |............u..R| | ||||
| 000002a0  1a f0 cc ef 93 6e 71 b2  b1 38 8c 50 11 f7 a3 02  |.....nq..8.P....| | ||||
| 000002b0  71 c4 d5 6f 8d 01 83 06  2e ea 5a 10 8a 0d d0 fc  |q..o......Z.....| | ||||
| 000002c0  b6 a2 63 af 4f 99 b5 eb  ab fd 01 c2 fb 26 fc fd  |..c.O........&..| | ||||
| 000002d0  ad 2c b3 63 b3 87 a6 f5  14 ea 7d e7 fe a8 e7 7e  |.,.c......}....~| | ||||
| 000002e0  20 ab b9 f6 c3 58 bd c0  f3 96 eb 83 dc 42 6c 0d  | ....X.......Bl.| | ||||
| 000002f0  5e e8 09 55 c7 b8 24 05  dd e1 7c af 9f 2c 22 6c  |^..U..$...|..,"l| | ||||
| 00000300  fa b8 94 13 3b f1 09 e1  38 59 fc a1 8c cb aa ca  |....;...8Y......| | ||||
| 00000310  f8 e0 2a 9c 36 f9 c3 2b  14 03 03 00 01 01 16 03  |..*.6..+........| | ||||
| 00000320  03 00 24 d0 12 7c cc d2  3e 37 1f f4 7d b4 c0 fc  |..$..|..>7..}...| | ||||
| 00000330  19 f6 c8 ea 62 12 e0 0d  af 62 d4 69 f7 96 5a c0  |....b....b.i..Z.| | ||||
| 00000340  97 d3 bb b0 a3 f7 3f                              |......?| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 cd 20 85 1e 74  |..........$. ..t| | ||||
| 00000010  18 b2 71 48 d5 10 61 c6  b0 18 26 83 c2 7f f1 b1  |..qH..a...&.....| | ||||
| 00000020  2f b5 35 d0 47 a8 99 9a  9a a5 62 64 fb f9 29 17  |/.5.G.....bd..).| | ||||
| 00000030  03 03 00 21 22 7b ed 61  e3 9b 6d 98 b9 23 98 e3  |...!"{.a..m..#..| | ||||
| 00000040  55 11 b8 0f 7e 2b e1 c1  d4 f1 83 79 c3 f8 03 f0  |U...~+.....y....| | ||||
| 00000050  02 5c 61 24 d7 15 03 03  00 16 14 2b a3 5a 56 f0  |.\a$.......+.ZV.| | ||||
| 00000060  92 da d0 e6 32 91 d8 30  7a b4 d0 a2 93 f5 01 ea  |....2..0z.......| | ||||
|  | @ -1,81 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 1b  |....\...X..R.WY.| | ||||
| 00000010  08 fe f7 8a bf 07 84 2b  60 a6 13 2d 15 13 f8 b6  |.......+`..-....| | ||||
| 00000020  d4 b6 3b f2 7a 98 ff 32  a0 68 7c 00 00 04 00 05  |..;.z..2.h|.....| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 0f 0d 00  |n8P)l...........| | ||||
| 00000300  00 0b 02 01 40 00 04 04  01 04 03 00 00 16 03 03  |....@...........| | ||||
| 00000310  00 04 0e 00 00 00                                 |......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 07 0b 00 00  03 00 00 00 16 03 03 00  |................| | ||||
| 00000010  86 10 00 00 82 00 80 6b  51 48 d3 18 7d 30 e0 0c  |.......kQH..}0..| | ||||
| 00000020  20 8d f3 e4 39 47 30 0e  a5 85 79 f9 8b 11 50 9e  | ...9G0...y...P.| | ||||
| 00000030  81 71 5c 26 c6 bb cb aa  d5 00 d1 89 79 b1 77 2d  |.q\&........y.w-| | ||||
| 00000040  eb 9b 86 7c 52 c6 f7 b7  10 b0 b6 94 22 51 b8 12  |...|R......."Q..| | ||||
| 00000050  3c 09 35 8e 1b cc f4 3b  b7 b8 78 ab 89 59 41 49  |<.5....;..x..YAI| | ||||
| 00000060  21 31 eb f0 f8 94 63 3d  e6 96 8f b6 63 95 05 dd  |!1....c=....c...| | ||||
| 00000070  46 b3 00 8a d6 83 75 99  1b 5a 48 0a 23 b5 10 c1  |F.....u..ZH.#...| | ||||
| 00000080  95 b5 bc 15 72 b5 f5 a0  62 e2 1d c0 ff d2 87 a5  |....r...b.......| | ||||
| 00000090  97 5c 33 49 a7 26 35 14  03 03 00 01 01 16 03 03  |.\3I.&5.........| | ||||
| 000000a0  00 24 61 38 1f 9d fb d9  65 2e 02 07 fb be f9 85  |.$a8....e.......| | ||||
| 000000b0  8d 15 34 c0 d1 0e 4e 10  3c 25 60 2f ac 04 21 66  |..4...N.<%`/..!f| | ||||
| 000000c0  04 9d 9a 60 31 72                                 |...`1r| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 fe 0e 3e 84 af  |..........$..>..| | ||||
| 00000010  e5 6b 10 ed 41 9c 2b e0  ba e0 2b 53 61 36 1b 40  |.k..A.+...+Sa6.@| | ||||
| 00000020  35 de 3a c7 c3 5c df 74  67 f7 05 74 84 f5 e1 17  |5.:..\.tg..t....| | ||||
| 00000030  03 03 00 21 d3 8d 81 85  b7 1f 30 bd 89 33 f9 81  |...!......0..3..| | ||||
| 00000040  89 f7 af d1 be b0 c1 46  e3 df 32 f6 dc 2f 4d 82  |.......F..2../M.| | ||||
| 00000050  0a 84 9f 5b 03 15 03 03  00 16 13 af 37 91 82 67  |...[........7..g| | ||||
| 00000060  b0 7c 5e 0e ec 8e cc 31  a0 ea a5 72 a4 2b 0b 73  |.|^....1...r.+.s| | ||||
|  | @ -1,89 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 a1 01 00 00  9d 03 03 eb 02 58 55 90  |.............XU.| | ||||
| 00000010  a0 ba 80 52 28 a5 36 35  ee 6d eb e1 b0 d3 5d 89  |...R(.65.m....].| | ||||
| 00000020  e8 2d a3 5e b1 83 e8 2f  00 f2 1e 00 00 04 c0 0a  |.-.^.../........| | ||||
| 00000030  00 ff 02 01 00 00 6f 00  0b 00 04 03 00 01 02 00  |......o.........| | ||||
| 00000040  0a 00 3a 00 38 00 0e 00  0d 00 19 00 1c 00 0b 00  |..:.8...........| | ||||
| 00000050  0c 00 1b 00 18 00 09 00  0a 00 1a 00 16 00 17 00  |................| | ||||
| 00000060  08 00 06 00 07 00 14 00  15 00 04 00 05 00 12 00  |................| | ||||
| 00000070  13 00 01 00 02 00 03 00  0f 00 10 00 11 00 0d 00  |................| | ||||
| 00000080  20 00 1e 06 01 06 02 06  03 05 01 05 02 05 03 04  | ...............| | ||||
| 00000090  01 04 02 04 03 03 01 03  02 03 03 02 01 02 02 02  |................| | ||||
| 000000a0  03 00 0f 00 01 01                                 |......| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 0e 0b 00 02 0a 00  |................| | ||||
| 00000040  02 07 00 02 04 30 82 02  00 30 82 01 62 02 09 00  |.....0...0..b...| | ||||
| 00000050  b8 bf 2d 47 a0 d2 eb f4  30 09 06 07 2a 86 48 ce  |..-G....0...*.H.| | ||||
| 00000060  3d 04 01 30 45 31 0b 30  09 06 03 55 04 06 13 02  |=..0E1.0...U....| | ||||
| 00000070  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 00000080  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000090  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 000000a0  74 73 20 50 74 79 20 4c  74 64 30 1e 17 0d 31 32  |ts Pty Ltd0...12| | ||||
| 000000b0  31 31 32 32 31 35 30 36  33 32 5a 17 0d 32 32 31  |1122150632Z..221| | ||||
| 000000c0  31 32 30 31 35 30 36 33  32 5a 30 45 31 0b 30 09  |120150632Z0E1.0.| | ||||
| 000000d0  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 000000e0  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 000000f0  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000100  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000110  64 30 81 9b 30 10 06 07  2a 86 48 ce 3d 02 01 06  |d0..0...*.H.=...| | ||||
| 00000120  05 2b 81 04 00 23 03 81  86 00 04 00 c4 a1 ed be  |.+...#..........| | ||||
| 00000130  98 f9 0b 48 73 36 7e c3  16 56 11 22 f2 3d 53 c3  |...Hs6~..V.".=S.| | ||||
| 00000140  3b 4d 21 3d cd 6b 75 e6  f6 b0 dc 9a df 26 c1 bc  |;M!=.ku......&..| | ||||
| 00000150  b2 87 f0 72 32 7c b3 64  2f 1c 90 bc ea 68 23 10  |...r2|.d/....h#.| | ||||
| 00000160  7e fe e3 25 c0 48 3a 69  e0 28 6d d3 37 00 ef 04  |~..%.H:i.(m.7...| | ||||
| 00000170  62 dd 0d a0 9c 70 62 83  d8 81 d3 64 31 aa 9e 97  |b....pb....d1...| | ||||
| 00000180  31 bd 96 b0 68 c0 9b 23  de 76 64 3f 1a 5c 7f e9  |1...h..#.vd?.\..| | ||||
| 00000190  12 0e 58 58 b6 5f 70 dd  9b d8 ea d5 d7 f5 d5 cc  |..XX._p.........| | ||||
| 000001a0  b9 b6 9f 30 66 5b 66 9a  20 e2 27 e5 bf fe 3b 30  |...0f[f. .'...;0| | ||||
| 000001b0  09 06 07 2a 86 48 ce 3d  04 01 03 81 8c 00 30 81  |...*.H.=......0.| | ||||
| 000001c0  88 02 42 01 88 a2 4f eb  e2 45 c5 48 7d 1b ac f5  |..B...O..E.H}...| | ||||
| 000001d0  ed 98 9d ae 47 70 c0 5e  1b b6 2f bd f1 b6 4d b7  |....Gp.^../...M.| | ||||
| 000001e0  61 40 d3 11 a2 ce ee 0b  7e 92 7e ff 76 9d c3 3b  |a@......~.~.v..;| | ||||
| 000001f0  7e a5 3f ce fa 10 e2 59  ec 47 2d 7c ac da 4e 97  |~.?....Y.G-|..N.| | ||||
| 00000200  0e 15 a0 6f d0 02 42 01  4d fc be 67 13 9c 2d 05  |...o..B.M..g..-.| | ||||
| 00000210  0e bd 3f a3 8c 25 c1 33  13 83 0d 94 06 bb d4 37  |..?..%.3.......7| | ||||
| 00000220  7a f6 ec 7a c9 86 2e dd  d7 11 69 7f 85 7c 56 de  |z..z......i..|V.| | ||||
| 00000230  fb 31 78 2b e4 c7 78 0d  ae cb be 9e 4e 36 24 31  |.1x+..x.....N6$1| | ||||
| 00000240  7b 6a 0f 39 95 12 07 8f  2a 16 03 03 00 d7 0c 00  |{j.9....*.......| | ||||
| 00000250  00 d3 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000260  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000270  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000280  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000290  41 03 56 6b dc 5a 89 04  03 00 8a 30 81 87 02 41  |A.Vk.Z.....0...A| | ||||
| 000002a0  68 cb cd c0 12 5e 1e b3  cc d9 47 e7 b5 11 5e be  |h....^....G...^.| | ||||
| 000002b0  74 5b 90 93 3f 4c 07 20  a1 94 50 bb 23 82 fc 5b  |t[..?L. ..P.#..[| | ||||
| 000002c0  78 87 a3 a1 fe 7c 6f 84  93 8f b8 f7 2e 56 65 85  |x....|o......Ve.| | ||||
| 000002d0  1d 9e 8e 52 b0 89 b0 a7  66 58 98 55 30 64 94 91  |...R....fX.U0d..| | ||||
| 000002e0  8e 02 42 01 3d 74 eb a4  64 9e 7c 8b 05 57 5c f7  |..B.=t..d.|..W\.| | ||||
| 000002f0  fe a7 58 f4 21 7b 75 ea  51 1e 1c be 80 4e 00 d1  |..X.!{u.Q....N..| | ||||
| 00000300  06 80 58 90 c2 f3 47 da  22 8b a2 6b f0 2e 34 d0  |..X...G."..k..4.| | ||||
| 00000310  1a 84 54 87 62 96 b9 2c  91 9f 3f 93 24 df 6c a3  |..T.b..,..?.$.l.| | ||||
| 00000320  77 1f d2 e4 30 16 03 03  00 04 0e 00 00 00        |w...0.........| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 04 12 72 83 8c  |....F...BA...r..| | ||||
| 00000010  55 75 c4 34 48 5d d4 e3  9a 34 54 46 83 2f 69 36  |Uu.4H]...4TF./i6| | ||||
| 00000020  e2 98 65 4d d2 b3 d4 6e  35 93 42 80 02 bd 26 a4  |..eM...n5.B...&.| | ||||
| 00000030  ca 53 8d 50 c8 78 ec e3  0d 68 31 12 11 fe 76 52  |.S.P.x...h1...vR| | ||||
| 00000040  0d 2f 63 76 43 74 5b 55  bd 9a 01 14 03 03 00 01  |./cvCt[U........| | ||||
| 00000050  01 16 03 03 00 40 5f b8  b6 b9 cd 93 37 67 53 6f  |.....@_.....7gSo| | ||||
| 00000060  cd 2d c6 c2 92 28 d6 ab  b7 31 ab 75 99 c8 83 7d  |.-...(...1.u...}| | ||||
| 00000070  99 69 03 2d 52 6f ae 06  ec 34 05 fc 3b dd d0 0b  |.i.-Ro...4..;...| | ||||
| 00000080  22 4a 84 cd 86 6c 11 10  3d 0d 9c 0f c8 c9 24 a6  |"J...l..=.....$.| | ||||
| 00000090  f3 e6 e7 87 31 13                                 |....1.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 a9 71 da 7a 3d  |............q.z=| | ||||
| 00000020  c1 17 da fa 05 ac ed a6  79 79 31 67 83 de 86 92  |........yy1g....| | ||||
| 00000030  de 7e 6f 5c dc d7 e8 29  df 51 15 a1 6f 38 84 a5  |.~o\...).Q..o8..| | ||||
| 00000040  a6 e4 f2 56 8a cc bf ad  f4 b8 0c 17 03 03 00 40  |...V...........@| | ||||
| 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000060  b1 a6 a1 eb f4 26 ef e9  25 7d c8 b5 a5 4b dc c8  |.....&..%}...K..| | ||||
| 00000070  32 58 d6 c3 94 e7 f7 20  10 9e a1 db 10 db e4 42  |2X..... .......B| | ||||
| 00000080  3c c5 26 e7 70 f2 d7 f0  38 10 a7 63 61 22 1b 57  |<.&.p...8..ca".W| | ||||
| 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 000000a0  00 00 00 00 00 29 ea 96  ea 08 88 6c 5d 67 91 f7  |.....).....l]g..| | ||||
| 000000b0  31 8e b8 3a 9a d5 87 2a  81 2f 80 fb 7f b5 80 03  |1..:...*./......| | ||||
| 000000c0  9c 8b 7e 39 7b                                    |..~9{| | ||||
|  | @ -1,87 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 60 01 00 00  5c 03 03 52 cc 57 59 7e  |....`...\..R.WY~| | ||||
| 00000010  43 5c 3b fd 50 ab 61 3f  64 a4 f9 bd ba 8c 28 e1  |C\;.P.a?d.....(.| | ||||
| 00000020  f9 a1 45 7e 48 9e 62 af  25 de 0e 00 00 04 00 05  |..E~H.b.%.......| | ||||
| 00000030  00 ff 01 00 00 2f 00 23  00 00 00 0d 00 22 00 20  |...../.#.....". | | ||||
| 00000040  06 01 06 02 06 03 05 01  05 02 05 03 04 01 04 02  |................| | ||||
| 00000050  04 03 03 01 03 02 03 03  02 01 02 02 02 03 01 01  |................| | ||||
| 00000060  00 0f 00 01 01                                    |.....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 35 02 00 00  31 03 03 00 00 00 00 00  |....5...1.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  09 00 23 00 00 ff 01 00  01 00 16 03 03 02 be 0b  |..#.............| | ||||
| 00000040  00 02 ba 00 02 b7 00 02  b4 30 82 02 b0 30 82 02  |.........0...0..| | ||||
| 00000050  19 a0 03 02 01 02 02 09  00 85 b0 bb a4 8a 7f b8  |................| | ||||
| 00000060  ca 30 0d 06 09 2a 86 48  86 f7 0d 01 01 05 05 00  |.0...*.H........| | ||||
| 00000070  30 45 31 0b 30 09 06 03  55 04 06 13 02 41 55 31  |0E1.0...U....AU1| | ||||
| 00000080  13 30 11 06 03 55 04 08  13 0a 53 6f 6d 65 2d 53  |.0...U....Some-S| | ||||
| 00000090  74 61 74 65 31 21 30 1f  06 03 55 04 0a 13 18 49  |tate1!0...U....I| | ||||
| 000000a0  6e 74 65 72 6e 65 74 20  57 69 64 67 69 74 73 20  |nternet Widgits | | ||||
| 000000b0  50 74 79 20 4c 74 64 30  1e 17 0d 31 30 30 34 32  |Pty Ltd0...10042| | ||||
| 000000c0  34 30 39 30 39 33 38 5a  17 0d 31 31 30 34 32 34  |4090938Z..110424| | ||||
| 000000d0  30 39 30 39 33 38 5a 30  45 31 0b 30 09 06 03 55  |090938Z0E1.0...U| | ||||
| 000000e0  04 06 13 02 41 55 31 13  30 11 06 03 55 04 08 13  |....AU1.0...U...| | ||||
| 000000f0  0a 53 6f 6d 65 2d 53 74  61 74 65 31 21 30 1f 06  |.Some-State1!0..| | ||||
| 00000100  03 55 04 0a 13 18 49 6e  74 65 72 6e 65 74 20 57  |.U....Internet W| | ||||
| 00000110  69 64 67 69 74 73 20 50  74 79 20 4c 74 64 30 81  |idgits Pty Ltd0.| | ||||
| 00000120  9f 30 0d 06 09 2a 86 48  86 f7 0d 01 01 01 05 00  |.0...*.H........| | ||||
| 00000130  03 81 8d 00 30 81 89 02  81 81 00 bb 79 d6 f5 17  |....0.......y...| | ||||
| 00000140  b5 e5 bf 46 10 d0 dc 69  be e6 2b 07 43 5a d0 03  |...F...i..+.CZ..| | ||||
| 00000150  2d 8a 7a 43 85 b7 14 52  e7 a5 65 4c 2c 78 b8 23  |-.zC...R..eL,x.#| | ||||
| 00000160  8c b5 b4 82 e5 de 1f 95  3b 7e 62 a5 2c a5 33 d6  |........;~b.,.3.| | ||||
| 00000170  fe 12 5c 7a 56 fc f5 06  bf fa 58 7b 26 3f b5 cd  |..\zV.....X{&?..| | ||||
| 00000180  04 d3 d0 c9 21 96 4a c7  f4 54 9f 5a bf ef 42 71  |....!.J..T.Z..Bq| | ||||
| 00000190  00 fe 18 99 07 7f 7e 88  7d 7d f1 04 39 c4 a2 2e  |......~.}}..9...| | ||||
| 000001a0  db 51 c9 7c e3 c0 4c 3b  32 66 01 cf af b1 1d b8  |.Q.|..L;2f......| | ||||
| 000001b0  71 9a 1d db db 89 6b ae  da 2d 79 02 03 01 00 01  |q.....k..-y.....| | ||||
| 000001c0  a3 81 a7 30 81 a4 30 1d  06 03 55 1d 0e 04 16 04  |...0..0...U.....| | ||||
| 000001d0  14 b1 ad e2 85 5a cf cb  28 db 69 ce 23 69 de d3  |.....Z..(.i.#i..| | ||||
| 000001e0  26 8e 18 88 39 30 75 06  03 55 1d 23 04 6e 30 6c  |&...90u..U.#.n0l| | ||||
| 000001f0  80 14 b1 ad e2 85 5a cf  cb 28 db 69 ce 23 69 de  |......Z..(.i.#i.| | ||||
| 00000200  d3 26 8e 18 88 39 a1 49  a4 47 30 45 31 0b 30 09  |.&...9.I.G0E1.0.| | ||||
| 00000210  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 00000220  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 00000230  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000240  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000250  64 82 09 00 85 b0 bb a4  8a 7f b8 ca 30 0c 06 03  |d...........0...| | ||||
| 00000260  55 1d 13 04 05 30 03 01  01 ff 30 0d 06 09 2a 86  |U....0....0...*.| | ||||
| 00000270  48 86 f7 0d 01 01 05 05  00 03 81 81 00 08 6c 45  |H.............lE| | ||||
| 00000280  24 c7 6b b1 59 ab 0c 52  cc f2 b0 14 d7 87 9d 7a  |$.k.Y..R.......z| | ||||
| 00000290  64 75 b5 5a 95 66 e4 c5  2b 8e ae 12 66 1f eb 4f  |du.Z.f..+...f..O| | ||||
| 000002a0  38 b3 6e 60 d3 92 fd f7  41 08 b5 25 13 b1 18 7a  |8.n`....A..%...z| | ||||
| 000002b0  24 fb 30 1d ba ed 98 b9  17 ec e7 d7 31 59 db 95  |$.0.........1Y..| | ||||
| 000002c0  d3 1d 78 ea 50 56 5c d5  82 5a 2d 5a 5f 33 c4 b6  |..x.PV\..Z-Z_3..| | ||||
| 000002d0  d8 c9 75 90 96 8c 0f 52  98 b5 cd 98 1f 89 20 5f  |..u....R...... _| | ||||
| 000002e0  f2 a0 1c a3 1b 96 94 dd  a9 fd 57 e9 70 e8 26 6d  |..........W.p.&m| | ||||
| 000002f0  71 99 9b 26 6e 38 50 29  6c 90 a7 bd d9 16 03 03  |q..&n8P)l.......| | ||||
| 00000300  00 04 0e 00 00 00                                 |......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 6e 2e 79 82 3a  |...........n.y.:| | ||||
| 00000010  c4 68 72 f5 a2 42 3d 71  f9 ec 22 8c 0b fa f0 82  |.hr..B=q..".....| | ||||
| 00000020  82 c0 cb fc 52 0a 51 03  04 8c eb 4a 4e 4f b6 49  |....R.Q....JNO.I| | ||||
| 00000030  ef 94 65 21 3c f7 9d 46  85 6e 35 d5 17 6b ff a3  |..e!<..F.n5..k..| | ||||
| 00000040  5e 4d c1 36 1a 2f 68 f5  06 d4 2d 73 4f 1c 3b 7b  |^M.6./h...-sO.;{| | ||||
| 00000050  c1 fa 4e 7e 7c f9 6c 13  a6 f4 3a 43 e9 aa be 22  |..N~|.l...:C..."| | ||||
| 00000060  85 6f 2f 7c 5b b0 08 e2  86 b2 ae cb a9 12 d8 32  |.o/|[..........2| | ||||
| 00000070  80 1d e4 2e 5d c3 66 d1  19 e5 89 33 2a 88 24 40  |....].f....3*.$@| | ||||
| 00000080  2a 6d 6b b5 f1 92 4b 66  06 b8 49 14 03 03 00 01  |*mk...Kf..I.....| | ||||
| 00000090  01 16 03 03 00 24 16 49  e2 a0 67 31 cf 0d 72 cb  |.....$.I..g1..r.| | ||||
| 000000a0  ac 16 2c 80 37 71 69 f7  5f c4 d3 00 19 b7 4b fb  |..,.7qi._.....K.| | ||||
| 000000b0  e5 e9 74 8e 30 b3 1c c5  ae e6                    |..t.0.....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  16 03 03 00 72 04 00 00  6e 00 00 00 00 00 68 00  |....r...n.....h.| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 65  |...............e| | ||||
| 00000020  ea 4b d1 ef ba 06 38 1e  e1 88 82 3a cd 03 ac 3b  |.K....8....:...;| | ||||
| 00000030  39 0a e0 19 fd af 6c 57  30 df 31 6e f7 92 38 4b  |9.....lW0.1n..8K| | ||||
| 00000040  5d 77 90 39 ff 32 51 f5  ed 12 d7 b0 7c 4d 6c c5  |]w.9.2Q.....|Ml.| | ||||
| 00000050  76 e4 72 48 3e 59 23 fe  0d 15 df f4 ba ea b9 67  |v.rH>Y#........g| | ||||
| 00000060  16 23 8f 7d 15 b6 11 f1  ab d7 d4 cd a3 21 82 92  |.#.}.........!..| | ||||
| 00000070  2a 12 cf 95 f3 60 b2 14  03 03 00 01 01 16 03 03  |*....`..........| | ||||
| 00000080  00 24 89 ad 87 04 4f 08  dc 2a 71 37 fb f1 95 d1  |.$....O..*q7....| | ||||
| 00000090  2e 3c c2 6e 0f 38 5d e4  0e c3 f7 27 d0 46 a3 c1  |.<.n.8]....'.F..| | ||||
| 000000a0  a8 3b 06 ed 96 ec 17 03  03 00 21 30 d4 9f 0b 49  |.;........!0...I| | ||||
| 000000b0  9f a2 a8 a1 2c 0a 79 93  56 2d 8a ee 85 ed 62 42  |....,.y.V-....bB| | ||||
| 000000c0  8c 18 fe 7a 09 3a 24 c4  5e ed 7d 2a 15 03 03 00  |...z.:$.^.}*....| | ||||
| 000000d0  16 a0 24 0a 8b 90 4c fc  99 ba 67 bb 04 1e 59 69  |..$...L...g...Yi| | ||||
| 000000e0  c2 98 49 b5 00 0b e0                              |..I....| | ||||
|  | @ -1,87 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 60 01 00 00  5c 03 03 54 23 54 02 17  |....`...\..T#T..| | ||||
| 00000010  f3 53 13 3d 48 88 c3 19  b9 d1 3d 33 7f f5 99 56  |.S.=H.....=3...V| | ||||
| 00000020  04 71 1b d9 d5 64 8a 0d  4a 54 00 00 00 04 00 05  |.q...d..JT......| | ||||
| 00000030  00 ff 01 00 00 2f 00 23  00 00 00 0d 00 22 00 20  |...../.#.....". | | ||||
| 00000040  06 01 06 02 06 03 05 01  05 02 05 03 04 01 04 02  |................| | ||||
| 00000050  04 03 03 01 03 02 03 03  02 01 02 02 02 03 01 01  |................| | ||||
| 00000060  00 0f 00 01 01                                    |.....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 35 02 00 00  31 03 03 00 00 00 00 00  |....5...1.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  09 00 23 00 00 ff 01 00  01 00 16 03 03 02 be 0b  |..#.............| | ||||
| 00000040  00 02 ba 00 02 b7 00 02  b4 30 82 02 b0 30 82 02  |.........0...0..| | ||||
| 00000050  19 a0 03 02 01 02 02 09  00 85 b0 bb a4 8a 7f b8  |................| | ||||
| 00000060  ca 30 0d 06 09 2a 86 48  86 f7 0d 01 01 05 05 00  |.0...*.H........| | ||||
| 00000070  30 45 31 0b 30 09 06 03  55 04 06 13 02 41 55 31  |0E1.0...U....AU1| | ||||
| 00000080  13 30 11 06 03 55 04 08  13 0a 53 6f 6d 65 2d 53  |.0...U....Some-S| | ||||
| 00000090  74 61 74 65 31 21 30 1f  06 03 55 04 0a 13 18 49  |tate1!0...U....I| | ||||
| 000000a0  6e 74 65 72 6e 65 74 20  57 69 64 67 69 74 73 20  |nternet Widgits | | ||||
| 000000b0  50 74 79 20 4c 74 64 30  1e 17 0d 31 30 30 34 32  |Pty Ltd0...10042| | ||||
| 000000c0  34 30 39 30 39 33 38 5a  17 0d 31 31 30 34 32 34  |4090938Z..110424| | ||||
| 000000d0  30 39 30 39 33 38 5a 30  45 31 0b 30 09 06 03 55  |090938Z0E1.0...U| | ||||
| 000000e0  04 06 13 02 41 55 31 13  30 11 06 03 55 04 08 13  |....AU1.0...U...| | ||||
| 000000f0  0a 53 6f 6d 65 2d 53 74  61 74 65 31 21 30 1f 06  |.Some-State1!0..| | ||||
| 00000100  03 55 04 0a 13 18 49 6e  74 65 72 6e 65 74 20 57  |.U....Internet W| | ||||
| 00000110  69 64 67 69 74 73 20 50  74 79 20 4c 74 64 30 81  |idgits Pty Ltd0.| | ||||
| 00000120  9f 30 0d 06 09 2a 86 48  86 f7 0d 01 01 01 05 00  |.0...*.H........| | ||||
| 00000130  03 81 8d 00 30 81 89 02  81 81 00 bb 79 d6 f5 17  |....0.......y...| | ||||
| 00000140  b5 e5 bf 46 10 d0 dc 69  be e6 2b 07 43 5a d0 03  |...F...i..+.CZ..| | ||||
| 00000150  2d 8a 7a 43 85 b7 14 52  e7 a5 65 4c 2c 78 b8 23  |-.zC...R..eL,x.#| | ||||
| 00000160  8c b5 b4 82 e5 de 1f 95  3b 7e 62 a5 2c a5 33 d6  |........;~b.,.3.| | ||||
| 00000170  fe 12 5c 7a 56 fc f5 06  bf fa 58 7b 26 3f b5 cd  |..\zV.....X{&?..| | ||||
| 00000180  04 d3 d0 c9 21 96 4a c7  f4 54 9f 5a bf ef 42 71  |....!.J..T.Z..Bq| | ||||
| 00000190  00 fe 18 99 07 7f 7e 88  7d 7d f1 04 39 c4 a2 2e  |......~.}}..9...| | ||||
| 000001a0  db 51 c9 7c e3 c0 4c 3b  32 66 01 cf af b1 1d b8  |.Q.|..L;2f......| | ||||
| 000001b0  71 9a 1d db db 89 6b ae  da 2d 79 02 03 01 00 01  |q.....k..-y.....| | ||||
| 000001c0  a3 81 a7 30 81 a4 30 1d  06 03 55 1d 0e 04 16 04  |...0..0...U.....| | ||||
| 000001d0  14 b1 ad e2 85 5a cf cb  28 db 69 ce 23 69 de d3  |.....Z..(.i.#i..| | ||||
| 000001e0  26 8e 18 88 39 30 75 06  03 55 1d 23 04 6e 30 6c  |&...90u..U.#.n0l| | ||||
| 000001f0  80 14 b1 ad e2 85 5a cf  cb 28 db 69 ce 23 69 de  |......Z..(.i.#i.| | ||||
| 00000200  d3 26 8e 18 88 39 a1 49  a4 47 30 45 31 0b 30 09  |.&...9.I.G0E1.0.| | ||||
| 00000210  06 03 55 04 06 13 02 41  55 31 13 30 11 06 03 55  |..U....AU1.0...U| | ||||
| 00000220  04 08 13 0a 53 6f 6d 65  2d 53 74 61 74 65 31 21  |....Some-State1!| | ||||
| 00000230  30 1f 06 03 55 04 0a 13  18 49 6e 74 65 72 6e 65  |0...U....Interne| | ||||
| 00000240  74 20 57 69 64 67 69 74  73 20 50 74 79 20 4c 74  |t Widgits Pty Lt| | ||||
| 00000250  64 82 09 00 85 b0 bb a4  8a 7f b8 ca 30 0c 06 03  |d...........0...| | ||||
| 00000260  55 1d 13 04 05 30 03 01  01 ff 30 0d 06 09 2a 86  |U....0....0...*.| | ||||
| 00000270  48 86 f7 0d 01 01 05 05  00 03 81 81 00 08 6c 45  |H.............lE| | ||||
| 00000280  24 c7 6b b1 59 ab 0c 52  cc f2 b0 14 d7 87 9d 7a  |$.k.Y..R.......z| | ||||
| 00000290  64 75 b5 5a 95 66 e4 c5  2b 8e ae 12 66 1f eb 4f  |du.Z.f..+...f..O| | ||||
| 000002a0  38 b3 6e 60 d3 92 fd f7  41 08 b5 25 13 b1 18 7a  |8.n`....A..%...z| | ||||
| 000002b0  24 fb 30 1d ba ed 98 b9  17 ec e7 d7 31 59 db 95  |$.0.........1Y..| | ||||
| 000002c0  d3 1d 78 ea 50 56 5c d5  82 5a 2d 5a 5f 33 c4 b6  |..x.PV\..Z-Z_3..| | ||||
| 000002d0  d8 c9 75 90 96 8c 0f 52  98 b5 cd 98 1f 89 20 5f  |..u....R...... _| | ||||
| 000002e0  f2 a0 1c a3 1b 96 94 dd  a9 fd 57 e9 70 e8 26 6d  |..........W.p.&m| | ||||
| 000002f0  71 99 9b 26 6e 38 50 29  6c 90 a7 bd d9 16 03 03  |q..&n8P)l.......| | ||||
| 00000300  00 04 0e 00 00 00                                 |......| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 27 e9 a4 f7 e7  |...........'....| | ||||
| 00000010  df 25 de 84 8c 1f d6 e6  c3 11 28 55 9a c1 91 37  |.%........(U...7| | ||||
| 00000020  84 f5 ba f8 80 0d ca 50  cb 1e 72 f7 97 6f c2 b2  |.......P..r..o..| | ||||
| 00000030  04 4d 13 7c e0 6e a0 1f  91 e1 38 1b a2 c0 55 16  |.M.|.n....8...U.| | ||||
| 00000040  7f 29 fc ed 1c 1a cf 72  14 c3 00 c1 dd 36 36 af  |.).....r.....66.| | ||||
| 00000050  a6 e4 a8 be ba ec 13 d0  1e d0 1d fd e1 5b 27 fd  |.............['.| | ||||
| 00000060  9a da 2e 12 c8 b0 b9 c2  b9 76 ec 7f 3c 98 b6 63  |.........v..<..c| | ||||
| 00000070  bc da f0 07 7a 3d e7 61  f4 2f 12 80 3b f9 3b cc  |....z=.a./..;.;.| | ||||
| 00000080  05 c8 2f 7e 28 b2 73 bf  97 61 29 14 03 03 00 01  |../~(.s..a).....| | ||||
| 00000090  01 16 03 03 00 24 17 59  a9 45 53 46 33 96 50 dd  |.....$.Y.ESF3.P.| | ||||
| 000000a0  3e 23 aa 91 38 f8 56 4a  2f 1a f2 b1 44 9b ce 17  |>#..8.VJ/...D...| | ||||
| 000000b0  6b 8a 89 76 bc 67 b8 8b  ba 90                    |k..v.g....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  16 03 03 00 72 04 00 00  6e 00 00 00 00 00 68 00  |....r...n.....h.| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 65  |...............e| | ||||
| 00000020  ea 4b d1 ef ba 2d db 0c  ba 9a d4 20 76 57 c8 ec  |.K...-..... vW..| | ||||
| 00000030  dc 2d 77 fb fb 3b 93 5f  53 e0 14 4f 90 fb d6 55  |.-w..;._S..O...U| | ||||
| 00000040  57 8c 8d 0d 25 ea 5d 0d  f2 91 e5 12 22 12 ec 7b  |W...%.]....."..{| | ||||
| 00000050  5f b6 6e fd 07 59 23 24  fc b1 97 ca ea 56 a5 c2  |_.n..Y#$.....V..| | ||||
| 00000060  a0 e4 9e 99 64 f2 64 d0  75 7a 46 63 e3 dc 21 ed  |....d.d.uzFc..!.| | ||||
| 00000070  78 56 e9 e1 ab 66 80 14  03 03 00 01 01 16 03 03  |xV...f..........| | ||||
| 00000080  00 24 fc 14 68 07 17 1f  df b7 84 cb fd c1 e0 e4  |.$..h...........| | ||||
| 00000090  f2 1a ea 34 b5 00 7f 70  be c8 1c 0a d6 55 e3 57  |...4...p.....U.W| | ||||
| 000000a0  50 4e 6d 7d 8a 5d 17 03  03 00 21 24 27 50 40 c1  |PNm}.]....!$'P@.| | ||||
| 000000b0  c5 bd c7 9f 95 d9 ba 2e  7b 0e db ea a7 31 81 05  |........{....1..| | ||||
| 000000c0  75 43 b1 63 cf b8 55 92  ef 76 98 a9 15 03 03 00  |uC.c..U..v......| | ||||
| 000000d0  16 d7 ea 3c 79 e7 a6 2f  61 39 ec 4e 95 86 48 5e  |...<y../a9.N..H^| | ||||
| 000000e0  75 a0 9e 41 42 89 67                              |u..AB.g| | ||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-3DES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,83 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 68  |....\...X..R.WYh| | ||||
| 00000010  11 72 a6 ec 6b 0a 47 1d  10 06 ec 75 af 07 38 a0  |.r..k.G....u..8.| | ||||
| 00000020  30 9e 91 12 e1 9b 19 46  0d d4 45 00 00 04 00 0a  |0......F..E.....| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 0a 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 7a c0 73 ec cb  |...........z.s..| | ||||
| 00000010  cf c2 a8 86 c0 7e 03 63  57 a1 ce 42 37 6d 78 54  |.....~.cW..B7mxT| | ||||
| 00000020  29 f5 3e cc 57 c7 0d d9  69 e1 52 5c 3b 6b c4 c7  |).>.W...i.R\;k..| | ||||
| 00000030  20 6d 59 ee c0 07 81 74  74 9f 62 41 64 f0 4d c8  | mY....tt.bAd.M.| | ||||
| 00000040  9b aa 1a b9 da 56 07 f5  6c 1c 59 8c d3 f9 08 d9  |.....V..l.Y.....| | ||||
| 00000050  08 f4 16 93 5d 9a e5 6f  fb 9f ba 3d 3c d6 81 ad  |....]..o...=<...| | ||||
| 00000060  02 12 a7 28 b6 81 6a 77  c3 e9 d7 c7 54 d6 77 83  |...(..jw....T.w.| | ||||
| 00000070  77 de 71 fb b3 f3 2d c4  a5 b1 e5 de aa 0e 21 bd  |w.q...-.......!.| | ||||
| 00000080  91 a2 dc 7f f7 6f 90 82  54 b1 e7 14 03 03 00 01  |.....o..T.......| | ||||
| 00000090  01 16 03 03 00 30 8f ee  bf fb c8 5c 54 f5 29 23  |.....0.....\T.)#| | ||||
| 000000a0  d4 55 f6 98 a1 6e d5 43  e7 81 b2 36 f2 98 d8 1b  |.U...n.C...6....| | ||||
| 000000b0  0d 76 cb 14 ba 32 d7 36  30 e6 ab 42 80 95 f6 8a  |.v...2.60..B....| | ||||
| 000000c0  60 64 a0 6b 90 81                                 |`d.k..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 30 00 00 00 00 00  |..........0.....| | ||||
| 00000010  00 00 00 2c 21 52 34 63  ac e3 a3 66 45 00 41 0c  |...,!R4c...fE.A.| | ||||
| 00000020  93 5d 6a 74 5a 25 dc 69  1d 76 73 0c f4 42 6a 18  |.]jtZ%.i.vs..Bj.| | ||||
| 00000030  5b 62 23 e7 fe 41 cf d4  9b 86 35 17 03 03 00 30  |[b#..A....5....0| | ||||
| 00000040  00 00 00 00 00 00 00 00  7d 5d ce 43 85 5c 6b 89  |........}].C.\k.| | ||||
| 00000050  c9 a5 0e 22 69 8e b9 4a  77 4c c0 4e cc 79 d9 7e  |..."i..JwL.N.y.~| | ||||
| 00000060  a3 c8 d3 db 5c 53 f8 92  4d c4 5a 88 72 58 05 11  |....\S..M.Z.rX..| | ||||
| 00000070  15 03 03 00 20 00 00 00  00 00 00 00 00 1d 63 8b  |.... .........c.| | ||||
| 00000080  a7 74 fb 76 1d 47 31 93  1f ec 8c e2 18 8e 21 dd  |.t.v.G1.......!.| | ||||
| 00000090  87 97 9f 1c ca                                    |.....| | ||||
							
								
								
									
										87
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										87
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-AES
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,87 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 d0  |....\...X..R.WY.| | ||||
| 00000010  38 05 36 7e e3 1e 93 2a  5a bf dc c2 f8 0a 03 6f  |8.6~...*Z......o| | ||||
| 00000020  1a fc 21 74 e5 8b 2a c3  9e 2c 26 00 00 04 00 2f  |..!t..*..,&..../| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 2f 00 00  |............./..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 4b b4 28 bc 78  |...........K.(.x| | ||||
| 00000010  41 34 f3 49 e8 74 07 74  42 ae 2e 55 9e 9a ce e5  |A4.I.t.tB..U....| | ||||
| 00000020  4a 1b e7 55 c7 64 c4 9c  b3 dd 20 d6 f8 8e 67 b3  |J..U.d.... ...g.| | ||||
| 00000030  7a 5c 3b 34 e4 1a f6 bd  65 fc 21 cd 9a de 64 77  |z\;4....e.!...dw| | ||||
| 00000040  09 a5 92 e5 a4 f5 18 7b  23 5b 8b c1 95 23 97 6f  |.......{#[...#.o| | ||||
| 00000050  76 55 04 34 22 7d 43 71  db cd eb f8 36 36 44 4b  |vU.4"}Cq....66DK| | ||||
| 00000060  ae e3 cc ec 64 88 7b e1  ea d6 ab 49 35 94 a5 04  |....d.{....I5...| | ||||
| 00000070  1e 83 c5 cf 21 bb ca 33  5f d4 bf 1d d3 4d 07 59  |....!..3_....M.Y| | ||||
| 00000080  b4 39 b2 4b 7b 05 43 70  0d ba 7a 14 03 03 00 01  |.9.K{.Cp..z.....| | ||||
| 00000090  01 16 03 03 00 40 74 4b  7d b2 53 49 ea 86 90 c3  |.....@tK}.SI....| | ||||
| 000000a0  64 6b 64 31 1a 2a 3f 1a  37 1e 56 b8 dd 12 6d 56  |dkd1.*?.7.V...mV| | ||||
| 000000b0  2a 61 92 5b 39 e7 e1 be  71 70 4b 9b b3 f0 71 e7  |*a.[9...qpK...q.| | ||||
| 000000c0  47 2e 2e 17 c3 0a 66 9f  69 74 30 2d f0 a0 7f 84  |G.....f.it0-....| | ||||
| 000000d0  25 db c1 81 ee cf                                 |%.....| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 f3 4d 5a fc 21  |............MZ.!| | ||||
| 00000020  30 b5 a1 86 9d e2 ea 38  ac 54 57 fa 5a 54 97 b8  |0......8.TW.ZT..| | ||||
| 00000030  bb 4d 64 09 ef ce a1 75  0c 50 8d ff 5c c2 e9 47  |.Md....u.P..\..G| | ||||
| 00000040  95 93 53 c0 bd dc c5 9c  e0 59 17 17 03 03 00 40  |..S......Y.....@| | ||||
| 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000060  69 c5 48 6e 45 cf 98 1b  2c 23 40 d1 ab a3 c2 e2  |i.HnE...,#@.....| | ||||
| 00000070  10 7b b1 c8 21 3c f0 eb  96 bd 4f 78 b2 4a 7b 18  |.{..!<....Ox.J{.| | ||||
| 00000080  4c b1 a6 67 bf 06 40 01  d0 8d 91 be 17 d8 0c 71  |L..g..@........q| | ||||
| 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 000000a0  00 00 00 00 00 20 84 80  3d 70 fe ae ee d7 2f e9  |..... ..=p..../.| | ||||
| 000000b0  bf 65 30 bf 0b dd 98 ea  bb ba 12 14 98 53 7f d5  |.e0..........S..| | ||||
| 000000c0  56 ce 06 3c d0                                    |V..<.| | ||||
|  | @ -1,93 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 9c 01 00 00  98 03 03 53 04 f1 30 73  |...........S..0s| | ||||
| 00000010  a1 ea 8c d2 90 1c c6 d6  0d 3c af 58 21 65 90 25  |.........<.X!e.%| | ||||
| 00000020  5e fa f4 27 22 65 c9 68  90 b9 04 00 00 04 c0 2f  |^..'"e.h......./| | ||||
| 00000030  00 ff 01 00 00 6b 00 0b  00 04 03 00 01 02 00 0a  |.....k..........| | ||||
| 00000040  00 34 00 32 00 0e 00 0d  00 19 00 0b 00 0c 00 18  |.4.2............| | ||||
| 00000050  00 09 00 0a 00 16 00 17  00 08 00 06 00 07 00 14  |................| | ||||
| 00000060  00 15 00 04 00 05 00 12  00 13 00 01 00 02 00 03  |................| | ||||
| 00000070  00 0f 00 10 00 11 00 0d  00 22 00 20 06 01 06 02  |.........". ....| | ||||
| 00000080  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000090  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 000000a0  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 2f 00 00  |............./..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 cd 0c 00  |n8P)l...........| | ||||
| 00000300  00 c9 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000310  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000320  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000330  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000340  41 03 56 6b dc 5a 89 04  01 00 80 a2 54 61 84 29  |A.Vk.Z......Ta.)| | ||||
| 00000350  3e 97 4b 97 9a 9f 5c c0  49 6d 86 d2 79 8e 95 a1  |>.K...\.Im..y...| | ||||
| 00000360  0a 5a 36 73 34 bb 05 73  35 47 e1 2b 5d f3 ef 36  |.Z6s4..s5G.+]..6| | ||||
| 00000370  a8 32 e2 7e ef aa 3f 1f  b3 64 60 d4 06 2e 98 e3  |.2.~..?..d`.....| | ||||
| 00000380  11 e2 60 3c d6 20 17 63  b2 6f a0 cd 21 01 2b 4e  |..`<. .c.o..!.+N| | ||||
| 00000390  b2 a8 55 04 39 37 5c 6c  71 66 4d a3 eb 1b 83 67  |..U.97\lqfM....g| | ||||
| 000003a0  6b 15 a0 56 9a f1 a2 79  92 29 ce 58 3c 10 4d 65  |k..V...y.).X<.Me| | ||||
| 000003b0  1f 22 e3 ea d8 74 aa 01  7e ca f3 89 23 41 4d bd  |."...t..~...#AM.| | ||||
| 000003c0  df 77 4e 59 54 97 74 ad  07 ea c0 16 03 03 00 04  |.wNYT.t.........| | ||||
| 000003d0  0e 00 00 00                                       |....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 45 65 ce f7 b9  |....F...BA.Ee...| | ||||
| 00000010  52 e3 fb 13 db 91 f2 65  43 84 57 f5 1a 19 a0 e6  |R......eC.W.....| | ||||
| 00000020  89 2d bb 2c 83 6b 62 f6  6f 1f 26 ae 59 67 bd dc  |.-.,.kb.o.&.Yg..| | ||||
| 00000030  c4 9e 0b dc 7d 6e f8 6b  95 8c 61 47 3d cd d1 df  |....}n.k..aG=...| | ||||
| 00000040  82 45 30 81 c3 a3 49 5d  85 59 70 14 03 03 00 01  |.E0...I].Yp.....| | ||||
| 00000050  01 16 03 03 00 28 3f aa  85 33 f9 c6 95 a0 56 ff  |.....(?..3....V.| | ||||
| 00000060  1c f1 5a ba 6e 41 50 0c  ab 92 e1 e2 8e 89 1c f1  |..Z.nAP.........| | ||||
| 00000070  fa 54 1b f1 f5 00 01 12  6d c4 96 78 b6 87        |.T......m..x..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 00 00 00 00 00  |..........(.....| | ||||
| 00000010  00 00 00 94 5c be 46 05  d6 d0 b0 3a 56 dc 2c 10  |....\.F....:V.,.| | ||||
| 00000020  0f 6f 5d 33 33 7f a5 4e  74 84 bf 63 87 c4 f4 49  |.o]33..Nt..c...I| | ||||
| 00000030  bc 6b ab 17 03 03 00 25  00 00 00 00 00 00 00 01  |.k.....%........| | ||||
| 00000040  7e 4f f9 ae ae fe 6b a0  4a f8 0f 0b b4 b6 65 b6  |~O....k.J.....e.| | ||||
| 00000050  be 24 5f 94 6d d1 db 54  11 07 b9 ce 01 15 03 03  |.$_.m..T........| | ||||
| 00000060  00 1a 00 00 00 00 00 00  00 02 a8 1c d6 62 ac fd  |.............b..| | ||||
| 00000070  77 ba 23 92 5d 34 f1 17  c7 e1 1c 99              |w.#.]4......| | ||||
|  | @ -1,92 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 9a 01 00 00  96 03 03 37 7c 30 6d df  |...........7|0m.| | ||||
| 00000010  4d 94 90 04 59 df ec 01  11 77 29 b6 4f 95 50 ef  |M...Y....w).O.P.| | ||||
| 00000020  ca d0 0f f4 a6 35 98 3b  ee 16 72 00 00 04 c0 30  |.....5.;..r....0| | ||||
| 00000030  00 ff 01 00 00 69 00 0b  00 04 03 00 01 02 00 0a  |.....i..........| | ||||
| 00000040  00 34 00 32 00 0e 00 0d  00 19 00 0b 00 0c 00 18  |.4.2............| | ||||
| 00000050  00 09 00 0a 00 16 00 17  00 08 00 06 00 07 00 14  |................| | ||||
| 00000060  00 15 00 04 00 05 00 12  00 13 00 01 00 02 00 03  |................| | ||||
| 00000070  00 0f 00 10 00 11 00 0d  00 20 00 1e 06 01 06 02  |......... ......| | ||||
| 00000080  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000090  03 02 03 03 02 01 02 02  02 03 00 0f 00 01 01     |...............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 c0 30 00 00  |.............0..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 cd 0c 00  |n8P)l...........| | ||||
| 00000300  00 c9 03 00 17 41 04 1e  18 37 ef 0d 19 51 88 35  |.....A...7...Q.5| | ||||
| 00000310  75 71 b5 e5 54 5b 12 2e  8f 09 67 fd a7 24 20 3e  |uq..T[....g..$ >| | ||||
| 00000320  b2 56 1c ce 97 28 5e f8  2b 2d 4f 9e f1 07 9f 6c  |.V...(^.+-O....l| | ||||
| 00000330  4b 5b 83 56 e2 32 42 e9  58 b6 d7 49 a6 b5 68 1a  |K[.V.2B.X..I..h.| | ||||
| 00000340  41 03 56 6b dc 5a 89 04  01 00 80 4f 66 0e d5 7f  |A.Vk.Z.....Of...| | ||||
| 00000350  a8 99 4d dc 5b a7 b0 32  67 b2 8a 2e ca 90 58 f0  |..M.[..2g.....X.| | ||||
| 00000360  8d f1 fd 74 c1 3c 84 28  9d 25 7e 0a 61 f8 90 2d  |...t.<.(.%~.a..-| | ||||
| 00000370  99 f3 90 c9 26 ab a7 d2  38 87 e1 2b 12 6e 93 17  |....&...8..+.n..| | ||||
| 00000380  3c 2f 11 8c d8 67 73 11  68 b9 d0 a7 ad 44 83 72  |</...gs.h....D.r| | ||||
| 00000390  fc e4 6b ce 7f 02 7e 33  89 4b f3 dc 30 42 c0 4b  |..k...~3.K..0B.K| | ||||
| 000003a0  2b 29 eb e6 1c 43 bb a7  27 b9 3e f4 76 ec 69 4d  |+)...C..'.>.v.iM| | ||||
| 000003b0  df 49 d4 f6 b4 ac f6 0b  1d d1 68 61 30 b1 52 07  |.I........ha0.R.| | ||||
| 000003c0  a5 6d 31 5e 13 24 8c 32  cd 76 57 16 03 03 00 04  |.m1^.$.2.vW.....| | ||||
| 000003d0  0e 00 00 00                                       |....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 46 10 00 00  42 41 04 08 73 d7 79 87  |....F...BA..s.y.| | ||||
| 00000010  39 45 dd 69 33 71 a0 48  a0 8b 6e 2f 99 dc a1 4f  |9E.i3q.H..n/...O| | ||||
| 00000020  21 ca 70 b3 98 fe cc 5a  94 04 1b 8d 4d a4 46 24  |!.p....Z....M.F$| | ||||
| 00000030  c6 61 bd e1 49 92 83 8d  ea 22 fb b1 43 90 24 7e  |.a..I...."..C.$~| | ||||
| 00000040  d0 e5 4b cb c3 8a 41 f7  fd d1 9f 14 03 03 00 01  |..K...A.........| | ||||
| 00000050  01 16 03 03 00 28 e3 99  f0 d3 65 4e 29 dd d6 eb  |.....(....eN)...| | ||||
| 00000060  c0 b3 f9 e2 8b bb 68 61  b2 7f 63 db de fb ae d2  |......ha..c.....| | ||||
| 00000070  94 b7 45 9b 34 cb a4 26  3f 04 92 34 02 89        |..E.4..&?..4..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 28 00 00 00 00 00  |..........(.....| | ||||
| 00000010  00 00 00 5e 63 30 5d 4d  2b 87 3f 7b 9c 06 2e 44  |...^c0]M+.?{...D| | ||||
| 00000020  92 c5 d0 e8 07 fa 9f db  a7 2c dc ec 16 78 bd 37  |.........,...x.7| | ||||
| 00000030  8a f7 24 17 03 03 00 25  00 00 00 00 00 00 00 01  |..$....%........| | ||||
| 00000040  0b af 29 75 f0 67 6b 78  8c 3a 65 44 53 25 9e d5  |..)u.gkx.:eDS%..| | ||||
| 00000050  8e 7e 24 5f c9 95 a1 3e  63 d2 52 09 32 15 03 03  |.~$_...>c.R.2...| | ||||
| 00000060  00 1a 00 00 00 00 00 00  00 02 0b f2 f7 93 57 b3  |..............W.| | ||||
| 00000070  5b 19 fd e7 a1 0f e9 41  ca f5 74 17              |[......A..t.| | ||||
							
								
								
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										79
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-RSA-RC4
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,79 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 5c 01 00 00  58 03 03 52 cc 57 59 c9  |....\...X..R.WY.| | ||||
| 00000010  c3 13 fc 18 8a ee c2 0e  88 ff fb 4a 16 f2 eb eb  |...........J....| | ||||
| 00000020  d4 f8 b3 5b cd bb 25 0e  0b cb 48 00 00 04 00 05  |...[..%...H.....| | ||||
| 00000030  00 ff 01 00 00 2b 00 0d  00 22 00 20 06 01 06 02  |.....+...". ....| | ||||
| 00000040  06 03 05 01 05 02 05 03  04 01 04 02 04 03 03 01  |................| | ||||
| 00000050  03 02 03 03 02 01 02 02  02 03 01 01 00 0f 00 01  |................| | ||||
| 00000060  01                                                |.| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 35 b3 60 ba 14  |...........5.`..| | ||||
| 00000010  5f 19 24 a0 24 de 4e 85  a9 64 78 3a 51 24 64 70  |_.$.$.N..dx:Q$dp| | ||||
| 00000020  88 55 6d c3 11 b8 d3 9f  bc 7a 33 f8 3c 48 93 2f  |.Um......z3.<H./| | ||||
| 00000030  66 69 11 33 39 37 7a 36  a3 1c ef b0 81 71 7d 25  |fi.397z6.....q}%| | ||||
| 00000040  35 da 2c 42 e2 ab d3 b7  07 8b 4a 0d 6d 77 bd ae  |5.,B......J.mw..| | ||||
| 00000050  02 51 7c a5 0d a6 03 4c  3c d0 ce 89 2c 83 6c de  |.Q|....L<...,.l.| | ||||
| 00000060  40 15 cc 72 c7 95 c8 6d  ee 05 86 da 3e c6 7c d4  |@..r...m....>.|.| | ||||
| 00000070  44 82 f4 24 03 22 40 00  64 27 53 15 41 8c 01 e9  |D..$."@.d'S.A...| | ||||
| 00000080  39 32 fa 8e 2d f9 b4 89  34 15 d6 14 03 03 00 01  |92..-...4.......| | ||||
| 00000090  01 16 03 03 00 24 f5 61  8b 24 bf b4 82 3a cf 49  |.....$.a.$...:.I| | ||||
| 000000a0  99 a0 b1 1b a7 a7 a3 92  7c 84 85 e0 64 a3 3d bd  |........|...d.=.| | ||||
| 000000b0  38 98 7d 97 a8 b9 2a 35  a9 09                    |8.}...*5..| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 c9 0b 84 e6 39  |..........$....9| | ||||
| 00000010  f2 e0 f3 ac 9f 0f 17 92  5f 6d de 94 18 c4 60 d9  |........_m....`.| | ||||
| 00000020  66 c3 0d 1a ae c2 8f 46  8f 7f f0 58 0e 4a 9b 17  |f......F...X.J..| | ||||
| 00000030  03 03 00 21 8b 73 a1 6a  7e d9 7e 4f 1d cc b2 7d  |...!.s.j~.~O...}| | ||||
| 00000040  3c 83 3f 52 f8 08 77 01  4c 65 11 6d 50 25 9a cc  |<.?R..w.Le.mP%..| | ||||
| 00000050  e3 54 27 72 59 15 03 03  00 16 3d c8 ab 14 51 fa  |.T'rY.....=...Q.| | ||||
| 00000060  97 f1 ef 5f b4 4f 44 58  d4 93 3b ae e5 61 1f a3  |..._.ODX..;..a..| | ||||
							
								
								
									
										36
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-Resume
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										36
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-Resume
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,36 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 e8 01 00 00  e4 03 03 52 cc 57 59 c3  |...........R.WY.| | ||||
| 00000010  8b df 97 05 d8 5f 16 22  b4 b1 e7 cb 7d 2f 9b 58  |....._."....}/.X| | ||||
| 00000020  a3 f4 d7 2c a4 c1 9d 49  ed 4b ba 20 90 da 90 3e  |...,...I.K. ...>| | ||||
| 00000030  36 19 7a db 56 43 26 f7  dc 42 57 33 22 ed 9d a4  |6.z.VC&..BW3"...| | ||||
| 00000040  9d 53 da f8 9d 4e 60 66  71 a0 2e 2e 00 04 00 05  |.S...N`fq.......| | ||||
| 00000050  00 ff 01 00 00 97 00 23  00 68 00 00 00 00 00 00  |.......#.h......| | ||||
| 00000060  00 00 00 00 00 00 00 00  00 00 65 ea 4b d1 ef ba  |..........e.K...| | ||||
| 00000070  06 38 1e e1 88 82 3a cd  03 ac 3b 39 0a e0 19 fd  |.8....:...;9....| | ||||
| 00000080  af 6c 57 30 df 31 6e f7  92 38 4b 5d 77 90 39 ff  |.lW0.1n..8K]w.9.| | ||||
| 00000090  32 51 f5 ed 12 d7 b0 7c  4d 6c c5 76 e4 72 48 3e  |2Q.....|Ml.v.rH>| | ||||
| 000000a0  59 23 fe 0d 15 df f4 ba  ea b9 67 16 23 8f 7d 15  |Y#........g.#.}.| | ||||
| 000000b0  b6 11 f1 ab d7 d4 cd a3  21 82 92 2a 12 cf 95 f3  |........!..*....| | ||||
| 000000c0  60 b2 00 0d 00 22 00 20  06 01 06 02 06 03 05 01  |`....". ........| | ||||
| 000000d0  05 02 05 03 04 01 04 02  04 03 03 01 03 02 03 03  |................| | ||||
| 000000e0  02 01 02 02 02 03 01 01  00 0f 00 01 01           |.............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 51 02 00 00  4d 03 03 00 00 00 00 00  |....Q...M.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 20 90 da 90 3e  |........... ...>| | ||||
| 00000030  36 19 7a db 56 43 26 f7  dc 42 57 33 22 ed 9d a4  |6.z.VC&..BW3"...| | ||||
| 00000040  9d 53 da f8 9d 4e 60 66  71 a0 2e 2e 00 05 00 00  |.S...N`fq.......| | ||||
| 00000050  05 ff 01 00 01 00 14 03  03 00 01 01 16 03 03 00  |................| | ||||
| 00000060  24 11 12 ff 28 10 14 4c  e5 0e ad a7 fa f3 92 fb  |$...(..L........| | ||||
| 00000070  13 7d ae f2 b2 4a 6b a1  9e 67 cf a8 f7 8c 6f a0  |.}...Jk..g....o.| | ||||
| 00000080  6c 30 0e 18 55                                    |l0..U| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 0d 46 41 8b 24  |..........$.FA.$| | ||||
| 00000010  36 01 a9 fd 8b ec fc e6  b1 83 96 df 0d 3e 53 54  |6............>ST| | ||||
| 00000020  58 b8 43 f2 a6 25 5e 1a  ae 19 9e d2 28 44 92     |X.C..%^.....(D.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  17 03 03 00 21 c4 fb f6  53 bb 3e 04 cc 0b a0 03  |....!...S.>.....| | ||||
| 00000010  fa 49 96 da b5 8d b2 f2  e5 d8 f3 5c 27 57 4f 9c  |.I.........\'WO.| | ||||
| 00000020  30 00 34 fc 52 92 15 03  03 00 16 a3 02 7a 50 d2  |0.4.R........zP.| | ||||
| 00000030  c6 b3 fc 69 8f e4 94 ae  ab 22 ad 05 1d 15 69 b9  |...i....."....i.| | ||||
| 00000040  a5                                                |.| | ||||
|  | @ -1,87 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 e8 01 00 00  e4 03 03 54 23 54 02 a5  |...........T#T..| | ||||
| 00000010  10 11 0f 6d e5 2d 2f e8  bb 52 b1 38 3f 65 01 43  |...m.-/..R.8?e.C| | ||||
| 00000020  36 cc 48 f6 09 22 a1 85  20 28 3c 20 35 8b fe 7a  |6.H..".. (< 5..z| | ||||
| 00000030  41 3b 59 3a 5d b9 b3 21  f0 62 e9 0d 7b af f5 5d  |A;Y:]..!.b..{..]| | ||||
| 00000040  fa 65 1a 40 c8 ca cd 74  8c ef d2 fb 00 04 00 05  |.e.@...t........| | ||||
| 00000050  00 ff 01 00 00 97 00 23  00 68 00 00 00 00 00 00  |.......#.h......| | ||||
| 00000060  00 00 00 00 00 00 00 00  00 00 65 ea 4b d1 ef ba  |..........e.K...| | ||||
| 00000070  2d db 0c ba 9a d4 20 76  57 c8 ec dc 2d 77 fb fb  |-..... vW...-w..| | ||||
| 00000080  3b 93 5f 53 e0 14 4f 90  fb d6 55 57 8c 8d 0d 25  |;._S..O...UW...%| | ||||
| 00000090  ea 5d 0d f2 91 e5 12 22  12 ec 7b 5f b6 6e fd 07  |.]....."..{_.n..| | ||||
| 000000a0  59 23 24 fc b1 97 ca ea  56 a5 c2 a0 e4 9e 99 64  |Y#$.....V......d| | ||||
| 000000b0  f2 64 d0 75 7a 46 63 e3  dc 21 ed 78 56 e9 e1 ab  |.d.uzFc..!.xV...| | ||||
| 000000c0  66 80 00 0d 00 22 00 20  06 01 06 02 06 03 05 01  |f....". ........| | ||||
| 000000d0  05 02 05 03 04 01 04 02  04 03 03 01 03 02 03 03  |................| | ||||
| 000000e0  02 01 02 02 02 03 01 01  00 0f 00 01 01           |.............| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 05 00 00  |................| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 be 0b 00 02 ba 00  |................| | ||||
| 00000040  02 b7 00 02 b4 30 82 02  b0 30 82 02 19 a0 03 02  |.....0...0......| | ||||
| 00000050  01 02 02 09 00 85 b0 bb  a4 8a 7f b8 ca 30 0d 06  |.............0..| | ||||
| 00000060  09 2a 86 48 86 f7 0d 01  01 05 05 00 30 45 31 0b  |.*.H........0E1.| | ||||
| 00000070  30 09 06 03 55 04 06 13  02 41 55 31 13 30 11 06  |0...U....AU1.0..| | ||||
| 00000080  03 55 04 08 13 0a 53 6f  6d 65 2d 53 74 61 74 65  |.U....Some-State| | ||||
| 00000090  31 21 30 1f 06 03 55 04  0a 13 18 49 6e 74 65 72  |1!0...U....Inter| | ||||
| 000000a0  6e 65 74 20 57 69 64 67  69 74 73 20 50 74 79 20  |net Widgits Pty | | ||||
| 000000b0  4c 74 64 30 1e 17 0d 31  30 30 34 32 34 30 39 30  |Ltd0...100424090| | ||||
| 000000c0  39 33 38 5a 17 0d 31 31  30 34 32 34 30 39 30 39  |938Z..1104240909| | ||||
| 000000d0  33 38 5a 30 45 31 0b 30  09 06 03 55 04 06 13 02  |38Z0E1.0...U....| | ||||
| 000000e0  41 55 31 13 30 11 06 03  55 04 08 13 0a 53 6f 6d  |AU1.0...U....Som| | ||||
| 000000f0  65 2d 53 74 61 74 65 31  21 30 1f 06 03 55 04 0a  |e-State1!0...U..| | ||||
| 00000100  13 18 49 6e 74 65 72 6e  65 74 20 57 69 64 67 69  |..Internet Widgi| | ||||
| 00000110  74 73 20 50 74 79 20 4c  74 64 30 81 9f 30 0d 06  |ts Pty Ltd0..0..| | ||||
| 00000120  09 2a 86 48 86 f7 0d 01  01 01 05 00 03 81 8d 00  |.*.H............| | ||||
| 00000130  30 81 89 02 81 81 00 bb  79 d6 f5 17 b5 e5 bf 46  |0.......y......F| | ||||
| 00000140  10 d0 dc 69 be e6 2b 07  43 5a d0 03 2d 8a 7a 43  |...i..+.CZ..-.zC| | ||||
| 00000150  85 b7 14 52 e7 a5 65 4c  2c 78 b8 23 8c b5 b4 82  |...R..eL,x.#....| | ||||
| 00000160  e5 de 1f 95 3b 7e 62 a5  2c a5 33 d6 fe 12 5c 7a  |....;~b.,.3...\z| | ||||
| 00000170  56 fc f5 06 bf fa 58 7b  26 3f b5 cd 04 d3 d0 c9  |V.....X{&?......| | ||||
| 00000180  21 96 4a c7 f4 54 9f 5a  bf ef 42 71 00 fe 18 99  |!.J..T.Z..Bq....| | ||||
| 00000190  07 7f 7e 88 7d 7d f1 04  39 c4 a2 2e db 51 c9 7c  |..~.}}..9....Q.|| | ||||
| 000001a0  e3 c0 4c 3b 32 66 01 cf  af b1 1d b8 71 9a 1d db  |..L;2f......q...| | ||||
| 000001b0  db 89 6b ae da 2d 79 02  03 01 00 01 a3 81 a7 30  |..k..-y........0| | ||||
| 000001c0  81 a4 30 1d 06 03 55 1d  0e 04 16 04 14 b1 ad e2  |..0...U.........| | ||||
| 000001d0  85 5a cf cb 28 db 69 ce  23 69 de d3 26 8e 18 88  |.Z..(.i.#i..&...| | ||||
| 000001e0  39 30 75 06 03 55 1d 23  04 6e 30 6c 80 14 b1 ad  |90u..U.#.n0l....| | ||||
| 000001f0  e2 85 5a cf cb 28 db 69  ce 23 69 de d3 26 8e 18  |..Z..(.i.#i..&..| | ||||
| 00000200  88 39 a1 49 a4 47 30 45  31 0b 30 09 06 03 55 04  |.9.I.G0E1.0...U.| | ||||
| 00000210  06 13 02 41 55 31 13 30  11 06 03 55 04 08 13 0a  |...AU1.0...U....| | ||||
| 00000220  53 6f 6d 65 2d 53 74 61  74 65 31 21 30 1f 06 03  |Some-State1!0...| | ||||
| 00000230  55 04 0a 13 18 49 6e 74  65 72 6e 65 74 20 57 69  |U....Internet Wi| | ||||
| 00000240  64 67 69 74 73 20 50 74  79 20 4c 74 64 82 09 00  |dgits Pty Ltd...| | ||||
| 00000250  85 b0 bb a4 8a 7f b8 ca  30 0c 06 03 55 1d 13 04  |........0...U...| | ||||
| 00000260  05 30 03 01 01 ff 30 0d  06 09 2a 86 48 86 f7 0d  |.0....0...*.H...| | ||||
| 00000270  01 01 05 05 00 03 81 81  00 08 6c 45 24 c7 6b b1  |..........lE$.k.| | ||||
| 00000280  59 ab 0c 52 cc f2 b0 14  d7 87 9d 7a 64 75 b5 5a  |Y..R.......zdu.Z| | ||||
| 00000290  95 66 e4 c5 2b 8e ae 12  66 1f eb 4f 38 b3 6e 60  |.f..+...f..O8.n`| | ||||
| 000002a0  d3 92 fd f7 41 08 b5 25  13 b1 18 7a 24 fb 30 1d  |....A..%...z$.0.| | ||||
| 000002b0  ba ed 98 b9 17 ec e7 d7  31 59 db 95 d3 1d 78 ea  |........1Y....x.| | ||||
| 000002c0  50 56 5c d5 82 5a 2d 5a  5f 33 c4 b6 d8 c9 75 90  |PV\..Z-Z_3....u.| | ||||
| 000002d0  96 8c 0f 52 98 b5 cd 98  1f 89 20 5f f2 a0 1c a3  |...R...... _....| | ||||
| 000002e0  1b 96 94 dd a9 fd 57 e9  70 e8 26 6d 71 99 9b 26  |......W.p.&mq..&| | ||||
| 000002f0  6e 38 50 29 6c 90 a7 bd  d9 16 03 03 00 04 0e 00  |n8P)l...........| | ||||
| 00000300  00 00                                             |..| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 ae 02 dd 1f 1a  |................| | ||||
| 00000010  86 83 f5 2f 82 46 4b 29  58 aa a1 b3 56 8b 4e 40  |.../.FK)X...V.N@| | ||||
| 00000020  ef 23 65 67 ad 48 e5 e1  fd ae dd bf 68 fd bd a6  |.#eg.H......h...| | ||||
| 00000030  13 a0 7e 05 ab f7 20 e1  6a 4e d1 37 93 08 1d c9  |..~... .jN.7....| | ||||
| 00000040  37 e0 b5 34 28 bf 20 45  45 da 0f 7e 51 a7 c6 ae  |7..4(. EE..~Q...| | ||||
| 00000050  61 6c 07 1b 73 ef da 6e  25 c4 ed be e3 3f da ae  |al..s..n%....?..| | ||||
| 00000060  cd 3c 17 9c 2e ee fb 47  9d b3 a1 b2 c3 5d e0 83  |.<.....G.....]..| | ||||
| 00000070  74 20 37 2d 72 d6 d0 4d  58 0e 26 1c 50 22 95 08  |t 7-r..MX.&.P"..| | ||||
| 00000080  7d e0 5f 86 99 9e 2c 2e  a7 a0 7f 14 03 03 00 01  |}._...,.........| | ||||
| 00000090  01 16 03 03 00 24 a2 ab  41 25 a5 cf 04 18 1d 98  |.....$..A%......| | ||||
| 000000a0  88 6c 59 21 86 33 54 f4  35 b4 21 6e a5 29 d5 6e  |.lY!.3T.5.!n.).n| | ||||
| 000000b0  3d 08 72 b0 af 46 b5 8f  6b 86                    |=.r..F..k.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 24 59 20 4d c2 17  |..........$Y M..| | ||||
| 00000010  8b 3c 9b 33 d9 f9 ef fb  80 18 1f 67 a7 58 12 89  |.<.3.......g.X..| | ||||
| 00000020  4e 73 0f 2d 7b e6 c4 a6  79 73 01 da 22 e8 54 17  |Ns.-{...ys..".T.| | ||||
| 00000030  03 03 00 21 36 ca 64 0f  4a 12 a5 50 3d 97 bb 39  |...!6.d.J..P=..9| | ||||
| 00000040  02 fc ed d1 82 6a 9a 2e  21 79 f6 e1 b3 cc 32 db  |.....j..!y....2.| | ||||
| 00000050  0f 5d b3 fb a5 15 03 03  00 16 51 f4 be 57 7a df  |.]........Q..Wz.| | ||||
| 00000060  f1 f2 bd b5 51 5e 45 80  be 0b 9a 0c d1 19 3c 79  |....Q^E.......<y| | ||||
							
								
								
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-SNI
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										76
									
								
								Godeps/_workspace/src/github.com/cloudflare/cf-tls/tls/testdata/Server-TLSv12-SNI
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,76 +0,0 @@ | |||
| >>> Flow 1 (client to server) | ||||
| 00000000  16 03 01 00 70 01 00 00  6c 03 03 52 cc 57 59 2d  |....p...l..R.WY-| | ||||
| 00000010  77 aa 75 35 fa ff 2a a2  bf 91 5e e3 7f 38 7d 7a  |w.u5..*...^..8}z| | ||||
| 00000020  e3 93 d3 e8 8b 09 bb 06  c8 6d 91 00 00 04 00 2f  |.........m...../| | ||||
| 00000030  00 ff 01 00 00 3f 00 00  00 10 00 0e 00 00 0b 73  |.....?.........s| | ||||
| 00000040  6e 69 74 65 73 74 2e 63  6f 6d 00 0d 00 22 00 20  |nitest.com...". | | ||||
| 00000050  06 01 06 02 06 03 05 01  05 02 05 03 04 01 04 02  |................| | ||||
| 00000060  04 03 03 01 03 02 03 03  02 01 02 02 02 03 01 01  |................| | ||||
| 00000070  00 0f 00 01 01                                    |.....| | ||||
| >>> Flow 2 (server to client) | ||||
| 00000000  16 03 03 00 31 02 00 00  2d 03 03 00 00 00 00 00  |....1...-.......| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 2f 00 00  |............./..| | ||||
| 00000030  05 ff 01 00 01 00 16 03  03 02 00 0b 00 01 fc 00  |................| | ||||
| 00000040  01 f9 00 01 f6 30 82 01  f2 30 82 01 5d a0 03 02  |.....0...0..]...| | ||||
| 00000050  01 02 02 01 00 30 0b 06  09 2a 86 48 86 f7 0d 01  |.....0...*.H....| | ||||
| 00000060  01 05 30 28 31 10 30 0e  06 03 55 04 0a 13 07 41  |..0(1.0...U....A| | ||||
| 00000070  63 6d 65 20 43 6f 31 14  30 12 06 03 55 04 03 13  |cme Co1.0...U...| | ||||
| 00000080  0b 73 6e 69 74 65 73 74  2e 63 6f 6d 30 1e 17 0d  |.snitest.com0...| | ||||
| 00000090  31 32 30 34 31 31 31 37  34 30 33 35 5a 17 0d 31  |120411174035Z..1| | ||||
| 000000a0  33 30 34 31 31 31 37 34  35 33 35 5a 30 28 31 10  |30411174535Z0(1.| | ||||
| 000000b0  30 0e 06 03 55 04 0a 13  07 41 63 6d 65 20 43 6f  |0...U....Acme Co| | ||||
| 000000c0  31 14 30 12 06 03 55 04  03 13 0b 73 6e 69 74 65  |1.0...U....snite| | ||||
| 000000d0  73 74 2e 63 6f 6d 30 81  9d 30 0b 06 09 2a 86 48  |st.com0..0...*.H| | ||||
| 000000e0  86 f7 0d 01 01 01 03 81  8d 00 30 81 89 02 81 81  |..........0.....| | ||||
| 000000f0  00 bb 79 d6 f5 17 b5 e5  bf 46 10 d0 dc 69 be e6  |..y......F...i..| | ||||
| 00000100  2b 07 43 5a d0 03 2d 8a  7a 43 85 b7 14 52 e7 a5  |+.CZ..-.zC...R..| | ||||
| 00000110  65 4c 2c 78 b8 23 8c b5  b4 82 e5 de 1f 95 3b 7e  |eL,x.#........;~| | ||||
| 00000120  62 a5 2c a5 33 d6 fe 12  5c 7a 56 fc f5 06 bf fa  |b.,.3...\zV.....| | ||||
| 00000130  58 7b 26 3f b5 cd 04 d3  d0 c9 21 96 4a c7 f4 54  |X{&?......!.J..T| | ||||
| 00000140  9f 5a bf ef 42 71 00 fe  18 99 07 7f 7e 88 7d 7d  |.Z..Bq......~.}}| | ||||
| 00000150  f1 04 39 c4 a2 2e db 51  c9 7c e3 c0 4c 3b 32 66  |..9....Q.|..L;2f| | ||||
| 00000160  01 cf af b1 1d b8 71 9a  1d db db 89 6b ae da 2d  |......q.....k..-| | ||||
| 00000170  79 02 03 01 00 01 a3 32  30 30 30 0e 06 03 55 1d  |y......2000...U.| | ||||
| 00000180  0f 01 01 ff 04 04 03 02  00 a0 30 0d 06 03 55 1d  |..........0...U.| | ||||
| 00000190  0e 04 06 04 04 01 02 03  04 30 0f 06 03 55 1d 23  |.........0...U.#| | ||||
| 000001a0  04 08 30 06 80 04 01 02  03 04 30 0b 06 09 2a 86  |..0.......0...*.| | ||||
| 000001b0  48 86 f7 0d 01 01 05 03  81 81 00 89 c6 45 5f 1c  |H............E_.| | ||||
| 000001c0  1f 5e f8 eb 1a b1 74 ee  24 39 05 9f 5c 42 59 bb  |.^....t.$9..\BY.| | ||||
| 000001d0  1a 8d 86 cd b1 d0 56 f5  6a 71 7d a4 0e 95 ab 90  |......V.jq}.....| | ||||
| 000001e0  f5 9e 8d ea f6 27 c1 57  99 50 94 db 08 02 26 6e  |.....'.W.P....&n| | ||||
| 000001f0  b3 4f c6 84 2d ea 8a 4b  68 d9 c1 38 91 03 ab 84  |.O..-..Kh..8....| | ||||
| 00000200  fb 9e 1f 85 d9 b5 d2 3f  f2 31 2c 86 70 fb b5 40  |.......?.1,.p..@| | ||||
| 00000210  14 82 45 a4 eb af e2 64  d9 0c 8a 4c f4 f8 5b 0f  |..E....d...L..[.| | ||||
| 00000220  ac 12 ac 2f c4 a3 15 4b  ad 52 46 28 68 af 96 c6  |.../...K.RF(h...| | ||||
| 00000230  2c 65 25 d6 52 b6 e3 18  45 bd cc 16 03 03 00 04  |,e%.R...E.......| | ||||
| 00000240  0e 00 00 00                                       |....| | ||||
| >>> Flow 3 (client to server) | ||||
| 00000000  16 03 03 00 86 10 00 00  82 00 80 0d f2 bf 75 a9  |..............u.| | ||||
| 00000010  aa db f3 25 55 d4 20 59  63 54 d1 70 82 f9 61 c5  |...%U. YcT.p..a.| | ||||
| 00000020  b7 ae 3f 75 71 75 9d c5  01 a1 ed b1 07 66 9f 3f  |..?uqu.......f.?| | ||||
| 00000030  cf c6 e6 ad 44 03 fd 18  6f 53 24 ce 76 01 bd fe  |....D...oS$.v...| | ||||
| 00000040  e2 51 f7 df 8a 23 3a 21  c4 00 15 ff d0 e0 ff c8  |.Q...#:!........| | ||||
| 00000050  8b 89 33 c6 8e e0 ce 97  ef b4 c6 f9 b0 ea 38 89  |..3...........8.| | ||||
| 00000060  79 98 34 9e f7 bc c6 fd  d2 5d 56 84 5c d2 9a ce  |y.4......]V.\...| | ||||
| 00000070  ae de 09 bc 24 25 fc 09  0c bc 0e 91 0d 6b 36 ae  |....$%.......k6.| | ||||
| 00000080  ce 6b cd 14 ec b6 3c fa  d6 df fc 14 03 03 00 01  |.k....<.........| | ||||
| 00000090  01 16 03 03 00 40 ad 21  13 2b 33 7a 4a 0d fb 0f  |.....@.!.+3zJ...| | ||||
| 000000a0  eb d2 b6 85 29 1f 59 79  ba 86 53 5c 68 b4 c7 e3  |....).Yy..S\h...| | ||||
| 000000b0  8a 6c 5c 18 04 4d e4 76  19 30 ba 92 b4 79 8c 64  |.l\..M.v.0...y.d| | ||||
| 000000c0  00 a0 2e 13 96 45 9f e7  a9 e4 23 9e 9f 89 23 26  |.....E....#...#&| | ||||
| 000000d0  36 20 82 fc 75 fe                                 |6 ..u.| | ||||
| >>> Flow 4 (server to client) | ||||
| 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....| | ||||
| 00000010  00 00 00 00 00 00 00 00  00 00 00 b7 87 61 10 03  |.............a..| | ||||
| 00000020  b8 a4 42 d4 8b 49 bc 40  80 70 92 c8 25 b0 c6 7f  |..B..I.@.p..%...| | ||||
| 00000030  b3 87 76 50 5a 59 b3 3c  d8 3e 23 24 aa 1a f3 36  |..vPZY.<.>#$...6| | ||||
| 00000040  c9 2c 87 c1 22 d2 94 f8  2c fd ef 17 03 03 00 40  |.,.."...,......@| | ||||
| 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| | ||||
| 00000060  e5 7f bd 3e ff 9f d4 1b  91 02 f8 69 6f 70 9d 51  |...>.......iop.Q| | ||||
| 00000070  a5 ec ef 5b 10 3f 4e 3f  44 e5 9a 39 68 7c 3a b9  |...[.?N?D..9h|:.| | ||||
| 00000080  69 38 31 ec 9c 45 bf 19  d1 5c 5e 2e 06 00 ca 19  |i81..E...\^.....| | ||||
| 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........| | ||||
| 000000a0  00 00 00 00 00 63 5e 79  2c f2 05 dc 2b d7 5b ac  |.....c^y,...+.[.| | ||||
| 000000b0  9d fc 75 94 03 16 ca 1f  b2 75 58 2d f1 2f f1 1e  |..u......uX-./..| | ||||
| 000000c0  d2 f6 84 8f 2e                                    |.....| | ||||
|  | @ -1,183 +0,0 @@ | |||
| // Copyright 2012 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/aes" | ||||
| 	"crypto/cipher" | ||||
| 	"crypto/hmac" | ||||
| 	"crypto/sha256" | ||||
| 	"crypto/subtle" | ||||
| 	"errors" | ||||
| 	"io" | ||||
| ) | ||||
| 
 | ||||
| // sessionState contains the information that is serialized into a session
 | ||||
| // ticket in order to later resume a connection.
 | ||||
| type sessionState struct { | ||||
| 	vers         uint16 | ||||
| 	cipherSuite  uint16 | ||||
| 	masterSecret []byte | ||||
| 	certificates [][]byte | ||||
| } | ||||
| 
 | ||||
| func (s *sessionState) equal(i interface{}) bool { | ||||
| 	s1, ok := i.(*sessionState) | ||||
| 	if !ok { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	if s.vers != s1.vers || | ||||
| 		s.cipherSuite != s1.cipherSuite || | ||||
| 		!bytes.Equal(s.masterSecret, s1.masterSecret) { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	if len(s.certificates) != len(s1.certificates) { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	for i := range s.certificates { | ||||
| 		if !bytes.Equal(s.certificates[i], s1.certificates[i]) { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func (s *sessionState) marshal() []byte { | ||||
| 	length := 2 + 2 + 2 + len(s.masterSecret) + 2 | ||||
| 	for _, cert := range s.certificates { | ||||
| 		length += 4 + len(cert) | ||||
| 	} | ||||
| 
 | ||||
| 	ret := make([]byte, length) | ||||
| 	x := ret | ||||
| 	x[0] = byte(s.vers >> 8) | ||||
| 	x[1] = byte(s.vers) | ||||
| 	x[2] = byte(s.cipherSuite >> 8) | ||||
| 	x[3] = byte(s.cipherSuite) | ||||
| 	x[4] = byte(len(s.masterSecret) >> 8) | ||||
| 	x[5] = byte(len(s.masterSecret)) | ||||
| 	x = x[6:] | ||||
| 	copy(x, s.masterSecret) | ||||
| 	x = x[len(s.masterSecret):] | ||||
| 
 | ||||
| 	x[0] = byte(len(s.certificates) >> 8) | ||||
| 	x[1] = byte(len(s.certificates)) | ||||
| 	x = x[2:] | ||||
| 
 | ||||
| 	for _, cert := range s.certificates { | ||||
| 		x[0] = byte(len(cert) >> 24) | ||||
| 		x[1] = byte(len(cert) >> 16) | ||||
| 		x[2] = byte(len(cert) >> 8) | ||||
| 		x[3] = byte(len(cert)) | ||||
| 		copy(x[4:], cert) | ||||
| 		x = x[4+len(cert):] | ||||
| 	} | ||||
| 
 | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| func (s *sessionState) unmarshal(data []byte) bool { | ||||
| 	if len(data) < 8 { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	s.vers = uint16(data[0])<<8 | uint16(data[1]) | ||||
| 	s.cipherSuite = uint16(data[2])<<8 | uint16(data[3]) | ||||
| 	masterSecretLen := int(data[4])<<8 | int(data[5]) | ||||
| 	data = data[6:] | ||||
| 	if len(data) < masterSecretLen { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	s.masterSecret = data[:masterSecretLen] | ||||
| 	data = data[masterSecretLen:] | ||||
| 
 | ||||
| 	if len(data) < 2 { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	numCerts := int(data[0])<<8 | int(data[1]) | ||||
| 	data = data[2:] | ||||
| 
 | ||||
| 	s.certificates = make([][]byte, numCerts) | ||||
| 	for i := range s.certificates { | ||||
| 		if len(data) < 4 { | ||||
| 			return false | ||||
| 		} | ||||
| 		certLen := int(data[0])<<24 | int(data[1])<<16 | int(data[2])<<8 | int(data[3]) | ||||
| 		data = data[4:] | ||||
| 		if certLen < 0 { | ||||
| 			return false | ||||
| 		} | ||||
| 		if len(data) < certLen { | ||||
| 			return false | ||||
| 		} | ||||
| 		s.certificates[i] = data[:certLen] | ||||
| 		data = data[certLen:] | ||||
| 	} | ||||
| 
 | ||||
| 	if len(data) > 0 { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func (c *Conn) encryptTicket(state *sessionState) ([]byte, error) { | ||||
| 	serialized := state.marshal() | ||||
| 	encrypted := make([]byte, aes.BlockSize+len(serialized)+sha256.Size) | ||||
| 	iv := encrypted[:aes.BlockSize] | ||||
| 	macBytes := encrypted[len(encrypted)-sha256.Size:] | ||||
| 
 | ||||
| 	if _, err := io.ReadFull(c.config.rand(), iv); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	block, err := aes.NewCipher(c.config.SessionTicketKey[:16]) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.New("tls: failed to create cipher while encrypting ticket: " + err.Error()) | ||||
| 	} | ||||
| 	cipher.NewCTR(block, iv).XORKeyStream(encrypted[aes.BlockSize:], serialized) | ||||
| 
 | ||||
| 	mac := hmac.New(sha256.New, c.config.SessionTicketKey[16:32]) | ||||
| 	mac.Write(encrypted[:len(encrypted)-sha256.Size]) | ||||
| 	mac.Sum(macBytes[:0]) | ||||
| 
 | ||||
| 	return encrypted, nil | ||||
| } | ||||
| 
 | ||||
| func (c *Conn) decryptTicket(encrypted []byte) (*sessionState, bool) { | ||||
| 	if c.config.SessionTicketsDisabled || | ||||
| 		len(encrypted) < aes.BlockSize+sha256.Size { | ||||
| 		return nil, false | ||||
| 	} | ||||
| 
 | ||||
| 	iv := encrypted[:aes.BlockSize] | ||||
| 	macBytes := encrypted[len(encrypted)-sha256.Size:] | ||||
| 
 | ||||
| 	mac := hmac.New(sha256.New, c.config.SessionTicketKey[16:32]) | ||||
| 	mac.Write(encrypted[:len(encrypted)-sha256.Size]) | ||||
| 	expected := mac.Sum(nil) | ||||
| 
 | ||||
| 	if subtle.ConstantTimeCompare(macBytes, expected) != 1 { | ||||
| 		return nil, false | ||||
| 	} | ||||
| 
 | ||||
| 	block, err := aes.NewCipher(c.config.SessionTicketKey[:16]) | ||||
| 	if err != nil { | ||||
| 		return nil, false | ||||
| 	} | ||||
| 	ciphertext := encrypted[aes.BlockSize : len(encrypted)-sha256.Size] | ||||
| 	plaintext := ciphertext | ||||
| 	cipher.NewCTR(block, iv).XORKeyStream(plaintext, ciphertext) | ||||
| 
 | ||||
| 	state := new(sessionState) | ||||
| 	ok := state.unmarshal(plaintext) | ||||
| 	return state, ok | ||||
| } | ||||
|  | @ -1,271 +0,0 @@ | |||
| // Copyright 2009 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // Package tls partially implements TLS 1.2, as specified in RFC 5246.
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/x509" | ||||
| 	"encoding/pem" | ||||
| 	"errors" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Server returns a new TLS server side connection
 | ||||
| // using conn as the underlying transport.
 | ||||
| // The configuration config must be non-nil and must have
 | ||||
| // at least one certificate.
 | ||||
| func Server(conn net.Conn, config *Config) *Conn { | ||||
| 	return &Conn{conn: conn, config: config} | ||||
| } | ||||
| 
 | ||||
| // Client returns a new TLS client side connection
 | ||||
| // using conn as the underlying transport.
 | ||||
| // The config cannot be nil: users must set either ServerName or
 | ||||
| // InsecureSkipVerify in the config.
 | ||||
| func Client(conn net.Conn, config *Config) *Conn { | ||||
| 	return &Conn{conn: conn, config: config, isClient: true} | ||||
| } | ||||
| 
 | ||||
| // A listener implements a network listener (net.Listener) for TLS connections.
 | ||||
| type listener struct { | ||||
| 	net.Listener | ||||
| 	config *Config | ||||
| } | ||||
| 
 | ||||
| // Accept waits for and returns the next incoming TLS connection.
 | ||||
| // The returned connection c is a *tls.Conn.
 | ||||
| func (l *listener) Accept() (c net.Conn, err error) { | ||||
| 	c, err = l.Listener.Accept() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	c = Server(c, l.config) | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // NewListener creates a Listener which accepts connections from an inner
 | ||||
| // Listener and wraps each connection with Server.
 | ||||
| // The configuration config must be non-nil and must have
 | ||||
| // at least one certificate.
 | ||||
| func NewListener(inner net.Listener, config *Config) net.Listener { | ||||
| 	l := new(listener) | ||||
| 	l.Listener = inner | ||||
| 	l.config = config | ||||
| 	return l | ||||
| } | ||||
| 
 | ||||
| // Listen creates a TLS listener accepting connections on the
 | ||||
| // given network address using net.Listen.
 | ||||
| // The configuration config must be non-nil and must have
 | ||||
| // at least one certificate.
 | ||||
| func Listen(network, laddr string, config *Config) (net.Listener, error) { | ||||
| 	if config == nil || len(config.Certificates) == 0 { | ||||
| 		return nil, errors.New("tls.Listen: no certificates in configuration") | ||||
| 	} | ||||
| 	l, err := net.Listen(network, laddr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return NewListener(l, config), nil | ||||
| } | ||||
| 
 | ||||
| type timeoutError struct{} | ||||
| 
 | ||||
| func (timeoutError) Error() string   { return "tls: DialWithDialer timed out" } | ||||
| func (timeoutError) Timeout() bool   { return true } | ||||
| func (timeoutError) Temporary() bool { return true } | ||||
| 
 | ||||
| // DialWithDialer connects to the given network address using dialer.Dial and
 | ||||
| // then initiates a TLS handshake, returning the resulting TLS connection. Any
 | ||||
| // timeout or deadline given in the dialer apply to connection and TLS
 | ||||
| // handshake as a whole.
 | ||||
| //
 | ||||
| // DialWithDialer interprets a nil configuration as equivalent to the zero
 | ||||
| // configuration; see the documentation of Config for the defaults.
 | ||||
| func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config) (*Conn, error) { | ||||
| 	// We want the Timeout and Deadline values from dialer to cover the
 | ||||
| 	// whole process: TCP connection and TLS handshake. This means that we
 | ||||
| 	// also need to start our own timers now.
 | ||||
| 	timeout := dialer.Timeout | ||||
| 
 | ||||
| 	if !dialer.Deadline.IsZero() { | ||||
| 		deadlineTimeout := dialer.Deadline.Sub(time.Now()) | ||||
| 		if timeout == 0 || deadlineTimeout < timeout { | ||||
| 			timeout = deadlineTimeout | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var errChannel chan error | ||||
| 
 | ||||
| 	if timeout != 0 { | ||||
| 		errChannel = make(chan error, 2) | ||||
| 		time.AfterFunc(timeout, func() { | ||||
| 			errChannel <- timeoutError{} | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	rawConn, err := dialer.Dial(network, addr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	colonPos := strings.LastIndex(addr, ":") | ||||
| 	if colonPos == -1 { | ||||
| 		colonPos = len(addr) | ||||
| 	} | ||||
| 	hostname := addr[:colonPos] | ||||
| 
 | ||||
| 	if config == nil { | ||||
| 		config = defaultConfig() | ||||
| 	} | ||||
| 	// If no ServerName is set, infer the ServerName
 | ||||
| 	// from the hostname we're connecting to.
 | ||||
| 	if config.ServerName == "" { | ||||
| 		// Make a copy to avoid polluting argument or default.
 | ||||
| 		c := *config | ||||
| 		c.ServerName = hostname | ||||
| 		config = &c | ||||
| 	} | ||||
| 
 | ||||
| 	conn := Client(rawConn, config) | ||||
| 
 | ||||
| 	if timeout == 0 { | ||||
| 		err = conn.Handshake() | ||||
| 	} else { | ||||
| 		go func() { | ||||
| 			errChannel <- conn.Handshake() | ||||
| 		}() | ||||
| 
 | ||||
| 		err = <-errChannel | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		rawConn.Close() | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return conn, nil | ||||
| } | ||||
| 
 | ||||
| // Dial connects to the given network address using net.Dial
 | ||||
| // and then initiates a TLS handshake, returning the resulting
 | ||||
| // TLS connection.
 | ||||
| // Dial interprets a nil configuration as equivalent to
 | ||||
| // the zero configuration; see the documentation of Config
 | ||||
| // for the defaults.
 | ||||
| func Dial(network, addr string, config *Config) (*Conn, error) { | ||||
| 	return DialWithDialer(new(net.Dialer), network, addr, config) | ||||
| } | ||||
| 
 | ||||
| // LoadX509KeyPair reads and parses a public/private key pair from a pair of
 | ||||
| // files. The files must contain PEM encoded data.
 | ||||
| func LoadX509KeyPair(certFile, keyFile string) (Certificate, error) { | ||||
| 	certPEMBlock, err := ioutil.ReadFile(certFile) | ||||
| 	if err != nil { | ||||
| 		return Certificate{}, err | ||||
| 	} | ||||
| 	keyPEMBlock, err := ioutil.ReadFile(keyFile) | ||||
| 	if err != nil { | ||||
| 		return Certificate{}, err | ||||
| 	} | ||||
| 	return X509KeyPair(certPEMBlock, keyPEMBlock) | ||||
| } | ||||
| 
 | ||||
| // X509KeyPair parses a public/private key pair from a pair of
 | ||||
| // PEM encoded data.
 | ||||
| func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) { | ||||
| 	var cert Certificate | ||||
| 	var certDERBlock *pem.Block | ||||
| 	fail := func(err error) (Certificate, error) { return Certificate{}, err } | ||||
| 	for { | ||||
| 		certDERBlock, certPEMBlock = pem.Decode(certPEMBlock) | ||||
| 		if certDERBlock == nil { | ||||
| 			break | ||||
| 		} | ||||
| 		if certDERBlock.Type == "CERTIFICATE" { | ||||
| 			cert.Certificate = append(cert.Certificate, certDERBlock.Bytes) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(cert.Certificate) == 0 { | ||||
| 		return fail(errors.New("crypto/tls: failed to parse certificate PEM data")) | ||||
| 	} | ||||
| 
 | ||||
| 	var keyDERBlock *pem.Block | ||||
| 	for { | ||||
| 		keyDERBlock, keyPEMBlock = pem.Decode(keyPEMBlock) | ||||
| 		if keyDERBlock == nil { | ||||
| 			return fail(errors.New("crypto/tls: failed to parse key PEM data")) | ||||
| 		} | ||||
| 		if keyDERBlock.Type == "PRIVATE KEY" || strings.HasSuffix(keyDERBlock.Type, " PRIVATE KEY") { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	cert.PrivateKey, err = parsePrivateKey(keyDERBlock.Bytes) | ||||
| 	if err != nil { | ||||
| 		return fail(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// We don't need to parse the public key for TLS, but we so do anyway
 | ||||
| 	// to check that it looks sane and matches the private key.
 | ||||
| 	x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) | ||||
| 	if err != nil { | ||||
| 		return fail(err) | ||||
| 	} | ||||
| 
 | ||||
| 	switch pub := x509Cert.PublicKey.(type) { | ||||
| 	case *rsa.PublicKey: | ||||
| 		priv, ok := cert.PrivateKey.(*rsa.PrivateKey) | ||||
| 		if !ok { | ||||
| 			return fail(errors.New("crypto/tls: private key type does not match public key type")) | ||||
| 		} | ||||
| 		if pub.N.Cmp(priv.N) != 0 { | ||||
| 			return fail(errors.New("crypto/tls: private key does not match public key")) | ||||
| 		} | ||||
| 	case *ecdsa.PublicKey: | ||||
| 		priv, ok := cert.PrivateKey.(*ecdsa.PrivateKey) | ||||
| 		if !ok { | ||||
| 			return fail(errors.New("crypto/tls: private key type does not match public key type")) | ||||
| 
 | ||||
| 		} | ||||
| 		if pub.X.Cmp(priv.X) != 0 || pub.Y.Cmp(priv.Y) != 0 { | ||||
| 			return fail(errors.New("crypto/tls: private key does not match public key")) | ||||
| 		} | ||||
| 	default: | ||||
| 		return fail(errors.New("crypto/tls: unknown public key algorithm")) | ||||
| 	} | ||||
| 
 | ||||
| 	return cert, nil | ||||
| } | ||||
| 
 | ||||
| // Attempt to parse the given private key DER block. OpenSSL 0.9.8 generates
 | ||||
| // PKCS#1 private keys by default, while OpenSSL 1.0.0 generates PKCS#8 keys.
 | ||||
| // OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three.
 | ||||
| func parsePrivateKey(der []byte) (crypto.PrivateKey, error) { | ||||
| 	if key, err := x509.ParsePKCS1PrivateKey(der); err == nil { | ||||
| 		return key, nil | ||||
| 	} | ||||
| 	if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { | ||||
| 		switch key := key.(type) { | ||||
| 		case *rsa.PrivateKey, *ecdsa.PrivateKey: | ||||
| 			return key, nil | ||||
| 		default: | ||||
| 			return nil, errors.New("crypto/tls: found unknown private key type in PKCS#8 wrapping") | ||||
| 		} | ||||
| 	} | ||||
| 	if key, err := x509.ParseECPrivateKey(der); err == nil { | ||||
| 		return key, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, errors.New("crypto/tls: failed to parse private key") | ||||
| } | ||||
|  | @ -1,282 +0,0 @@ | |||
| // Copyright 2012 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package tls | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| var rsaCertPEM = `-----BEGIN CERTIFICATE----- | ||||
| MIIB0zCCAX2gAwIBAgIJAI/M7BYjwB+uMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV | ||||
| BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX | ||||
| aWRnaXRzIFB0eSBMdGQwHhcNMTIwOTEyMjE1MjAyWhcNMTUwOTEyMjE1MjAyWjBF | ||||
| MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 | ||||
| ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANLJ | ||||
| hPHhITqQbPklG3ibCVxwGMRfp/v4XqhfdQHdcVfHap6NQ5Wok/4xIA+ui35/MmNa | ||||
| rtNuC+BdZ1tMuVCPFZcCAwEAAaNQME4wHQYDVR0OBBYEFJvKs8RfJaXTH08W+SGv | ||||
| zQyKn0H8MB8GA1UdIwQYMBaAFJvKs8RfJaXTH08W+SGvzQyKn0H8MAwGA1UdEwQF | ||||
| MAMBAf8wDQYJKoZIhvcNAQEFBQADQQBJlffJHybjDGxRMqaRmDhX0+6v02TUKZsW | ||||
| r5QuVbpQhH6u+0UgcW0jp9QwpxoPTLTWGXEWBBBurxFwiCBhkQ+V | ||||
| -----END CERTIFICATE----- | ||||
| ` | ||||
| 
 | ||||
| var rsaKeyPEM = `-----BEGIN RSA PRIVATE KEY----- | ||||
| MIIBOwIBAAJBANLJhPHhITqQbPklG3ibCVxwGMRfp/v4XqhfdQHdcVfHap6NQ5Wo | ||||
| k/4xIA+ui35/MmNartNuC+BdZ1tMuVCPFZcCAwEAAQJAEJ2N+zsR0Xn8/Q6twa4G | ||||
| 6OB1M1WO+k+ztnX/1SvNeWu8D6GImtupLTYgjZcHufykj09jiHmjHx8u8ZZB/o1N | ||||
| MQIhAPW+eyZo7ay3lMz1V01WVjNKK9QSn1MJlb06h/LuYv9FAiEA25WPedKgVyCW | ||||
| SmUwbPw8fnTcpqDWE3yTO3vKcebqMSsCIBF3UmVue8YU3jybC3NxuXq3wNm34R8T | ||||
| xVLHwDXh/6NJAiEAl2oHGGLz64BuAfjKrqwz7qMYr9HCLIe/YsoWq/olzScCIQDi | ||||
| D2lWusoe2/nEqfDVVWGWlyJ7yOmqaVm/iNUN9B2N2g== | ||||
| -----END RSA PRIVATE KEY----- | ||||
| ` | ||||
| 
 | ||||
| // keyPEM is the same as rsaKeyPEM, but declares itself as just
 | ||||
| // "PRIVATE KEY", not "RSA PRIVATE KEY".  http://golang.org/issue/4477
 | ||||
| var keyPEM = `-----BEGIN PRIVATE KEY----- | ||||
| MIIBOwIBAAJBANLJhPHhITqQbPklG3ibCVxwGMRfp/v4XqhfdQHdcVfHap6NQ5Wo | ||||
| k/4xIA+ui35/MmNartNuC+BdZ1tMuVCPFZcCAwEAAQJAEJ2N+zsR0Xn8/Q6twa4G | ||||
| 6OB1M1WO+k+ztnX/1SvNeWu8D6GImtupLTYgjZcHufykj09jiHmjHx8u8ZZB/o1N | ||||
| MQIhAPW+eyZo7ay3lMz1V01WVjNKK9QSn1MJlb06h/LuYv9FAiEA25WPedKgVyCW | ||||
| SmUwbPw8fnTcpqDWE3yTO3vKcebqMSsCIBF3UmVue8YU3jybC3NxuXq3wNm34R8T | ||||
| xVLHwDXh/6NJAiEAl2oHGGLz64BuAfjKrqwz7qMYr9HCLIe/YsoWq/olzScCIQDi | ||||
| D2lWusoe2/nEqfDVVWGWlyJ7yOmqaVm/iNUN9B2N2g== | ||||
| -----END PRIVATE KEY----- | ||||
| ` | ||||
| 
 | ||||
| var ecdsaCertPEM = `-----BEGIN CERTIFICATE----- | ||||
| MIIB/jCCAWICCQDscdUxw16XFDAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw | ||||
| EQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0 | ||||
| eSBMdGQwHhcNMTIxMTE0MTI0MDQ4WhcNMTUxMTE0MTI0MDQ4WjBFMQswCQYDVQQG | ||||
| EwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lk | ||||
| Z2l0cyBQdHkgTHRkMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBY9+my9OoeSUR | ||||
| lDQdV/x8LsOuLilthhiS1Tz4aGDHIPwC1mlvnf7fg5lecYpMCrLLhauAc1UJXcgl | ||||
| 01xoLuzgtAEAgv2P/jgytzRSpUYvgLBt1UA0leLYBy6mQQbrNEuqT3INapKIcUv8 | ||||
| XxYP0xMEUksLPq6Ca+CRSqTtrd/23uTnapkwCQYHKoZIzj0EAQOBigAwgYYCQXJo | ||||
| A7Sl2nLVf+4Iu/tAX/IF4MavARKC4PPHK3zfuGfPR3oCCcsAoz3kAzOeijvd0iXb | ||||
| H5jBImIxPL4WxQNiBTexAkF8D1EtpYuWdlVQ80/h/f4pBcGiXPqX5h2PQSQY7hP1 | ||||
| +jwM1FGS4fREIOvlBYr/SzzQRtwrvrzGYxDEDbsC0ZGRnA== | ||||
| -----END CERTIFICATE----- | ||||
| ` | ||||
| 
 | ||||
| var ecdsaKeyPEM = `-----BEGIN EC PARAMETERS----- | ||||
| BgUrgQQAIw== | ||||
| -----END EC PARAMETERS----- | ||||
| -----BEGIN EC PRIVATE KEY----- | ||||
| MIHcAgEBBEIBrsoKp0oqcv6/JovJJDoDVSGWdirrkgCWxrprGlzB9o0X8fV675X0 | ||||
| NwuBenXFfeZvVcwluO7/Q9wkYoPd/t3jGImgBwYFK4EEACOhgYkDgYYABAFj36bL | ||||
| 06h5JRGUNB1X/Hwuw64uKW2GGJLVPPhoYMcg/ALWaW+d/t+DmV5xikwKssuFq4Bz | ||||
| VQldyCXTXGgu7OC0AQCC/Y/+ODK3NFKlRi+AsG3VQDSV4tgHLqZBBus0S6pPcg1q | ||||
| kohxS/xfFg/TEwRSSws+roJr4JFKpO2t3/be5OdqmQ== | ||||
| -----END EC PRIVATE KEY----- | ||||
| ` | ||||
| 
 | ||||
| var keyPairTests = []struct { | ||||
| 	algo string | ||||
| 	cert string | ||||
| 	key  string | ||||
| }{ | ||||
| 	{"ECDSA", ecdsaCertPEM, ecdsaKeyPEM}, | ||||
| 	{"RSA", rsaCertPEM, rsaKeyPEM}, | ||||
| 	{"RSA-untyped", rsaCertPEM, keyPEM}, // golang.org/issue/4477
 | ||||
| } | ||||
| 
 | ||||
| func TestX509KeyPair(t *testing.T) { | ||||
| 	var pem []byte | ||||
| 	for _, test := range keyPairTests { | ||||
| 		pem = []byte(test.cert + test.key) | ||||
| 		if _, err := X509KeyPair(pem, pem); err != nil { | ||||
| 			t.Errorf("Failed to load %s cert followed by %s key: %s", test.algo, test.algo, err) | ||||
| 		} | ||||
| 		pem = []byte(test.key + test.cert) | ||||
| 		if _, err := X509KeyPair(pem, pem); err != nil { | ||||
| 			t.Errorf("Failed to load %s key followed by %s cert: %s", test.algo, test.algo, err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestX509MixedKeyPair(t *testing.T) { | ||||
| 	if _, err := X509KeyPair([]byte(rsaCertPEM), []byte(ecdsaKeyPEM)); err == nil { | ||||
| 		t.Error("Load of RSA certificate succeeded with ECDSA private key") | ||||
| 	} | ||||
| 	if _, err := X509KeyPair([]byte(ecdsaCertPEM), []byte(rsaKeyPEM)); err == nil { | ||||
| 		t.Error("Load of ECDSA certificate succeeded with RSA private key") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func newLocalListener(t *testing.T) net.Listener { | ||||
| 	ln, err := net.Listen("tcp", "127.0.0.1:0") | ||||
| 	if err != nil { | ||||
| 		ln, err = net.Listen("tcp6", "[::1]:0") | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return ln | ||||
| } | ||||
| 
 | ||||
| func TestDialTimeout(t *testing.T) { | ||||
| 	if testing.Short() { | ||||
| 		t.Skip("skipping in short mode") | ||||
| 	} | ||||
| 	listener := newLocalListener(t) | ||||
| 
 | ||||
| 	addr := listener.Addr().String() | ||||
| 	defer listener.Close() | ||||
| 
 | ||||
| 	complete := make(chan bool) | ||||
| 	defer close(complete) | ||||
| 
 | ||||
| 	go func() { | ||||
| 		conn, err := listener.Accept() | ||||
| 		if err != nil { | ||||
| 			t.Error(err) | ||||
| 			return | ||||
| 		} | ||||
| 		<-complete | ||||
| 		conn.Close() | ||||
| 	}() | ||||
| 
 | ||||
| 	dialer := &net.Dialer{ | ||||
| 		Timeout: 10 * time.Millisecond, | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	if _, err = DialWithDialer(dialer, "tcp", addr, nil); err == nil { | ||||
| 		t.Fatal("DialWithTimeout completed successfully") | ||||
| 	} | ||||
| 
 | ||||
| 	if !strings.Contains(err.Error(), "timed out") { | ||||
| 		t.Errorf("resulting error not a timeout: %s", err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // tests that Conn.Read returns (non-zero, io.EOF) instead of
 | ||||
| // (non-zero, nil) when a Close (alertCloseNotify) is sitting right
 | ||||
| // behind the application data in the buffer.
 | ||||
| func TestConnReadNonzeroAndEOF(t *testing.T) { | ||||
| 	// This test is racy: it assumes that after a write to a
 | ||||
| 	// localhost TCP connection, the peer TCP connection can
 | ||||
| 	// immediately read it.  Because it's racy, we skip this test
 | ||||
| 	// in short mode, and then retry it several times with an
 | ||||
| 	// increasing sleep in between our final write (via srv.Close
 | ||||
| 	// below) and the following read.
 | ||||
| 	if testing.Short() { | ||||
| 		t.Skip("skipping in short mode") | ||||
| 	} | ||||
| 	var err error | ||||
| 	for delay := time.Millisecond; delay <= 64*time.Millisecond; delay *= 2 { | ||||
| 		if err = testConnReadNonzeroAndEOF(t, delay); err == nil { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 	t.Error(err) | ||||
| } | ||||
| 
 | ||||
| func testConnReadNonzeroAndEOF(t *testing.T, delay time.Duration) error { | ||||
| 	ln := newLocalListener(t) | ||||
| 	defer ln.Close() | ||||
| 
 | ||||
| 	srvCh := make(chan *Conn, 1) | ||||
| 	var serr error | ||||
| 	go func() { | ||||
| 		sconn, err := ln.Accept() | ||||
| 		if err != nil { | ||||
| 			serr = err | ||||
| 			srvCh <- nil | ||||
| 			return | ||||
| 		} | ||||
| 		serverConfig := *testConfig | ||||
| 		srv := Server(sconn, &serverConfig) | ||||
| 		if err := srv.Handshake(); err != nil { | ||||
| 			serr = fmt.Errorf("handshake: %v", err) | ||||
| 			srvCh <- nil | ||||
| 			return | ||||
| 		} | ||||
| 		srvCh <- srv | ||||
| 	}() | ||||
| 
 | ||||
| 	clientConfig := *testConfig | ||||
| 	conn, err := Dial("tcp", ln.Addr().String(), &clientConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
| 
 | ||||
| 	srv := <-srvCh | ||||
| 	if srv == nil { | ||||
| 		return serr | ||||
| 	} | ||||
| 
 | ||||
| 	buf := make([]byte, 6) | ||||
| 
 | ||||
| 	srv.Write([]byte("foobar")) | ||||
| 	n, err := conn.Read(buf) | ||||
| 	if n != 6 || err != nil || string(buf) != "foobar" { | ||||
| 		return fmt.Errorf("Read = %d, %v, data %q; want 6, nil, foobar", n, err, buf) | ||||
| 	} | ||||
| 
 | ||||
| 	srv.Write([]byte("abcdef")) | ||||
| 	srv.Close() | ||||
| 	time.Sleep(delay) | ||||
| 	n, err = conn.Read(buf) | ||||
| 	if n != 6 || string(buf) != "abcdef" { | ||||
| 		return fmt.Errorf("Read = %d, buf= %q; want 6, abcdef", n, buf) | ||||
| 	} | ||||
| 	if err != io.EOF { | ||||
| 		return fmt.Errorf("Second Read error = %v; want io.EOF", err) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func TestTLSUniqueMatches(t *testing.T) { | ||||
| 	ln := newLocalListener(t) | ||||
| 	defer ln.Close() | ||||
| 
 | ||||
| 	serverTLSUniques := make(chan []byte) | ||||
| 	go func() { | ||||
| 		for i := 0; i < 2; i++ { | ||||
| 			sconn, err := ln.Accept() | ||||
| 			if err != nil { | ||||
| 				t.Fatal(err) | ||||
| 			} | ||||
| 			serverConfig := *testConfig | ||||
| 			srv := Server(sconn, &serverConfig) | ||||
| 			if err := srv.Handshake(); err != nil { | ||||
| 				t.Fatal(err) | ||||
| 			} | ||||
| 			serverTLSUniques <- srv.ConnectionState().TLSUnique | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	clientConfig := *testConfig | ||||
| 	clientConfig.ClientSessionCache = NewLRUClientSessionCache(1) | ||||
| 	conn, err := Dial("tcp", ln.Addr().String(), &clientConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	if !bytes.Equal(conn.ConnectionState().TLSUnique, <-serverTLSUniques) { | ||||
| 		t.Error("client and server channel bindings differ") | ||||
| 	} | ||||
| 	conn.Close() | ||||
| 
 | ||||
| 	conn, err = Dial("tcp", ln.Addr().String(), &clientConfig) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
| 	if !conn.ConnectionState().DidResume { | ||||
| 		t.Error("second session did not use resumption") | ||||
| 	} | ||||
| 	if !bytes.Equal(conn.ConnectionState().TLSUnique, <-serverTLSUniques) { | ||||
| 		t.Error("client and server channel bindings differ when session resumption is used") | ||||
| 	} | ||||
| } | ||||
|  | @ -1,210 +0,0 @@ | |||
| // Package api implements an HTTP-based API and server for CFSSL.
 | ||||
| package api | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| ) | ||||
| 
 | ||||
| // Handler is an interface providing a generic mechanism for handling HTTP requests.
 | ||||
| type Handler interface { | ||||
| 	Handle(w http.ResponseWriter, r *http.Request) error | ||||
| } | ||||
| 
 | ||||
| // HTTPHandler is a wrapper that encapsulates Handler interface as http.Handler.
 | ||||
| // HTTPHandler also enforces that the Handler only responds to requests with registered HTTP methods.
 | ||||
| type HTTPHandler struct { | ||||
| 	Handler          // CFSSL handler
 | ||||
| 	Methods []string // The associated HTTP methods
 | ||||
| } | ||||
| 
 | ||||
| // HandlerFunc is similar to the http.HandlerFunc type; it serves as
 | ||||
| // an adapter allowing the use of ordinary functions as Handlers. If
 | ||||
| // f is a function with the appropriate signature, HandlerFunc(f) is a
 | ||||
| // Handler object that calls f.
 | ||||
| type HandlerFunc func(http.ResponseWriter, *http.Request) error | ||||
| 
 | ||||
| // Handle calls f(w, r)
 | ||||
| func (f HandlerFunc) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	return f(w, r) | ||||
| } | ||||
| 
 | ||||
| // handleError is the centralised error handling and reporting.
 | ||||
| func handleError(w http.ResponseWriter, err error) (code int) { | ||||
| 	if err == nil { | ||||
| 		return http.StatusOK | ||||
| 	} | ||||
| 	msg := err.Error() | ||||
| 	httpCode := http.StatusInternalServerError | ||||
| 
 | ||||
| 	// If it is recognized as HttpError emitted from cfssl,
 | ||||
| 	// we rewrite the status code accordingly. If it is a
 | ||||
| 	// cfssl error, set the http status to StatusBadRequest
 | ||||
| 	switch err := err.(type) { | ||||
| 	case *errors.HTTPError: | ||||
| 		httpCode = err.StatusCode | ||||
| 		code = err.StatusCode | ||||
| 	case *errors.Error: | ||||
| 		httpCode = http.StatusBadRequest | ||||
| 		code = err.ErrorCode | ||||
| 		msg = err.Message | ||||
| 	} | ||||
| 
 | ||||
| 	response := NewErrorResponse(msg, code) | ||||
| 	jsonMessage, err := json.Marshal(response) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("Failed to marshal JSON: %v", err) | ||||
| 	} else { | ||||
| 		msg = string(jsonMessage) | ||||
| 	} | ||||
| 	http.Error(w, msg, httpCode) | ||||
| 	return code | ||||
| } | ||||
| 
 | ||||
| // ServeHTTP encapsulates the call to underlying Handler to handle the request
 | ||||
| // and return the response with proper HTTP status code
 | ||||
| func (h HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||
| 	var err error | ||||
| 	var match bool | ||||
| 	// Throw 405 when requested with an unsupported verb.
 | ||||
| 	for _, m := range h.Methods { | ||||
| 		if m == r.Method { | ||||
| 			match = true | ||||
| 		} | ||||
| 	} | ||||
| 	if match { | ||||
| 		err = h.Handle(w, r) | ||||
| 	} else { | ||||
| 		err = errors.NewMethodNotAllowed(r.Method) | ||||
| 	} | ||||
| 	status := handleError(w, err) | ||||
| 	log.Infof("%s - \"%s %s\" %d", r.RemoteAddr, r.Method, r.URL, status) | ||||
| } | ||||
| 
 | ||||
| // readRequestBlob takes a JSON-blob-encoded response body in the form
 | ||||
| // map[string]string and returns it, the list of keywords presented,
 | ||||
| // and any error that occurred.
 | ||||
| func readRequestBlob(r *http.Request) (map[string]string, error) { | ||||
| 	var blob map[string]string | ||||
| 
 | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	r.Body.Close() | ||||
| 
 | ||||
| 	err = json.Unmarshal(body, &blob) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return blob, nil | ||||
| } | ||||
| 
 | ||||
| // ProcessRequestOneOf reads a JSON blob for the request and makes
 | ||||
| // sure it contains one of a set of keywords. For example, a request
 | ||||
| // might have the ('foo' && 'bar') keys, OR it might have the 'baz'
 | ||||
| // key.  In either case, we want to accept the request; however, if
 | ||||
| // none of these sets shows up, the request is a bad request, and it
 | ||||
| // should be returned.
 | ||||
| func ProcessRequestOneOf(r *http.Request, keywordSets [][]string) (map[string]string, []string, error) { | ||||
| 	blob, err := readRequestBlob(r) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	var matched []string | ||||
| 	for _, set := range keywordSets { | ||||
| 		if matchKeywords(blob, set) { | ||||
| 			if matched != nil { | ||||
| 				return nil, nil, errors.NewBadRequestString("mismatched parameters") | ||||
| 			} | ||||
| 			matched = set | ||||
| 		} | ||||
| 	} | ||||
| 	if matched == nil { | ||||
| 		return nil, nil, errors.NewBadRequestString("no valid parameter sets found") | ||||
| 	} | ||||
| 	return blob, matched, nil | ||||
| } | ||||
| 
 | ||||
| // ProcessRequestFirstMatchOf reads a JSON blob for the request and returns
 | ||||
| // the first match of a set of keywords. For example, a request
 | ||||
| // might have one of the following combinations: (foo=1, bar=2), (foo=1), and (bar=2)
 | ||||
| // By giving a specific ordering of those combinations, we could decide how to accept
 | ||||
| // the request.
 | ||||
| func ProcessRequestFirstMatchOf(r *http.Request, keywordSets [][]string) (map[string]string, []string, error) { | ||||
| 	blob, err := readRequestBlob(r) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	for _, set := range keywordSets { | ||||
| 		if matchKeywords(blob, set) { | ||||
| 			return blob, set, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil, errors.NewBadRequestString("no valid parameter sets found") | ||||
| } | ||||
| 
 | ||||
| func matchKeywords(blob map[string]string, keywords []string) bool { | ||||
| 	for _, keyword := range keywords { | ||||
| 		if _, ok := blob[keyword]; !ok { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| // ResponseMessage implements the standard for response errors and
 | ||||
| // messages. A message has a code and a string message.
 | ||||
| type ResponseMessage struct { | ||||
| 	Code    int    `json:"code"` | ||||
| 	Message string `json:"message"` | ||||
| } | ||||
| 
 | ||||
| // Response implements the CloudFlare standard for API
 | ||||
| // responses. CFSSL does not currently use the messages field, but it
 | ||||
| // is provided for compatability.
 | ||||
| type Response struct { | ||||
| 	Success  bool              `json:"success"` | ||||
| 	Result   interface{}       `json:"result"` | ||||
| 	Errors   []ResponseMessage `json:"errors"` | ||||
| 	Messages []ResponseMessage `json:"messages"` | ||||
| } | ||||
| 
 | ||||
| // NewSuccessResponse is a shortcut for creating new successul API
 | ||||
| // responses. CFSSL does not use the messages field, but it is
 | ||||
| // provided to conform to the CloudFlare standard.
 | ||||
| func NewSuccessResponse(result interface{}) Response { | ||||
| 	return Response{ | ||||
| 		Success:  true, | ||||
| 		Result:   result, | ||||
| 		Errors:   []ResponseMessage{}, | ||||
| 		Messages: []ResponseMessage{}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewErrorResponse is a shortcut for creating an error response for a
 | ||||
| // single error.
 | ||||
| func NewErrorResponse(message string, code int) Response { | ||||
| 	return Response{ | ||||
| 		Success:  false, | ||||
| 		Result:   nil, | ||||
| 		Errors:   []ResponseMessage{{code, message}}, | ||||
| 		Messages: []ResponseMessage{}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // SendResponse builds a response from the result, sets the JSON
 | ||||
| // header, and writes to the http.ResponseWriter.
 | ||||
| func SendResponse(w http.ResponseWriter, result interface{}) error { | ||||
| 	response := NewSuccessResponse(result) | ||||
| 	w.Header().Set("Content-Type", "application/json") | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	err := enc.Encode(response) | ||||
| 	return err | ||||
| } | ||||
|  | @ -1,220 +0,0 @@ | |||
| package api | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	ty   = "Thank you!" | ||||
| 	deny = "That's not true!" | ||||
| ) | ||||
| 
 | ||||
| func simpleHandle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	_, _, err := ProcessRequestOneOf(r, [][]string{ | ||||
| 		[]string{"compliment"}, | ||||
| 		[]string{"critique"}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return SendResponse(w, ty) | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func cleverHandle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	_, matched, err := ProcessRequestFirstMatchOf(r, [][]string{ | ||||
| 		[]string{"compliment"}, | ||||
| 		[]string{"critique"}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if matched[0] == "critique" { | ||||
| 		return SendResponse(w, deny) | ||||
| 	} | ||||
| 
 | ||||
| 	return SendResponse(w, ty) | ||||
| } | ||||
| 
 | ||||
| func post(t *testing.T, obj map[string]interface{}, ts *httptest.Server) (resp *http.Response, body []byte) { | ||||
| 	blob, err := json.Marshal(obj) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func get(t *testing.T, ts *httptest.Server) (resp *http.Response, body []byte) { | ||||
| 	resp, err := http.Get(ts.URL) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func TestRigidHandle(t *testing.T) { | ||||
| 	ts := httptest.NewServer(HTTPHandler{Handler: HandlerFunc(simpleHandle), Methods: []string{"POST"}}) | ||||
| 	defer ts.Close() | ||||
| 
 | ||||
| 	// Response to compliment
 | ||||
| 	obj := map[string]interface{}{} | ||||
| 	obj["compliment"] = "it's good" | ||||
| 	resp, body := post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Errorf("Test expected 200, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	message := new(Response) | ||||
| 	err := json.Unmarshal(body, message) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("failed to read response body: %v", err) | ||||
| 		t.Fatal("returned:", message) | ||||
| 	} | ||||
| 
 | ||||
| 	if message.Result != ty { | ||||
| 		t.Fatal("Wrong response") | ||||
| 	} | ||||
| 
 | ||||
| 	// Response to critique
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	obj["critique"] = "it's bad" | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Errorf("Test expected 200, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	message = new(Response) | ||||
| 	err = json.Unmarshal(body, message) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("failed to read response body: %v", err) | ||||
| 		t.Fatal("returned:", message) | ||||
| 	} | ||||
| 
 | ||||
| 	if message.Result != ty { | ||||
| 		t.Fatal("Wrong response") | ||||
| 	} | ||||
| 
 | ||||
| 	// reject mixed review
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	obj["critique"] = "it's OK" | ||||
| 	obj["compliment"] = "it's not bad" | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusBadRequest { | ||||
| 		t.Errorf("Test expected 400, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	// reject empty review
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusBadRequest { | ||||
| 		t.Errorf("Test expected 400, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	// reject GET
 | ||||
| 	resp, body = get(t, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Errorf("Test expected 405, have %d", resp.StatusCode) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCleverHandle(t *testing.T) { | ||||
| 	ts := httptest.NewServer(HTTPHandler{Handler: HandlerFunc(cleverHandle), Methods: []string{"POST"}}) | ||||
| 	defer ts.Close() | ||||
| 
 | ||||
| 	// Response ty to compliment
 | ||||
| 	obj := map[string]interface{}{} | ||||
| 	obj["compliment"] = "it's good" | ||||
| 	resp, body := post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Errorf("Test expected 200, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	message := new(Response) | ||||
| 	err := json.Unmarshal(body, message) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("failed to read response body: %v", err) | ||||
| 		t.Fatal("returned:", message) | ||||
| 	} | ||||
| 
 | ||||
| 	if message.Result != ty { | ||||
| 		t.Fatal("Wrong response") | ||||
| 	} | ||||
| 
 | ||||
| 	// Response deny to critique
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	obj["critique"] = "it's bad" | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Errorf("Test expected 200, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	message = new(Response) | ||||
| 	err = json.Unmarshal(body, message) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("failed to read response body: %v", err) | ||||
| 		t.Fatal("returned:", message) | ||||
| 	} | ||||
| 
 | ||||
| 	if message.Result != deny { | ||||
| 		t.Fatal("Wrong response") | ||||
| 	} | ||||
| 
 | ||||
| 	// Be polite to mixed review
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	obj["critique"] = "it's OK" | ||||
| 	obj["compliment"] = "it's not bad" | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	message = new(Response) | ||||
| 	err = json.Unmarshal(body, message) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("failed to read response body: %v", err) | ||||
| 		t.Fatal("returned:", message) | ||||
| 	} | ||||
| 
 | ||||
| 	if message.Result != ty { | ||||
| 		t.Fatal("Wrong response") | ||||
| 	} | ||||
| 
 | ||||
| 	// reject empty review
 | ||||
| 	obj = map[string]interface{}{} | ||||
| 	resp, body = post(t, obj, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusBadRequest { | ||||
| 		t.Errorf("Test expected 400, have %d", resp.StatusCode) | ||||
| 	} | ||||
| 
 | ||||
| 	// reject GET
 | ||||
| 	resp, body = get(t, ts) | ||||
| 
 | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Errorf("Test expected 405, have %d", resp.StatusCode) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,91 +0,0 @@ | |||
| // Package bundle implements the HTTP handler for the bundle command.
 | ||||
| package bundle | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/bundler" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| ) | ||||
| 
 | ||||
| // Handler accepts requests for either remote or uploaded
 | ||||
| // certificates to be bundled, and returns a certificate bundle (or
 | ||||
| // error).
 | ||||
| type Handler struct { | ||||
| 	bundler *bundler.Bundler | ||||
| } | ||||
| 
 | ||||
| // NewHandler creates a new bundler that uses the root bundle and
 | ||||
| // intermediate bundle in the trust chain.
 | ||||
| func NewHandler(caBundleFile, intBundleFile string) (http.Handler, error) { | ||||
| 	var err error | ||||
| 
 | ||||
| 	b := new(Handler) | ||||
| 	if b.bundler, err = bundler.NewBundler(caBundleFile, intBundleFile); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	log.Info("bundler API ready") | ||||
| 	return api.HTTPHandler{Handler: b, Methods: []string{"POST"}}, nil | ||||
| } | ||||
| 
 | ||||
| // Handle implements an http.Handler interface for the bundle handler.
 | ||||
| func (h *Handler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	blob, matched, err := api.ProcessRequestFirstMatchOf(r, | ||||
| 		[][]string{ | ||||
| 			[]string{"certificate"}, | ||||
| 			[]string{"domain"}, | ||||
| 		}) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("invalid request: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	flavor := blob["flavor"] | ||||
| 	bf := bundler.Ubiquitous | ||||
| 	if flavor != "" { | ||||
| 		bf = bundler.BundleFlavor(flavor) | ||||
| 	} | ||||
| 	log.Infof("request for flavor %v", bf) | ||||
| 
 | ||||
| 	var result *bundler.Bundle | ||||
| 	switch matched[0] { | ||||
| 	case "domain": | ||||
| 		bundle, err := h.bundler.BundleFromRemote(blob["domain"], blob["ip"], bf) | ||||
| 		if err != nil { | ||||
| 			log.Warningf("couldn't bundle from remote: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 		result = bundle | ||||
| 	case "certificate": | ||||
| 		bundle, err := h.bundler.BundleFromPEMorDER([]byte(blob["certificate"]), []byte(blob["private_key"]), bf, "") | ||||
| 		if err != nil { | ||||
| 			log.Warning("bad PEM certifcate or private key") | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		serverName := blob["domain"] | ||||
| 		ip := blob["ip"] | ||||
| 
 | ||||
| 		if serverName != "" { | ||||
| 			err := bundle.Cert.VerifyHostname(serverName) | ||||
| 			if err != nil { | ||||
| 				return errors.Wrap(errors.CertificateError, errors.VerifyFailed, err) | ||||
| 			} | ||||
| 
 | ||||
| 		} | ||||
| 
 | ||||
| 		if ip != "" { | ||||
| 			err := bundle.Cert.VerifyHostname(ip) | ||||
| 			if err != nil { | ||||
| 				return errors.Wrap(errors.CertificateError, errors.VerifyFailed, err) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		result = bundle | ||||
| 	} | ||||
| 	log.Info("wrote response") | ||||
| 	return api.SendResponse(w, result) | ||||
| } | ||||
|  | @ -1,214 +0,0 @@ | |||
| package bundle | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	testCaBundleFile     = "../testdata/ca-bundle.pem" | ||||
| 	testIntBundleFile    = "../testdata/int-bundle.pem" | ||||
| 	testLeafCertFile     = "../testdata/leaf.pem" | ||||
| 	testLeafKeyFile      = "../testdata/leaf.key" | ||||
| 	testLeafWrongKeyFile = "../testdata/leaf.badkey" | ||||
| 	testBrokenCertFile   = "../testdata/broken.pem" | ||||
| ) | ||||
| 
 | ||||
| func newTestHandler(t *testing.T) (h http.Handler) { | ||||
| 	h, err := NewHandler(testCaBundleFile, testIntBundleFile) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func newBundleServer(t *testing.T) *httptest.Server { | ||||
| 	ts := httptest.NewServer(newTestHandler(t)) | ||||
| 	return ts | ||||
| } | ||||
| 
 | ||||
| func testBundleFile(t *testing.T, domain, ip, certFile, keyFile, flavor string) (resp *http.Response, body []byte) { | ||||
| 	ts := newBundleServer(t) | ||||
| 	defer ts.Close() | ||||
| 	var certPEM, keyPEM []byte | ||||
| 	if certFile != "" { | ||||
| 		var err error | ||||
| 		certPEM, err = ioutil.ReadFile(certFile) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 	} | ||||
| 	if keyFile != "" { | ||||
| 		var err error | ||||
| 		keyPEM, err = ioutil.ReadFile(keyFile) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	obj := map[string]string{"flavor": flavor} | ||||
| 	if len(domain) > 0 { | ||||
| 		obj["domain"] = domain | ||||
| 	} | ||||
| 	if len(ip) > 0 { | ||||
| 		obj["ip"] = ip | ||||
| 	} | ||||
| 	if len(certPEM) > 0 { | ||||
| 		obj["certificate"] = string(certPEM) | ||||
| 	} | ||||
| 	if len(keyPEM) > 0 { | ||||
| 		obj["private_key"] = string(keyPEM) | ||||
| 	} | ||||
| 
 | ||||
| 	blob, err := json.Marshal(obj) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func TestNewHandler(t *testing.T) { | ||||
| 	newTestHandler(t) | ||||
| } | ||||
| 
 | ||||
| type bundleTest struct { | ||||
| 	Domain             string | ||||
| 	IP                 string | ||||
| 	CertFile           string | ||||
| 	KeyFile            string | ||||
| 	Flavor             string | ||||
| 	ExpectedHTTPStatus int | ||||
| 	ExpectedSuccess    bool | ||||
| 	ExpectedErrorCode  int | ||||
| } | ||||
| 
 | ||||
| var bundleTests = []bundleTest{ | ||||
| 	// Test bundling with certificate
 | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		Flavor:             "ubiquitous", | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		Flavor:             "optimal", | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		KeyFile:            testLeafKeyFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		Domain:             "cfssl-leaf.com", | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	// Test bundling with remote domain
 | ||||
| 	{ | ||||
| 		Domain:             "google.com", | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  1220, | ||||
| 	}, | ||||
| 	// Error testing.
 | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		KeyFile:            testLeafWrongKeyFile, | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  2300, | ||||
| 	}, | ||||
| 	{ | ||||
| 		// no input parameter is specified
 | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  http.StatusBadRequest, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testBrokenCertFile, | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  1003, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafKeyFile, | ||||
| 		KeyFile:            testLeafKeyFile, | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  1003, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		KeyFile:            testLeafCertFile, | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  2003, | ||||
| 	}, | ||||
| 	{ | ||||
| 		CertFile:           testLeafCertFile, | ||||
| 		Domain:             "cloudflare-leaf.com", | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  1200, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestBundle(t *testing.T) { | ||||
| 	for i, test := range bundleTests { | ||||
| 		resp, body := testBundleFile(t, test.Domain, test.IP, test.CertFile, test.KeyFile, test.Flavor) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Errorf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Errorf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Errorf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Errorf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -1,6 +0,0 @@ | |||
| package client | ||||
| 
 | ||||
| // SignResult is the result of signing a CSR.
 | ||||
| type SignResult struct { | ||||
| 	Certificate []byte `json:"certificate"` | ||||
| } | ||||
|  | @ -1,206 +0,0 @@ | |||
| // Package client implements the a Go client for CFSSL API commands.
 | ||||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	stderr "errors" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/auth" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/info" | ||||
| ) | ||||
| 
 | ||||
| // A Server points to a remote CFSSL instance.
 | ||||
| type Server struct { | ||||
| 	Address string | ||||
| 	Port    int | ||||
| } | ||||
| 
 | ||||
| // NewServer sets up a new server target. The address should be the
 | ||||
| // DNS name (or "name:port") of the remote CFSSL instance. If no port
 | ||||
| // is specified, the CFSSL default port (8888) is used.
 | ||||
| func NewServer(addr string) *Server { | ||||
| 	host, port, err := net.SplitHostPort(addr) | ||||
| 	if err != nil { | ||||
| 		host, port, err = net.SplitHostPort(addr + ":8888") | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var portno int | ||||
| 	if port == "" { | ||||
| 		portno = 8888 | ||||
| 	} else { | ||||
| 		portno, err = strconv.Atoi(port) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return &Server{host, portno} | ||||
| } | ||||
| 
 | ||||
| func (srv *Server) getURL(endpoint string) string { | ||||
| 	return fmt.Sprintf("http://%s:%d/api/v1/cfssl/%s", srv.Address, srv.Port, endpoint) | ||||
| } | ||||
| 
 | ||||
| // post connects to the remote server and returns a Response struct
 | ||||
| func (srv *Server) post(url string, jsonData []byte) (*api.Response, error) { | ||||
| 	buf := bytes.NewBuffer(jsonData) | ||||
| 	resp, err := http.Post(url, "application/json", buf) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(errors.APIClientError, errors.ClientHTTPError, err) | ||||
| 	} | ||||
| 	body, err := ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(errors.APIClientError, errors.IOError, err) | ||||
| 	} | ||||
| 	resp.Body.Close() | ||||
| 
 | ||||
| 	var response api.Response | ||||
| 	err = json.Unmarshal(body, &response) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(errors.APIClientError, errors.JSONError, err) | ||||
| 	} | ||||
| 
 | ||||
| 	if !response.Success || response.Result == nil { | ||||
| 		if len(response.Errors) > 0 { | ||||
| 			return nil, errors.Wrap(errors.APIClientError, errors.ServerRequestFailed, stderr.New(response.Errors[0].Message)) | ||||
| 		} | ||||
| 		return nil, errors.New(errors.APIClientError, errors.ServerRequestFailed) | ||||
| 	} | ||||
| 
 | ||||
| 	return &response, nil | ||||
| } | ||||
| 
 | ||||
| // AuthSign fills out an authenticated signing request to the server,
 | ||||
| // receiving a certificate or error in response.
 | ||||
| // It takes the serialized JSON request to send, remote address and
 | ||||
| // authentication provider.
 | ||||
| func (srv *Server) AuthSign(req, id []byte, provider auth.Provider) ([]byte, error) { | ||||
| 	return srv.AuthReq(req, id, provider, "sign") | ||||
| } | ||||
| 
 | ||||
| // AuthInfo fills out an authenticated info request to the server,
 | ||||
| // receiving a certificate or error in response.
 | ||||
| // It takes the serialized JSON request to send, remote address and
 | ||||
| // authentication provider.
 | ||||
| func (srv *Server) AuthInfo(req, id []byte, provider auth.Provider) ([]byte, error) { | ||||
| 	return srv.AuthReq(req, id, provider, "info") | ||||
| } | ||||
| 
 | ||||
| // AuthReq is the common logic for AuthSign and AuthInfo -- perform the given
 | ||||
| // request, and return the resultant certificate.
 | ||||
| // The target is either 'sign' or 'info'.
 | ||||
| func (srv *Server) AuthReq(req, ID []byte, provider auth.Provider, target string) ([]byte, error) { | ||||
| 	url := srv.getURL("auth" + target) | ||||
| 
 | ||||
| 	token, err := provider.Token(req) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(errors.APIClientError, errors.AuthenticationFailure, err) | ||||
| 	} | ||||
| 
 | ||||
| 	aReq := &auth.AuthenticatedRequest{ | ||||
| 		Timestamp:     time.Now().Unix(), | ||||
| 		RemoteAddress: ID, | ||||
| 		Token:         token, | ||||
| 		Request:       req, | ||||
| 	} | ||||
| 
 | ||||
| 	jsonData, err := json.Marshal(aReq) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(errors.APIClientError, errors.JSONError, err) | ||||
| 	} | ||||
| 
 | ||||
| 	response, err := srv.post(url, jsonData) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, ok := response.Result.(map[string]interface{}) | ||||
| 	if !ok { | ||||
| 		return nil, errors.New(errors.APIClientError, errors.JSONError) | ||||
| 	} | ||||
| 
 | ||||
| 	cert, ok := result["certificate"].(string) | ||||
| 	if !ok { | ||||
| 		return nil, errors.New(errors.APIClientError, errors.JSONError) | ||||
| 	} | ||||
| 
 | ||||
| 	return []byte(cert), nil | ||||
| } | ||||
| 
 | ||||
| // Sign sends a signature request to the remote CFSSL server,
 | ||||
| // receiving a signed certificate or an error in response.
 | ||||
| // It takes the serialized JSON request to send.
 | ||||
| func (srv *Server) Sign(jsonData []byte) ([]byte, error) { | ||||
| 	return srv.Req(jsonData, "sign") | ||||
| } | ||||
| 
 | ||||
| // Info sends an info request to the remote CFSSL server, receiving a
 | ||||
| // response or an error in response.
 | ||||
| // It takes the serialized JSON request to send.
 | ||||
| func (srv *Server) Info(jsonData []byte) (*info.Resp, error) { | ||||
| 	res, err := srv.getResultMap(jsonData, "info") | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	info := new(info.Resp) | ||||
| 
 | ||||
| 	if val, ok := res["certificate"]; ok { | ||||
| 		info.Certificate = val.(string) | ||||
| 	} | ||||
| 	var usages []interface{} | ||||
| 	if val, ok := res["usages"]; ok { | ||||
| 		usages = val.([]interface{}) | ||||
| 	} | ||||
| 	if val, ok := res["expiry"]; ok { | ||||
| 		info.ExpiryString = val.(string) | ||||
| 	} | ||||
| 
 | ||||
| 	info.Usage = make([]string, len(usages)) | ||||
| 	for i, s := range usages { | ||||
| 		info.Usage[i] = s.(string) | ||||
| 	} | ||||
| 
 | ||||
| 	return info, nil | ||||
| } | ||||
| 
 | ||||
| func (srv *Server) getResultMap(jsonData []byte, target string) (result map[string]interface{}, err error) { | ||||
| 	url := srv.getURL(target) | ||||
| 	response, err := srv.post(url, jsonData) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	result, ok := response.Result.(map[string]interface{}) | ||||
| 	if !ok { | ||||
| 		err = errors.Wrap(errors.APIClientError, errors.ClientHTTPError, stderr.New("response is formatted improperly")) | ||||
| 		return | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Req performs the common logic for Sign and Info, performing the actual
 | ||||
| // request and returning the resultant certificate.
 | ||||
| func (srv *Server) Req(jsonData []byte, target string) ([]byte, error) { | ||||
| 	result, err := srv.getResultMap(jsonData, target) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	cert := result["certificate"].(string) | ||||
| 	if cert != "" { | ||||
| 		return []byte(cert), nil | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, errors.Wrap(errors.APIClientError, errors.ClientHTTPError, stderr.New("response doesn't contain certificate.")) | ||||
| } | ||||
|  | @ -1,59 +0,0 @@ | |||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"net" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/auth" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	testProvider auth.Provider | ||||
| 	testKey      = "0123456789ABCDEF0123456789ABCDEF" | ||||
| 	testAD       = []byte{1, 2, 3, 4} // IP address 1.2.3.4
 | ||||
| ) | ||||
| 
 | ||||
| func TestNewServer(t *testing.T) { | ||||
| 	s := NewServer("1.1.1.1:::123456789") | ||||
| 
 | ||||
| 	if s != nil { | ||||
| 		t.Fatalf("fatal error, server created with too many colons %v", s) | ||||
| 	} | ||||
| 
 | ||||
| 	s2 := NewServer("1.1.1.1:[]") | ||||
| 	if s != nil { | ||||
| 		t.Fatalf("%v", s2) | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	_, port, _ := net.SplitHostPort("") | ||||
| 	if port != "" { | ||||
| 		t.Fatalf("%v", port) | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestInvalidPort(t *testing.T) { | ||||
| 	s := NewServer("1.1.1.1:99999999999999999999999999999") | ||||
| 	if s != nil { | ||||
| 		t.Fatalf("%v", s) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestAuthSign(t *testing.T) { | ||||
| 	s := NewServer("1.1") | ||||
| 	testProvider, _ = auth.New(testKey, nil) | ||||
| 	testRequest := []byte(`testing 1 2 3`) | ||||
| 	as, _ := s.AuthSign(testRequest, testAD, testProvider) | ||||
| 	if as != nil { | ||||
| 		t.Fatal("fatal error with auth sign function") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestSign(t *testing.T) { | ||||
| 	s := NewServer("1.1") | ||||
| 	sign, _ := s.Sign([]byte{5, 5, 5, 5}) | ||||
| 	if sign != nil { | ||||
| 		t.Fatalf("%v", sign) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,289 +0,0 @@ | |||
| // Package generator implements the HTTP handlers for certificate generation.
 | ||||
| package generator | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/md5" | ||||
| 	"crypto/sha1" | ||||
| 	"crypto/x509" | ||||
| 	"encoding/json" | ||||
| 	"encoding/pem" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/config" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/csr" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer/universal" | ||||
| ) | ||||
| 
 | ||||
| // Sum contains digests for a certificate or certificate request.
 | ||||
| type Sum struct { | ||||
| 	MD5  string `json:"md5"` | ||||
| 	SHA1 string `json:"sha-1"` | ||||
| } | ||||
| 
 | ||||
| // Validator is a type of function that contains the logic for validating
 | ||||
| // a certificate request.
 | ||||
| type Validator func(*csr.CertificateRequest) error | ||||
| 
 | ||||
| // A CertRequest stores a PEM-encoded private key and corresponding
 | ||||
| // CSR; this is returned from the CSR generation endpoint.
 | ||||
| type CertRequest struct { | ||||
| 	Key  string         `json:"private_key"` | ||||
| 	CSR  string         `json:"certificate_request"` | ||||
| 	Sums map[string]Sum `json:"sums"` | ||||
| } | ||||
| 
 | ||||
| // A Handler accepts JSON-encoded certificate requests and
 | ||||
| // returns a new private key and certificate request.
 | ||||
| type Handler struct { | ||||
| 	generator *csr.Generator | ||||
| } | ||||
| 
 | ||||
| // NewHandler builds a new Handler from the
 | ||||
| // validation function provided.
 | ||||
| func NewHandler(validator Validator) (http.Handler, error) { | ||||
| 	log.Info("setting up key / CSR generator") | ||||
| 	return &api.HTTPHandler{ | ||||
| 		Handler: &Handler{ | ||||
| 			generator: &csr.Generator{Validator: validator}, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func computeSum(in []byte) (sum Sum, err error) { | ||||
| 	var data []byte | ||||
| 	p, _ := pem.Decode(in) | ||||
| 	if p == nil { | ||||
| 		err = errors.NewBadRequestString("not a CSR or certificate") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	switch p.Type { | ||||
| 	case "CERTIFICATE REQUEST": | ||||
| 		var req *x509.CertificateRequest | ||||
| 		req, err = x509.ParseCertificateRequest(p.Bytes) | ||||
| 		if err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 		data = req.Raw | ||||
| 	case "CERTIFICATE": | ||||
| 		var cert *x509.Certificate | ||||
| 		cert, err = x509.ParseCertificate(p.Bytes) | ||||
| 		if err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 		data = cert.Raw | ||||
| 	default: | ||||
| 		err = errors.NewBadRequestString("not a CSR or certificate") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	md5Sum := md5.Sum(data) | ||||
| 	sha1Sum := sha1.Sum(data) | ||||
| 	sum.MD5 = fmt.Sprintf("%X", md5Sum[:]) | ||||
| 	sum.SHA1 = fmt.Sprintf("%X", sha1Sum[:]) | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Handle responds to requests for the CA to generate a new private
 | ||||
| // key and certificate request on behalf of the client. The format for
 | ||||
| // these requests is documented in the API documentation.
 | ||||
| func (g *Handler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("request for CSR") | ||||
| 	req := new(csr.CertificateRequest) | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to read request body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	err = json.Unmarshal(body, req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to unmarshal request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if req.CA != nil { | ||||
| 		log.Warningf("request received with CA section") | ||||
| 		return errors.NewBadRequestString("ca section only permitted in initca") | ||||
| 	} | ||||
| 
 | ||||
| 	csr, key, err := g.generator.ProcessRequest(req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to process CSR: %v", err) | ||||
| 		// The validator returns a *cfssl/errors.HttpError
 | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	sum, err := computeSum(csr) | ||||
| 	if err != nil { | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Both key and csr are returned PEM-encoded.
 | ||||
| 	response := api.NewSuccessResponse(&CertRequest{ | ||||
| 		Key:  string(key), | ||||
| 		CSR:  string(csr), | ||||
| 		Sums: map[string]Sum{"certificate_request": sum}, | ||||
| 	}) | ||||
| 	w.Header().Set("Content-Type", "application/json") | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	err = enc.Encode(response) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // A CertGeneratorHandler accepts JSON-encoded certificate requests
 | ||||
| // and returns a new private key and signed certificate; it handles
 | ||||
| // sending the CSR to the server.
 | ||||
| type CertGeneratorHandler struct { | ||||
| 	generator *csr.Generator | ||||
| 	signer    signer.Signer | ||||
| } | ||||
| 
 | ||||
| // NewCertGeneratorHandler builds a new handler for generating
 | ||||
| // certificates directly from certificate requests; the validator covers
 | ||||
| // the certificate request and the CA's key and certificate are used to
 | ||||
| // sign the generated request. If remote is not an empty string, the
 | ||||
| // handler will send signature requests to the CFSSL instance contained
 | ||||
| // in remote.
 | ||||
| func NewCertGeneratorHandler(validator Validator, caFile, caKeyFile string, policy *config.Signing) (http.Handler, error) { | ||||
| 	var err error | ||||
| 	log.Info("setting up new generator / signer") | ||||
| 	cg := new(CertGeneratorHandler) | ||||
| 
 | ||||
| 	if policy == nil { | ||||
| 		policy = &config.Signing{ | ||||
| 			Default:  config.DefaultConfig(), | ||||
| 			Profiles: nil, | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	root := universal.Root{ | ||||
| 		Config: map[string]string{ | ||||
| 			"ca-file":     caFile, | ||||
| 			"ca-key-file": caKeyFile, | ||||
| 		}, | ||||
| 	} | ||||
| 	if cg.signer, err = universal.NewSigner(root, policy); err != nil { | ||||
| 		log.Errorf("setting up signer failed: %v", err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	cg.generator = &csr.Generator{Validator: validator} | ||||
| 
 | ||||
| 	return api.HTTPHandler{Handler: cg, Methods: []string{"POST"}}, nil | ||||
| } | ||||
| 
 | ||||
| // NewCertGeneratorHandlerFromSigner returns a handler directly from
 | ||||
| // the signer and validation function.
 | ||||
| func NewCertGeneratorHandlerFromSigner(validator Validator, signer signer.Signer) http.Handler { | ||||
| 	return api.HTTPHandler{ | ||||
| 		Handler: &CertGeneratorHandler{ | ||||
| 			generator: &csr.Generator{Validator: validator}, | ||||
| 			signer:    signer, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type genSignRequest struct { | ||||
| 	Hostname string                  `json:"hostname"` | ||||
| 	Request  *csr.CertificateRequest `json:"request"` | ||||
| 	Profile  string                  `json:"profile"` | ||||
| 	Label    string                  `json:"label"` | ||||
| } | ||||
| 
 | ||||
| // Handle responds to requests for the CA to generate a new private
 | ||||
| // key and certificate on behalf of the client. The format for these
 | ||||
| // requests is documented in the API documentation.
 | ||||
| func (cg *CertGeneratorHandler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("request for CSR") | ||||
| 
 | ||||
| 	req := new(genSignRequest) | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to read request body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	err = json.Unmarshal(body, req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to unmarshal request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if req.Request == nil { | ||||
| 		log.Warning("empty request received") | ||||
| 		return errors.NewBadRequestString("missing request section") | ||||
| 	} | ||||
| 
 | ||||
| 	if req.Request.CA != nil { | ||||
| 		log.Warningf("request received with CA section") | ||||
| 		return errors.NewBadRequestString("ca section only permitted in initca") | ||||
| 	} | ||||
| 
 | ||||
| 	csr, key, err := cg.generator.ProcessRequest(req.Request) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to process CSR: %v", err) | ||||
| 		// The validator returns a *cfssl/errors.HttpError
 | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// This API does not override the subject because it was already added to the CSR
 | ||||
| 	signReq := signer.SignRequest{ | ||||
| 		Hosts:   signer.SplitHosts(req.Hostname), | ||||
| 		Request: string(csr), | ||||
| 		Profile: req.Profile, | ||||
| 		Label:   req.Label, | ||||
| 	} | ||||
| 
 | ||||
| 	certBytes, err := cg.signer.Sign(signReq) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to sign request: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	reqSum, err := computeSum(csr) | ||||
| 	if err != nil { | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	certSum, err := computeSum(certBytes) | ||||
| 	if err != nil { | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	result := map[string]interface{}{ | ||||
| 		"private_key":         string(key), | ||||
| 		"certificate_request": string(csr), | ||||
| 		"certificate":         string(certBytes), | ||||
| 		"sums": map[string]Sum{ | ||||
| 			"certificate_request": reqSum, | ||||
| 			"certificate":         certSum, | ||||
| 		}, | ||||
| 	} | ||||
| 	return api.SendResponse(w, result) | ||||
| } | ||||
| 
 | ||||
| // CSRValidate contains the default validation logic for certificate requests to
 | ||||
| // the API server. This follows the Baseline Requirements for the Issuance and
 | ||||
| // Management of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser
 | ||||
| // Forum (https://cabforum.org). Specifically, section 10.2.3 ("Information
 | ||||
| // Requirements"), states:
 | ||||
| //
 | ||||
| // "Applicant information MUST include, but not be limited to, at least one
 | ||||
| // Fully-Qualified Domain Name or IP address to be included in the Certificate’s
 | ||||
| // SubjectAltName extension."
 | ||||
| func CSRValidate(req *csr.CertificateRequest) error { | ||||
| 	if len(req.Hosts) == 0 { | ||||
| 		log.Warning("request for CSR is missing the host parameter") | ||||
| 		return errors.NewBadRequestMissingParameter("hosts") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										70
									
								
								Godeps/_workspace/src/github.com/cloudflare/cfssl/api/generator/generator_test.go
								
								
									generated
								
								
									vendored
								
								
							
							
						
						
									
										70
									
								
								Godeps/_workspace/src/github.com/cloudflare/cfssl/api/generator/generator_test.go
								
								
									generated
								
								
									vendored
								
								
							|  | @ -1,70 +0,0 @@ | |||
| package generator | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/csr" | ||||
| ) | ||||
| 
 | ||||
| func csrData(t *testing.T) *bytes.Reader { | ||||
| 	req := &csr.CertificateRequest{ | ||||
| 		Names: []csr.Name{ | ||||
| 			{ | ||||
| 				C:  "US", | ||||
| 				ST: "California", | ||||
| 				L:  "San Francisco", | ||||
| 				O:  "CloudFlare", | ||||
| 				OU: "Systems Engineering", | ||||
| 			}, | ||||
| 		}, | ||||
| 		CN:    "cloudflare.com", | ||||
| 		Hosts: []string{"cloudflare.com"}, | ||||
| 		KeyRequest: &csr.KeyRequest{ | ||||
| 			Algo: "ecdsa", | ||||
| 			Size: 256, | ||||
| 		}, | ||||
| 	} | ||||
| 	csrBytes, err := json.Marshal(req) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return bytes.NewReader(csrBytes) | ||||
| } | ||||
| 
 | ||||
| func TestGeneratorRESTfulVerbs(t *testing.T) { | ||||
| 	handler, _ := NewHandler(CSRValidate) | ||||
| 	ts := httptest.NewServer(handler) | ||||
| 	data := csrData(t) | ||||
| 	// POST should work.
 | ||||
| 	req, _ := http.NewRequest("POST", ts.URL, data) | ||||
| 	resp, _ := http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 
 | ||||
| 	// Test GET, PUT, DELETE and whatever, expect 400 errors.
 | ||||
| 	req, _ = http.NewRequest("GET", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("PUT", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("DELETE", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("WHATEVER", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,117 +0,0 @@ | |||
| // Package info implements the HTTP handler for the info command.
 | ||||
| package info | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/info" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer" | ||||
| ) | ||||
| 
 | ||||
| // Handler is a type that contains the root certificates for the CA,
 | ||||
| // and serves information on them for clients that need the certificates.
 | ||||
| type Handler struct { | ||||
| 	sign signer.Signer | ||||
| } | ||||
| 
 | ||||
| // NewHandler creates a new handler to serve information on the CA's
 | ||||
| // certificates, taking a signer to use.
 | ||||
| func NewHandler(s signer.Signer) (http.Handler, error) { | ||||
| 	return &api.HTTPHandler{ | ||||
| 		Handler: &Handler{ | ||||
| 			sign: s, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // Handle listens for incoming requests for CA information, and returns
 | ||||
| // a list containing information on each root certificate.
 | ||||
| func (h *Handler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	req := new(info.Req) | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to read request body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 	err = json.Unmarshal(body, req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to unmarshal request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err := h.sign.Info(*req) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	response := api.NewSuccessResponse(resp) | ||||
| 	w.Header().Set("Content-Type", "application/json") | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	return enc.Encode(response) | ||||
| } | ||||
| 
 | ||||
| // MultiHandler is a handler for providing the public certificates for
 | ||||
| // a multi-root certificate authority. It takes a mapping of label to
 | ||||
| // signer and a default label, and handles the standard information
 | ||||
| // request as defined in the client package.
 | ||||
| type MultiHandler struct { | ||||
| 	signers      map[string]signer.Signer | ||||
| 	defaultLabel string | ||||
| } | ||||
| 
 | ||||
| // NewMultiHandler constructs a MultiHandler from a mapping of labels
 | ||||
| // to signers and the default label.
 | ||||
| func NewMultiHandler(signers map[string]signer.Signer, defaultLabel string) (http.Handler, error) { | ||||
| 	return &api.HTTPHandler{ | ||||
| 		Handler: &MultiHandler{ | ||||
| 			signers:      signers, | ||||
| 			defaultLabel: defaultLabel, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // Handle accepts client information requests, and uses the label to
 | ||||
| // look up the signer whose public certificate should be retrieved. If
 | ||||
| // the label is empty, the default label is used.
 | ||||
| func (h *MultiHandler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	req := new(info.Req) | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to read request body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 	err = json.Unmarshal(body, req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to unmarshal request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	log.Debug("checking label") | ||||
| 	if req.Label == "" { | ||||
| 		req.Label = h.defaultLabel | ||||
| 	} | ||||
| 
 | ||||
| 	if _, ok := h.signers[req.Label]; !ok { | ||||
| 		log.Warningf("request for invalid endpoint") | ||||
| 		return errors.NewBadRequestString("bad label") | ||||
| 	} | ||||
| 
 | ||||
| 	log.Debug("getting info") | ||||
| 	resp, err := h.signers[req.Label].Info(*req) | ||||
| 	if err != nil { | ||||
| 		log.Infof("error getting certificate: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	response := api.NewSuccessResponse(resp) | ||||
| 	w.Header().Set("Content-Type", "application/json") | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	return enc.Encode(response) | ||||
| } | ||||
|  | @ -1,256 +0,0 @@ | |||
| package info | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer/local" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	testCaFile    = "../testdata/ca.pem" | ||||
| 	testCaKeyFile = "../testdata/ca_key.pem" | ||||
| 
 | ||||
| 	// second test CA for multiroot
 | ||||
| 	testCaFile2    = "../testdata/ca2.pem" | ||||
| 	testCaKeyFile2 = "../testdata/ca2-key.pem" | ||||
| ) | ||||
| 
 | ||||
| // Generally, the single root function and its multiroot analogue will
 | ||||
| // be presented together.
 | ||||
| 
 | ||||
| func newTestHandler(t *testing.T) (h http.Handler) { | ||||
| 	signer, err := local.NewSignerFromFile(testCaFile, testCaKeyFile, nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	h, err = NewHandler(signer) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func newTestMultiHandler(t *testing.T) (h http.Handler) { | ||||
| 	signer1, err := local.NewSignerFromFile(testCaFile, testCaKeyFile, nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	signer2, err := local.NewSignerFromFile(testCaFile2, testCaKeyFile2, nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	signers := map[string]signer.Signer{ | ||||
| 		"test1": signer1, | ||||
| 		"test2": signer2, | ||||
| 	} | ||||
| 
 | ||||
| 	h, err = NewMultiHandler(signers, "test1") | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func TestNewHandler(t *testing.T) { | ||||
| 	newTestHandler(t) | ||||
| } | ||||
| 
 | ||||
| func TestNewMultiHandler(t *testing.T) { | ||||
| 	newTestMultiHandler(t) | ||||
| } | ||||
| 
 | ||||
| func newInfoServer(t *testing.T) *httptest.Server { | ||||
| 	ts := httptest.NewServer(newTestHandler(t)) | ||||
| 	return ts | ||||
| } | ||||
| 
 | ||||
| func newMultiInfoServer(t *testing.T) *httptest.Server { | ||||
| 	return httptest.NewServer(newTestMultiHandler(t)) | ||||
| } | ||||
| 
 | ||||
| func testInfoFile(t *testing.T, req map[string]interface{}) (resp *http.Response, body []byte) { | ||||
| 	ts := newInfoServer(t) | ||||
| 	defer ts.Close() | ||||
| 
 | ||||
| 	blob, err := json.Marshal(req) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func testMultiInfoFile(t *testing.T, req map[string]interface{}) (resp *http.Response, body []byte) { | ||||
| 	ts := newMultiInfoServer(t) | ||||
| 	defer ts.Close() | ||||
| 
 | ||||
| 	blob, err := json.Marshal(req) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| type infoTest struct { | ||||
| 	RequestObject      map[string]interface{} | ||||
| 	ExpectedHTTPStatus int | ||||
| 	ExpectedSuccess    bool | ||||
| 	ExpectedErrorCode  int | ||||
| } | ||||
| 
 | ||||
| var infoTests = []infoTest{ | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label":   "", | ||||
| 			"profile": "", | ||||
| 		}, | ||||
| 		http.StatusOK, | ||||
| 		true, | ||||
| 		0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label": 123, | ||||
| 		}, | ||||
| 		http.StatusBadRequest, | ||||
| 		false, | ||||
| 		http.StatusBadRequest, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| var multiInfoTests = []infoTest{ | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label":   "", | ||||
| 			"profile": "", | ||||
| 		}, | ||||
| 		http.StatusOK, | ||||
| 		true, | ||||
| 		0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label":   "test1", | ||||
| 			"profile": "", | ||||
| 		}, | ||||
| 		http.StatusOK, | ||||
| 		true, | ||||
| 		0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label":   "test2", | ||||
| 			"profile": "", | ||||
| 		}, | ||||
| 		http.StatusOK, | ||||
| 		true, | ||||
| 		0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label":   "badlabel", | ||||
| 			"profile": "", | ||||
| 		}, | ||||
| 		http.StatusBadRequest, | ||||
| 		false, | ||||
| 		http.StatusBadRequest, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string]interface{}{ | ||||
| 			"label": 123, | ||||
| 		}, | ||||
| 		http.StatusBadRequest, | ||||
| 		false, | ||||
| 		http.StatusBadRequest, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestInfo(t *testing.T) { | ||||
| 	for i, test := range infoTests { | ||||
| 		resp, body := testInfoFile(t, test.RequestObject) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Fatalf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestMultiInfo(t *testing.T) { | ||||
| 	for i, test := range multiInfoTests { | ||||
| 		resp, body := testMultiInfoFile(t, test.RequestObject) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Fatalf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Fatalf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
|  | @ -1,59 +0,0 @@ | |||
| // Package initca implements the HTTP handler for the CA initialization command
 | ||||
| package initca | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/csr" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/initca" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| ) | ||||
| 
 | ||||
| // A NewCA contains a private key and certificate suitable for serving
 | ||||
| // as the root key for a new certificate authority.
 | ||||
| type NewCA struct { | ||||
| 	Key  string `json:"private_key"` | ||||
| 	Cert string `json:"certificate"` | ||||
| } | ||||
| 
 | ||||
| // initialCAHandler is an HTTP handler that accepts a JSON blob in the
 | ||||
| // same format as the CSR endpoint; this blob should contain the
 | ||||
| // identity information for the CA's root key. This endpoint is not
 | ||||
| // suitable for creating intermediate certificates.
 | ||||
| func initialCAHandler(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("setting up initial CA handler") | ||||
| 	req := new(csr.CertificateRequest) | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to read request body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	err = json.Unmarshal(body, req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to unmarshal request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	key, _, cert, err := initca.New(req) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to initialise new CA: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	response := api.NewSuccessResponse(&NewCA{string(key), string(cert)}) | ||||
| 
 | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	err = enc.Encode(response) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // NewHandler returns a new http.Handler that handles request to
 | ||||
| // initialize a CA.
 | ||||
| func NewHandler() http.Handler { | ||||
| 	return api.HTTPHandler{Handler: api.HandlerFunc(initialCAHandler), Methods: []string{"POST"}} | ||||
| } | ||||
|  | @ -1,69 +0,0 @@ | |||
| package initca | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/csr" | ||||
| ) | ||||
| 
 | ||||
| func csrData(t *testing.T) *bytes.Reader { | ||||
| 	req := &csr.CertificateRequest{ | ||||
| 		Names: []csr.Name{ | ||||
| 			{ | ||||
| 				C:  "US", | ||||
| 				ST: "California", | ||||
| 				L:  "San Francisco", | ||||
| 				O:  "CloudFlare", | ||||
| 				OU: "Systems Engineering", | ||||
| 			}, | ||||
| 		}, | ||||
| 		CN:    "cloudflare.com", | ||||
| 		Hosts: []string{"cloudflare.com"}, | ||||
| 		KeyRequest: &csr.KeyRequest{ | ||||
| 			Algo: "ecdsa", | ||||
| 			Size: 256, | ||||
| 		}, | ||||
| 	} | ||||
| 	csrBytes, err := json.Marshal(req) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return bytes.NewReader(csrBytes) | ||||
| } | ||||
| 
 | ||||
| func TestInitCARESTfulVerbs(t *testing.T) { | ||||
| 	ts := httptest.NewServer(NewHandler()) | ||||
| 	data := csrData(t) | ||||
| 	// POST should work.
 | ||||
| 	req, _ := http.NewRequest("POST", ts.URL, data) | ||||
| 	resp, _ := http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 
 | ||||
| 	// Test GET, PUT, DELETE and whatever, expect 400 errors.
 | ||||
| 	req, _ = http.NewRequest("GET", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("PUT", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("DELETE", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| 	req, _ = http.NewRequest("WHATEVER", ts.URL, data) | ||||
| 	resp, _ = http.DefaultClient.Do(req) | ||||
| 	if resp.StatusCode != http.StatusMethodNotAllowed { | ||||
| 		t.Fatal(resp.Status) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,73 +0,0 @@ | |||
| package scan | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/scan" | ||||
| ) | ||||
| 
 | ||||
| // scanHandler is an HTTP handler that accepts GET parameters for host (required)
 | ||||
| // family and scanner, and uses these to perform scans, returning a JSON blob result.
 | ||||
| func scanHandler(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("setting up scan handler") | ||||
| 
 | ||||
| 	err := r.ParseForm() | ||||
| 	log.Info(r.Form) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to parse body: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(r.Form["host"]) == 0 { | ||||
| 		log.Warningf("no host given") | ||||
| 		return errors.NewBadRequestString("no host given") | ||||
| 	} | ||||
| 	host := r.Form["host"][0] | ||||
| 
 | ||||
| 	var family, scanner string | ||||
| 	if len(r.Form["family"]) > 0 { | ||||
| 		family = r.Form["family"][0] | ||||
| 	} | ||||
| 
 | ||||
| 	if len(r.Form["scanner"]) > 0 { | ||||
| 		scanner = r.Form["scanner"][0] | ||||
| 	} | ||||
| 
 | ||||
| 	results, err := scan.Default.RunScans(host, family, scanner) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("%v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	response := api.NewSuccessResponse(results) | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	err = enc.Encode(response) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // NewHandler returns a new http.Handler that handles a scan request.
 | ||||
| func NewHandler() http.Handler { | ||||
| 	return api.HTTPHandler{ | ||||
| 		Handler: api.HandlerFunc(scanHandler), | ||||
| 		Methods: []string{"GET"}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // scanInfoHandler is an HTTP handler that returns a JSON blob result describing
 | ||||
| // the possible families and scans to be run.
 | ||||
| func scanInfoHandler(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("setting up scaninfo handler") | ||||
| 	response := api.NewSuccessResponse(scan.Default) | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	err := enc.Encode(response) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // NewInfoHandler returns a new http.Handler that handles a request for scan info.
 | ||||
| func NewInfoHandler() http.Handler { | ||||
| 	return api.HTTPHandler{Handler: api.HandlerFunc(scanInfoHandler), Methods: []string{"GET"}} | ||||
| } | ||||
|  | @ -1 +0,0 @@ | |||
| package scan | ||||
|  | @ -1,293 +0,0 @@ | |||
| // Package sign implements the HTTP handler for the certificate signing command.
 | ||||
| package sign | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/auth" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/config" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/errors" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/log" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer/universal" | ||||
| ) | ||||
| 
 | ||||
| // A Handler accepts requests with a hostname and certficate
 | ||||
| // parameter (which should be PEM-encoded) and returns a new signed
 | ||||
| // certificate. It includes upstream servers indexed by their
 | ||||
| // profile name.
 | ||||
| type Handler struct { | ||||
| 	signer signer.Signer | ||||
| } | ||||
| 
 | ||||
| // NewHandler generates a new Handler using the certificate
 | ||||
| // authority private key and certficate to sign certificates. If remote
 | ||||
| // is not an empty string, the handler will send signature requests to
 | ||||
| // the CFSSL instance contained in remote by default.
 | ||||
| func NewHandler(caFile, caKeyFile string, policy *config.Signing) (http.Handler, error) { | ||||
| 	root := universal.Root{ | ||||
| 		Config: map[string]string{ | ||||
| 			"cert-file": caFile, | ||||
| 			"key-file":  caKeyFile, | ||||
| 		}, | ||||
| 	} | ||||
| 	s, err := universal.NewSigner(root, policy) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("setting up signer failed: %v", err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return NewHandlerFromSigner(s) | ||||
| } | ||||
| 
 | ||||
| // NewHandlerFromSigner generates a new Handler directly from
 | ||||
| // an existing signer.
 | ||||
| func NewHandlerFromSigner(signer signer.Signer) (h *api.HTTPHandler, err error) { | ||||
| 	policy := signer.Policy() | ||||
| 	if policy == nil { | ||||
| 		err = errors.New(errors.PolicyError, errors.InvalidPolicy) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// Sign will only respond for profiles that have no auth provider.
 | ||||
| 	// So if all of the profiles require authentication, we return an error.
 | ||||
| 	haveUnauth := (policy.Default.Provider == nil) | ||||
| 	for _, profile := range policy.Profiles { | ||||
| 		if haveUnauth { | ||||
| 			break | ||||
| 		} | ||||
| 		haveUnauth = (profile.Provider == nil) | ||||
| 	} | ||||
| 
 | ||||
| 	if !haveUnauth { | ||||
| 		err = errors.New(errors.PolicyError, errors.InvalidPolicy) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	return &api.HTTPHandler{ | ||||
| 		Handler: &Handler{ | ||||
| 			signer: signer, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // This type is meant to be unmarshalled from JSON so that there can be a
 | ||||
| // hostname field in the API
 | ||||
| // TODO: Change the API such that the normal struct can be used.
 | ||||
| type jsonSignRequest struct { | ||||
| 	Hostname  string          `json:"hostname"` | ||||
| 	Hosts     []string        `json:"hosts"` | ||||
| 	Request   string          `json:"certificate_request"` | ||||
| 	Subject   *signer.Subject `json:"subject,omitempty"` | ||||
| 	Profile   string          `json:"profile"` | ||||
| 	Label     string          `json:"label"` | ||||
| 	SerialSeq string          `json:"serial_sequence,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func jsonReqToTrue(js jsonSignRequest) signer.SignRequest { | ||||
| 	sub := new(signer.Subject) | ||||
| 	if js.Subject == nil { | ||||
| 		sub = nil | ||||
| 	} else { | ||||
| 		// make a copy
 | ||||
| 		*sub = *js.Subject | ||||
| 	} | ||||
| 
 | ||||
| 	if js.Hostname != "" { | ||||
| 		return signer.SignRequest{ | ||||
| 			Hosts:     signer.SplitHosts(js.Hostname), | ||||
| 			Subject:   sub, | ||||
| 			Request:   js.Request, | ||||
| 			Profile:   js.Profile, | ||||
| 			Label:     js.Label, | ||||
| 			SerialSeq: js.SerialSeq, | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return signer.SignRequest{ | ||||
| 		Hosts:     js.Hosts, | ||||
| 		Subject:   sub, | ||||
| 		Request:   js.Request, | ||||
| 		Profile:   js.Profile, | ||||
| 		Label:     js.Label, | ||||
| 		SerialSeq: js.SerialSeq, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Handle responds to requests for the CA to sign the certificate request
 | ||||
| // present in the "certificate_request" parameter for the host named
 | ||||
| // in the "hostname" parameter. The certificate should be PEM-encoded. If
 | ||||
| // provided, subject information from the "subject" parameter will be used
 | ||||
| // in place of the subject information from the CSR.
 | ||||
| func (h *Handler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("signature request received") | ||||
| 
 | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	r.Body.Close() | ||||
| 
 | ||||
| 	var req jsonSignRequest | ||||
| 
 | ||||
| 	err = json.Unmarshal(body, &req) | ||||
| 	if err != nil { | ||||
| 		return errors.NewBadRequestString("Unable to parse sign request") | ||||
| 	} | ||||
| 
 | ||||
| 	signReq := jsonReqToTrue(req) | ||||
| 
 | ||||
| 	if req.Request == "" { | ||||
| 		return errors.NewBadRequestString("missing parameter 'certificate_request'") | ||||
| 	} | ||||
| 
 | ||||
| 	var cert []byte | ||||
| 	profile, err := signer.Profile(h.signer, req.Profile) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if profile.Provider != nil { | ||||
| 		log.Error("profile requires authentication") | ||||
| 		return errors.NewBadRequestString("authentication required") | ||||
| 	} | ||||
| 
 | ||||
| 	cert, err = h.signer.Sign(signReq) | ||||
| 	if err != nil { | ||||
| 		log.Warningf("failed to sign request: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	result := map[string]string{"certificate": string(cert)} | ||||
| 	log.Info("wrote response") | ||||
| 	return api.SendResponse(w, result) | ||||
| } | ||||
| 
 | ||||
| // An AuthHandler verifies and signs incoming signature requests.
 | ||||
| type AuthHandler struct { | ||||
| 	signer signer.Signer | ||||
| } | ||||
| 
 | ||||
| // NewAuthHandler generates a new AuthHandler using the certificate
 | ||||
| // authority private key and certficate to sign certificates. If remote
 | ||||
| // is not an empty string, the handler will send signature requests to
 | ||||
| // the CFSSL instance contained in remote by default.
 | ||||
| func NewAuthHandler(caFile, caKeyFile string, policy *config.Signing) (http.Handler, error) { | ||||
| 	root := universal.Root{ | ||||
| 		Config: map[string]string{ | ||||
| 			"cert-file": caFile, | ||||
| 			"key-file":  caKeyFile, | ||||
| 		}, | ||||
| 	} | ||||
| 	s, err := universal.NewSigner(root, policy) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("setting up signer failed: %v", err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return NewAuthHandlerFromSigner(s) | ||||
| } | ||||
| 
 | ||||
| // NewAuthHandlerFromSigner creates a new AuthHandler from the signer
 | ||||
| // that is passed in.
 | ||||
| func NewAuthHandlerFromSigner(signer signer.Signer) (http.Handler, error) { | ||||
| 	policy := signer.Policy() | ||||
| 	if policy == nil { | ||||
| 		return nil, errors.New(errors.PolicyError, errors.InvalidPolicy) | ||||
| 	} | ||||
| 
 | ||||
| 	if policy.Default == nil && policy.Profiles == nil { | ||||
| 		return nil, errors.New(errors.PolicyError, errors.InvalidPolicy) | ||||
| 	} | ||||
| 
 | ||||
| 	// AuthSign will not respond for profiles that have no auth provider.
 | ||||
| 	// So if there are no profiles with auth providers in this policy,
 | ||||
| 	// we return an error.
 | ||||
| 	haveAuth := (policy.Default.Provider != nil) | ||||
| 	for _, profile := range policy.Profiles { | ||||
| 		if haveAuth { | ||||
| 			break | ||||
| 		} | ||||
| 		haveAuth = (profile.Provider != nil) | ||||
| 	} | ||||
| 
 | ||||
| 	if !haveAuth { | ||||
| 		return nil, errors.New(errors.PolicyError, errors.InvalidPolicy) | ||||
| 	} | ||||
| 
 | ||||
| 	return &api.HTTPHandler{ | ||||
| 		Handler: &AuthHandler{ | ||||
| 			signer: signer, | ||||
| 		}, | ||||
| 		Methods: []string{"POST"}, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // Handle receives the incoming request, validates it, and processes it.
 | ||||
| func (h *AuthHandler) Handle(w http.ResponseWriter, r *http.Request) error { | ||||
| 	log.Info("signature request received") | ||||
| 
 | ||||
| 	body, err := ioutil.ReadAll(r.Body) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("failed to read response body: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 	r.Body.Close() | ||||
| 
 | ||||
| 	var aReq auth.AuthenticatedRequest | ||||
| 	err = json.Unmarshal(body, &aReq) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("failed to unmarshal authenticated request: %v", err) | ||||
| 		return errors.NewBadRequest(err) | ||||
| 	} | ||||
| 
 | ||||
| 	var req jsonSignRequest | ||||
| 	err = json.Unmarshal(aReq.Request, &req) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("failed to unmarshal request from authenticated request: %v", err) | ||||
| 		return errors.NewBadRequestString("Unable to parse authenticated sign request") | ||||
| 	} | ||||
| 
 | ||||
| 	// Sanity checks to ensure that we have a valid policy. This
 | ||||
| 	// should have been checked in NewAuthHandler.
 | ||||
| 	policy := h.signer.Policy() | ||||
| 	if policy == nil { | ||||
| 		log.Critical("signer was initialised without a signing policy") | ||||
| 		return errors.NewBadRequestString("invalid policy") | ||||
| 	} | ||||
| 
 | ||||
| 	profile, err := signer.Profile(h.signer, req.Profile) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if profile.Provider == nil { | ||||
| 		log.Error("profile has no authentication provider") | ||||
| 		return errors.NewBadRequestString("no authentication provider") | ||||
| 	} | ||||
| 
 | ||||
| 	if !profile.Provider.Verify(&aReq) { | ||||
| 		log.Warning("received authenticated request with invalid token") | ||||
| 		return errors.NewBadRequestString("invalid token") | ||||
| 	} | ||||
| 
 | ||||
| 	signReq := jsonReqToTrue(req) | ||||
| 
 | ||||
| 	if signReq.Request == "" { | ||||
| 		return errors.NewBadRequestString("missing parameter 'certificate_request'") | ||||
| 	} | ||||
| 
 | ||||
| 	cert, err := h.signer.Sign(signReq) | ||||
| 	if err != nil { | ||||
| 		log.Errorf("signature failed: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	result := map[string]string{"certificate": string(cert)} | ||||
| 	log.Info("wrote response") | ||||
| 	return api.SendResponse(w, result) | ||||
| } | ||||
|  | @ -1,531 +0,0 @@ | |||
| package sign | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/api" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/auth" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/config" | ||||
| 	"github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/cloudflare/cfssl/signer" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	testCaFile         = "../testdata/ca.pem" | ||||
| 	testCaKeyFile      = "../testdata/ca_key.pem" | ||||
| 	testCSRFile        = "../testdata/csr.pem" | ||||
| 	testBrokenCertFile = "../testdata/broken.pem" | ||||
| 	testBrokenCSRFile  = "../testdata/broken_csr.pem" | ||||
| ) | ||||
| 
 | ||||
| var validLocalConfig = ` | ||||
| { | ||||
| 	"signing": { | ||||
| 		"default": { | ||||
| 			"usages": ["digital signature", "email protection"], | ||||
| 			"expiry": "1m" | ||||
| 		} | ||||
| 	} | ||||
| }` | ||||
| 
 | ||||
| var validAuthLocalConfig = ` | ||||
| { | ||||
| 	"signing": { | ||||
| 		"default": { | ||||
| 			"usages": ["digital signature", "email protection"], | ||||
| 			"expiry": "1m", | ||||
| 			"auth_key": "sample" | ||||
| 		} | ||||
| 	}, | ||||
| 	"auth_keys": { | ||||
| 		"sample": { | ||||
| 			"type":"standard", | ||||
| 			"key":"0123456789ABCDEF0123456789ABCDEF" | ||||
| 		} | ||||
| 	} | ||||
| }` | ||||
| 
 | ||||
| var validMixedLocalConfig = ` | ||||
| { | ||||
| 	"signing": { | ||||
| 		"default": { | ||||
| 			"usages": ["digital signature", "email protection"], | ||||
| 			"expiry": "1m" | ||||
| 		}, | ||||
| 		"profiles": { | ||||
| 			"auth": { | ||||
| 				"usages": ["digital signature", "email protection"], | ||||
| 				"expiry": "1m", | ||||
| 				"auth_key": "sample" | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"auth_keys": { | ||||
| 		"sample": { | ||||
| 			"type":"standard", | ||||
| 			"key":"0123456789ABCDEF0123456789ABCDEF" | ||||
| 		} | ||||
| 	} | ||||
| }` | ||||
| 
 | ||||
| var alsoValidMixedLocalConfig = ` | ||||
| { | ||||
| 	"signing": { | ||||
| 		"default": { | ||||
| 			"usages": ["digital signature", "email protection"], | ||||
| 			"expiry": "1m", | ||||
| 			"auth_key": "sample" | ||||
| 		}, | ||||
| 		"profiles": { | ||||
| 			"no-auth": { | ||||
| 				"usages": ["digital signature", "email protection"], | ||||
| 				"expiry": "1m" | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"auth_keys": { | ||||
| 		"sample": { | ||||
| 			"type":"standard", | ||||
| 			"key":"0123456789ABCDEF0123456789ABCDEF" | ||||
| 		} | ||||
| 	} | ||||
| }` | ||||
| 
 | ||||
| func newTestHandler(t *testing.T) (h http.Handler) { | ||||
| 	h, err := NewHandler(testCaFile, testCaKeyFile, nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func TestNewHandler(t *testing.T) { | ||||
| 	newTestHandler(t) | ||||
| } | ||||
| 
 | ||||
| func TestNewHandlerWithProfile(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNewHandlerWithAuthProfile(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validAuthLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err == nil { | ||||
| 		t.Fatal("All profiles have auth keys. Should have failed to create non-auth sign handler.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNewHandlerError(t *testing.T) { | ||||
| 	// using testBrokenCSRFile as badly formed key
 | ||||
| 	_, err := NewHandler(testCaFile, testBrokenCSRFile, nil) | ||||
| 	if err == nil { | ||||
| 		t.Fatal("Expect error when create a signer with broken file.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNewAuthHandlerWithNonAuthProfile(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewAuthHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err == nil { | ||||
| 		t.Fatal("No profile have auth keys. Should have failed to create auth sign handler.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNewHandlersWithMixedProfile(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validMixedLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal("Should be able to create non-auth sign handler.") | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewAuthHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal("Should be able to create auth sign handler.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestNewHandlersWithAnotherMixedProfile(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(alsoValidMixedLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal("Should be able to create non-auth sign handler.") | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewAuthHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal("Should be able to create auth sign handler.") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func newSignServer(t *testing.T) *httptest.Server { | ||||
| 	ts := httptest.NewServer(newTestHandler(t)) | ||||
| 	return ts | ||||
| } | ||||
| 
 | ||||
| func testSignFileOldInterface(t *testing.T, hostname, csrFile string) (resp *http.Response, body []byte) { | ||||
| 	ts := newSignServer(t) | ||||
| 	defer ts.Close() | ||||
| 	var csrPEM []byte | ||||
| 	if csrFile != "" { | ||||
| 		var err error | ||||
| 		csrPEM, err = ioutil.ReadFile(csrFile) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 	} | ||||
| 	obj := map[string]string{} | ||||
| 	if len(hostname) > 0 { | ||||
| 		obj["hostname"] = hostname | ||||
| 	} | ||||
| 	if len(csrPEM) > 0 { | ||||
| 		obj["certificate_request"] = string(csrPEM) | ||||
| 	} | ||||
| 
 | ||||
| 	blob, err := json.Marshal(obj) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func testSignFile(t *testing.T, hosts []string, subject *signer.Subject, csrFile string) (resp *http.Response, body []byte) { | ||||
| 	ts := newSignServer(t) | ||||
| 	defer ts.Close() | ||||
| 	var csrPEM []byte | ||||
| 	if csrFile != "" { | ||||
| 		var err error | ||||
| 		csrPEM, err = ioutil.ReadFile(csrFile) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 	} | ||||
| 	obj := map[string]interface{}{} | ||||
| 	if hosts != nil { | ||||
| 		obj["hosts"] = hosts | ||||
| 	} | ||||
| 	if len(csrPEM) > 0 { | ||||
| 		obj["certificate_request"] = string(csrPEM) | ||||
| 	} | ||||
| 	if subject != nil { | ||||
| 		obj["subject"] = subject | ||||
| 	} | ||||
| 
 | ||||
| 	blob, err := json.Marshal(obj) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	testHostName   = "localhost" | ||||
| 	testDomainName = "cloudflare.com" | ||||
| ) | ||||
| 
 | ||||
| type signTest struct { | ||||
| 	Hosts              []string | ||||
| 	Subject            *signer.Subject | ||||
| 	CSRFile            string | ||||
| 	ExpectedHTTPStatus int | ||||
| 	ExpectedSuccess    bool | ||||
| 	ExpectedErrorCode  int | ||||
| } | ||||
| 
 | ||||
| var signTests = []signTest{ | ||||
| 	{ | ||||
| 		Hosts:              []string{testHostName}, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{testDomainName}, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{testDomainName, testHostName}, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{testDomainName}, | ||||
| 		Subject:            &signer.Subject{CN: "example.com"}, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{}, | ||||
| 		Subject:            &signer.Subject{CN: "example.com"}, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              nil, | ||||
| 		CSRFile:            testCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusOK, | ||||
| 		ExpectedSuccess:    true, | ||||
| 		ExpectedErrorCode:  0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{testDomainName}, | ||||
| 		CSRFile:            "", | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  http.StatusBadRequest, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Hosts:              []string{testDomainName}, | ||||
| 		CSRFile:            testBrokenCSRFile, | ||||
| 		ExpectedHTTPStatus: http.StatusBadRequest, | ||||
| 		ExpectedSuccess:    false, | ||||
| 		ExpectedErrorCode:  9002, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestSign(t *testing.T) { | ||||
| 	for i, test := range signTests { | ||||
| 		resp, body := testSignFile(t, test.Hosts, test.Subject, test.CSRFile) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Logf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Logf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Logf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	// Test for backward compatibility
 | ||||
| 	// TODO remove after API transition is complete.
 | ||||
| 	for i, test := range signTests { | ||||
| 		// an empty hostname is not accepted by the old interface but an empty hosts array should be accepted
 | ||||
| 		// so skip the case of empty hosts array for the old interface.
 | ||||
| 		if test.Hosts != nil && len(test.Hosts) == 0 { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		hostname := strings.Join(test.Hosts, ",") | ||||
| 		resp, body := testSignFileOldInterface(t, hostname, test.CSRFile) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Logf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Logf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Logf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func newTestAuthHandler(t *testing.T) http.Handler { | ||||
| 	conf, err := config.LoadConfig([]byte(validAuthLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	h, err := NewAuthHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return h | ||||
| } | ||||
| 
 | ||||
| func TestNewAuthHandler(t *testing.T) { | ||||
| 	newTestAuthHandler(t) | ||||
| } | ||||
| 
 | ||||
| func TestNewAuthHandlerWithNoAuthConfig(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = NewAuthHandler(testCaFile, testCaKeyFile, conf.Signing) | ||||
| 	if err == nil { | ||||
| 		t.Fatal("Config doesn't have auth keys. Should have failed.") | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func testAuthSignFile(t *testing.T, hosts []string, subject *signer.Subject, csrFile string, profile *config.SigningProfile) (resp *http.Response, body []byte) { | ||||
| 	ts := newAuthSignServer(t) | ||||
| 	defer ts.Close() | ||||
| 
 | ||||
| 	var csrPEM []byte | ||||
| 	if csrFile != "" { | ||||
| 		var err error | ||||
| 		csrPEM, err = ioutil.ReadFile(csrFile) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 	} | ||||
| 	obj := map[string]interface{}{} | ||||
| 	if hosts != nil { | ||||
| 		obj["hosts"] = hosts | ||||
| 	} | ||||
| 	if subject != nil { | ||||
| 		obj["subject"] = subject | ||||
| 	} | ||||
| 	if len(csrPEM) > 0 { | ||||
| 		obj["certificate_request"] = string(csrPEM) | ||||
| 	} | ||||
| 
 | ||||
| 	reqBlob, err := json.Marshal(obj) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	var aReq auth.AuthenticatedRequest | ||||
| 	aReq.Request = reqBlob | ||||
| 	aReq.Token, err = profile.Provider.Token(aReq.Request) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	blob, err := json.Marshal(aReq) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	resp, err = http.Post(ts.URL, "application/json", bytes.NewReader(blob)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	body, err = ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func newAuthSignServer(t *testing.T) *httptest.Server { | ||||
| 	ts := httptest.NewServer(newTestAuthHandler(t)) | ||||
| 	return ts | ||||
| } | ||||
| 
 | ||||
| func TestAuthSign(t *testing.T) { | ||||
| 	conf, err := config.LoadConfig([]byte(validAuthLocalConfig)) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	for i, test := range signTests { | ||||
| 		resp, body := testAuthSignFile(t, test.Hosts, test.Subject, test.CSRFile, conf.Signing.Default) | ||||
| 		if resp.StatusCode != test.ExpectedHTTPStatus { | ||||
| 			t.Logf("Test %d: expected: %d, have %d", i, test.ExpectedHTTPStatus, resp.StatusCode) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, string(body)) | ||||
| 		} | ||||
| 
 | ||||
| 		message := new(api.Response) | ||||
| 		err := json.Unmarshal(body, message) | ||||
| 		if err != nil { | ||||
| 			t.Logf("failed to read response body: %v", err) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedSuccess != message.Success { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedSuccess, message.Success) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 		if test.ExpectedSuccess == true { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if test.ExpectedErrorCode != message.Errors[0].Code { | ||||
| 			t.Fatalf("Test %d: expected: %v, have %v", i, test.ExpectedErrorCode, message.Errors[0].Code) | ||||
| 			t.Fatal(resp.Status, test.ExpectedHTTPStatus, message) | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
|  | @ -1,13 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIICATCCAWoCCQDidF+uNJR6czANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB | ||||
| cyBQdHkgTHRkMB4XDTEyMDUwMTIyNTUxN1oXDTEzMDUwMTIyNTUxN1owRTELMAkG | ||||
| A1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0 | ||||
| nodhz31kLEJoeLSkRmrv8l7exkGtO0REtIbirj9BBy64ZXVBE7khKGO2cnM8U7yj | ||||
| w7Ntfh+IvCjZVA3d2XqHS3Pjrt4HmU/cGCONE8+NEXoqdzLUDPOix1qDDRBvXs81 | ||||
| IFdpZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtpjl | ||||
| KAV2qh6CYHZbdqixhDerjvJcD4Nsd7kExEZfHuECAwEAATANBgkqhkiG9w0BAQUF | ||||
| AAOBgQCyOqs7+qpMrYCgL6OamDeCVojLoEp036PsnaYWf2NPmsVXdpYW40Foyyjp | ||||
| VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 | ||||
| iv5otkxO5rxtGPv7o2J1eMBpCuSkydvoz3Ey/QwGqbBwEXQ4xYCgra336gqW2KQt | ||||
| +LnDCkE8f5oBhCIisExc2i8PDvsRsY70g/2gs983ImJjVR8sDw== | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,30 +0,0 @@ | |||
| -----BEGIN CERTIFICATE REQUEST----- | ||||
| MIIFGzCCAwUCAQAwgYwxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpDbG91ZEZsYXJl | ||||
| MRwwGgYDVQQLExNTeXN0ZW1zIEVuZ2luZWVyaW5nMRYwFAYDVQQHEw1TYW4gRnJh | ||||
| bmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMR0wGwYDVQQDExRjbG91ZGZsYXJl | ||||
| LWludGVyLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOUKdX6+ | ||||
| PSxU/LxKocsCUj7HCc+FaDOPZV68Po3PVm7UF5DmbnLgJYJ/4aZEZM/v5r8LnXQX | ||||
| DqumYicHQ2DHHBDasLTx8m0KeKOUYf9WMQ8gdjmVFoCiZwzxGDHok66/0Glkkqmv | ||||
| 2nJQxXncl5ZFta4sfmcQx3KT02l61LaBbG3j8PbRCWEr+0eRE6twuYRR13AgZ3AT | ||||
| wnMjzxzvsW67qmAy0cq+XgYYfTK9vhPs+8J0fxXa0Iftu3yuhd30xLIVXLu45GR+ | ||||
| i6KnsSxVERSaVxjkS+lHXjUpdtmqI5CK6wn67vqYRRA2TzAJHX8Jb+KL2/UEo5WN | ||||
| fAJ8S0heODQA8nHVU1JIfpegOlQRMv55DgnQUv1c1uwO5hqvv7MPQ3X/m9Kjccs1 | ||||
| FBH1/SVuzKyxYEQ34LErX3HI+6avbVnRtTR/UHkfnZVIXSrcjUm73BGj33hrtiKl | ||||
| 0ZyZnaUKGZPuvebOUFNiXemhTbqrfi/zAb1Tsm/h+xkn5EZ5sMj5NHdAbpih3TqX | ||||
| 2gRhnFZcFjtJM6zzC5O7eG5Kdqf8iladXTXtWxzrUPkb5CupzFl1dyS3dqdkoIXv | ||||
| kmlScnu+6jBOaYeVvwogxr2Y69y4Zfg/qbPyBOLZquX9ovbuSP1DQmC//LV5t7YH | ||||
| HY/1MXr5U0MMvcn+9JWUV6ou3at4AgEqfK0vAgMBAAGgSzBJBgkqhkiG9w0BCQ4x | ||||
| PDA6MDgGA1UdEQQxMC+CFGNsb3VkZmxhcmUtaW50ZXIuY29tghd3d3djbG91ZGZs | ||||
| YXJlLWludGVyLmNvbTALBgkqhkiG9w0BAQ0DggIBAHtSt/v+IHQmSK5UiQWwjRWA | ||||
| ZezIWVlJuselW8DEPNHzDtnraVhjPSFP995Cqh9fc89kx2Bt9hDhjNteTB+pJW6B | ||||
| aCRRZygJ6/m3Ii1XqTFgfEJBWwuIX1Req0PCW/ayegdLzzYbSZ31wRICCveBQyGw | ||||
| vRtzIBUeMvz9MgLJ8zx7eN7fDhrvy+Y1SkC4g0sAQTYYfM9P/He4k5hx79hmd2YC | ||||
| mUDAlNZV0g0dY0qR4cITmhniIFW5iZBplY7DmqooUXrj5yEga2QMj/RA16lPzHbz | ||||
| 7ceUlcH2L6/V6zMR/rfCiGRoWInxWSuuJhLIVLmoEo0590w6KVEZifHxsRpl4l09 | ||||
| imvzwTSQGIrY8jF9AxOD0rRA9wXCT9h8XtBWyJZ1/DmzJG8+7oZ/HdE9XhzwNujD | ||||
| Q6lBOj+dznju7k/snYCZVq501JLPeql8vQrq0O/xSqSK4yN1IG4NisZeDK2BZEOy | ||||
| QhnKXodIKf+zXnFw86lZ/ZwHQFr6jOSxmbrZ2OiY34m7Yd9oeIaMPviysRih2x4Q | ||||
| O6DFz72f97+xFZuXIbmn8DPQV8U9bk/gbrfUCPnx/icS8UoPsBKc9Gio0FZO4+8A | ||||
| 4/ac3oeN0zy/WjsBP+J50CRUXMrRI9KO+/bI4pcT14B31YbuSo6ygIkIkj7YDh36 | ||||
| +4ZG6HnUPQI8HteF9hzp=BROKEN== | ||||
| -----END CERTIFICATE REQUEST----- | ||||
|  | @ -1,17 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIICyDCCAjGgAwIBAgIJAPCgd7rafQZGMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV | ||||
| BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNp | ||||
| c2NvMRMwEQYDVQQKDApDbG91ZEZsYXJlMRQwEgYDVQQLDAtERVZfVEVTVElORzEW | ||||
| MBQGA1UEAwwNQ0ZTU0xfVEVTVF9DQTAeFw0xNDA0MTExNjQyMjBaFw0yNDA0MDgx | ||||
| NjQyMjBaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYD | ||||
| VQQHDA1TYW4gRnJhbmNpc2NvMRMwEQYDVQQKDApDbG91ZEZsYXJlMRQwEgYDVQQL | ||||
| DAtERVZfVEVTVElORzEWMBQGA1UEAwwNQ0ZTU0xfVEVTVF9DQTCBnzANBgkqhkiG | ||||
| 9w0BAQEFAAOBjQAwgYkCgYEAm6f+jkP2t5q/vM0YAUZZkhq/EAYD+L1CMS59jJOL | ||||
| omfDnKUWOGKi/k7URBg1HNL3vm7/ESDazZWFy9l/nibWxNkSUPkQIrvrGsNivkRU | ||||
| zXkwgNX8IN8LOYAQ3BWxAqitXTpLjf4FeCTB6G59v9eYlAX3kicXRdY+cqhEvLFb | ||||
| u3MCAwEAAaNQME4wHQYDVR0OBBYEFLhe765nULfW8wflar5Vs2c6DZI+MB8GA1Ud | ||||
| IwQYMBaAFLhe765nULfW8wflar5Vs2c6DZI+MAwGA1UdEwQFMAMBAf8wDQYJKoZI | ||||
| hvcNAQEFBQADgYEABYqqOUq3ZrtMYaTAoeA7Cr/OBMjBV+/TiOe8fRNoPZ7+aKSg | ||||
| E1baohCGqougm+/XOtBXeLv5tVQihz/2iKdwHmX4HjkxzevAXyazjxeW4IDA21Jl | ||||
| fKd7xUJHM0Du/opoDkXWr/vRVztOB33ndlAK7ruSLfTR3E9HoUe3aRH7ceQ= | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,27 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEmzCCA4OgAwIBAgIMAMSvNBgypwaaSQ5iMA0GCSqGSIb3DQEBBQUAMIGMMQsw | ||||
| CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy | ||||
| YW5jaXNjbzETMBEGA1UEChMKQ0ZTU0wgVEVTVDEbMBkGA1UEAxMSQ0ZTU0wgVEVT | ||||
| VCBSb290IENBMR4wHAYJKoZIhvcNAQkBFg90ZXN0QHRlc3QubG9jYWwwHhcNMTIx | ||||
| MjEyMDIxMDMxWhcNMjIxMDIxMDIxMDMxWjCBjDELMAkGA1UEBhMCVVMxEzARBgNV | ||||
| BAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAoT | ||||
| CkNGU1NMIFRFU1QxGzAZBgNVBAMTEkNGU1NMIFRFU1QgUm9vdCBDQTEeMBwGCSqG | ||||
| SIb3DQEJARYPdGVzdEB0ZXN0LmxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A | ||||
| MIIBCgKCAQEAsRp1xSfIDoD/40Bo4Hls3sFn4dav5NgxbZGpVyGF7dJI9u0eEnL4 | ||||
| BUGssPaUFLWC83CZxujUEiEfE0oKX+uOhhGv3+j5xSTNM764m2eSiN53cdZtK05d | ||||
| hwq9uS8LtjKOQeN1mQ5qmiqxBMdjkKgMsVw5lMCgoYKo57kaKFyXzdpNVDzqw+pt | ||||
| HWmuNtDQjK3qT5Ma06mYPmIGYhIZYLY7oJGg9ZEaNR0GIw4zIT5JRsNiaSb5wTLw | ||||
| aa0n/4vLJyVjLJcYmJBvZWj8g+taK+C4INu/jGux+bmsC9hq14tbOaTNAn/NE0qN | ||||
| 8oHwcRBEqfOdEYdZkxI5NWPiKNW/Q+AeXQIDAQABo4H6MIH3MB0GA1UdDgQWBBS3 | ||||
| 0veEuqg51fusEM4p/YuWpBPsvTCBxAYDVR0jBIG8MIG5gBS30veEuqg51fusEM4p | ||||
| /YuWpBPsvaGBkqSBjzCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju | ||||
| aWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAoTCkNGU1NMIFRFU1Qx | ||||
| GzAZBgNVBAMTEkNGU1NMIFRFU1QgUm9vdCBDQTEeMBwGCSqGSIb3DQEJARYPdGVz | ||||
| dEB0ZXN0LmxvY2FsggwAxK80GDKnBppJDmIwDwYDVR0TBAgwBgEB/wIBADANBgkq | ||||
| hkiG9w0BAQUFAAOCAQEAJ7r1EZYDwed6rS0+YKHdkRGRQ5Rz6A9DIVBPXrSMAGj3 | ||||
| F5EF2m/GJbhpVbnNJTVlgP9DDyabOZNxzdrCr4cHMkYYnocDdgAodnkw6GZ/GJTc | ||||
| depbVTR4TpihFNzeDEGJePrEwM1DouGswpu97jyuCYZ3z1a60+a+3C1GwWaJ7Aet | ||||
| Uqm+yLTUrMISsfnDPqJdM1NeqW3jiZ4IgcqJkieCCSpag9Xuzrp9q6rjmePvlQkv | ||||
| qz020JGg6VijJ+c6Tf5y0XqbAhkBTqYtVamu9gEth9utn12EhdNjTZMPKMjjgFUd | ||||
| H0N6yOEuQMl4ky7RxZBM0iPyeob6i4z2LEQilgv9MQ== | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,5 +0,0 @@ | |||
| -----BEGIN EC PRIVATE KEY----- | ||||
| MHcCAQEEILOI+Ox7VUA+HaiOuAbBtf1IOXffEsOoI/443rTOPzD5oAoGCCqGSM49 | ||||
| AwEHoUQDQgAEoY1dLpXLl1bN5p8GFqOKrYu8C7QF0OLCMlfoiJInE6XI+PKlxXx+ | ||||
| KlwasHd9zxV1HA4YtHifkrAL9u0CvrbdOg== | ||||
| -----END EC PRIVATE KEY----- | ||||
|  | @ -1,15 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIICYjCCAgigAwIBAgIIB/ijVOdMMDMwCgYIKoZIzj0EAwIwgYIxCzAJBgNVBAYT | ||||
| AlVTMRUwEwYDVQQKEwxDRlNTTCBURVNUIDIxGzAZBgNVBAsTEkNGU1NMIFRlc3Qg | ||||
| Um9vdCBDQTETMBEGA1UEBxMKQ2FsaWZvcm5pYTETMBEGA1UECBMKQ2FsaWZvcm5p | ||||
| YTEVMBMGA1UEAxMMQ0ZTU0wgVEVTVCAyMB4XDTE1MDQwNjIzNTkwMFoXDTIwMDQw | ||||
| NDIzNTkwMFowgYIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxDRlNTTCBURVNUIDIx | ||||
| GzAZBgNVBAsTEkNGU1NMIFRlc3QgUm9vdCBDQTETMBEGA1UEBxMKQ2FsaWZvcm5p | ||||
| YTETMBEGA1UECBMKQ2FsaWZvcm5pYTEVMBMGA1UEAxMMQ0ZTU0wgVEVTVCAyMFkw | ||||
| EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoY1dLpXLl1bN5p8GFqOKrYu8C7QF0OLC | ||||
| MlfoiJInE6XI+PKlxXx+KlwasHd9zxV1HA4YtHifkrAL9u0CvrbdOqNmMGQwDgYD | ||||
| VR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQIwHQYDVR0OBBYEFGNz0lWe | ||||
| 3YnOP5PykkQ+ZVcHCZp2MB8GA1UdIwQYMBaAFGNz0lWe3YnOP5PykkQ+ZVcHCZp2 | ||||
| MAoGCCqGSM49BAMCA0gAMEUCIQCuxcZqp9vyJ8mH9eFS9cvMAbTildshZJYn7QB6 | ||||
| 8WDscAIga1np4tMDrsIynHrmYI1GnD/TgmUi4ElBNoyUnob+B+U= | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,28 +0,0 @@ | |||
| -----BEGIN PRIVATE KEY----- | ||||
| MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxGnXFJ8gOgP/j | ||||
| QGjgeWzewWfh1q/k2DFtkalXIYXt0kj27R4ScvgFQayw9pQUtYLzcJnG6NQSIR8T | ||||
| Sgpf646GEa/f6PnFJM0zvribZ5KI3ndx1m0rTl2HCr25Lwu2Mo5B43WZDmqaKrEE | ||||
| x2OQqAyxXDmUwKChgqjnuRooXJfN2k1UPOrD6m0daa420NCMrepPkxrTqZg+YgZi | ||||
| EhlgtjugkaD1kRo1HQYjDjMhPklGw2JpJvnBMvBprSf/i8snJWMslxiYkG9laPyD | ||||
| 61or4Lgg27+Ma7H5uawL2GrXi1s5pM0Cf80TSo3ygfBxEESp850Rh1mTEjk1Y+Io | ||||
| 1b9D4B5dAgMBAAECggEAKHhjcSomDSptTwDo9mLI/h40HudwSlsc8GzYxZBjinUD | ||||
| N2n39T9QbeMUE1xFenX/9qFEgq+xxnLLJx1EQacSapCgIAqdCO/f9HMgvGJumdg8 | ||||
| c0cMq1i9Bp7tu+OESZ5D48qWlOM2eQRIb08g8W11eRIaFmPuUPoKnuktkQuXpPJc | ||||
| YbS/+JuA8SDwe6sV0cMCQuS+iHFfeGwWCKrDUkhLwcL3waW3od2XFyOeFFWFhl0h | ||||
| HmM/mWKRuRdqR7hrmArTwFZVkB+o/1ywVYXIv+JQm0eNZ5PKLNJGL2f5oxbMR/JI | ||||
| AoK0bAlJmYaFp96h1KpbPwLEL/0hHSWA7sAyJIgQAQKBgQDaEAZor/w4ZUTekT1+ | ||||
| cbId0yA+ikDXQOfXaNCSh9Pex+Psjd5zVVOqyVFJ29daRju3d7rmpN4Cm5V4h0l1 | ||||
| /2ad207rjCAnpCHtaddJWNyJzF2IL2IaoCZQRp0k7zOjBGQpoWDTwBaEin5CCv3P | ||||
| kkdQkKz6FDP1xskHSLZr21/QCQKBgQDP6jXutEgGjf3yKpMFk/69EamJdon8clbt | ||||
| hl7cOyWtobnZhdOWVZPe00Oo3Jag2aWgFFsm3EtwnUCnR4d4+fXRKS2LkhfIUZcz | ||||
| cKy17Ileggdd8UGhL4RDrF/En9tJL86WcVkcoOrqLcGB2FLWrVhVpHFK74eLMCH/ | ||||
| uc/+ioPItQKBgHYoDsD08s7AGMQcoNx90MyWVLduhFnegoFW+wUa8jOZzieka6/E | ||||
| wVQeR5yksZjpy3vLNYu6M83n7eLkM2rrm/fXGHlLcTTpm7SgEBZfPwivotKjEh5p | ||||
| PrlqucWEk082lutz1RqHz+u7e1Rfzk2F7nx6GDBdeBYpw03eGXJx6QW5AoGBAIJq | ||||
| 4puyAEAET1fZNtHX7IGCk7sDXTi6LCbgE57HhzHr8V0t4fQ6CABMuvMwM1gATjEk | ||||
| s6yjoLqqGUUUzDipanViBAy5fiuManC868lN7zkWDTLzQ3ytBqVAee4na/DziP27 | ||||
| ae9YTSLJwskE/alloLRP6zTbHUXE0n7LelmrX1DFAoGBAMFLl+Lu+WFgCHxBjn43 | ||||
| rHpJbQZQmsFhAMhkN4hsj6dJfAGn2gRLRiVRAika+8QF65xMZiVQWUVSUZADWERi | ||||
| 0SXGjzN1wYxO3Qzy3LYwws6fxFAq5lo79eb38yFT2lHdqK3x/QgiDSRVl+R6cExV | ||||
| xQB518/lp2eIeMpglWByDwJX | ||||
| -----END PRIVATE KEY----- | ||||
|  | @ -1,13 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIB7jCCAVmgAwIBAgIBADALBgkqhkiG9w0BAQUwJjEQMA4GA1UEChMHQWNtZSBD | ||||
| bzESMBAGA1UEAxMJMTI3LjAuMC4xMB4XDTEyMDkwNzIyMDAwNFoXDTEzMDkwNzIy | ||||
| MDUwNFowJjEQMA4GA1UEChMHQWNtZSBDbzESMBAGA1UEAxMJMTI3LjAuMC4xMIGd | ||||
| MAsGCSqGSIb3DQEBAQOBjQAwgYkCgYEAm6f+jkP2t5q/vM0YAUZZkhq/EAYD+L1C | ||||
| MS59jJOLomfDnKUWOGKi/k7URBg1HNL3vm7/ESDazZWFy9l/nibWxNkSUPkQIrvr | ||||
| GsNivkRUzXkwgNX8IN8LOYAQ3BWxAqitXTpLjf4FeCTB6G59v9eYlAX3kicXRdY+ | ||||
| cqhEvLFbu3MCAwEAAaMyMDAwDgYDVR0PAQH/BAQDAgCgMA0GA1UdDgQGBAQBAgME | ||||
| MA8GA1UdIwQIMAaABAECAwQwCwYJKoZIhvcNAQEFA4GBABndWRIcfi+QB9Sakr+m | ||||
| dYnXTgYCnFio53L2Z+6EHTGG+rEhWtUEGhL4p4pzXX4siAnjWvwcgXTo92cafcfi | ||||
| uB7wRfK+NL9CTJdpN6cdL+fiNHzH8hsl3bj1nL0CSmdn2hkUWVLbLhSgWlib/I8O | ||||
| aq+K7aVrgHkPnWeRiG6tl+ZA | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,12 +0,0 @@ | |||
| -----BEGIN CERTIFICATE REQUEST----- | ||||
| MIIB0jCCAVcCAQAwgYwxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpDbG91ZEZsYXJl | ||||
| MRwwGgYDVQQLExNTeXN0ZW1zIEVuZ2luZWVyaW5nMRYwFAYDVQQHEw1TYW4gRnJh | ||||
| bmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMR0wGwYDVQQDExRjbG91ZGZsYXJl | ||||
| LWludGVyLmNvbTB2MBAGByqGSM49AgEGBSuBBAAiA2IABCFZIzSRsH9xdF1iR+8k | ||||
| ElbcbqAYnYuSTbEOxYcREHGRJd2/v9YhetEwWNmIuisCbgOpyBO9zyFxsnzYU4cO | ||||
| A/AomW2nJEP7n4M9g8r8clhQz8y6+013jP9MEqf4pqMVnqBLMEkGCSqGSIb3DQEJ | ||||
| DjE8MDowOAYDVR0RBDEwL4IUY2xvdWRmbGFyZS1pbnRlci5jb22CF3d3d2Nsb3Vk | ||||
| ZmxhcmUtaW50ZXIuY29tMAoGCCqGSM49BAMDA2kAMGYCMQD6kSGGc3/DeFAWrPUX | ||||
| qSlnTTm57DpzUoHQE306DfbFB6DFfoORNM5Z98chnZ+Ell4CMQCzYhOvIh3+GPGF | ||||
| MuYYIAfQV2JG+n7pjfpJ+X1Ee2bOtA4ZO39P9/FTEtJUXt+Ivqw= | ||||
| -----END CERTIFICATE REQUEST----- | ||||
|  | @ -1,53 +0,0 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEizCCA/agAwIBAgIIeM7v534l+W0wCwYJKoZIhvcNAQELMH0xCzAJBgNVBAYT | ||||
| AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2Nv | ||||
| MRMwEQYDVQQKDApDbG91ZEZsYXJlMRQwEgYDVQQLDAtERVZfVEVTVElORzEWMBQG | ||||
| A1UEAwwNQ0ZTU0xfVEVTVF9DQTAeFw0xNDA0MTEyMTIyMzdaFw0xOTA0MTEyMTI3 | ||||
| MzdaMIGMMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQ2xvdWRGbGFyZTEcMBoGA1UE | ||||
| CxMTU3lzdGVtcyBFbmdpbmVlcmluZzEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzET | ||||
| MBEGA1UECBMKQ2FsaWZvcm5pYTEdMBsGA1UEAxMUY2xvdWRmbGFyZS1pbnRlci5j | ||||
| b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDlCnV+vj0sVPy8SqHL | ||||
| AlI+xwnPhWgzj2VevD6Nz1Zu1BeQ5m5y4CWCf+GmRGTP7+a/C510Fw6rpmInB0Ng | ||||
| xxwQ2rC08fJtCnijlGH/VjEPIHY5lRaAomcM8Rgx6JOuv9BpZJKpr9pyUMV53JeW | ||||
| RbWuLH5nEMdyk9NpetS2gWxt4/D20QlhK/tHkROrcLmEUddwIGdwE8JzI88c77Fu | ||||
| u6pgMtHKvl4GGH0yvb4T7PvCdH8V2tCH7bt8roXd9MSyFVy7uORkfouip7EsVREU | ||||
| mlcY5EvpR141KXbZqiOQiusJ+u76mEUQNk8wCR1/CW/ii9v1BKOVjXwCfEtIXjg0 | ||||
| APJx1VNSSH6XoDpUETL+eQ4J0FL9XNbsDuYar7+zD0N1/5vSo3HLNRQR9f0lbsys | ||||
| sWBEN+CxK19xyPumr21Z0bU0f1B5H52VSF0q3I1Ju9wRo994a7YipdGcmZ2lChmT | ||||
| 7r3mzlBTYl3poU26q34v8wG9U7Jv4fsZJ+RGebDI+TR3QG6Yod06l9oEYZxWXBY7 | ||||
| STOs8wuTu3huSnan/IpWnV017Vsc61D5G+QrqcxZdXckt3anZKCF75JpUnJ7vuow | ||||
| TmmHlb8KIMa9mOvcuGX4P6mz8gTi2arl/aL27kj9Q0Jgv/y1ebe2Bx2P9TF6+VND | ||||
| DL3J/vSVlFeqLt2reAIBKnytLwIDAQABo4GDMIGAMA4GA1UdDwEB/wQEAwIApDAS | ||||
| BgNVHRMBAf8ECDAGAQH/AgEBMB0GA1UdDgQWBBTXXUgpaSwO9HOrQBxGqOOSFHsH | ||||
| EDAfBgNVHSMEGDAWgBS4Xu+uZ1C31vMH5Wq+VbNnOg2SPjAaBgNVHREEEzARgg9j | ||||
| ZnNzbC1pbnRlci5jb20wCwYJKoZIhvcNAQELA4GBABqJOYgV+qEgkG/BIgsGaJ/Z | ||||
| Neey0x0MwxPvA87e24GiYxYXX8ypR2DfLtuSjYfT0PVOWI5+3o9b3wnHhOu0aVe8 | ||||
| YK/7XUWOakt8Jv/fE0fGs4Ps5IeMynWBgwrf/6IQWEfnf/1siCrTf0yUEn0PMGu6 | ||||
| q2sLytoPYeibTYLuP1ED | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEbjCCAligAwIBAgIIeHSbZwALpoAwCwYJKoZIhvcNAQELMIGMMQswCQYDVQQG | ||||
| EwJVUzETMBEGA1UEChMKQ2xvdWRGbGFyZTEcMBoGA1UECxMTU3lzdGVtcyBFbmdp | ||||
| bmVlcmluZzEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv | ||||
| cm5pYTEdMBsGA1UEAxMUY2xvdWRmbGFyZS1pbnRlci5jb20wHhcNMTQwNDExMjEy | ||||
| MjM4WhcNMTkwNDExMjEyNzM4WjCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkNs | ||||
| b3VkRmxhcmUxHDAaBgNVBAsTE1N5c3RlbXMgRW5naW5lZXJpbmcxFjAUBgNVBAcT | ||||
| DVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3JuaWExHTAbBgNVBAMTFGNs | ||||
| b3VkZmxhcmUtaW50ZXIuY29tMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEIVkjNJGw | ||||
| f3F0XWJH7yQSVtxuoBidi5JNsQ7FhxEQcZEl3b+/1iF60TBY2Yi6KwJuA6nIE73P | ||||
| IXGyfNhThw4D8CiZbackQ/ufgz2DyvxyWFDPzLr7TXeM/0wSp/imoxWeo4GDMIGA | ||||
| MA4GA1UdDwEB/wQEAwIApDASBgNVHRMBAf8ECDAGAQH/AgEBMB0GA1UdDgQWBBRB | ||||
| +YoiUjIm34/wBwHdJGE4Wufs/DAfBgNVHSMEGDAWgBTXXUgpaSwO9HOrQBxGqOOS | ||||
| FHsHEDAaBgNVHREEEzARgg9jZnNzbC1pbnRlci5jb20wCwYJKoZIhvcNAQELA4IC | ||||
| AQCaj2i8wr9r3FS8Tw5QHD+tPmryrHsiLlERVanTif9kt/fRc1/hm/pv2lTLK8kK | ||||
| U5Eti1jCB2T/DQGj4Z/amRndasXpUb5wTtMb9V6jN4pRfgw+C5ska9o5zFrIGJF0 | ||||
| GbSe1VVUedJ1LH3US3a79eVGmyAwcfTRMNhn+e+uYky2VYCQIEGGQ8rZAM3TveoT | ||||
| N8J7Lqwtuo3DWz0IYx60DUvabpqJ+9Dl6rhTvTfyYvQK4vl2xApGf4Uo87JbNQfq | ||||
| q40UXfBtMaAvIPEKCyTdOVVDrfgW0DQTl7wS+Z3p6kNm0NMI53TFTbgIuU9QiPPB | ||||
| I5NdqISEPFW/HS5q0+zR1KdG4EmEjmpCX78s+uviHpHQloWQT9ov4KbXbf8y5Xso | ||||
| lv+2gcd5TVjYxPRbo3SMtGRQho5uq2BNy6Q0K0//3OE+X+v+ZDi8n4MU3uA7dGGA | ||||
| 7uAUZOYPzNKS7ryW3h4PZIfiI5Fv9tBNnu9O3I2UH6fHNFQQLzJPCXertPmrORjP | ||||
| EyCNCOhfsNwLd5Qq53cDbG1mkZro/xKDvAOx2LQcGFtmx4v1NXI204V50aSzy8vY | ||||
| vQnM0gEY/YxoCq3wSjc9yeUftyv2LIgJvuXjkeHkV7gQQ+jx/HY6J7fnJGSzKMKp | ||||
| /GPaPCNKvCY/72ik2gbmdvLbaRGeVJ07JO46YWEUrGb/1A== | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,39 +0,0 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIG5AIBAAKCAYEA9xYBDoV2tPx8lqZ/bH/wLvoPsg1/CXeknvRcNuxw1gu6c3IJ | ||||
| BrKZlkFtiU6Y8FADiUBOVab/Y0cQ/9EdeB2srPH4M5KNiPdWZPgxARWnRq5Ez8pv | ||||
| VASP2E2Zya1UnH5iJBau8e6SwBl8UaXnGwcA+CUv+FXcZtdoFh0Lqt3AdItQOkHV | ||||
| jSE6Cfiv5lsSW0ikMcoHFOHNps4/9A4A/griT5lRDqQIycN7WD2k4+aKVreCWxbS | ||||
| teU35yIDJV6PGUtw8k41arJ+kwuwYM3+YklR0Dsj0RxXn07oLqnf6IeNUogGhNVO | ||||
| 7RvLdpfvrhlevHVXmmYj40fkGjU15KkZOKigMw/gDInI6Sc2jp8oPX9tjkaQYkF2 | ||||
| t7AWOq01lh5TleMIoBFUqVcy+X/qejla0JaKCEyt/fiPUo7/SgucyFl8GrKfSdEL | ||||
| UOKx5Vr2ZZ48QSfIlXle+tGtFD0AYUsO0ud0wclW5C+g8E27raTuR4RaZOj8/pmB | ||||
| 7XNDszwxQ/97dBRpAgMBAAECggGAcWoWPhYg8N5cScJPBvyKwOVjQvVS9IOIerXr | ||||
| hgJtoLJteQRFBGACg6ewobAEH3p6xQtRaZtn6qf6M5JHFpV4Z0ICDZodgVsWuu35 | ||||
| gGfyCk1/pGllRIl7hWvJRXtcNSEF507KKp65mZeZKtkeBZfnZ/+Zz0GKE2KYkl3u | ||||
| txVme5he0P7bCRbRTzZpdzEicegcBgaXzYwAG6rcTCgJaJKSYrsbK787kXE7MrvI | ||||
| 7hsqMLe3DByjx35ZdKx2CTcoNBId9RODWnPpANVrlNv7kbaZRqd5OI8b7JfblFsq | ||||
| F6vCzvDq+Quc8ID1zxRZv761pexejtDzghgQy7X2EVvMlHh4//wErgq6WfPjwyvU | ||||
| /zZczO0L/c1XwwkfBU6Yf6UuYCKngwifgvb7aGU4/aGNcD5SHRITwCHK/E9JrkR8 | ||||
| pkqerMxsf9uP5FxGdwOm1k77Lkap7Kx2Utt5l7stOY0fFUFz1YQdAHJUzhmbP3Zy | ||||
| C+TeX2/9+CudXM1parW7HQRlZeMJAoHBAP545khACfRvUWpxdQohp1Ol0FuDosYg | ||||
| NC75q12T8ovllx8Qly3aafJdd0NTvFmrBkBPTL3pCUWCyGZh6/E00fUL4dtD3zwz | ||||
| QUbm6hWGTgKHdeLLdae2wxcZ/NqmTvpY9o/p4jS9+StRKQtdsftLKCmRv7wfYkju | ||||
| UT7O+gRyGat/Rqpr9cTSKBXHUT+WJlITDrwk5QdydF7eKzLT8DROgcRRE1+FMJkj | ||||
| pO5ChuAxZr0Q0fISRm9Lu7aJ3H8QFfboGwKBwQD4kcCkZvRdz8BQsOsyHQ3SlGhx | ||||
| 5nwA7SPadXtfnpoW0ZlEdHwkPJzU1Z50z1ulEQymBTARPUQ4s28MQt8NXuRzHBrW | ||||
| PMUGgsspzT6FjiskhUc8k9PAZbEJE/axLKK2qSKktGuZj+VFih/9XPPTX4xSzlOg | ||||
| ntJEr2tc3TIv+JEOuJX6VT2URFLXgdOHXxAejS0DTGIg1aB4VGQpWzfbcJ6Cyf11 | ||||
| YyoyYWA25wdw7sB9kDHsd0Ej0mld5+l8JOd8hcsCgcA9jCpOcUa3GzF66EQhljAt | ||||
| WB6D89urxeA5OGPNN1pjob0iY1XdXkVfvGF7JEaa/XV+mm96Q2HdsRsdQDPb3CWn | ||||
| +h6/dLQKkG8KYhFd8WTu0aqelw026kpXTQ7OJ4lUna3M8wmmLgiVBIVD3X6NxAjL | ||||
| vRe9vW19LD70TQVFi/9PbnI+B+yilR3i3pl1IrDUCw32TYojefhRdbTHD2G6lP5n | ||||
| 6CAia0ls0KU0h1yt3uT1d5r/zJHCm3OkW8W76b0WQd8CgcEAh0czk4WgiomtPXz7 | ||||
| k3tycV9pdEuewxZMQ/FaIpD7hV2uzy2h/kqqg756jVHoq24a9yOtpEQ2o7Erx32B | ||||
| TRKOvALYrC3IgKGgFfDojODxo9+RBGvjezsc3TbrNEN5jnWAMCkswhcpDO5+OHJl | ||||
| FG1UviAiLTEieFUL1i9fx/G8aEmW/fV0HQQOHdE/INZgvG/Sxo/Ee+AnhDVRiZxm | ||||
| StwAuGdbtI4ygday+U5Eo3acdfmK4gmI/wjdZUj4riKbhQ5/AoHBAI0yzo+PIFi6 | ||||
| HjNYVoC7rZ39oQ0YCrEWrui+DRdEjnjec31Jw02AtKnv5swpDDHjgnIcd9ciQY48 | ||||
| rk7eC6IkVrL9hOxUzC9YQZX/2MBiOLjUkDkSLt+d5PL0OXiSg1O4fGJdGiVPF0Fc | ||||
| sF9p1UNEfGvXjzUB3ay0kMyCLitNe1BCvJlYXdSV9YmAMNvguE7TNU3OPiVv65PK | ||||
| 6OndznX41Pw7OlnLaq1sFQcYBmf5E7QSKYP+4HeV89Sc824VlCNxwA== | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,27 +0,0 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpAIBAAKCAQEA0C6SSsXfuse2IV8+6hSYqSPQdoQwZ5BYQnSxuKylArCrMXx8 | ||||
| JGHrJP6Pj7GxRmH40v9u9VwZvcrQOm8yUTuzAEf2Kd3uvXmVKJb2vc0BopsflpSE | ||||
| OLEuddTSHlHgdVHylqpbzB7ZrmyXXuWTtTFEaGmPVUmWcOBOy6pc/7hZv7HkTjaH | ||||
| LQu/uohic/NjO0oJaaUwds6muwTCNSmMvtvoP51pyQJeuZjYIoWnnu+/DbtZYmH4 | ||||
| 4VbHD0U+uSNKLZa4beWqDq5ZDwQvEVkuLqL331awzgIf0a4bhP+uc1kdWXZ8V+8a | ||||
| Bbqtq6g6o9HdrzgNRR+9S3EvEelCrxuWw9FQ3QIDAQABAoIBAQDFQ5vzplQ9lIgM | ||||
| T0g6XpHZk8oww0lqmOhI8HKG33Dsf6N4HNE1WGOMhnpaWrH0U1mH9eqaLE9n/Aob | ||||
| lMpFFyCin42uVlGm0NJ5x7K+Xsex4POpp8kyPxIbLTJ88HCUOrZ39a1OWd1C3jsA | ||||
| /OFdy/VaSsw6sKQRCTsg2amN1o2UibDJYVW47ycv9cwjk/GEzzOSq32a9o6g6Gwd | ||||
| g3ycroIaxhDlGjS5l0IZ/ozhN+AS5dYcPgJRsYD/jTBqTSzIW2ePrcheznoRcgLK | ||||
| bb+UVQC+PZX8kycCcerPbcGc2YcBpZgmIkCj85+ITFt/BhH7+TSH9G7F8LTKAaJg | ||||
| qlYKF14BAoGBAPz8Jx0vAcv/4zIfCckuNy3kVu4PHBTMTBO5+tUg6CZgktRrroiV | ||||
| +Zq1lCuj2/Px3Lx9oaUie52iV5xgmEEax77xa1rVezY1PhGSFmngHqfumUJf8EEB | ||||
| snlAUpwBHvWU9B9OxKOHRrD9Y9ptXcBK30ZHLJT4t5JvbHVrKZF2J82hAoGBANKp | ||||
| ue+dOafhgc1F/ThD2VLuIi6Garf1pqNG3OMugMfieHAmr1RRYWwFErLoijt9dpe9 | ||||
| gXVecUm1KO4/0ZkR+7YDzUSifXvcizaw+XqjrtFerrz+Yao4gZssFnw/sLc2pbWm | ||||
| 1DHWxRnmh6MyHEEiA0KxElgutswhP8GIKN7INOG9AoGAR1sD2Upp8lVBiuCQTQtZ | ||||
| CvutvUXLwN4C00mQw06dzD1PDNU2jFXo6kcu/MQiBQOCJDQ3RLGeNk8U8QmZyDs6 | ||||
| fdPwWNWABEEuOZx/7+sEGo/E8KDIzj0hTuvioRf72H7kAHSiKBG+0asW4AQa/mLf | ||||
| 6R2oKHiipo4BBHluZxXxkiECgYEAuYXnzfH0+LhMi+77VjXKipJVYAvYqDGak2iw | ||||
| 1xH5MA9uabZn6iXRWkQNd6n7MvEHJBMsk6ScuIDmjwt9FwUTW/R1LeC8CfzsTToG | ||||
| O88zAggUczTD5hjlazakhr/AbVmfDh7h+RJferPe+AYFhAbkQDOZKDfbnGIbt+Cl | ||||
| va0rhTECgYAFb38TvJmEIzB1/nZ7sKbFmr2pYgzBqspQcprws6gZlWydd4OoTZiv | ||||
| QzSBDi3tGt07yJuntVlbuI6qejhFMmonGZuntNTvTZMmx2+W/F8EGByfWpLtB9W5 | ||||
| S+tx5/0d4MhOYHlt0EcdC7j881swY9LCrc/EOqg1O4BlTJ5+UJer+Q== | ||||
| -----END RSA PRIVATE KEY----- | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue