5 #include "sw/device/lib/crypto/impl/ecc/ecdsa_p384_keygen.h"
9 #include "sw/device/lib/crypto/drivers/otbn.h"
14 #define MODULE_ID MAKE_MODULE_ID('p', '3', 'k')
29 static const otbn_addr_t kOtbnVarEcdsaMode =
31 static const otbn_addr_t kOtbnVarEcdsaX =
33 static const otbn_addr_t kOtbnVarEcdsaY =
35 static const otbn_addr_t kOtbnVarEcdsaD0 =
37 static const otbn_addr_t kOtbnVarEcdsaD1 =
43 static const uint32_t kOtbnEcdsaModeKeygen =
45 static const uint32_t kOtbnEcdsaModeSideloadKeygen =
52 kOtbnEcdsaModeWords = 1,
55 status_t ecdsa_p384_keygen_start(
void) {
57 HARDENED_TRY(otbn_load_app(kOtbnAppEcdsaKeygen));
60 uint32_t mode = kOtbnEcdsaModeKeygen;
61 HARDENED_TRY(otbn_dmem_write(kOtbnEcdsaModeWords, &mode, kOtbnVarEcdsaMode));
64 return otbn_execute();
67 status_t ecdsa_p384_sideload_keygen_start(
void) {
69 HARDENED_TRY(otbn_load_app(kOtbnAppEcdsaKeygen));
72 uint32_t mode = kOtbnEcdsaModeSideloadKeygen;
73 HARDENED_TRY(otbn_dmem_write(kOtbnEcdsaModeWords, &mode, kOtbnVarEcdsaMode));
76 return otbn_execute();
82 HARDENED_TRY(otbn_busy_wait_for_done());
85 HARDENED_TRY(otbn_dmem_read(kP384MaskedScalarShareWords, kOtbnVarEcdsaD0,
87 HARDENED_TRY(otbn_dmem_read(kP384MaskedScalarShareWords, kOtbnVarEcdsaD1,
91 HARDENED_TRY(otbn_dmem_read(kP384CoordWords, kOtbnVarEcdsaX, public_key->
x));
92 HARDENED_TRY(otbn_dmem_read(kP384CoordWords, kOtbnVarEcdsaY, public_key->
y));
95 HARDENED_TRY(otbn_dmem_sec_wipe());
102 HARDENED_TRY(otbn_busy_wait_for_done());
105 HARDENED_TRY(otbn_dmem_read(kP384CoordWords, kOtbnVarEcdsaX, public_key->
x));
106 HARDENED_TRY(otbn_dmem_read(kP384CoordWords, kOtbnVarEcdsaY, public_key->
y));
109 HARDENED_TRY(otbn_dmem_sec_wipe());