From 30fae43da3fc566c3595084941e01af1b6634925 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 24 Feb 2026 21:21:44 +0100 Subject: [PATCH] --- src/crypto.ml | 11 +---------- src/fdh_rsa.ml | 20 +++++++++++++------- src/secmod_rsa.ml | 5 +++-- test/test_crypto.ml | 2 +- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/crypto.ml b/src/crypto.ml index bc42c580..2f42ae72 100644 --- a/src/crypto.ml +++ b/src/crypto.ml @@ -248,18 +248,9 @@ module RsaPrivateKey = struct Jsont.of_of_string ~kind:"RsaPrivateKey" of_b32 ~enc:to_b32 end -module RsaSignature : sig - type t - - val jsont : t Jsont.t - val sign : key:RsaPrivateKey.t -> string -> t -end = struct +module RsaSignature = struct type t = string - (* TODO crypto - this is a placeholder signature algorithm *) - let sign ~key s = Mirage_crypto_pk.Rsa.PKCS1.sig_encode ~key s - let jsont = let of_b32 s = B32.decode s in let to_b32 t = B32.encode t in diff --git a/src/fdh_rsa.ml b/src/fdh_rsa.ml index 692ecd30..13bbc439 100644 --- a/src/fdh_rsa.ml +++ b/src/fdh_rsa.ml @@ -1,4 +1,4 @@ -(* WIP +(* TODO WIP fdh-rsa full-domain-hash RSA based on libgnunetutil crypto_rsa.c @@ -56,7 +56,7 @@ let rsa_blinding_key_derive (pub : RsaPublicKey.t) bks = let r = Kdf.kdf_mod_n ~n:pub.n ~xts ~ikm:bks ~ctx in gcd_validate r pub.n; r -let rsa_blind pub ~bks ~msg = +let rsa_blind pub ~bks msg = let data = rsa_full_domain_hash pub msg in let bkey = rsa_blinding_key_derive pub bks in (* can we just use [powm] here instead? *) @@ -65,11 +65,11 @@ let rsa_blind pub ~bks ~msg = Z_extra.to_octets_be data_r_e (* decrypt <=> sign *) -let rsa_sign_blinded priv ~bmsg = +let rsa_sign_blinded priv bmsg = Mirage_crypto_pk.Rsa.decrypt ~crt_hardening:true ~key:priv bmsg -let rsa_unblind pub ~bks ~sig_ = - let data = Z_extra.of_octets_be sig_ in +let rsa_unblind pub ~bks bsig = + let data = Z_extra.of_octets_be bsig in let bkey = rsa_blinding_key_derive pub bks in let r_inv = try Z.invert bkey pub.n @@ -80,10 +80,16 @@ let rsa_unblind pub ~bks ~sig_ = let data = Z.rem (Z.mul data r_inv) pub.n in Z_extra.to_octets_be data -(* TODO crypto +let sign ~priv ~pub ~bks ~msg = + let bmsg = rsa_blind pub ~bks msg in + let bsig = rsa_sign_blinded priv bmsg in + let sig_ = rsa_unblind pub ~bks bsig in + sig_ + +(* TODO fdh-rsa look into mirage-crypto for this at least use Eqaf for constant time string compare *) -let rsa_verify pub ~msg ~sig_ = +let verify pub ~msg ~sig_ = let msg_fdh = rsa_full_domain_hash pub msg in let s1 = Z_extra.to_octets_be msg_fdh in let s2 = Mirage_crypto_pk.Rsa.encrypt ~key:pub sig_ in diff --git a/src/secmod_rsa.ml b/src/secmod_rsa.ml index 10bec6b7..c8c17deb 100644 --- a/src/secmod_rsa.ml +++ b/src/secmod_rsa.ml @@ -257,9 +257,10 @@ module Make () = struct let sm_pub = t.sm_pub let sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s - let sign h_pub s = + let sign h_pub msg = let+ k = find h_pub in - let data = RsaSignature.sign ~key:k.priv s in + let bks = "deadbeaf" in + let data = Fdh_rsa.sign ~priv:k.priv ~pub:k.pub ~bks ~msg in data let revoke h_pub = diff --git a/test/test_crypto.ml b/test/test_crypto.ml index d146a633..28c1e780 100644 --- a/test/test_crypto.ml +++ b/test/test_crypto.ml @@ -104,7 +104,7 @@ let () = in let bks = blinding_key_secret |> decode in let msg = decode message_hash in - let bmsg = Fdh_rsa.rsa_blind pub ~bks ~msg in + let bmsg = Fdh_rsa.rsa_blind pub ~bks msg in assert (encode bmsg = blinded_message); ()