TLS client / server example improvements and cleanups. Adds support for using wolfSSL client/server examples with mutual auth certificate validation. Added new dummy key as to not conflict with wolfSSL test keys.

pull/56/head
David Garske 2019-01-03 15:59:13 -08:00
parent 51a5740958
commit bf67b3fd68
13 changed files with 517 additions and 214 deletions

BIN
certs/dummy-ecc.der 100755

Binary file not shown.

View File

@ -0,0 +1,8 @@
-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIAUP6rYsfNM8Zj1rRNWK1Bz2KjVJsjZ97NSzmitPccjToAoGCCqGSM49
AwEHoUQDQgAEQ5j3M3e0VQLx83mXZ+21OnrhfMaoI4s6aELdaE9Iby2afEcgHxNp
cQVCW58jfeCmXdQRRLGRZlDALIxxNQ4otA==
-----END EC PRIVATE KEY-----

BIN
certs/dummy-rsa.der 100755

Binary file not shown.

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAz92yF0nrv/vFGRNjhkm8/o7tIW5TGJxB1ewSMfD5kAgVaC8A
nKw2KPbYUKDUfN/nD+E20d3AK/A9yfBb5HZIkfCSKYJ1fwtBOXdSzR8wo8N5kr0K
fxayBv1JxU00JttJBttJY7blpOzAbSTxgg+DG7ENo4tqOTm2s6Phd2mMx4Phvp75
t9vf+Jh8nchyeL8TYiehv0srBBjNLBB+pTMI1Enx7JlvLgu007PCIALpOqGzgZsM
ArDenu8KR276200THh/Se8ZI6CfevI1MYFpxtcN//HwowZnyejvNanb+qJvdAx7r
tJ1wXHofthLszaxqzSwlU+801cWXFNSyhgNfiQIDAQABAoIBAF2evxBIJdsA/UOO
/PtFiM6p9tlgxCJIdkpwGb3Oh8g8K9ARo1ftJDONAd5GoY1glsQLLlKVanEfseSa
0fhy4bqBPINfk6XVntnQCUYDbzfC2aWiaPDWevY07B3l6MA7cYeaClLT1FhUnVJL
Gk72x5kYRElNiFkfyk7cV7cdnd9Zkdku4FSqTo+SgoVw+ZOQOjDNs3OBk+f5H/ap
qdSuiQ44EWH399ybmUv+wHF4UxgPI6kRoKpX7jmq6ip6jRJpLIJNoOUcs2mdoTCj
QPqGQNOL+a+YfRcHoyniV+9Hz4EiTUdjpC8aj8MmH/bFgf8UqYdWGIoY/TfDS47g
aywHSwUCgYEA7VEGkbiUXhebIiXvI3ZhJvqs7sGZjlU4hdIVBm67Rbv+X/fSpEEV
JGeOomu6qiiEImPuqKDQ6keMrE6YGIryGXZQnf7RWcPBIzsxc8dxPpTIbX+6MPJM
Gn50Unigq2kMRFnQsP4v6MIY5ySLc99PQJIMjGySJ7w/W3lEwTLMorcCgYEA4Dsc
xMRpDWtXGbdZGJKyCTlml9EY3mtfxZsRRx7q46w2KzCZgQA9OUEDkHfeSuFI35iG
Azvqr8j210/mrnDyPbvyY7ktPAizEJ6XbI0oNK7a2aGOOlF6oRQ/++o7tJOqFHq0
18p7Ya/1hxpkqT48et0RfwEtppHtPSicZ8Jcz78CgYEAzgxZzdAbUg7g7SdOmNXB
yJxB5hNGBiTMLLSY+LrP8t4lIKIFzAOOHcukNjWfHvqKr2lg4ByxB5kT9M9Qk46g
Yacum9+RWYTzfml4qHP0SUfZNel+ed0GYsKEsM53ghx1QCtTXTl103wjLx21zueG
4iNsrcfepo113TBPmAdJUcUCgYBGGTS9LsnIsC3ilDb+P5341EEGZQ/pOJgQJpIY
McosssGcbu0OLwz0wSZkG5Uaw6MMg5ohmLGdkq3YUdpD3ntcYU09b758bhvMrkeY
X+iZz7ALKT5VbPNxN+tozaksop0hGds/OsWnnGKdgdrGLfaqUkIN+khTMnuACxoa
NeDd8QKBgHZGuVeRP2RdQjdwnUQ4CQlCPi6KeqRXS4GVZUc883dU433sBskmq91m
c1SGMSZ1W4Sr0qJqm27dRa6BSRKNAxwba1s3+ucFn71m3WzXFg3MZBnCzcOp7XD6
ddhB98aE6EDw5ZOI4k5P5F/fU6unBtxkflHofhwzn79eWLx9o4CE
-----END RSA PRIVATE KEY-----

View File

@ -6,4 +6,9 @@ EXTRA_DIST += \
certs/certreq.sh \
certs/ca-rsa.cnf \
certs/ca-ecc.cnf \
certs/wolfssl-website-ca.pem
certs/wolf-ca-ecc-cert.pem \
certs/wolf-ca-rsa-cert.pem \
certs/dummy-ecc.pem \
certs/dummy-rsa.pem \
certs/dummy-ecc.der \
certs/dummy-rsa.der

View File

@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE-----
MIICiTCCAjCgAwIBAgIJANUT7c08LkF0MAoGCCqGSM49BAMCMIGXMQswCQYDVQQG
EwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEQMA4G
A1UECgwHd29sZlNTTDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxGDAWBgNVBAMMD3d3
dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTAe
Fw0xODA5MDcyMDEzNDNaFw0zODA5MDIyMDEzNDNaMIGXMQswCQYDVQQGEwJVUzET
MBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEQMA4GA1UECgwH
d29sZlNTTDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxGDAWBgNVBAMMD3d3dy53b2xm
c3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABGbPpebypg/W274c+uFJGMigpJy/LW0MKy1VoU88
FSqefHY5C+es8nogRaXYU0itI+85KuUfPhJVM6Hc2evFsBajYzBhMB0GA1UdDgQW
BBSJGbGXpAUTPLBXRrJiJ2RNoG53WjAfBgNVHSMEGDAWgBSJGbGXpAUTPLBXRrJi
J2RNoG53WjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAKBggqhkjO
PQQDAgNHADBEAiArQgfTsykjwoBFMa/elWAqW5r38xW48flizWImoA7jfwIgbDO/
mF4z7Vg2cbdvjbLZenQBaXmFNXULqAlpJnlRyl4=
-----END CERTIFICATE-----

View File

