From 24bd749675874f0ad517838633b9187ad3e430c4 Mon Sep 17 00:00:00 2001 From: Jeremy Cooper Date: Wed, 9 Nov 2022 15:03:14 -0800 Subject: [PATCH] Remove unnecessary "Random" command when signing. It is not neccessary to invoke the "GenRandom" command before requesting an ECDSA signature. This command does not generate the nonce (random value "k") that is required for ECDSA -- that is performed internally by the ECC508/ECC608 and always has been. By removing this unnecessary command it should be possible to generate signatures in less time than before. --- src/ecc508.erl | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/ecc508.erl b/src/ecc508.erl index 85692c0..63a09ef 100644 --- a/src/ecc508.erl +++ b/src/ecc508.erl @@ -639,22 +639,17 @@ digest_finalize(Pid, State, FinalData) when byte_size(FinalData) =< 63 -> -spec sign(I2C::pid(), KeyId::non_neg_integer(), Data::binary() | {digest, binary()}) -> {ok, binary()} | {error, term()}. sign(Pid, KeyId, {digest, Digest}) -> - case random(Pid) of + case nonce(Pid, {passthrough, msg_digest}, Digest) of {error, Error} -> {error, Error}; - {ok, _} -> - case nonce(Pid, {passthrough, msg_digest}, Digest) of + ok -> + case execute(Pid, command({sign, {external, msg_digest, KeyId}})) of {error, Error} -> {error, Error}; - ok -> - case execute(Pid, command({sign, {external, msg_digest, KeyId}})) of - {error, Error} -> - {error, Error}; - {ok, awake} -> - {error, ecc_asleep}; - {ok, <>} -> - {ok, public_key:der_encode('ECDSA-Sig-Value', #'ECDSA-Sig-Value'{r=R, s=S})} - end + {ok, awake} -> + {error, ecc_asleep}; + {ok, <>} -> + {ok, public_key:der_encode('ECDSA-Sig-Value', #'ECDSA-Sig-Value'{r=R, s=S})} end end; sign(Pid, KeyId, Data) ->