wolfSSL / wolfTPM

wolfTPM is a highly portable TPM 2.0 library, designed for embedded use.
https://www.wolfssl.com
GNU General Public License v2.0
230 stars 55 forks source link

Add code to test external import between two TPM's #288

Closed dgarske closed 11 months ago

dgarske commented 11 months ago

ZD16249

dgarske commented 11 months ago
# Run on Pi4 with ATTPM20
PI4:pi@raspberrypi:~/wolftpm $ ./examples/keygen/external_import
wolfSSL Entering wolfCrypt_Init
Trying TPM @ /dev/spidev0.0 (33 MHz)
Found TPM @ /dev/spidev0.0
TPM2: Caps 0x30000695, Did 0x3205, Vid 0x1114, Rid 0x 1
TPM2_Startup pass
TPM2_SelfTest pass
TPM2_CreatePrimary: 0x80000000 (282 bytes)
Import RSA Seed 32
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
wolfSSL Entering wc_KeyPemToDer
wolfSSL Entering PemToDer
wolfSSL Using RSA OAEP padding
TPM2_Load Key Handle 0x80000001
TPM2_Create key: pub 278, priv 190
Public Area (size 278):
  Type: RSA (0x1), name: SHA256 (0xB), objAttr: 0x40460, authPolicy sz: 0
  RSA: sym algorithm: NULL (0x10), sym keyBits: 0, sym mode: Unknown (0x0)
       scheme: NULL (0x10), scheme hash: Unknown (0x0)
       keyBits: 2048, exponent: 0x10001, unique size 256