@ -0,0 +1,86 @@
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9727763710660753659 (0x86fff58e10deb8fb)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Validity
Not Before: Apr 13 15:23:09 2018 GMT
Not After : Jan 7 15:23:09 2021 GMT
Subject: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:bf:0c:ca:2d:14:b2:1e:84:42:5b:cd:38:1f:4a:
f2:4d:75:10:f1:b6:35:9f:df:ca:7d:03:98:d3:ac:
de:03:66:ee:2a:f1:d8:b0:7d:6e:07:54:0b:10:98:
21:4d:80:cb:12:20:e7:cc:4f:de:45:7d:c9:72:77:
32:ea:ca:90:bb:69:52:10:03:2f:a8:f3:95:c5:f1:
8b:62:56:1b:ef:67:6f:a4:10:41:95:ad:0a:9b:e3:
a5:c0:b0:d2:70:76:50:30:5b:a8:e8:08:2c:7c:ed:
a7:a2:7a:8d:38:29:1c:ac:c7:ed:f2:7c:95:b0:95:
82:7d:49:5c:38:cd:77:25:ef:bd:80:75:53:94:3c:
3d:ca:63:5b:9f:15:b5:d3:1d:13:2f:19:d1:3c:db:
76:3a:cc:b8:7d:c9:e5:c2:d7:da:40:6f:d8:21:dc:
73:1b:42:2d:53:9c:fe:1a:fc:7d:ab:7a:36:3f:98:
de:84:7c:05:67:ce:6a:14:38:87:a9:f1:8c:b5:68:
cb:68:7f:71:20:2b:f5:a0:63:f5:56:2f:a3:26:d2:
b7:6f:b1:5a:17:d7:38:99:08:fe:93:58:6f:fe:c3:
13:49:08:16:0b:a7:4d:67:00:52:31:67:23:4e:98:
ed:51:45:1d:b9:04:d9:0b:ec:d8:28:b3:4b:bd:ed:
36:79
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
X509v3 Authority Key Identifier:
keyid:27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
serial:86:FF:F5:8E:10:DE:B8:FB
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
9e:28:88:72:00:ca:e6:e7:97:ca:c1:f1:1f:9e:12:b2:b8:c7:
51:ea:28:e1:36:b5:2d:e6:2f:08:23:cb:a9:4a:87:25:c6:5d:
89:45:ea:f5:00:98:ac:76:fb:1b:af:f0:ce:64:9e:da:08:bf:
b6:eb:b4:b5:0c:a0:e7:f6:47:59:1c:61:cf:2e:0e:58:a4:82:
ac:0f:3f:ec:c4:ae:80:f7:b0:8a:1e:85:41:e8:ff:fe:fe:4f:
1a:24:d5:49:fa:fb:fe:5e:e5:d3:91:0e:4f:4e:0c:21:51:71:
83:04:6b:62:7b:4f:59:76:48:81:1e:b4:f7:04:47:8a:91:57:
a3:11:a9:f2:20:b4:78:33:62:3d:b0:5e:0d:f9:86:38:82:da:
a1:98:8d:19:06:87:21:39:b7:02:f7:da:7d:58:ba:52:15:d8:
3b:c9:7b:58:34:a0:c7:e2:7c:a9:83:13:e1:b6:ec:01:bf:52:
33:0b:c4:fe:43:d3:c6:a4:8e:2f:87:7f:7a:44:ea:ca:53:6c:
85:ed:65:76:73:31:03:4e:ea:bd:35:54:13:f3:64:87:6b:df:
34:dd:34:a1:88:3b:db:4d:af:1b:64:90:92:71:30:8e:c8:cc:
e5:60:24:af:31:16:39:33:91:50:f9:ab:68:42:74:7a:35:d9:
dd:c8:c4:52
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIJAIb/9Y4Q3rj7MA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD
VQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8G
A1UECgwIU2F3dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3
dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTAe
Fw0xODA0MTMxNTIzMDlaFw0yMTAxMDcxNTIzMDlaMIGUMQswCQYDVQQGEwJVUzEQ
MA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8GA1UECgwIU2F3
dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3dy53b2xmc3Ns
LmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAL8Myi0Ush6EQlvNOB9K8k11EPG2NZ/fyn0D
mNOs3gNm7irx2LB9bgdUCxCYIU2AyxIg58xP3kV9yXJ3MurKkLtpUhADL6jzlcXx
i2JWG+9nb6QQQZWtCpvjpcCw0nB2UDBbqOgILHztp6J6jTgpHKzH7fJ8lbCVgn1J
XDjNdyXvvYB1U5Q8PcpjW58VtdMdEy8Z0TzbdjrMuH3J5cLX2kBv2CHccxtCLVOc
/hr8fat6Nj+Y3oR8BWfOahQ4h6nxjLVoy2h/cSAr9aBj9VYvoybSt2+xWhfXOJkI
/pNYb/7DE0kIFgunTWcAUjFnI06Y7VFFHbkE2Qvs2CizS73tNnkCAwEAAaOB/DCB
+TAdBgNVHQ4EFgQUJ45nEXTDJh0/7TNjs6TYHTDl6NUwgckGA1UdIwSBwTCBvoAU
J45nEXTDJh0/7TNjs6TYHTDl6NWhgZqkgZcwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290
aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tggkAhv/1jhDeuPswDAYD
VR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAniiIcgDK5ueXysHxH54SsrjH
Ueoo4Ta1LeYvCCPLqUqHJcZdiUXq9QCYrHb7G6/wzmSe2gi/tuu0tQyg5/ZHWRxh
zy4OWKSCrA8/7MSugPewih6FQej//v5PGiTVSfr7/l7l05EOT04MIVFxgwRrYntP
WXZIgR609wRHipFXoxGp8iC0eDNiPbBeDfmGOILaoZiNGQaHITm3AvfafVi6UhXY
O8l7WDSgx+J8qYMT4bbsAb9SMwvE/kPTxqSOL4d/ekTqylNshe1ldnMxA07qvTVU
E/Nkh2vfNN00oYg7202vG2SQknEwjsjM5WAkrzEWOTORUPmraEJ0ejXZ3cjEUg==
-----END CERTIFICATE-----

View File

@ -1,70 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
ReYNnyicsbkqWletNw+vHX/bvZ8=
-----END CERTIFICATE-----

View File

