Skip to content

Commit 2cde410

Browse files
authored
Merge pull request #336 from dgarske/st33_getprodinfo
Added ST33 support for pre-provisioned device identity key and certificate
2 parents d44b7e1 + dbb0f6d commit 2cde410

File tree

9 files changed

+301
-58
lines changed

9 files changed

+301
-58
lines changed

README.md

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ Tested with:
8686

8787
* Infineon OPTIGA (TM) Trusted Platform Module 2.0 SLB9670, SLB9672 and SLB9673 (I2C).
8888
- LetsTrust: Vendor for TPM development boards [http://letstrust.de](http://letstrust.de).
89-
* STMicro STSAFE-TPM, ST33TPHF2XSPI/2XI2C and ST33KTPM2X
89+
* STMicro STSAFE-TPM, ST33TPHF2XSPI/2XI2C and ST33KTPM2X (SPI and I2C)
9090
* Microchip ATTPM20 module
9191
* Nuvoton NPCT65X or NPCT75x TPM2.0 module
9292
* Nations Technologies Z32H330 TPM 2.0 module
@@ -105,6 +105,10 @@ Infineon SLB9673:
105105
TPM2: Caps 0x1ae00082, Did 0x001c, Vid 0x15d1, Rid 0x16
106106
Mfg IFX (1), Vendor SLB9673, Fw 26.13 (0x456a), FIPS 140-2 1, CC-EAL4 1
107107

108+
STMicro ST33KTPM2XSPI
109+
TPM2: Caps 0x30000415, Did 0x0003, Vid 0x104a, Rid 0x 0
110+
Mfg STM (2), Vendor ST33KTPM2XSPI, Fw 9.256 (0x0), FIPS 140-2 1, CC-EAL4 0
111+
108112
STMicro ST33TPHF2XSPI
109113
TPM2: Caps 0x1a7e2882, Did 0x0000, Vid 0x104a, Rid 0x4e
110114
Mfg STM (2), Vendor , Fw 74.8 (1151341959), FIPS 140-2 1, CC-EAL4 0
@@ -479,6 +483,40 @@ ECDSA 256 verify 18 ops took 1.043 sec, avg 57.921 ms, 17.265 ops/sec
479483
ECDHE 256 agree 9 ops took 1.025 sec, avg 113.888 ms, 8.781 ops/sec
480484
```
481485

486+
Run on STMicro ST33KTPM2XSPI at 33MHz:
487+
488+
```
489+
./examples/bench/bench
490+
TPM2 Benchmark using Wrapper API's
491+
Use Parameter Encryption: NULL
492+
Loading SRK: Storage 0x81000200 (282 bytes)
493+
RNG 24 KB took 1.042 seconds, 23.028 KB/s
494+
AES-128-CBC-enc 52 KB took 1.018 seconds, 51.077 KB/s
495+
AES-128-CBC-dec 52 KB took 1.027 seconds, 50.644 KB/s
496+
AES-256-CBC-enc 46 KB took 1.012 seconds, 45.446 KB/s
497+
AES-256-CBC-dec 46 KB took 1.021 seconds, 45.072 KB/s
498+
AES-128-CTR-enc 44 KB took 1.025 seconds, 42.927 KB/s
499+
AES-128-CTR-dec 44 KB took 1.024 seconds, 42.955 KB/s
500+
AES-256-CTR-enc 40 KB took 1.025 seconds, 39.016 KB/s
501+
AES-256-CTR-dec 40 KB took 1.026 seconds, 38.992 KB/s
502+
AES-128-CFB-enc 52 KB took 1.026 seconds, 50.674 KB/s
503+
AES-128-CFB-dec 46 KB took 1.023 seconds, 44.986 KB/s
504+
AES-256-CFB-enc 46 KB took 1.021 seconds, 45.047 KB/s
505+
AES-256-CFB-dec 42 KB took 1.033 seconds, 40.665 KB/s
506+
SHA1 138 KB took 1.009 seconds, 136.727 KB/s
507+
SHA256 128 KB took 1.010 seconds, 126.723 KB/s
508+
SHA384 116 KB took 1.001 seconds, 115.833 KB/s
509+
RSA 2048 key gen 9 ops took 17.497 sec, avg 1944.057 ms, 0.514 ops/sec
510+
RSA 2048 Public 155 ops took 1.003 sec, avg 6.468 ms, 154.601 ops/sec
511+
RSA 2048 Private 12 ops took 1.090 sec, avg 90.806 ms, 11.013 ops/sec
512+
RSA 2048 Pub OAEP 122 ops took 1.004 sec, avg 8.230 ms, 121.501 ops/sec
513+
RSA 2048 Priv OAEP 11 ops took 1.023 sec, avg 92.964 ms, 10.757 ops/sec
514+
ECC 256 key gen 12 ops took 1.070 sec, avg 89.172 ms, 11.214 ops/sec
515+
ECDSA 256 sign 40 ops took 1.010 sec, avg 25.251 ms, 39.602 ops/sec
516+
ECDSA 256 verify 28 ops took 1.023 sec, avg 36.543 ms, 27.365 ops/sec
517+
ECDHE 256 agree 16 ops took 1.062 sec, avg 66.391 ms, 15.062 ops/sec
518+
```
519+
482520
Run on STMicro ST33TPHF2XSPI at 33MHz:
483521

484522
```

certs/wolf-ca-ecc-cert.pem

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ Certificate:
22
Data:
33
Version: 3 (0x2)
44
Serial Number:
5-
65:67:42:4c:06:e7:e4:c3:68:01:a9:94:a9:07:e6:fe:bd:2c:d6:3d
5+
0f:17:46:70:fd:c2:70:d1:f9:42:49:9c:1a:c3:5d:dd:30:c8:5f:85
66
Signature Algorithm: ecdsa-with-SHA256
77
Issuer: C = US, ST = Washington, L = Seattle, O = wolfSSL, OU = Development, CN = www.wolfssl.com, emailAddress = [email protected]
88
Validity
9-
Not Before: Dec 16 21:17:49 2022 GMT
10-
Not After : Sep 11 21:17:49 2025 GMT
9+
Not Before: Dec 13 22:19:28 2023 GMT
10+
Not After : Sep 8 22:19:28 2026 GMT
1111
Subject: C = US, ST = Washington, L = Seattle, O = wolfSSL, OU = Development, CN = www.wolfssl.com, emailAddress = [email protected]
1212
Subject Public Key Info:
1313
Public Key Algorithm: id-ecPublicKey
@@ -31,23 +31,23 @@ Certificate:
3131
X509v3 Key Usage: critical
3232
Digital Signature, Certificate Sign, CRL Sign
3333
Signature Algorithm: ecdsa-with-SHA256
34-
30:46:02:21:00:b0:12:16:03:26:79:d4:6b:94:d9:7e:ca:e1:
35-
2d:24:64:ef:11:6e:f2:12:81:e4:ce:1d:77:7d:ca:5c:47:50:
36-
62:02:21:00:80:bf:46:3c:5d:d8:e5:ab:47:ce:a2:19:bd:21:
37-
de:85:6f:ab:c9:8f:01:f3:ab:1b:b9:e1:53:d6:24:77:a6:4d
34+
30:45:02:21:00:c8:64:7f:ee:4b:be:83:48:13:ea:92:f8:1a:
35+
82:1e:85:b1:5a:a4:1c:e3:e8:ea:25:44:6f:e7:70:fd:eb:f3:
36+
76:02:20:44:02:a2:ec:c5:a1:ae:e2:a4:8a:d9:13:95:2b:a6:
37+
5b:09:57:86:61:42:96:97:f0:95:62:0c:03:e6:53:04:25
3838
-----BEGIN CERTIFICATE-----
39-
MIICljCCAjugAwIBAgIUZWdCTAbn5MNoAamUqQfm/r0s1j0wCgYIKoZIzj0EAwIw
39+
MIIClTCCAjugAwIBAgIUDxdGcP3CcNH5QkmcGsNd3TDIX4UwCgYIKoZIzj0EAwIw
4040
gZcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdT
4141
ZWF0dGxlMRAwDgYDVQQKDAd3b2xmU1NMMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEY
4242
MBYGA1UEAwwPd3d3LndvbGZzc2wuY29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdv
43-
bGZzc2wuY29tMB4XDTIyMTIxNjIxMTc0OVoXDTI1MDkxMTIxMTc0OVowgZcxCzAJ
43+
bGZzc2wuY29tMB4XDTIzMTIxMzIyMTkyOFoXDTI2MDkwODIyMTkyOFowgZcxCzAJ
4444
BgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxl
4545
MRAwDgYDVQQKDAd3b2xmU1NMMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEYMBYGA1UE
4646
AwwPd3d3LndvbGZzc2wuY29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wu
4747
Y29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAtPZbtYBjkXIuZAx5cBM456t
4848
KTiYuhDW6QkqgKkuFyq5ir8zg0bjlQvkd0C1O0NFMw9hU3w3RMHL/IDK6EPqp6Nj
4949
MGEwHQYDVR0OBBYEFFaOmsPwQt4YuUVVbvmTz+rD86UhMB8GA1UdIwQYMBaAFFaO
5050
msPwQt4YuUVVbvmTz+rD86UhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
51-
AgGGMAoGCCqGSM49BAMCA0kAMEYCIQCwEhYDJnnUa5TZfsrhLSRk7xFu8hKB5M4d
52-
d33KXEdQYgIhAIC/Rjxd2OWrR86iGb0h3oVvq8mPAfOrG7nhU9Ykd6ZN
51+
AgGGMAoGCCqGSM49BAMCA0gAMEUCIQDIZH/uS76DSBPqkvgagh6FsVqkHOPo6iVE
52+
b+dw/evzdgIgRAKi7MWhruKkitkTlSumWwlXhmFClpfwlWIMA+ZTBCU=
5353
-----END CERTIFICATE-----

certs/wolf-ca-rsa-cert.pem

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ Certificate:
22
Data:
33
Version: 3 (0x2)
44
Serial Number:
5-
2c:80:ce:db:47:9d:07:66:92:3d:68:d7:ca:ac:90:4f:ca:69:41:4b
5+
33:44:1a:a8:6c:01:ec:f6:60:f2:70:51:0a:4c:d1:14:fa:bc:e9:44
66
Signature Algorithm: sha256WithRSAEncryption
77
Issuer: C = US, ST = Montana, L = Bozeman, O = Sawtooth, OU = Consulting, CN = www.wolfssl.com, emailAddress = [email protected]
88
Validity
9-
Not Before: Dec 16 21:17:49 2022 GMT
10-
Not After : Sep 11 21:17:49 2025 GMT
9+
Not Before: Dec 13 22:19:28 2023 GMT
10+
Not After : Sep 8 22:19:28 2026 GMT
1111
Subject: C = US, ST = Montana, L = Bozeman, O = Sawtooth, OU = Consulting, CN = www.wolfssl.com, emailAddress = [email protected]
1212
Subject Public Key Info:
1313
Public Key Algorithm: rsaEncryption
@@ -38,7 +38,7 @@ Certificate:
3838
X509v3 Authority Key Identifier:
3939
keyid:27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
4040
DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.wolfssl.com/[email protected]
41-
serial:2C:80:CE:DB:47:9D:07:66:92:3D:68:D7:CA:AC:90:4F:CA:69:41:4B
41+
serial:33:44:1A:A8:6C:01:EC:F6:60:F2:70:51:0A:4C:D1:14:FA:BC:E9:44
4242

4343
X509v3 Basic Constraints:
4444
CA:TRUE
@@ -47,27 +47,27 @@ Certificate:
4747
X509v3 Extended Key Usage:
4848
TLS Web Server Authentication, TLS Web Client Authentication
4949
Signature Algorithm: sha256WithRSAEncryption
50-
ae:b0:a4:35:8e:8a:1b:a6:eb:b3:a2:57:cf:3a:1f:dc:6e:bc:
51-
d2:d0:a6:4a:8f:88:0a:6e:74:d5:d1:7c:d1:44:b1:d4:3b:17:
52-
03:09:5a:46:ed:08:08:cf:f1:fd:20:07:67:c0:97:ec:35:f3:
53-
75:ca:20:61:98:3e:f5:4d:be:e6:9d:75:1e:e4:03:ad:8c:a6:
54-
1e:3d:ec:e4:1a:92:5b:f9:a3:ad:83:ca:4f:cd:aa:38:bb:6e:
55-
ae:ad:fa:a7:46:f1:8b:73:ec:09:23:bc:f2:18:e5:b7:92:86:
56-
3e:a4:75:60:c7:3d:0f:3f:83:00:c3:06:08:9c:d1:54:d6:ba:
57-
6d:95:3d:34:a1:be:24:91:cc:20:03:11:5b:72:1c:d4:65:d0:
58-
11:88:75:26:04:26:ef:66:70:e6:3b:38:87:9c:53:71:1b:09:
59-
51:70:50:99:4c:31:0c:62:44:57:30:60:04:fc:12:2c:a3:24:
60-
b4:f7:11:d5:0e:b5:21:0b:ed:86:11:67:4d:36:fa:57:a0:59:
61-
55:21:b3:6d:e4:77:5e:ec:7e:f0:09:13:8e:99:98:b2:e1:82:
62-
b6:4b:3e:0f:41:a6:0c:cd:49:99:7e:e4:8a:cb:37:ed:53:cf:
63-
86:5d:a9:26:a8:e5:01:25:5a:b4:bc:25:35:f1:fa:5a:5c:ce:
64-
d4:b8:9a:2c
50+
2d:fc:f9:32:5a:be:d6:9d:42:8b:86:4e:67:22:c3:50:2d:cb:
51+
14:27:1d:94:f3:cd:88:42:da:41:1c:39:24:67:a7:92:4d:27:
52+
ea:56:82:19:bf:11:b2:43:a4:8d:5d:87:b2:27:64:66:82:81:
53+
df:c4:fd:5b:62:b0:c2:4d:9d:29:f2:41:32:cc:2e:b5:da:38:
54+
06:1b:e8:7f:8c:6e:3d:80:1e:00:56:49:bf:39:e0:da:68:2f:
55+
c4:fd:00:e6:d1:81:1a:d1:4a:bb:76:52:ce:4d:24:9d:c4:a3:
56+
a7:f1:65:14:2f:1f:a8:2d:c6:cb:ce:b1:a7:89:74:26:27:c3:
57+
f3:a3:84:4c:34:01:14:03:7d:16:3a:c8:8b:25:2e:7b:90:cc:
58+
46:b1:52:34:ba:93:6e:ef:fe:43:a3:ad:c6:6f:51:fb:ba:ea:
59+
38:e3:6f:d6:ee:63:62:36:ea:5e:08:b4:e2:2a:46:89:e3:ae:
60+
b3:b4:06:ef:63:7a:6e:5d:dd:c9:ec:02:4f:f7:64:c0:27:07:
61+
b4:6f:4a:18:72:5b:34:74:7c:d0:a9:04:8f:40:8b:6a:39:d2:
62+
6b:1a:01:f2:01:a8:81:34:3a:e5:b0:55:d1:3c:95:ca:b0:82:
63+
d6:ed:98:28:15:59:7e:95:a7:69:c7:b5:7b:ec:01:a7:4d:e6:
64+
b9:a2:fe:35
6565
-----BEGIN CERTIFICATE-----
66-
MIIE/zCCA+egAwIBAgIULIDO20edB2aSPWjXyqyQT8ppQUswDQYJKoZIhvcNAQEL
66+
MIIE/zCCA+egAwIBAgIUM0QaqGwB7PZg8nBRCkzRFPq86UQwDQYJKoZIhvcNAQEL
6767
BQAwgZQxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdNb250YW5hMRAwDgYDVQQHDAdC
6868
b3plbWFuMREwDwYDVQQKDAhTYXd0b290aDETMBEGA1UECwwKQ29uc3VsdGluZzEY
6969
MBYGA1UEAwwPd3d3LndvbGZzc2wuY29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdv
70-
bGZzc2wuY29tMB4XDTIyMTIxNjIxMTc0OVoXDTI1MDkxMTIxMTc0OVowgZQxCzAJ
70+
bGZzc2wuY29tMB4XDTIzMTIxMzIyMTkyOFoXDTI2MDkwODIyMTkyOFowgZQxCzAJ
7171
BgNVBAYTAlVTMRAwDgYDVQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREw
7272
DwYDVQQKDAhTYXd0b290aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwP
7373
d3d3LndvbGZzc2wuY29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29t
@@ -82,12 +82,12 @@ BgNVHSMEgcwwgcmAFCeOZxF0wyYdP+0zY7Ok2B0w5ejVoYGapIGXMIGUMQswCQYD
8282
VQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8G
8383
A1UECgwIU2F3dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3
8484
dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIU
85-
LIDO20edB2aSPWjXyqyQT8ppQUswDAYDVR0TBAUwAwEB/zAcBgNVHREEFTATggtl
85+
M0QaqGwB7PZg8nBRCkzRFPq86UQwDAYDVR0TBAUwAwEB/zAcBgNVHREEFTATggtl
8686
eGFtcGxlLmNvbYcEfwAAATAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
87-
DQYJKoZIhvcNAQELBQADggEBAK6wpDWOihum67OiV886H9xuvNLQpkqPiApudNXR
88-
fNFEsdQ7FwMJWkbtCAjP8f0gB2fAl+w183XKIGGYPvVNvuaddR7kA62Mph497OQa
89-
klv5o62Dyk/Nqji7bq6t+qdG8Ytz7AkjvPIY5beShj6kdWDHPQ8/gwDDBgic0VTW
90-
um2VPTShviSRzCADEVtyHNRl0BGIdSYEJu9mcOY7OIecU3EbCVFwUJlMMQxiRFcw
91-
YAT8EiyjJLT3EdUOtSEL7YYRZ002+legWVUhs23kd17sfvAJE46ZmLLhgrZLPg9B
92-
pgzNSZl+5IrLN+1Tz4ZdqSao5QElWrS8JTXx+lpcztS4miw=
87+
DQYJKoZIhvcNAQELBQADggEBAC38+TJavtadQouGTmciw1AtyxQnHZTzzYhC2kEc
88+
OSRnp5JNJ+pWghm/EbJDpI1dh7InZGaCgd/E/VtisMJNnSnyQTLMLrXaOAYb6H+M
89+
bj2AHgBWSb854NpoL8T9AObRgRrRSrt2Us5NJJ3Eo6fxZRQvH6gtxsvOsaeJdCYn
90+
w/OjhEw0ARQDfRY6yIslLnuQzEaxUjS6k27v/kOjrcZvUfu66jjjb9buY2I26l4I
91+
tOIqRonjrrO0Bu9jem5d3cnsAk/3ZMAnB7RvShhyWzR0fNCpBI9Ai2o50msaAfIB
92+
qIE0OuWwVdE8lcqwgtbtmCgVWX6Vp2nHtXvsAadN5rmi/jU=
9393
-----END CERTIFICATE-----

examples/native/native_test.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[])
331331
#if defined(WOLFTPM_ST33) || defined(WOLFTPM_AUTODETECT)
332332
if (TPM2_GetVendorID() == TPM_VENDOR_STM) {
333333
XMEMSET(&cmdIn.getRand, 0, sizeof(cmdIn.getRand));
334-
i = (int)sizeof(cmdOut.getRand2.randomBytes);
334+
i = (int)sizeof(cmdOut.getRand2.randomBytes.buffer);
335335
if (i > (MAX_RESPONSE_SIZE-(int)sizeof(UINT16))) {
336336
i = (MAX_RESPONSE_SIZE-(int)sizeof(UINT16));
337337
}
@@ -361,7 +361,7 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[])
361361
/* the getRand and getRand2 have same return size header in cmdOut union */
362362
if (cmdOut.getRand.randomBytes.size != i) {
363363
printf("TPM2_GetRandom length mismatch %d != %d\n",
364-
cmdOut.getRand.randomBytes.size, MAX_RNG_REQ_SIZE);
364+
cmdOut.getRand.randomBytes.size, i);
365365
goto exit;
366366
}
367367
printf("TPM2_GetRandom: Got %d bytes\n", cmdOut.getRand.randomBytes.size);
@@ -371,7 +371,7 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[])
371371

