From 954e12164120c593b753c7763bfc786fc701bdbd Mon Sep 17 00:00:00 2001 From: Lucas Soriano del Pino Date: Mon, 19 Apr 2021 11:00:07 +1000 Subject: [PATCH] [WIP] Copying over hash_to_scalar etc --- Cargo.lock | 232 +++++++++++++++--------------- monero-adaptor/depend/hash/hash.c | 191 +++++++++++++++++++++++- monero-adaptor/depend/hash/hash.h | 17 ++- monero-adaptor/src/lib.rs | 6 +- 4 files changed, 321 insertions(+), 125 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 694f87cc..f69d4d3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,8 +58,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6fe808308bb07d393e2ea47780043ec47683fcf19cf5efc8ca51c50cc8c68a" dependencies = [ - "block-cipher", - "opaque-debug 0.3.0", + "block-cipher", + "opaque-debug 0.3.0", ] [[package]] @@ -74,7 +74,7 @@ version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" dependencies = [ - "memchr", + "memchr", ] [[package]] @@ -83,7 +83,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi 0.3.9", ] [[package]] @@ -350,8 +350,8 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" dependencies = [ - "byteorder", - "serde", + "byteorder", + "serde", ] [[package]] @@ -360,21 +360,21 @@ version = "0.58.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f" dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "clap", - "env_logger", - "lazy_static", - "lazycell", - "log 0.4.14", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "which 3.1.1", + "bitflags", + "cexpr", + "clang-sys", + "clap", + "env_logger", + "lazy_static", + "lazycell", + "log 0.4.14", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which 3.1.1", ] [[package]] @@ -383,9 +383,9 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ec5f88a446d66e7474a3b8fa2e348320b574463fb78d799d90ba68f79f48e0e" dependencies = [ - "bech32", - "bitcoin_hashes", - "secp256k1", + "bech32", + "bitcoin_hashes", + "secp256k1", "serde", ] @@ -598,8 +598,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17fa3d1ac1ca21c5c4e36a97f3c3eb25084576f6fc47bf0139c1123434216c6c" dependencies = [ "cc", - "libc", - "pkg-config", + "libc", + "pkg-config", ] [[package]] @@ -614,7 +614,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom", + "nom", ] [[package]] @@ -658,11 +658,11 @@ version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ - "libc", - "num-integer", - "num-traits", - "time 0.1.43", - "winapi 0.3.9", + "libc", + "num-integer", + "num-traits", + "time 0.1.43", + "winapi 0.3.9", ] [[package]] @@ -671,9 +671,9 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" dependencies = [ - "glob", - "libc", - "libloading", + "glob", + "libc", + "libloading", ] [[package]] @@ -682,9 +682,9 @@ version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ - "ansi_term 0.11.0", - "atty", - "bitflags", + "ansi_term 0.11.0", + "atty", + "bitflags", "strsim", "textwrap", "unicode-width", @@ -1060,10 +1060,10 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", + "heck", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1072,11 +1072,11 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" dependencies = [ - "atty", - "humantime", - "log 0.4.14", - "regex", - "termcolor", + "atty", + "humantime", + "log 0.4.14", + "regex", + "termcolor", ] [[package]] @@ -1336,8 +1336,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" dependencies = [ - "opaque-debug 0.3.0", - "polyval", + "opaque-debug 0.3.0", + "polyval", ] [[package]] @@ -1352,9 +1352,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d832b01df74254fe364568d6ddc294443f61cbec82816b60904303af87efae78" dependencies = [ - "bytes 1.0.1", - "fnv", - "futures-core", + "bytes 1.0.1", + "fnv", + "futures-core", "futures-sink", "futures-util", "http", @@ -1513,9 +1513,9 @@ version = "0.10.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" dependencies = [ - "base64 0.9.3", - "httparse", - "language-tags", + "base64 0.9.3", + "httparse", + "language-tags", "log 0.3.9", "mime 0.2.6", "num_cpus", @@ -1757,11 +1757,11 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374" dependencies = [ - "arrayvec", - "bitflags", - "cfg-if 1.0.0", - "ryu", - "static_assertions", + "arrayvec", + "bitflags", + "cfg-if 1.0.0", + "ryu", + "static_assertions", ] [[package]] @@ -1776,8 +1776,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", + "cfg-if 1.0.0", + "winapi 0.3.9", ] [[package]] @@ -1786,9 +1786,9 @@ version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe5759b526f75102829c15e4d8566603b4bf502ed19b5f35920d98113873470d" dependencies = [ - "atomic", - "bytes 1.0.1", - "futures", + "atomic", + "bytes 1.0.1", + "futures", "lazy_static", "libp2p-core", "libp2p-dns", @@ -2202,16 +2202,16 @@ dependencies = [ name = "monero-adaptor" version = "0.1.0" dependencies = [ - "anyhow", - "bindgen", - "cc", - "curve25519-dalek", - "hex 0.4.3", - "monero", - "nazgul", - "rand 0.7.3", - "sha2 0.9.3", - "tokio 1.4.0", + "anyhow", + "bindgen", + "cc", + "curve25519-dalek", + "hex 0.4.3", + "monero", + "nazgul", + "rand 0.7.3", + "sha2 0.9.3", + "tokio 1.4.0", ] [[package]] @@ -2504,12 +2504,12 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.5", - "smallvec", - "winapi 0.3.9", + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.2.5", + "smallvec", + "winapi 0.3.9", ] [[package]] @@ -2524,9 +2524,9 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" dependencies = [ - "base64 0.13.0", - "once_cell", - "regex", + "base64 0.13.0", + "once_cell", + "regex", ] [[package]] @@ -2742,16 +2742,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3" dependencies = [ - "bytes 1.0.1", - "heck", - "itertools 0.9.0", - "log 0.4.14", - "multimap", - "petgraph", - "prost", - "prost-types", - "tempfile", - "which 4.0.2", + "bytes 1.0.1", + "heck", + "itertools 0.9.0", + "log 0.4.14", + "multimap", + "petgraph", + "prost", + "prost-types", + "tempfile", + "which 4.0.2", ] [[package]] @@ -3043,9 +3043,9 @@ version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] @@ -3152,9 +3152,9 @@ version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc7f5b8840fb1f83869a3e1dfd06d93db79ea05311ac5b42b8337d3371caa4f1" dependencies = [ - "arrayvec", - "num-traits", - "serde", + "arrayvec", + "num-traits", + "serde", ] [[package]] @@ -3453,7 +3453,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3" dependencies = [ - "lazy_static", + "lazy_static", ] [[package]] @@ -3467,10 +3467,10 @@ name = "sigma_fun" version = "0.1.3-alpha.0" source = "git+https://github.com/LLFourn/secp256kfun#8538ef22498170960a9769df2700c1986cc540fd" dependencies = [ - "curve25519-dalek", - "digest 0.9.0", - "generic-array 0.14.4", - "rand_core 0.5.1", + "curve25519-dalek", + "digest 0.9.0", + "generic-array 0.14.4", + "rand_core 0.5.1", "secp256kfun", "serde", ] @@ -3831,9 +3831,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" dependencies = [ - "byteorder", - "dirs", - "winapi 0.3.9", + "byteorder", + "dirs", + "winapi 0.3.9", ] [[package]] @@ -3842,7 +3842,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" dependencies = [ - "winapi-util", + "winapi-util", ] [[package]] @@ -3851,8 +3851,8 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86ca8ced750734db02076f44132d802af0b33b09942331f4459dde8636fd2406" dependencies = [ - "libc", - "winapi 0.3.9", + "libc", + "winapi 0.3.9", ] [[package]] @@ -4592,7 +4592,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" dependencies = [ - "webpki", + "webpki", ] [[package]] @@ -4601,7 +4601,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" dependencies = [ - "libc", + "libc", ] [[package]] @@ -4610,8 +4610,8 @@ version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" dependencies = [ - "libc", - "thiserror", + "libc", + "thiserror", ] [[package]] @@ -4654,7 +4654,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi 0.3.9", ] [[package]] diff --git a/monero-adaptor/depend/hash/hash.c b/monero-adaptor/depend/hash/hash.c index 626a8818..d74eb186 100644 --- a/monero-adaptor/depend/hash/hash.c +++ b/monero-adaptor/depend/hash/hash.c @@ -1,9 +1,188 @@ -// -// Created by Rishab Sharma on 16/4/21. -// - +#include +#include +#include #include "hash.h" +#include +#include -float add(float a, float b) { - return (a + b); +static void local_abort(const char *msg) +{ + fprintf(stderr, "%s\n", msg); +#ifdef NDEBUG + _exit(1); +#else + abort(); +#endif +} + +typedef uint64_t state_t[25]; + +void hash_to_scalar(const uint8_t *in, size_t inlen, uint8_t *md, int mdlen) { + keccak(in, inlen, md, mdlen); + sc_reduce32(md); +} + +void keccak(const uint8_t *in, size_t inlen, uint8_t *md, int mdlen) +{ + state_t st; + uint8_t temp[144]; + size_t i, rsiz, rsizw; + + static_assert(HASH_DATA_AREA <= sizeof(temp), "Bad keccak preconditions"); + if (mdlen <= 0 || (mdlen > 100 && sizeof(st) != (size_t)mdlen)) + { + local_abort("Bad keccak use"); + } + + rsiz = sizeof(state_t) == mdlen ? HASH_DATA_AREA : 200 - 2 * mdlen; + rsizw = rsiz / 8; + + memset(st, 0, sizeof(st)); + + for ( ; inlen >= rsiz; inlen -= rsiz, in += rsiz) { + for (i = 0; i < rsizw; i++) { + uint64_t ina; + memcpy(&ina, in + i * 8, 8); + st[i] ^= swap64le(ina); + } + keccakf(st, KECCAK_ROUNDS); + } + + // last block and padding + if (inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp)) + { + local_abort("Bad keccak use"); + } + + if (inlen > 0) + memcpy(temp, in, inlen); + temp[inlen++] = 1; + memset(temp + inlen, 0, rsiz - inlen); + temp[rsiz - 1] |= 0x80; + + for (i = 0; i < rsizw; i++) + st[i] ^= swap64le(((uint64_t *) temp)[i]); + + keccakf(st, KECCAK_ROUNDS); + + if (((size_t)mdlen % sizeof(uint64_t)) != 0) + { + local_abort("Bad keccak use"); + } + memcpy_swap64le(md, st, mdlen/sizeof(uint64_t)); +} + +void sc_reduce32(unsigned char *s) { + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = (load_4(s + 28) >> 7); + int64_t s12 = 0; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + + carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21; + carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21; + carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21; + carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21; + carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21; + carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21; + carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21; + carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21; + carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21; + carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21; + carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21; + carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21; + carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21; + carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21; + carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21; + carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21; + carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21; + carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21; + carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21; + carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21; + carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21; + carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; } diff --git a/monero-adaptor/depend/hash/hash.h b/monero-adaptor/depend/hash/hash.h index d8e58ec5..730e7775 100644 --- a/monero-adaptor/depend/hash/hash.h +++ b/monero-adaptor/depend/hash/hash.h @@ -2,9 +2,24 @@ // Created by Rishab Sharma on 16/4/21. // +#include +#include + #ifndef XMR_BTC_SWAP_COMIT_HASH_H #define XMR_BTC_SWAP_COMIT_HASH_H -float add(float a, float b); +#ifndef KECCAK_ROUNDS +#define KECCAK_ROUNDS 24 +#endif + +enum { + HASH_SIZE = 32, + HASH_DATA_AREA = 136 +}; + +void hash_to_scalar(const uint8_t *in, size_t inlen, uint8_t *md, int mdlen); + +void keccak(const uint8_t *in, size_t inlen, uint8_t *md, int mdlen); +void sc_reduce32(unsigned char *); #endif //XMR_BTC_SWAP_COMIT_HASH_H diff --git a/monero-adaptor/src/lib.rs b/monero-adaptor/src/lib.rs index 1fca4a92..08d094d1 100644 --- a/monero-adaptor/src/lib.rs +++ b/monero-adaptor/src/lib.rs @@ -704,7 +704,9 @@ mod tests2 { #[test] fn test_add() { - let a = unsafe { add(3.0, 2.0) }; - dbg!(a); + let hash = [0u8; 32]; + let mut scalar = [0u8; 32]; + unsafe { hash_to_scalar(&hash as *const u8, 32, &mut scalar as *mut u8, 32) }; + dbg!(scalar); } }