@ -2,7 +2,7 @@
These examples demonstrate features of a TPM 2.0 module.
The examples create RSA and ECC keys in NV for testing using handles defined in `./examples/tpm_io.h`.
The examples create RSA and ECC keys in NV for testing using handles defined in `./examples/tpm_test.h`.
The PKCS #7 and TLS examples require generating CSR's and signing them using a test script. See CSR and Certificate Signing below.
@ -38,7 +38,7 @@ External script for generating test certificates based on TPM generated CSR's. T
`./certs/certreq.sh`
The script creates the following X.509 files (also in .pem format):
`./certs/ca-ecc-cert.der`s
`./certs/ca-ecc-cert.der`
`./certs/ca-rsa-cert.der`
`./certs/client-rsa-cert.der`
`./certs/client-ecc-cert.der`
@ -62,35 +62,56 @@ The result is displayed to stdout on the console.
The TLS example uses TPM based ECDHE (ECC Ephemeral key) support. It can be disabled using `CFLAGS="-DWOLFTPM2_USE_SW_ECDHE"` or `#define WOLFTPM2_USE_SW_ECDHE`. We are also looking into using the 2-phase `TPM2_EC_Ephemeral` and `TPM2_ZGen_2Phase` methods for improved performance and scalability.
Note: The TPM2_CreatePrimary with TPM_RH_NULL for ephemeral key use has an issue with SLB9670 7.83 firmware. Please update to latest firmware or disable ECDHE support using WOLFTPM2_USE_SW_ECDHE to resolve.
Note: To force ECC use with wolfSSL when RSA is enabled define `TLS_USE_ECC`.
Generation of the Client and Server Certificates requires running:
1. `./examples/csr/csr`
2. `./certs/certreq.sh`
3. Copy the CA files from wolfTPM to wolfSSL certs directory.
a. `cp ./certs/ca-ecc-cert.pem ../wolfssl/certs/tpm-ca-ecc-cert.pem`
b. `cp ./certs/ca-rsa-cert.pem ../wolfssl/certs/tpm-ca-rsa-cert.pem`
### TLS Client
Examples show using a TPM key and certificate for TLS mutual authentication (client authentication).
It uses macros defined at compile time for the host/port. See `TLS_HOST` and `TLS_PORT`.
This example client connects to localhost on on port 11111 by default. These can be overriden using `TLS_HOST` and `TLS_PORT`.
Generation of the Client Certificate requires running:
1. `./examples/csr/csr`
2. `./certs/certreq.sh`
You can validate using the wolfSSL example server this like:
`./examples/server/server -b -p 11111 -g -d`
To validate client certificate use the following wolfSSL example server command:
`./examples/server/server -b -p 11111 -g -A ./certs/ca-rsa-cert.pem`
or
`./examples/server/server -b -p 11111 -g -A ./certs/ca-ecc-cert.pem`
Then run the wolfTPM TLS client example:
`./examples/tls/tls_client`.
### TLS Server
This example shows using a TPM key and certificate for a TLS server. By default it listens on port 11111 and can be overridden at build-time using the `TLS_PORT` macro.
Generation of the Server Certificate requires running:
1. `./examples/csr/csr`
2. `./certs/certreq.sh`
This example shows using a TPM key and certificate for a TLS server.
You can validate using the wolfSSL example client this like:
`./examples/client/client -h 192.168.0.100 -p 11111 -d -g`
Or using your browser: `https://192.168.0.100:11111`
By default it listens on port 11111 and can be overridden at build-time using the `TLS_PORT` macro.
With browsers you will get a certificate warning because it cannot validate the test server certificate.
Run the wolfTPM TLS server example:
`./examples/tls/tls_server`.
Then run the wolfSSL example client this like:
`./examples/client/client -h localhost -p 11111 -g -d`
To validate server certificate use the following wolfSSL example client comment:
`./examples/client/client -h localhost -p 11111 -g -A ./certs/ca-rsa-cert.pem`
or
`./examples/client/client -h localhost -p 11111 -g -A ./certs/ca-ecc-cert.pem`
Or using your browser: `https://localhost:11111`
With browsers you will get certificate warnings until you load the test CA's `./certs/ca-rsa-cert.pem` and `./certs/ca-ecc-cert.pem` into your OS key store.
For testing most browsers have a way to continue to the site anyways to bypass the warning.
You can also load the generated test CA's at `./certs/ca-rsa-cert.pem` and `./certs/ca-ecc-cert.pem` into your OS key store.
## Benchmark

View File

