This commit is contained in:
swrup 2026-02-24 20:11:52 +01:00
parent e8b790ba0a
commit fa8eeccfef
2 changed files with 17 additions and 27 deletions

View file

@ -64,29 +64,12 @@ let rsa_blind pub ~bks ~msg =
let data_r_e = Z.rem (Z.mul data r_e) pub.n in let data_r_e = Z.rem (Z.mul data r_e) pub.n in
Z_extra.to_octets_be data_r_e Z_extra.to_octets_be data_r_e
(* -- WIP crypto -- *)
(* decrypt <=> sign *) (* decrypt <=> sign *)
let rsa_sign_z priv r = let rsa_sign_blinded priv ~bmsg =
let data = Z_extra.to_octets_be r in Mirage_crypto_pk.Rsa.decrypt ~crt_hardening:true ~key:priv bmsg
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 rsa_unblind pub ~bks ~sig_ =
let data = Z_extra.of_octets_be sig_ in
let bkey = rsa_blinding_key_derive pub bks in let bkey = rsa_blinding_key_derive pub bks in
let r_inv = let r_inv =
try Z.invert bkey pub.n try Z.invert bkey pub.n
@ -94,9 +77,16 @@ let rsa_unblind pub ~bks ~sig_ =
(* => gcd(r,n) <> 1, should be already checked for *) (* => gcd(r,n) <> 1, should be already checked for *)
assert false assert false
in in
let ubsig = Z.rem (Z.mul sig_ r_inv) pub.n in let data = Z.rem (Z.mul data r_inv) pub.n in
ubsig Z_extra.to_octets_be 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 rsa_verify pub ~msg ~sig_ =
let r = rsa_full_domain_hash pub msg in let msg_fdh = rsa_full_domain_hash pub msg in
rsa_verify_z pub r sig_ let s1 = Z_extra.to_octets_be msg_fdh 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 ()

View file

@ -99,12 +99,12 @@ let () =
"3KHKZJZ30ABB4E56MA2V0EQWGCWH0QQG9P2ZHYHR186C5HZXJMM4N9WXAQTKS94QSV9Y17GGNXN5MB1PZZFG7Q0FY88QPKKRG4MYCPSMTZK5W59R0MJVNJ4P4AQM96TDG5W7RV8GSNR1QQZ1GNHW3CX6D6ZRTMXB2NKB5SSYTDJS79F5ZFBRZ4HVED9JBBPWSR79KVV5QQ4APBGHBCKGMF9NJJS53A1BVYHDEVYAGFYF2SNEP827ZP50FKJ5GKGV8NQ15ESEZ69AT7GJG0T3TZVENY2YN9CVR98W3BKEZ53J7VTANARG8SJS8AMJQ7S23P5HRJ7XE9KTNRNXKH49MXV9JHHYE5535N7AGWEKR47SBCGNF44Z7XJ9RV5BQV12ZRJKN4HBZQHDNCMH3QKX9Z6G64" "3KHKZJZ30ABB4E56MA2V0EQWGCWH0QQG9P2ZHYHR186C5HZXJMM4N9WXAQTKS94QSV9Y17GGNXN5MB1PZZFG7Q0FY88QPKKRG4MYCPSMTZK5W59R0MJVNJ4P4AQM96TDG5W7RV8GSNR1QQZ1GNHW3CX6D6ZRTMXB2NKB5SSYTDJS79F5ZFBRZ4HVED9JBBPWSR79KVV5QQ4APBGHBCKGMF9NJJS53A1BVYHDEVYAGFYF2SNEP827ZP50FKJ5GKGV8NQ15ESEZ69AT7GJG0T3TZVENY2YN9CVR98W3BKEZ53J7VTANARG8SJS8AMJQ7S23P5HRJ7XE9KTNRNXKH49MXV9JHHYE5535N7AGWEKR47SBCGNF44Z7XJ9RV5BQV12ZRJKN4HBZQHDNCMH3QKX9Z6G64"
in in
let open Crypto in let open Crypto in
let msg = message_hash |> decode in
let pub = let pub =
rsa_public_key |> decode |> RsaPublicKey.of_octets |> Result.get_ok rsa_public_key |> decode |> RsaPublicKey.of_octets |> Result.get_ok
in in
let bks = blinding_key_secret |> decode in let bks = blinding_key_secret |> decode in
let s = Fdh_rsa.rsa_blind pub ~bks ~msg |> encode in let msg = decode message_hash in
assert (s = blinded_message); let bmsg = Fdh_rsa.rsa_blind pub ~bks ~msg in
assert (encode bmsg = blinded_message);
() ()