fix currency bin encoding

This commit is contained in:
swrup 2025-11-28 19:17:25 +01:00
parent ab82a357a9
commit 760e6de1fb
8 changed files with 89 additions and 20 deletions

View file

@ -113,17 +113,19 @@ module RsaPublicKey = struct
String.sub src pos len |> rev_string len |> Z.of_bits
let to_octets ({ n; e } : Mirage_crypto_pk.Rsa.pub) =
let n_len = Z.size n in
let e_len = Z.size e in
let n = Z.to_bits n in
let e = Z.to_bits e in
let n_len = String.length n in
let e_len = String.length e in
let len = 4 + n_len + e_len in
let b = Bytes.make len '\x00' in
Bytes.set_uint16_be b 0 n_len;
Bytes.set_uint16_be b 2 e_len;
let n = Z.to_bits n |> rev_string n_len in
let e = Z.to_bits e |> rev_string e_len in
let n = rev_string n_len n in
let e = rev_string e_len e in
Bytes.blit_string n 0 b 4 n_len;
Bytes.blit_string e 0 b (4 + n_len) e_len;
Bytes.unsafe_to_string b
Bytes.to_string b
let of_octets =
let check = function
@ -131,8 +133,6 @@ module RsaPublicKey = struct
| true -> Ok ()
in
fun s ->
Result.get_ok
@@
let open Syntax in
let len = String.length s in
let* () = check (len >= 4) in
@ -142,6 +142,11 @@ module RsaPublicKey = struct
let n = z_of_bits_be s 4 n_len in
let e = z_of_bits_be s (4 + n_len) e_len in
Mirage_crypto_pk.Rsa.pub ~n ~e |> unwrap_err_msg
let of_octets s =
match of_octets s with
| Error e -> Fmt.failwith "RsaPublicKey.of_octets failure: %s@." e
| Ok v -> v
end
include Binary