372372
/* Stir Random */
373373
XMEMSET(&cmdIn.stirRand, 0, sizeof(cmdIn.stirRand));
374-
cmdIn.stirRand.inData.size = cmdOut.getRand.randomBytes.size;
374+
cmdIn.stirRand.inData.size = MAX_RNG_REQ_SIZE;
375375
XMEMCPY(cmdIn.stirRand.inData.buffer,
376376
cmdOut.getRand.randomBytes.buffer, cmdIn.stirRand.inData.size);
377377
rc = TPM2_StirRandom(&cmdIn.stirRand);

examples/tls/tls_client.c

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -260,19 +260,31 @@ int TPM2_TLS_ClientArgs(void* userCtx, int argc, char *argv[])
260260

261261
#ifdef HAVE_ECC
262262
if (useECC) {
263-
/* Create/Load ECC key for TLS authentication */
264-
rc = wolfTPM2_GetKeyTemplate_ECC(&publicTemplate,
265-
TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth |
266-
TPMA_OBJECT_sign | TPMA_OBJECT_noDA,
267-
TPM_ECC_NIST_P256, TPM_ALG_ECDSA);
268-
if (rc != 0) goto exit;
269-
rc = getECCkey(&dev,
270-
&storageKey,
271-
&eccKey,
272-
NULL,
273-
tpmDevId,
274-
(byte*)gKeyAuth, sizeof(gKeyAuth)-1,
275-
&publicTemplate);
263+
#ifdef WOLFTPM_MFG_IDENTITY
264+
/* Attempt to use pre-provisioned identity key */
265+
rc = wolfTPM2_ReadPublicKey(&dev, &eccKey, TPM2_IDEVID_KEY_HANDLE);
266+
if (rc == 0) {
267+
/* TODO: Supply master password (if not TEST_SAMPLE) */
268+
wolfTPM2_SetIdentityAuth(&dev, &eccKey.handle, NULL, 0);
269+
}
270+
else
271+
#endif
272+
{
273+
/* Create/Load ECC key for TLS authentication */
274+
rc = wolfTPM2_GetKeyTemplate_ECC(&publicTemplate,
275+
TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth |
276+
TPMA_OBJECT_sign | TPMA_OBJECT_noDA,
277+
TPM_ECC_NIST_P256, TPM_ALG_ECDSA);
278+
if (rc == 0) {
279+
rc = getECCkey(&dev,
280+
&storageKey,
281+
&eccKey,
282+
NULL,
283+
tpmDevId,
284+
(byte*)gKeyAuth, sizeof(gKeyAuth)-1,
285+
&publicTemplate);
286+
}
287+
}
276288
if (rc != 0) goto exit;
277289
}
278290