Key Public Blob 278
    01 00 0b 00 60 04 04 00 00 00 00 00 00 00 00 00 | ....`...........
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
    00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 | ................
    00 00 10 00 00 00 00 08 01 00 01 00 00 00 00 00 | ................
    00 01 88 be 84 09 1d f6 89 7b 2a 85 36 47 5d e5 | .........{*.6G].
    cb 7e 7d 50 d9 62 c3 68 cd 87 23 3f fd 27 20 68 | .~}P.b.h..#?.' h
    4c 65 a6 1e 03 c6 7f 2c d9 1c 62 f3 e9 b1 d8 e5 | Le.....,..b.....
    ab 52 38 40 13 95 ba d2 d0 28 b7 24 43 3a 23 65 | .R8@.....(.$C:#e
    d5 24 8e 65 0a d0 ae 2a cc 8a 2a 6f fb d9 0c 6b | .$.e...*..*o...k
    2c d3 45 df 1c 57 a2 0c 7b 03 c6 43 2f 4e 3d b0 | ,.E..W..{..C/N=.
    33 2b 16 77 6d 40 a1 80 e1 78 6b 67 80 f6 61 60 | 3+.wm@...xkg..a`
    f9 34 c5 fa 97 ab 25 7e 64 96 09 e8 9d 00 55 e9 | .4....%~d.....U.
    0c fb 97 41 0d ff 58 c6 c7 4c bf 90 ac 66 6f 94 | ...A..X..L...fo.
    ca 28 ab e7 45 b6 28 a9 a5 36 dd ef 34 f1 73 3c | .(..E.(..6..4.s<
    23 58 21 51 e7 52 13 b0 31 c2 d9 b1 fe 41 ff 86 | #X!Q.R..1....A..
    cf d1 0b 77 47 2c                               | ...wG,
Key Private Blob 190
    00 20 5a cd 8a 52 0f 31 24 41 4b b7 e1 d1 0a 5e | . Z..R.1$AK....^
    41 59 dd 99 db 76 b8 06 dd 95 96 9d ce af ee c3 | AY...v..........
    94 53 00 10 e2 52 54 26 13 e6 04 d3 38 d6 52 52 | .S...RT&....8.RR
    86 83 da 9a ee 18 bd bc b2 17 2d 7d a5 c5 31 62 | ..........-}..1b
    08 08 0a 15 81 e6 72 2f 16 8d 37 7c d9 26 f3 e6 | ......r/..7|.&..
    5d a4 4f 4d a4 97 43 2f eb 45 67 18 a0 e5 6e e7 | ].OM..C/.Eg...n.
    a8 5d d8 61 23 9d 54 a9 b5 35 ec 17 87 1d 5a ad | .].a#.T..5....Z.
    0b bc d6 7a 4c d8 77 ff 0b 85 73 b6 c4 e6 d4 4f | ...zL.w...s....O
    04 8b 79 65 2e 62 9b f6 cd 08 10 6d 6e 37 c6 58 | ..ye.b.....mn7.X
    c7 2d 0f 6d 52 95 d3 3c e8 80 79 99 f4 c4 2a 44 | .-.mR..<..y...*D
    b9 b6 89 99 a8 97 04 7f 1d 65 7a 70 7b 0f f3 a4 | .........ezp{...
    fb 70 47 7c 1c 05 88 16 20 94 f1 98 69 bd       | .pG|.... ...i.
Wrote 474 bytes to keyblob.bin
TPM2_Load Key Handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000001
TPM2_FlushContext: Closed handle 0x80000000

# Run again with -load (same TPM)
PI4:pi@raspberrypi:~/wolftpm $ ./examples/keygen/external_import -load
wolfSSL Entering wolfCrypt_Init
Trying TPM @ /dev/spidev0.0 (33 MHz)
Found TPM @ /dev/spidev0.0
TPM2: Caps 0x30000695, Did 0x3205, Vid 0x1114, Rid 0x 1
TPM2_Startup pass
TPM2_SelfTest pass
TPM2_CreatePrimary: 0x80000000 (282 bytes)
Import RSA Seed 32
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
wolfSSL Entering wc_KeyPemToDer
wolfSSL Entering PemToDer
wolfSSL Using RSA OAEP padding
TPM2_Load Key Handle 0x80000001
Reading 474 bytes from keyblob.bin
Public Area (size 278):
  Type: RSA (0x1), name: SHA256 (0xB), objAttr: 0x40460, authPolicy sz: 0
  RSA: sym algorithm: NULL (0x10), sym keyBits: 0, sym mode: Unknown (0x0)
       scheme: NULL (0x10), scheme hash: Unknown (0x0)
       keyBits: 2048, exponent: 0x10001, unique size 256
Reading the private part of the key
TPM2_Load Key Handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000001
TPM2_FlushContext: Closed handle 0x80000000
wolfSSL Entering wolfCrypt_Cleanup

# Replace TPM or run on different machine (used Pi4 with ST33TPM20)
$ ./examples/keygen/external_import -load
wolfSSL Entering wolfCrypt_Init
Trying TPM @ /dev/spidev0.0 (33 MHz)
Trying TPM @ /dev/spidev0.1 (33 MHz)
Found TPM @ /dev/spidev0.1
TPM2: Caps 0x30000697, Did 0x001d, Vid 0x15d1, Rid 0x36
TPM2_Startup pass
TPM2_SelfTest pass
TPM2_CreatePrimary: 0x80000000 (282 bytes)
Import RSA Seed 32
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | ................
wolfSSL Entering wc_KeyPemToDer
wolfSSL Entering PemToDer
wolfSSL Using RSA OAEP padding
TPM2_Load Key Handle 0x80000001
Reading 474 bytes from keyblob.bin
Public Area (size 278):
  Type: RSA (0x1), name: SHA256 (0xB), objAttr: 0x40460, authPolicy sz: 0
  RSA: sym algorithm: NULL (0x10), sym keyBits: 0, sym mode: Unknown (0x0)
       scheme: NULL (0x10), scheme hash: Unknown (0x0)
       keyBits: 2048, exponent: 0x10001, unique size 256
Reading the private part of the key
TPM2_Load Key Handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000002
TPM2_FlushContext: Closed handle 0x80000001
TPM2_FlushContext: Closed handle 0x80000000
wolfSSL Entering wolfCrypt_Cleanup