From 53c5afc2746dc90a432cf4aefc2e81c0407ba6bd Mon Sep 17 00:00:00 2001 From: swrup Date: Sat, 28 Feb 2026 21:54:47 +0100 Subject: [PATCH] --- src/crypto.ml | 18 ++++++++++++++++-- test/test_crypto.ml | 46 +++++++++++++++++---------------------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/crypto.ml b/src/crypto.ml index fc3772d5..5402e12b 100644 --- a/src/crypto.ml +++ b/src/crypto.ml @@ -272,9 +272,23 @@ end = struct type t = SHA512.t + type cipher = + | RSA + | CS [@ocaml.warning "-37"] + + (* = GNUNET_CRYPTO_BSA_(RSA|CS) *) + let cipher_to_int32 = function RSA -> 1_l | CS -> 2_l + let hash_of_rsa pub = - let s = RsaPublicKey.to_octets pub in - SHA512.digest_string s + let age_mask = 0_l in + let cipher = cipher_to_int32 RSA in + let pub = RsaPublicKey.to_octets pub in + let len = String.length pub in + let buf = Bytes.create (4 + 4 + len) in + Bytes.set_int32_be buf 0 age_mask; + Bytes.set_int32_be buf 4 cipher; + Bytes.blit_string pub 0 buf 8 len; + SHA512.digest_bytes buf let of_octets s = match SHA512.of_raw_string_opt s with diff --git a/test/test_crypto.ml b/test/test_crypto.ml index 52944cb6..7b4e7417 100644 --- a/test/test_crypto.ml +++ b/test/test_crypto.ml @@ -123,35 +123,23 @@ let () = () -(* denomination-hash test value from taler-wallet-core/src/withdraw.test.ts *) -let test1 = - ( "040000XT67C8KBD6B75TTQ3SK8FWXMNQW4372T3BDDGPAMB9RFCA03638W8T3F71WFEFK9NP32VKYVNFXPYRWQ1N1HDKV5J0DFEKHBPJCYSWCBJDRNWD7G8BN8PT97FA9AMV75MYEK4X54D1HGJ207JSVJBGFCATSPNTEYNHEQF1F220W00TBZR1HNPDQFD56FG0DJQ9KGHM8EC33H6AY9YN9CNX5R3Z4TZ4Q23W47SBHB13H6W74FQJG1F50X38VRSC4SR8RWBAFB7S4K8D2H4NMRFSQT892A3T0BTBW7HM5C0H2CK6FRKG31F7W9WP1S29013K5CXYE55CT8TH6N8J9B780R42Y5S3ZB6J6E9H76XBPSGH4TGYSR2VZRB98J417KCQMZKX1BB67E7W5KVE37TC9SJ904002", - "Q21FQSSG4FXNT96Z14CHXM8N1RZAG9GPHAV8PRWS0PZAAVWH7PBW6R97M2CH19KKP65NNSWXY7B6S53PT3CBM342E357ZXDDJ8RDVW8" - ) - -let test2 = - ( "040000Y63CF78QFPKRY77BRK9P557Q1GQWX3NCZ3HSYSK0Z7TT0KGRA7N4SKBKEHSTVHX1Z9DNXMJR4EXSY1TXCKV0GJ3T3YYC6Z0JNMJFVYQAV4FX5J90NZH1N33MZTV8HS9SMNAA9S6K73G4P99GYBB01B0P6M1KXZ5JRDR7VWBR3MEJHHGJ6QBMCJR3NWJRE3WJW9PRY8QPQ2S7KFWTWRESH2DBXCXWBD2SRN6P9YX8GRAEMFEGXC9V5GVJTEMH6ZDGNXFPWZE3JVJ2Q4N9GDYKBCHZCJ7M7M2RJ9ZV4Y64NAN9BT6XDC68215GKKRHTW1BBF1MYY6AR3JCTT9HYAM923RMVQR3TAEB7SDX8J76XRZWYH3AGJCZAQGMN5C8SSH9AHQ9RNQJQ15CN45R37X4YNFJV904002", - "447WA23SCBATMABHA0793F92MYTBYVPYMMQHCPKMKVY5P7RZRFMQ6VRW0Y8HRA7177GTBT0TBT08R21DZD129AJ995H9G09XBFE55G8" - ) - let () = - let f (rsa_pub, h_pub) = - let open Crypto in - assert ( - rsa_pub - |> RsaPublicKey.of_b32 - |> Result.get_ok - |> RsaPublicKey.to_octets - = (rsa_pub |> B32.decode |> Result.get_ok)); - - let h_pub' = - DenominationHash.to_b32 - (DenominationHash.hash_of_rsa - (Result.get_ok @@ RsaPublicKey.of_b32 rsa_pub)) - in - assert (h_pub' = h_pub); - - () + (* denomination-hash *) + (* test value generated by using taler-typescript-core (taler-util/src/taler-crypto.ts) + at SUPPORTED_EXCHANGE_PROTOCOL_VERSION = "31:0:6" *) + let rsa_pub = + "040000Y0EAK8KAVYJ3GBT5EJHEE6PQ843PDRPRNBFTPEPQEYCXZ30M0S7B80303C75D1CMK74ZJT7WA7DGWTEK7C26J6GVPR93FX99BWX48HGSN8R9C2V104X6WECY6TYPDCAM3FXEVFVVE610P1C8DPV2GKGWYJ5K91A470CBZ00EASZ6A013B7CZ6SAF7MJS20TBYTVWHN7CPJFV5Q7Q0AXGED999E1G3JC3PY5W4MVC16J5SG2SPRJMW5YGM0N1C64NCZBDBTA9HW009TEV5NBCNRQ9GK54AEDY84SVEF4V43ZCPMQ6M3ZWZGQNBX8EF19NCKVQN7MMRCDCY7A9MVJSDEBRZDQ4ZKRVT2C35225KM660ZQ731B9ZYH9JQ35WQ93MKH4PH4AWCJ8EH38JJA93R73M704002" in + let h_pub = + "X1WDZ01CAP3V8ZRQMXX1CCWNKYDMYYKA6RG3X61N7RBARX85QCDJCDEAEDZNFYC2J22P2C930A13BAGQNVZMFG4M1YM28TCS2WK0T6R" + in + let open Crypto in + let h_pub' = + RsaPublicKey.of_b32 rsa_pub + |> Result.get_ok + |> DenominationHash.hash_of_rsa + |> DenominationHash.to_b32 + in + assert (h_pub' = h_pub); - f test1; f test2 + ()