@@ -425,7 +437,17 @@ int TPM2_TLS_ClientArgs(void* userCtx, int argc, char *argv[])
425437
else {
426438
#ifdef HAVE_ECC
427439
printf("Loading ECC certificate\n");
428-
#ifdef NO_FILESYSTEM
440+
#ifdef WOLFTPM_MFG_IDENTITY
441+
uint8_t cert[800];
442+
uint32_t certSz = (uint32_t)sizeof(cert);
443+
rc = wolfTPM2_NVReadCert(&dev, TPM2_IDEVID_CERT_HANDLE, cert, &certSz);
444+
if (rc == 0) {
445+
/* Load "cert" buffer with ASN.1/DER certificate */
446+
rc = wolfSSL_CTX_use_certificate_buffer(ctx, cert, (long)certSz,
447+
WOLFSSL_FILETYPE_ASN1);
448+
449+
}
450+
#elif defined(NO_FILESYSTEM)
429451
/* Load "cert" buffer with ASN.1/DER certificate */
430452
#if 0
431453
rc = wolfSSL_CTX_use_certificate_buffer(ctx, cert.buffer, (long)cert.size,

src/tpm2.c

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5177,6 +5177,7 @@ int TPM2_SetCommandSet(SetCommandSet_In* in)
51775177
TPM2_Packet packet;
51785178
CmdInfo_t info = {0,0,0,0};
51795179
info.inHandleCnt = 1;
5180+
info.flags = (CMD_FLAG_AUTH_USER1);
51805181

51815182
TPM2_Packet_Init(ctx, &packet);
51825183

@@ -5209,6 +5210,7 @@ int TPM2_SetMode(SetMode_In* in)
52095210
TPM2_Packet packet;
52105211
CmdInfo_t info = {0,0,0,0};
52115212
info.inHandleCnt = 1;
5213+
info.flags = (CMD_FLAG_AUTH_USER1);
52125214

52135215
TPM2_Packet_Init(ctx, &packet);
52145216

@@ -5256,6 +5258,45 @@ TPM_RC TPM2_GetRandom2(GetRandom2_In* in, GetRandom2_Out* out)
52565258
}
52575259
return rc;
52585260
}
5261+
5262+
TPM_RC TPM2_GetProductInfo(uint8_t* info, uint16_t size)
5263+
{
5264+
TPM_RC rc;
5265+
TPM2_CTX* ctx = TPM2_GetActiveCtx();
5266+
5267+
if (ctx == NULL || info == NULL)
5268+
return BAD_FUNC_ARG;
5269+
5270+
rc = TPM2_AcquireLock(ctx);
5271+
if (rc == TPM_RC_SUCCESS) {
5272+
TPM2_Packet packet;
5273+
TPM2_Packet_Init(ctx, &packet);
5274+
TPM2_Packet_AppendU32(&packet, TPM_CAP_VENDOR_PROPERTY);
5275+
TPM2_Packet_AppendU32(&packet, 3); /* cTPM_SUBCAP_VENDOR_GET_PRODUCT_INFO */
5276+
TPM2_Packet_AppendU32(&packet, 1); /* only 1 property */
5277+
TPM2_Packet_Finalize(&packet, TPM_ST_NO_SESSIONS, TPM_CC_GetCapability);
5278+
5279+
/* send command */
5280+
rc = TPM2_SendCommand(ctx, &packet);
5281+
if (rc == TPM_RC_SUCCESS) {
5282+
/* Product info is:
5283+
* Serial Number (7 bytes)
5284+
* Pad (1 byte)
5285+
* Product ID (PIN) (2 bytes)
5286+
* Master Product ID (MPIN) (2 bytes)
5287+
* Product Internal Revision (1 byte)
5288+
* Pad (3 bytes)
5289+
* Firmware kernel version (4 bytes)
5290+
*/
5291+
5292+
/* start of product info starts at byte 26 */
5293+
if (size > packet.size - 26)
5294+
size = packet.size - 26;
5295+
XMEMCPY(info, &packet.buf[25], size);
5296+
}
5297+
}
5298+
return rc;
5299+
}
52595300
#endif /* WOLFTPM_ST33 || WOLFTPM_AUTODETECT */
52605301

52615302
/* GPIO Vendor Specific API's */
@@ -5586,7 +5627,7 @@ const char* TPM2_GetRCString(int rc)
55865627
return "Success";
55875628
}
55885629

5589-
if ((rc & RC_WARN) && (rc & RC_FMT1) == 0) {
5630+
if ((rc & RC_WARN) && (rc & RC_FMT1) == 0 && (rc & RC_VER1) == 0) {
55905631
int rc_warn = rc & RC_MAX_WARN;
55915632

55925633
switch (rc_warn) {

0 commit comments

Comments
 (0)