@ -33,15 +33,21 @@
#include <wolfssl/ssl.h>
#ifndef TLS_HOST
#define TLS_HOST "www.wolfssl.com"
#define TLS_HOST "localhost"
#endif
#ifndef TLS_PORT
#define TLS_PORT 443
#define TLS_PORT 11111
#endif
/* enable for testing ECC key/cert */
/* to manually choose a cipher suite */
#if 0
#define USE_TLS_ECC
#ifndef TLS_CIPHER_SUITE
#define TLS_CIPHER_SUITE "ECDHE-RSA-AES128-SHA256"
#endif
#endif
/* enable for testing ECC key/cert when RSA is enabled */
#if 0
#define TLS_USE_ECC
#endif
/*
@ -52,6 +58,17 @@
*
* Run ./certs/certreq.sh
* Result is: ./certs/client-rsa-cert.pem and ./certs/client-ecc-cert.pem
*
* This example client connects to localhost on on port 11111 by default.
* These can be overriden using `TLS_HOST` and `TLS_PORT`.
*
* You can validate using the wolfSSL example server this like:
* ./examples/server/server -b -p 11111 -g -d
*
* To validate client certificate add the following wolfSSL example server args:
* ./examples/server/server -b -p 11111 -g -A ./certs/tpm-ca-rsa-cert.pem
* or
* ./examples/server/server -b -p 11111 -g -A ./certs/tpm-ca-ecc-cert.pem
*/
@ -222,6 +239,115 @@ static void CloseAndCleanupSocket(SockIoCbCtx* sockIoCtx)
/******************************************************************************/
static int myVerify(int preverify, WOLFSSL_X509_STORE_CTX* store)
{
/* Verify Callback Arguments:
* preverify: 1=Verify Okay, 0=Failure
* store->current_cert: Current WOLFSSL_X509 object (only with OPENSSL_EXTRA)
* store->error_depth: Current Index
* store->domain: Subject CN as string (null term)
* store->totalCerts: Number of certs presented by peer
* store->certs[i]: A `WOLFSSL_BUFFER_INFO` with plain DER for each cert
* store->store: WOLFSSL_X509_STORE with CA cert chain
* store->store->cm: WOLFSSL_CERT_MANAGER
* store->ex_data: The WOLFSSL object pointer
*/
printf("In verification callback, error = %d, %s\n",
store->error, wolfSSL_ERR_reason_error_string(store->error));
printf("\tPeer certs: %d\n", store->totalCerts);
printf("\tSubject's domain name at %d is %s\n",
store->error_depth, store->domain);
(void)preverify;
/* If error indicate we are overriding it for testing purposes */
if (store->error != 0) {
printf("\tAllowing failed certificate check, testing only "
"(shouldn't do this in production)\n");
}
/* A non-zero return code indicates failure override */
return 1;
}
/* Function checks key to see if its the "dummy" key */
static int myTpmCheckKey(wc_CryptoInfo* info, TpmCryptoDevCtx* ctx)
{
int ret = 0;
#ifndef NO_RSA
if (info && info->pk.type == WC_PK_TYPE_RSA) {
byte e[sizeof(word32)], e2[sizeof(word32)];
byte n[WOLFTPM2_WRAP_RSA_KEY_BITS/8], n2[WOLFTPM2_WRAP_RSA_KEY_BITS/8];
word32 eSz = sizeof(e), e2Sz = sizeof(e);
word32 nSz = sizeof(n), n2Sz = sizeof(n);
RsaKey rsakey;
word32 idx = 0;
/* export the raw public RSA portion */
ret = wc_RsaFlattenPublicKey(info->pk.rsa.key, e, &eSz, n, &nSz);
if (ret == 0) {
/* load the modulus for the dummy key */
ret = wc_InitRsaKey(&rsakey, NULL);
if (ret == 0) {
ret = wc_RsaPrivateKeyDecode(DUMMY_RSA_KEY, &idx, &rsakey,
(word32)sizeof(DUMMY_RSA_KEY));
if (ret == 0) {
ret = wc_RsaFlattenPublicKey(&rsakey, e2, &e2Sz, n2, &n2Sz);
}
wc_FreeRsaKey(&rsakey);
}
}
if (ret == 0 && XMEMCMP(n, n2, nSz) == 0) {
#ifdef DEBUG_WOLFTPM
printf("Detected dummy key, so using TPM RSA key handle\n");
#endif
ret = 1;
}
}
#endif
#if defined(HAVE_ECC)
if (info && info->pk.type == WC_PK_TYPE_ECDSA_SIGN) {
byte qx[WOLFTPM2_WRAP_ECC_KEY_BITS/8], qx2[WOLFTPM2_WRAP_ECC_KEY_BITS/8];
byte qy[WOLFTPM2_WRAP_ECC_KEY_BITS/8], qy2[WOLFTPM2_WRAP_ECC_KEY_BITS/8];
word32 qxSz = sizeof(qx), qx2Sz = sizeof(qx2);
word32 qySz = sizeof(qy), qy2Sz = sizeof(qy2);
ecc_key eccKey;
word32 idx = 0;
/* export the raw public ECC portion */
ret = wc_ecc_export_public_raw(info->pk.eccsign.key, qx, &qxSz, qy, &qySz);
if (ret == 0) {
/* load the ECC public x/y for the dummy key */
ret = wc_ecc_init(&eccKey);
if (ret == 0) {
ret = wc_EccPrivateKeyDecode(DUMMY_ECC_KEY, &idx, &eccKey,
(word32)sizeof(DUMMY_ECC_KEY));
if (ret == 0) {
ret = wc_ecc_export_public_raw(&eccKey, qx2, &qx2Sz, qy2, &qy2Sz);
}
wc_ecc_free(&eccKey);
}
}
if (ret == 0 && XMEMCMP(qx, qx2, qxSz) == 0 &&
XMEMCMP(qy, qy2, qySz) == 0) {
#ifdef DEBUG_WOLFTPM
printf("Detected dummy key, so using TPM ECC key handle\n");
#endif
ret = 1;
}
}
#endif
(void)info;
(void)ctx;
/* non-zero return code means its a "dummy" key (not valid) and the
provided TPM handle will be used, not the wolf public key info */
return ret;
}
/******************************************************************************/
/* --- BEGIN TLS Client Example -- */
@ -278,6 +404,7 @@ int TPM2_TLS_Client(void* userCtx)
XMEMSET(&wolfEccKey, 0, sizeof(wolfEccKey));
tpmCtx.eccKey = &eccKey;
#endif
tpmCtx.checkKeyCb = myTpmCheckKey; /* detects if using "dummy" key */
rc = wolfTPM2_SetCryptoDevCb(&dev, wolfTPM2_CryptoDevCb, &tpmCtx, &tpmDevId);
if (rc != 0) goto exit;
@ -387,8 +514,9 @@ int TPM2_TLS_Client(void* userCtx)
/* Server certificate validation */
#if 0
/* skip server cert validation for this test */
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, myVerify);
#else
wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_PEER, myVerify);
#ifdef NO_FILESYSTEM
/* example loading from buffer */
#if 0
@ -398,12 +526,30 @@ int TPM2_TLS_Client(void* userCtx)
}
#endif
#else
/* Load CA Certificate */
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolfssl-website-ca.pem",
/* Load CA Certificates */
#if !defined(NO_RSA) && !defined(TLS_USE_ECC)
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/ca-rsa-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolfSSL website certs\n");
printf("Error loading ca-rsa-cert.pem cert\n");
goto exit;
}
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolf-ca-rsa-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolf-ca-rsa-cert.pem cert\n");
goto exit;
}
#elif defined(HAVE_ECC)
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/ca-ecc-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading ca-ecc-cert.pem cert\n");
goto exit;
}
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolf-ca-ecc-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolf-ca-ecc-cert.pem cert\n");
goto exit;
}
#endif
#endif /* !NO_FILESYSTEM */
#endif
@ -417,26 +563,40 @@ int TPM2_TLS_Client(void* userCtx)
#endif
#else
/* Client certificate (mutual auth) */
#if !defined(NO_RSA) && !defined(USE_TLS_ECC)
#if !defined(NO_RSA) && !defined(TLS_USE_ECC)
if ((rc = wolfSSL_CTX_use_certificate_file(ctx, "./certs/client-rsa-cert.pem",
WOLFSSL_FILETYPE_PEM)) != WOLFSSL_SUCCESS) {
printf("Error loading RSA client cert\n");
goto exit;
}
/* Private key is on TPM and crypto dev callbacks are used */
/* TLS client (mutual auth) requires a dummy key loaded (workaround) */
if (wolfSSL_CTX_use_PrivateKey_buffer(ctx, DUMMY_RSA_KEY,
sizeof(DUMMY_RSA_KEY), WOLFSSL_FILETYPE_ASN1) != WOLFSSL_SUCCESS) {
printf("Failed to set key!\r\n");
goto exit;
}
#elif defined(HAVE_ECC)
if ((rc = wolfSSL_CTX_use_certificate_file(ctx, "./certs/client-ecc-cert.pem",
WOLFSSL_FILETYPE_PEM)) != WOLFSSL_SUCCESS) {
printf("Error loading ECC client cert\n");
goto exit;
}
/* Private key is on TPM and crypto dev callbacks are used */
/* TLS client (mutual auth) requires a dummy key loaded (workaround) */
if (wolfSSL_CTX_use_PrivateKey_buffer(ctx, DUMMY_ECC_KEY,
sizeof(DUMMY_ECC_KEY), WOLFSSL_FILETYPE_ASN1) != WOLFSSL_SUCCESS) {
printf("Failed to set key!\r\n");
goto exit;
}
#endif
#endif /* !NO_FILESYSTEM */
/* No need to load private key, since its on TPM and crypto dev callbacks are used */
#if 0
#ifdef TLS_CIPHER_SUITE
/* Optionally choose the cipher suite */
rc = wolfSSL_CTX_set_cipher_list(ctx, "ECDHE-RSA-AES128-GCM-SHA256");
rc = wolfSSL_CTX_set_cipher_list(ctx, TLS_CIPHER_SUITE);
if (rc != WOLFSSL_SUCCESS) {
goto exit;
}

View File

