~
This commit is contained in:
parent
e8b790ba0a
commit
f10791fa33
1 changed files with 15 additions and 23 deletions
|
|
@ -64,28 +64,6 @@ 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 *)
|
|
||||||
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 rsa_unblind pub ~bks ~sig_ =
|
||||||
let bkey = rsa_blinding_key_derive pub bks in
|
let bkey = rsa_blinding_key_derive pub bks in
|
||||||
let r_inv =
|
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
|
let ubsig = Z.rem (Z.mul sig_ r_inv) pub.n in
|
||||||
ubsig
|
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 rsa_verify pub ~msg ~sig_ =
|
||||||
let r = rsa_full_domain_hash pub msg in
|
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 ()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue