@@ -268,50 +268,52 @@ static bool tpm2_tool_onstart(tpm2_options **opts) {
268268}
269269
270270static void set_default_TCG_EK_template (TPMI_ALG_PUBLIC alg ) {
271+ /* Values for RSA-2048 and ECC-256 keys. */
272+ TPMI_AES_KEY_BITS bits = 128 ;
273+ TPMI_ALG_HASH name_alg = TPM2_ALG_SHA256 ;
274+
275+ ctx .public .publicArea .objectAttributes = 0 ;
271276
272277 switch (alg ) {
273278 case TPM2_ALG_RSA :
279+ if (ctx .public .publicArea .parameters .rsaDetail .keyBits > 2048 ) {
280+ /* Values for RSA-3072 and RSA-4096 keys. */
281+ bits = 256 ;
282+ name_alg = TPM2_ALG_SHA384 ;
283+ ctx .public .publicArea .objectAttributes = TPMA_OBJECT_USERWITHAUTH ;
284+ }
274285 ctx .public .publicArea .parameters .rsaDetail .symmetric .algorithm =
275286 TPM2_ALG_AES ;
276- ctx .public .publicArea .parameters .rsaDetail .symmetric .keyBits .aes = 128 ;
287+ ctx .public .publicArea .parameters .rsaDetail .symmetric .keyBits .aes = bits ;
277288 ctx .public .publicArea .parameters .rsaDetail .symmetric .mode .aes =
278289 TPM2_ALG_CFB ;
279- ctx .public .publicArea .parameters .rsaDetail .scheme .scheme = TPM2_ALG_NULL ;
280- ctx .public .publicArea .parameters .rsaDetail .keyBits = 2048 ;
281- ctx .public .publicArea .parameters .rsaDetail .exponent = 0 ;
282- ctx .public .publicArea .unique .rsa .size = 256 ;
283290 break ;
284291 case TPM2_ALG_ECC :
292+ if (ctx .public .publicArea .unique .ecc .x .size > 32 ) {
293+ /* Values for ECC-384 keys. */
294+ bits = 256 ;
295+ name_alg = TPM2_ALG_SHA384 ;
296+ ctx .public .publicArea .objectAttributes = TPMA_OBJECT_USERWITHAUTH ;
297+ }
298+ if (ctx .public .publicArea .unique .ecc .x .size > 48 ) {
299+ /* Values for ECC-512 keys. */
300+ name_alg = TPM2_ALG_SHA512 ;
301+ }
302+
285303 ctx .public .publicArea .parameters .eccDetail .symmetric .algorithm =
286304 TPM2_ALG_AES ;
287- ctx .public .publicArea .parameters .eccDetail .symmetric .keyBits .aes = 128 ;
305+ ctx .public .publicArea .parameters .eccDetail .symmetric .keyBits .aes = bits ;
288306 ctx .public .publicArea .parameters .eccDetail .symmetric .mode .sym =
289307 TPM2_ALG_CFB ;
290- ctx .public .publicArea .parameters .eccDetail .scheme .scheme = TPM2_ALG_NULL ;
291- ctx .public .publicArea .parameters .eccDetail .curveID = TPM2_ECC_NIST_P256 ;
292- ctx .public .publicArea .parameters .eccDetail .kdf .scheme = TPM2_ALG_NULL ;
293- ctx .public .publicArea .unique .ecc .x .size = 32 ;
294- ctx .public .publicArea .unique .ecc .y .size = 32 ;
295308 break ;
296309 }
297310
298- ctx .public .publicArea .objectAttributes =
311+ ctx .public .publicArea .objectAttributes | =
299312 TPMA_OBJECT_RESTRICTED | TPMA_OBJECT_ADMINWITHPOLICY
300313 | TPMA_OBJECT_DECRYPT | TPMA_OBJECT_FIXEDTPM
301314 | TPMA_OBJECT_FIXEDPARENT | TPMA_OBJECT_SENSITIVEDATAORIGIN ;
302315
303- static const TPM2B_DIGEST auth_policy = {
304- .size = 32 ,
305- .buffer = {
306- 0x83 , 0x71 , 0x97 , 0x67 , 0x44 , 0x84 , 0xB3 , 0xF8 , 0x1A , 0x90 , 0xCC ,
307- 0x8D , 0x46 , 0xA5 , 0xD7 , 0x24 , 0xFD , 0x52 , 0xD7 , 0x6E , 0x06 , 0x52 ,
308- 0x0B , 0x64 , 0xF2 , 0xA1 , 0xDA , 0x1B , 0x33 , 0x14 , 0x69 , 0xAA
309- }
310- };
311- TPM2B_DIGEST * authp = & ctx .public .publicArea .authPolicy ;
312- * authp = auth_policy ;
313-
314- ctx .public .publicArea .nameAlg = TPM2_ALG_SHA256 ;
316+ ctx .public .publicArea .nameAlg = name_alg ;
315317}
316318
317319static tool_rc process_input (tpm2_option_flags flags ) {
0 commit comments