diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2024-10-26 14:26:10 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-26 14:26:10 -0300 |
| commit | 2eab114a120c7818861c0640ecdc300cf7366e53 (patch) | |
| tree | beb69c7038d79d8ca77d072d6f3afb144b5ff891 /lib/interop.ml | |
| parent | da309e886e31e6d55e46339647d56769d417114e (diff) | |
| download | Sakura-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.ml | 19 |
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 |