@ -35,10 +35,14 @@
#ifndef TLS_PORT
#define TLS_PORT 11111
#endif
/* enable for testing ECC key/cert */
#if 0
#define USE_TLS_ECC
#ifndef TLS_CIPHER_SUITE
#define TLS_CIPHER_SUITE "ECDHE-RSA-AES128-SHA256"
#endif
#endif
/* enable for testing ECC key/cert when RSA is enabled */
#if 0
#define TLS_USE_ECC
#endif
/*
@ -53,9 +57,15 @@
* This example server listens on port 11111 by default.
*
* You can validate using the wolfSSL example client this like:
* ./examples/client/client -h 192.168.0.10 -p 11111 -d -g
* ./examples/client/client -h localhost -p 11111 -g -d
*
* To validate server certificate use the following:
* ./examples/client/client -h localhost -p 11111 -g -A ./certs/tpm-ca-rsa-cert.pem
* or
* ./examples/client/client -h localhost -p 11111 -g -A ./certs/tpm-ca-ecc-cert.pem
*
* Or using your browser: https://localhost:11111
*
* Or using your browser: https://192.168.0.10:11111
* With browsers you will get certificate warnings until you load the test CA's
* ./certs/ca-rsa-cert.pem and ./certs/ca-ecc-cert.pem into your OS key store.
* With most browsers you can bypass the certificate warning.
@ -251,10 +261,6 @@ static void CloseAndCleanupSocket(SockIoCbCtx* sockIoCtx)
static int myVerify(int preverify, WOLFSSL_X509_STORE_CTX* store)
{
char buffer[WOLFSSL_MAX_ERROR_SZ];
(void)preverify;
/* Verify Callback Arguments:
* preverify: 1=Verify Okay, 0=Failure
* store->current_cert: Current WOLFSSL_X509 object (only with OPENSSL_EXTRA)
@ -267,19 +273,25 @@ static int myVerify(int preverify, WOLFSSL_X509_STORE_CTX* store)
* store->ex_data: The WOLFSSL object pointer
*/
printf("In verification callback, error = %d, %s\n", store->error,
wolfSSL_ERR_error_string(store->error, buffer));
printf("In verification callback, error = %d, %s\n",
store->error, wolfSSL_ERR_reason_error_string(store->error));
printf("\tPeer certs: %d\n", store->totalCerts);
printf("\tSubject's domain name at %d is %s\n",
store->error_depth, store->domain);
printf("\tSubject's domain name at %d is %s\n", store->error_depth, store->domain);
(void)preverify;
printf("\tAllowing to continue anyway (shouldn't do this)\n");
/* If error indicate we are overriding it for testing purposes */
if (store->error != 0) {
printf("\tAllowing failed certificate check, testing only "
"(shouldn't do this in production)\n");
}
/* A non-zero return code indicates failure override */
return 1;
}
/* Function checks key to see if its the "dummy" key */
static int myTpmCheckKey(wc_CryptoInfo* info, TpmCryptoDevCtx* ctx)
{
int ret = 0;
@ -424,7 +436,7 @@ int TPM2_TLS_Server(void* userCtx)
XMEMSET(&wolfEccKey, 0, sizeof(wolfEccKey));
tpmCtx.eccKey = &eccKey;
#endif
tpmCtx.checkKeyCb = myTpmCheckKey;
tpmCtx.checkKeyCb = myTpmCheckKey; /* detects if using "dummy" key */
rc = wolfTPM2_SetCryptoDevCb(&dev, wolfTPM2_CryptoDevCb, &tpmCtx, &tpmDevId);
if (rc != 0) goto exit;
@ -532,10 +544,11 @@ int TPM2_TLS_Server(void* userCtx)
wolfSSL_CTX_SetIOSend(ctx, SockIOSend);
/* Server certificate validation */
#if 1
#if 0
/* skip server cert validation for this test */
wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_NONE, myVerify);
#else
wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_PEER, myVerify);
#ifdef NO_FILESYSTEM
/* example loading from buffer */
#if 0
@ -545,12 +558,30 @@ int TPM2_TLS_Server(void* userCtx)
}
#endif
#else
/* Load CA Certificate */
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolfssl-website-ca.pem",
/* Load CA Certificates */
#if !defined(NO_RSA) && !defined(TLS_USE_ECC)
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/ca-rsa-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolfSSL website certs\n");
printf("Error loading ca-rsa-cert.pem cert\n");
goto exit;
}
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolf-ca-rsa-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolf-ca-rsa-cert.pem cert\n");
goto exit;
}
#elif defined(HAVE_ECC)
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/ca-ecc-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading ca-ecc-cert.pem cert\n");
goto exit;
}
if (wolfSSL_CTX_load_verify_locations(ctx, "./certs/wolf-ca-ecc-cert.pem",
0) != WOLFSSL_SUCCESS) {
printf("Error loading wolf-ca-ecc-cert.pem cert\n");
goto exit;
}
#endif
#endif /* !NO_FILESYSTEM */
#endif
@ -564,7 +595,7 @@ int TPM2_TLS_Server(void* userCtx)
#endif
#else
/* Server certificate */
#if !defined(NO_RSA) && !defined(USE_TLS_ECC)
#if !defined(NO_RSA) && !defined(TLS_USE_ECC)
printf("Loading RSA certificate and dummy key\n");
if ((rc = wolfSSL_CTX_use_certificate_file(ctx, "./certs/server-rsa-cert.pem",

View File

@ -25,96 +25,4 @@
int TPM2_TLS_Server(void* userCtx);
/* from wolfssl/certs/ecc-key.der */
static const unsigned char DUMMY_ECC_KEY[] = {
0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x45, 0xB6, 0x69, 0x02, 0x73, 0x9C, 0x6C, 0x85, 0xA1,
0x38, 0x5B, 0x72, 0xE8, 0xE8, 0xC7, 0xAC, 0xC4, 0x03, 0x8D, 0x53, 0x35, 0x04, 0xFA, 0x6C, 0x28,
0xDC, 0x34, 0x8D, 0xE1, 0xA8, 0x09, 0x8C, 0xA0, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
0x03, 0x01, 0x07, 0xA1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xBB, 0x33, 0xAC, 0x4C, 0x27, 0x50, 0x4A,
0xC6, 0x4A, 0xA5, 0x04, 0xC3, 0x3C, 0xDE, 0x9F, 0x36, 0xDB, 0x72, 0x2D, 0xCE, 0x94, 0xEA, 0x2B,
0xFA, 0xCB, 0x20, 0x09, 0x39, 0x2C, 0x16, 0xE8, 0x61, 0x02, 0xE9, 0xAF, 0x4D, 0xD3, 0x02, 0x93,
0x9A, 0x31, 0x5B, 0x97, 0x92, 0x21, 0x7F, 0xF0, 0xCF, 0x18, 0xDA, 0x91, 0x11, 0x02, 0x34, 0x86,
0xE8, 0x20, 0x58, 0x33, 0x0B, 0x80, 0x34, 0x89, 0xD8
};
/* from wolfssl/certs/server-key.der */
static const unsigned char DUMMY_RSA_KEY[] = {
0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, 0x95, 0x08, 0xE1,
0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2,
0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB,
0xA8, 0x67, 0x7F, 0xFE, 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F,
0xE1, 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, 0xBA, 0xE0,
0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, 0xAC, 0x1B, 0x53, 0xB9, 0x5F,
0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43,
0xB8, 0xA5, 0x1C, 0x5C, 0x34, 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68,
0x78, 0x73, 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, 0xE3,
0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, 0xBB, 0x17, 0xA6, 0xF3,
0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3,
0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64,
0xC3, 0x2A, 0xD0, 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63,
0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, 0xBA, 0x13, 0xD2,
0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42,
0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1,
0xE6, 0x61, 0x83, 0xC5, 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00,
0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, 0x01, 0xEF,
0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, 0x92, 0x10, 0x48, 0x92, 0xC4,
0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54,
0x95, 0x77, 0xCB, 0xC3, 0x9A, 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD,
0xC7, 0xBA, 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, 0xED,
0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, 0xB8, 0xDC, 0xC4, 0x7D,
0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8,
0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51,
0x25, 0x4E, 0x9F, 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64,
0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, 0x22, 0x05, 0xF3,
0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75,
0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50,
0x0E, 0x78, 0x2E, 0xA9, 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01,
0x41, 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, 0x8D, 0xE8,
0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, 0xE6, 0x55, 0x34, 0x51, 0x2B,
0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43,
0x2D, 0x3C, 0xF1, 0x58, 0x58, 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23,
0x63, 0xC9, 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, 0xB5,
0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, 0x69, 0xCB, 0x36, 0x3C,
0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A,
0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40,
0xCA, 0x4E, 0xAD, 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C,
0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, 0x15, 0x73, 0xDA,
0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F,
0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93,
0xDE, 0x77, 0x15, 0x5D, 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E,
0x63, 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, 0x48, 0x2C,
0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, 0xD4, 0xA1, 0xE9, 0x3F, 0x0D,
0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90,
0xDB, 0x57, 0x73, 0x3A, 0xED, 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23,
0x4C, 0xCB, 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, 0xC1,
0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, 0x20, 0x7A, 0x2E, 0x9B,
0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81,
0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F,
0x55, 0x6E, 0x52, 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA,
0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, 0x5E, 0xC7, 0xA3,
0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1,
0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7,
0x56, 0xC0, 0xD4, 0x22, 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81,
0x95, 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, 0x1A, 0x5F,
0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, 0x22, 0x98, 0x70, 0x4E, 0x1A,
0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B,
0x3B, 0x98, 0xA3, 0x54, 0xF2, 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA,
0xD4, 0x0C, 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, 0xD7,
0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, 0xBB, 0x75, 0x9C, 0x6F,
0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9,
0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0,
0xC9, 0xC5, 0xFF, 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC,
0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, 0xE6, 0x7C, 0x5E,
0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B,
0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72,
0x96, 0xD5, 0xE5, 0x8A, 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8,
0x76, 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, 0x61, 0x1B,
0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, 0xBC, 0x56, 0xDB, 0xA5, 0xA4,
0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67,
0x5A, 0xF5, 0x22, 0xF8, 0xB5, 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E,
0x18, 0xB2, 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, 0x0C,
0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0
};
#endif /* _TPM_TLS_SERVER_H_ */

View File

@ -299,4 +299,115 @@ static const byte kEccTestSigRS[] = {
};
/* from certs/dummy-ecc.pem (as DER) */
static const unsigned char DUMMY_ECC_KEY[] = {
0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x05, 0x0F, 0xEA, 0xB6, 0x2C, 0x7C,
0xD3, 0x3C, 0x66, 0x3D, 0x6B, 0x44, 0xD5, 0x8A, 0xD4, 0x1C, 0xF6, 0x2A, 0x35,
0x49, 0xB2, 0x36, 0x7D, 0xEC, 0xD4, 0xB3, 0x9A, 0x2B, 0x4F, 0x71, 0xC8, 0xD3,
0xA0, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0xA1,
0x44, 0x03, 0x42, 0x00, 0x04, 0x43, 0x98, 0xF7, 0x33, 0x77, 0xB4, 0x55, 0x02,
0xF1, 0xF3, 0x79, 0x97, 0x67, 0xED, 0xB5, 0x3A, 0x7A, 0xE1, 0x7C, 0xC6, 0xA8,
0x23, 0x8B, 0x3A, 0x68, 0x42, 0xDD, 0x68, 0x4F, 0x48, 0x6F, 0x2D, 0x9A, 0x7C,
0x47, 0x20, 0x1F, 0x13, 0x69, 0x71, 0x05, 0x42, 0x5B, 0x9F, 0x23, 0x7D, 0xE0,
0xA6, 0x5D, 0xD4, 0x11, 0x44, 0xB1, 0x91, 0x66, 0x50, 0xC0, 0x2C, 0x8C, 0x71,
0x35, 0x0E, 0x28, 0xB4
};
/* from certs/dummy-rsa.pem (as DER) */
static const unsigned char DUMMY_RSA_KEY[] = {
0x30, 0x82, 0x04, 0xA3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xCF,
0xDD, 0xB2, 0x17, 0x49, 0xEB, 0xBF, 0xFB, 0xC5, 0x19, 0x13, 0x63, 0x86, 0x49,
0xBC, 0xFE, 0x8E, 0xED, 0x21, 0x6E, 0x53, 0x18, 0x9C, 0x41, 0xD5, 0xEC, 0x12,
0x31, 0xF0, 0xF9, 0x90, 0x08, 0x15, 0x68, 0x2F, 0x00, 0x9C, 0xAC, 0x36, 0x28,
0xF6, 0xD8, 0x50, 0xA0, 0xD4, 0x7C, 0xDF, 0xE7, 0x0F, 0xE1, 0x36, 0xD1, 0xDD,
0xC0, 0x2B, 0xF0, 0x3D, 0xC9, 0xF0, 0x5B, 0xE4, 0x76, 0x48, 0x91, 0xF0, 0x92,
0x29, 0x82, 0x75, 0x7F, 0x0B, 0x41, 0x39, 0x77, 0x52, 0xCD, 0x1F, 0x30, 0xA3,
0xC3, 0x79, 0x92, 0xBD, 0x0A, 0x7F, 0x16, 0xB2, 0x06, 0xFD, 0x49, 0xC5, 0x4D,
0x34, 0x26, 0xDB, 0x49, 0x06, 0xDB, 0x49, 0x63, 0xB6, 0xE5, 0xA4, 0xEC, 0xC0,
0x6D, 0x24, 0xF1, 0x82, 0x0F, 0x83, 0x1B, 0xB1, 0x0D, 0xA3, 0x8B, 0x6A, 0x39,
0x39, 0xB6, 0xB3, 0xA3, 0xE1, 0x77, 0x69, 0x8C, 0xC7, 0x83, 0xE1, 0xBE, 0x9E,
0xF9, 0xB7, 0xDB, 0xDF, 0xF8, 0x98, 0x7C, 0x9D, 0xC8, 0x72, 0x78, 0xBF, 0x13,
0x62, 0x27, 0xA1, 0xBF, 0x4B, 0x2B, 0x04, 0x18, 0xCD, 0x2C, 0x10, 0x7E, 0xA5,
0x33, 0x08, 0xD4, 0x49, 0xF1, 0xEC, 0x99, 0x6F, 0x2E, 0x0B, 0xB4, 0xD3, 0xB3,
0xC2, 0x20, 0x02, 0xE9, 0x3A, 0xA1, 0xB3, 0x81, 0x9B, 0x0C, 0x02, 0xB0, 0xDE,
0x9E, 0xEF, 0x0A, 0x47, 0x6E, 0xFA, 0xDB, 0x4D, 0x13, 0x1E, 0x1F, 0xD2, 0x7B,
0xC6, 0x48, 0xE8, 0x27, 0xDE, 0xBC, 0x8D, 0x4C, 0x60, 0x5A, 0x71, 0xB5, 0xC3,
0x7F, 0xFC, 0x7C, 0x28, 0xC1, 0x99, 0xF2, 0x7A, 0x3B, 0xCD, 0x6A, 0x76, 0xFE,
0xA8, 0x9B, 0xDD, 0x03, 0x1E, 0xEB, 0xB4, 0x9D, 0x70, 0x5C, 0x7A, 0x1F, 0xB6,
0x12, 0xEC, 0xCD, 0xAC, 0x6A, 0xCD, 0x2C, 0x25, 0x53, 0xEF, 0x34, 0xD5, 0xC5,
0x97, 0x14, 0xD4, 0xB2, 0x86, 0x03, 0x5F, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01,
0x02, 0x82, 0x01, 0x00, 0x5D, 0x9E, 0xBF, 0x10, 0x48, 0x25, 0xDB, 0x00, 0xFD,
0x43, 0x8E, 0xFC, 0xFB, 0x45, 0x88, 0xCE, 0xA9, 0xF6, 0xD9, 0x60, 0xC4, 0x22,
0x48, 0x76, 0x4A, 0x70, 0x19, 0xBD, 0xCE, 0x87, 0xC8, 0x3C, 0x2B, 0xD0, 0x11,
0xA3, 0x57, 0xED, 0x24, 0x33, 0x8D, 0x01, 0xDE, 0x46, 0xA1, 0x8D, 0x60, 0x96,
0xC4, 0x0B, 0x2E, 0x52, 0x95, 0x6A, 0x71, 0x1F, 0xB1, 0xE4, 0x9A, 0xD1, 0xF8,
0x72, 0xE1, 0xBA, 0x81, 0x3C, 0x83, 0x5F, 0x93, 0xA5, 0xD5, 0x9E, 0xD9, 0xD0,
0x09, 0x46, 0x03, 0x6F, 0x37, 0xC2, 0xD9, 0xA5, 0xA2, 0x68, 0xF0, 0xD6, 0x7A,
0xF6, 0x34, 0xEC, 0x1D, 0xE5, 0xE8, 0xC0, 0x3B, 0x71, 0x87, 0x9A, 0x0A, 0x52,
0xD3, 0xD4, 0x58, 0x54, 0x9D, 0x52, 0x4B, 0x1A, 0x4E, 0xF6, 0xC7, 0x99, 0x18,
0x44, 0x49, 0x4D, 0x88, 0x59, 0x1F, 0xCA, 0x4E, 0xDC, 0x57, 0xB7, 0x1D, 0x9D,
0xDF, 0x59, 0x91, 0xD9, 0x2E, 0xE0, 0x54, 0xAA, 0x4E, 0x8F, 0x92, 0x82, 0x85,
0x70, 0xF9, 0x93, 0x90, 0x3A, 0x30, 0xCD, 0xB3, 0x73, 0x81, 0x93, 0xE7, 0xF9,
0x1F, 0xF6, 0xA9, 0xA9, 0xD4, 0xAE, 0x89, 0x0E, 0x38, 0x11, 0x61, 0xF7, 0xF7,
0xDC, 0x9B, 0x99, 0x4B, 0xFE, 0xC0, 0x71, 0x78, 0x53, 0x18, 0x0F, 0x23, 0xA9,
0x11, 0xA0, 0xAA, 0x57, 0xEE, 0x39, 0xAA, 0xEA, 0x2A, 0x7A, 0x8D, 0x12, 0x69,
0x2C, 0x82, 0x4D, 0xA0, 0xE5, 0x1C, 0xB3, 0x69, 0x9D, 0xA1, 0x30, 0xA3, 0x40,
0xFA, 0x86, 0x40, 0xD3, 0x8B, 0xF9, 0xAF, 0x98, 0x7D, 0x17, 0x07, 0xA3, 0x29,
0xE2, 0x57, 0xEF, 0x47, 0xCF, 0x81, 0x22, 0x4D, 0x47, 0x63, 0xA4, 0x2F, 0x1A,
0x8F, 0xC3, 0x26, 0x1F, 0xF6, 0xC5, 0x81, 0xFF, 0x14, 0xA9, 0x87, 0x56, 0x18,
0x8A, 0x18, 0xFD, 0x37, 0xC3, 0x4B, 0x8E, 0xE0, 0x6B, 0x2C, 0x07, 0x4B, 0x05,
0x02, 0x81, 0x81, 0x00, 0xED, 0x51, 0x06, 0x91, 0xB8, 0x94, 0x5E, 0x17, 0x9B,
0x22, 0x25, 0xEF, 0x23, 0x76, 0x61, 0x26, 0xFA, 0xAC, 0xEE, 0xC1, 0x99, 0x8E,
0x55, 0x38, 0x85, 0xD2, 0x15, 0x06, 0x6E, 0xBB, 0x45, 0xBB, 0xFE, 0x5F, 0xF7,
0xD2, 0xA4, 0x41, 0x15, 0x24, 0x67, 0x8E, 0xA2, 0x6B, 0xBA, 0xAA, 0x28, 0x84,
0x22, 0x63, 0xEE, 0xA8, 0xA0, 0xD0, 0xEA, 0x47, 0x8C, 0xAC, 0x4E, 0x98, 0x18,
0x8A, 0xF2, 0x19, 0x76, 0x50, 0x9D, 0xFE, 0xD1, 0x59, 0xC3, 0xC1, 0x23, 0x3B,
0x31, 0x73, 0xC7, 0x71, 0x3E, 0x94, 0xC8, 0x6D, 0x7F, 0xBA, 0x30, 0xF2, 0x4C,
0x1A, 0x7E, 0x74, 0x52, 0x78, 0xA0, 0xAB, 0x69, 0x0C, 0x44, 0x59, 0xD0, 0xB0,
0xFE, 0x2F, 0xE8, 0xC2, 0x18, 0xE7, 0x24, 0x8B, 0x73, 0xDF, 0x4F, 0x40, 0x92,
0x0C, 0x8C, 0x6C, 0x92, 0x27, 0xBC, 0x3F, 0x5B, 0x79, 0x44, 0xC1, 0x32, 0xCC,
0xA2, 0xB7, 0x02, 0x81, 0x81, 0x00, 0xE0, 0x3B, 0x1C, 0xC4, 0xC4, 0x69, 0x0D,
0x6B, 0x57, 0x19, 0xB7, 0x59, 0x18, 0x92, 0xB2, 0x09, 0x39, 0x66, 0x97, 0xD1,
0x18, 0xDE, 0x6B, 0x5F, 0xC5, 0x9B, 0x11, 0x47, 0x1E, 0xEA, 0xE3, 0xAC, 0x36,
0x2B, 0x30, 0x99, 0x81, 0x00, 0x3D, 0x39, 0x41, 0x03, 0x90, 0x77, 0xDE, 0x4A,
0xE1, 0x48, 0xDF, 0x98, 0x86, 0x03, 0x3B, 0xEA, 0xAF, 0xC8, 0xF6, 0xD7, 0x4F,
0xE6, 0xAE, 0x70, 0xF2, 0x3D, 0xBB, 0xF2, 0x63, 0xB9, 0x2D, 0x3C, 0x08, 0xB3,
0x10, 0x9E, 0x97, 0x6C, 0x8D, 0x28, 0x34, 0xAE, 0xDA, 0xD9, 0xA1, 0x8E, 0x3A,
0x51, 0x7A, 0xA1, 0x14, 0x3F, 0xFB, 0xEA, 0x3B, 0xB4, 0x93, 0xAA, 0x14, 0x7A,
0xB4, 0xD7, 0xCA, 0x7B, 0x61, 0xAF, 0xF5, 0x87, 0x1A, 0x64, 0xA9, 0x3E, 0x3C,
0x7A, 0xDD, 0x11, 0x7F, 0x01, 0x2D, 0xA6, 0x91, 0xED, 0x3D, 0x28, 0x9C, 0x67,
0xC2, 0x5C, 0xCF, 0xBF, 0x02, 0x81, 0x81, 0x00, 0xCE, 0x0C, 0x59, 0xCD, 0xD0,
0x1B, 0x52, 0x0E, 0xE0, 0xED, 0x27, 0x4E, 0x98, 0xD5, 0xC1, 0xC8, 0x9C, 0x41,
0xE6, 0x13, 0x46, 0x06, 0x24, 0xCC, 0x2C, 0xB4, 0x98, 0xF8, 0xBA, 0xCF, 0xF2,
0xDE, 0x25, 0x20, 0xA2, 0x05, 0xCC, 0x03, 0x8E, 0x1D, 0xCB, 0xA4, 0x36, 0x35,
0x9F, 0x1E, 0xFA, 0x8A, 0xAF, 0x69, 0x60, 0xE0, 0x1C, 0xB1, 0x07, 0x99, 0x13,
0xF4, 0xCF, 0x50, 0x93, 0x8E, 0xA0, 0x61, 0xA7, 0x2E, 0x9B, 0xDF, 0x91, 0x59,
0x84, 0xF3, 0x7E, 0x69, 0x78, 0xA8, 0x73, 0xF4, 0x49, 0x47, 0xD9, 0x35, 0xE9,
0x7E, 0x79, 0xDD, 0x06, 0x62, 0xC2, 0x84, 0xB0, 0xCE, 0x77, 0x82, 0x1C, 0x75,
0x40, 0x2B, 0x53, 0x5D, 0x39, 0x75, 0xD3, 0x7C, 0x23, 0x2F, 0x1D, 0xB5, 0xCE,
0xE7, 0x86, 0xE2, 0x23, 0x6C, 0xAD, 0xC7, 0xDE, 0xA6, 0x8D, 0x75, 0xDD, 0x30,
0x4F, 0x98, 0x07, 0x49, 0x51, 0xC5, 0x02, 0x81, 0x80, 0x46, 0x19, 0x34, 0xBD,
0x2E, 0xC9, 0xC8, 0xB0, 0x2D, 0xE2, 0x94, 0x36, 0xFE, 0x3F, 0x9D, 0xF8, 0xD4,
0x41, 0x06, 0x65, 0x0F, 0xE9, 0x38, 0x98, 0x10, 0x26, 0x92, 0x18, 0x31, 0xCA,
0x2C, 0xB2, 0xC1, 0x9C, 0x6E, 0xED, 0x0E, 0x2F, 0x0C, 0xF4, 0xC1, 0x26, 0x64,
0x1B, 0x95, 0x1A, 0xC3, 0xA3, 0x0C, 0x83, 0x9A, 0x21, 0x98, 0xB1, 0x9D, 0x92,
0xAD, 0xD8, 0x51, 0xDA, 0x43, 0xDE, 0x7B, 0x5C, 0x61, 0x4D, 0x3D, 0x6F, 0xBE,
0x7C, 0x6E, 0x1B, 0xCC, 0xAE, 0x47, 0x98, 0x5F, 0xE8, 0x99, 0xCF, 0xB0, 0x0B,
0x29, 0x3E, 0x55, 0x6C, 0xF3, 0x71, 0x37, 0xEB, 0x68, 0xCD, 0xA9, 0x2C, 0xA2,
0x9D, 0x21, 0x19, 0xDB, 0x3F, 0x3A, 0xC5, 0xA7, 0x9C, 0x62, 0x9D, 0x81, 0xDA,
0xC6, 0x2D, 0xF6, 0xAA, 0x52, 0x42, 0x0D, 0xFA, 0x48, 0x53, 0x32, 0x7B, 0x80,
0x0B, 0x1A, 0x1A, 0x35, 0xE0, 0xDD, 0xF1, 0x02, 0x81, 0x80, 0x76, 0x46, 0xB9,
0x57, 0x91, 0x3F, 0x64, 0x5D, 0x42, 0x37, 0x70, 0x9D, 0x44, 0x38, 0x09, 0x09,
0x42, 0x3E, 0x2E, 0x8A, 0x7A, 0xA4, 0x57, 0x4B, 0x81, 0x95, 0x65, 0x47, 0x3C,
0xF3, 0x77, 0x54, 0xE3, 0x7D, 0xEC, 0x06, 0xC9, 0x26, 0xAB, 0xDD, 0x66, 0x73,
0x54, 0x86, 0x31, 0x26, 0x75, 0x5B, 0x84, 0xAB, 0xD2, 0xA2, 0x6A, 0x9B, 0x6E,
0xDD, 0x45, 0xAE, 0x81, 0x49, 0x12, 0x8D, 0x03, 0x1C, 0x1B, 0x6B, 0x5B, 0x37,
0xFA, 0xE7, 0x05, 0x9F, 0xBD, 0x66, 0xDD, 0x6C, 0xD7, 0x16, 0x0D, 0xCC, 0x64,
0x19, 0xC2, 0xCD, 0xC3, 0xA9, 0xED, 0x70, 0xFA, 0x75, 0xD8, 0x41, 0xF7, 0xC6,
0x84, 0xE8, 0x40, 0xF0, 0xE5, 0x93, 0x88, 0xE2, 0x4E, 0x4F, 0xE4, 0x5F, 0xDF,
0x53, 0xAB, 0xA7, 0x06, 0xDC, 0x64, 0x7E, 0x51, 0xE8, 0x7E, 0x1C, 0x33, 0x9F,
0xBF, 0x5E, 0x58, 0xBC, 0x7D, 0xA3, 0x80, 0x84
};
#endif /* _TPM_TEST_H_ */