diff --git a/src/fdh_rsa.ml b/src/fdh_rsa.ml index ec5eb08e..011ab302 100644 --- a/src/fdh_rsa.ml +++ b/src/fdh_rsa.ml @@ -64,28 +64,6 @@ let rsa_blind pub ~bks ~msg = let data_r_e = Z.rem (Z.mul data r_e) pub.n in Z_extra.to_octets_be data_r_e -(* -- WIP crypto -- *) - -(* decrypt <=> sign *) -let rsa_sign_z priv r = - let data = Z_extra.to_octets_be r in - Mirage_crypto_pk.Rsa.decrypt ~crt_hardening:true ~key:priv data - -(* TODO crypto - look into mirage-crypto for this - use Eqaf for constant time string compare *) -let rsa_verify_z pub r sig_ = - let data = Z_extra.to_octets_be r in - let sig_' = Mirage_crypto_pk.Rsa.encrypt ~key:pub data in - match String.equal sig_ sig_' with - | false -> Fmt.error "RSA signature verification failed" - | true -> Ok () - -let rsa_sign_fdh priv msg = - let pub = RsaPrivateKey.pub_of_priv priv in - let r = rsa_full_domain_hash pub msg in - rsa_sign_z priv r - let rsa_unblind pub ~bks ~sig_ = let bkey = rsa_blinding_key_derive pub bks in let r_inv = @@ -97,6 +75,20 @@ let rsa_unblind pub ~bks ~sig_ = let ubsig = Z.rem (Z.mul sig_ r_inv) pub.n in ubsig +let rsa_sign_fdh priv msg = + let pub = RsaPrivateKey.pub_of_priv priv in + let r = rsa_full_domain_hash pub msg in + let data = Z_extra.to_octets_be r in + (* decrypt <=> sign *) + Mirage_crypto_pk.Rsa.decrypt ~crt_hardening:true ~key:priv data + +(* TODO crypto + look into mirage-crypto for this + at least use Eqaf for constant time string compare *) let rsa_verify pub ~msg ~sig_ = let r = rsa_full_domain_hash pub msg in - rsa_verify_z pub r sig_ + let s1 = Z_extra.to_octets_be r in + let s2 = Mirage_crypto_pk.Rsa.encrypt ~key:pub sig_ in + match String.equal s1 s2 with + | false -> Fmt.error "RSA signature verification failed" + | true -> Ok ()