From 5e7de2cdb26216c54372f91ccb487b8410c55524 Mon Sep 17 00:00:00 2001 From: swrup Date: Fri, 13 Feb 2026 09:34:03 +0100 Subject: [PATCH] add kdf; wip FDH-RSA --- dune-project | 1 + mte.opam | 1 + src/dune | 1 + src/fdh.ml | 9 +++++++++ src/rsa.ml | 0 test/crypto.ml | 21 +++++++++++++++++++++ 6 files changed, 33 insertions(+) create mode 100644 src/fdh.ml create mode 100644 src/rsa.ml diff --git a/dune-project b/dune-project index 1aadd32c..d4fc79ff 100644 --- a/dune-project +++ b/dune-project @@ -35,6 +35,7 @@ bin angstrom mirage-crypto + kdf digestif duration jsont diff --git a/mte.opam b/mte.opam index 53820528..3d706521 100644 --- a/mte.opam +++ b/mte.opam @@ -22,6 +22,7 @@ depends: [ "bin" "angstrom" "mirage-crypto" + "kdf" "digestif" "duration" "jsont" diff --git a/src/dune b/src/dune index a9322eed..0a6fa0ea 100644 --- a/src/dune +++ b/src/dune @@ -17,6 +17,7 @@ caqti-driver-pgx bin mirage-crypto + kdf.hkdf digestif duration vif diff --git a/src/fdh.ml b/src/fdh.ml new file mode 100644 index 00000000..5d4b2157 --- /dev/null +++ b/src/fdh.ml @@ -0,0 +1,9 @@ +module Kdf = struct + module XTR = Hkdf.Make (Digestif.SHA512) + module PRF = Hkdf.Make (Digestif.SHA256) + + let kdf ~xts ~ikm ~ctx ~len = + let prk = XTR.extract ~salt:xts ikm in + let okm = PRF.expand ~prk ~info:ctx len in + okm +end diff --git a/src/rsa.ml b/src/rsa.ml new file mode 100644 index 00000000..e69de29b diff --git a/test/crypto.ml b/test/crypto.ml index 9b7578e7..0d09e8a8 100644 --- a/test/crypto.ml +++ b/test/crypto.ml @@ -73,3 +73,24 @@ let () = in () + +let () = + (* kdf *) + let salt = "94KPT83PCNS7J83KC5P78Y8" in + let ikm = "94KPT83MD1JJ0WV5CDS6AX10D5Q70XBM41NPAY90DNGQ8SBJD5GPR" in + let ctx = + "94KPT83141HPYVKMCNW78833D1TPWTSC41GPRWVF41NPWVVQDRG62WS04XMPWSKF4WG6JVH0EHM6A82J8S1G" + in + let out_len = 64 in + let out = + "GTMR4QT05Z9WF5HKVG0WK9RPXGHSMHJNW377G9GJXCA8B0FEKPF4D27RJMSJZYWSQNTBJ5EYVV7ZW18B48Z0JVJJ80RHB706Y96Q358" + in + + let xts = salt |> decode in + let ikm = ikm |> decode in + let ctx = ctx |> decode in + let okm = Fdh.Kdf.kdf ~xts ~ikm ~ctx ~len:out_len in + let okm = okm |> encode in + assert (okm = out); + + ()