aboutsummaryrefslogtreecommitdiffstats
path: root/lib/interop.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2024-10-26 14:26:10 -0300
committerGitHub <noreply@github.com>2024-10-26 14:26:10 -0300
commit2eab114a120c7818861c0640ecdc300cf7366e53 (patch)
treebeb69c7038d79d8ca77d072d6f3afb144b5ff891 /lib/interop.ml
parentda309e886e31e6d55e46339647d56769d417114e (diff)
downloadSakura-2eab114a120c7818861c0640ecdc300cf7366e53.tar.gz
Sakura-2eab114a120c7818861c0640ecdc300cf7366e53.zip
Basic storage with C interop (#1)
* writer command design * dune build with shared core lib * port c lib project inside ocaml * os specific dynamic link * fix project name on flake * fix: cmake cxx version breaking merklecpp * finish write to disk and update maps func * add non atomic commit to transaction graph * merkle tree binding for generating root hash * disk module refactor --------- Co-authored-by: Renan Lopes <renans.l@icloud.com>
Diffstat (limited to '')
-rw-r--r--lib/interop.ml19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/interop.ml b/lib/interop.ml
new file mode 100644
index 0000000..fdfde5f
--- /dev/null
+++ b/lib/interop.ml
@@ -0,0 +1,19 @@
+open Ctypes
+
+module Sha256 = struct
+ let compute_hash content =
+ let size_with_null_terminator = C.Types.hash_size + 1 in
+ let buf = Ctypes.allocate_n char ~count:size_with_null_terminator in
+ let () = C.Functions.compute_hash buf (Bytes.to_string content) in
+ Ctypes.coerce (ptr char) Ctypes.string buf
+end
+
+module Merkle = struct
+ let merkle_generate_root hashes =
+ let size_with_null_terminator = C.Types.hash_size + 1 in
+ let buf = Ctypes.allocate_n char ~count:size_with_null_terminator in
+ let len = List.length hashes in
+ let hashes = CArray.of_list string hashes in
+ C.Functions.merkle_generate_root (CArray.start hashes) len buf;
+ Ctypes.coerce (ptr char) Ctypes.string buf
+end