diff options
| author | Estevan Castilho <tevo@riajuu.net> | 2026-07-30 19:55:42 +0000 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-07-30 16:56:06 -0300 |
| commit | 2a3ffd895f5c2061d7941134bb15df6047141916 (patch) | |
| tree | ac564d40b1d24794d4d9c77055b0486eae0128dd /lib/concepts/Hash.ml | |
| parent | 357a0c4ec609ccfd86764ac41480bcb7b1194986 (diff) | |
| download | RNT-2a3ffd895f5c2061d7941134bb15df6047141916.tar.gz RNT-2a3ffd895f5c2061d7941134bb15df6047141916.zip | |
B-trees & serialization with bencode
Diffstat (limited to 'lib/concepts/Hash.ml')
| -rw-r--r-- | lib/concepts/Hash.ml | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/concepts/Hash.ml b/lib/concepts/Hash.ml index f467ee7..aac7428 100644 --- a/lib/concepts/Hash.ml +++ b/lib/concepts/Hash.ml @@ -2,8 +2,31 @@ type hash = Digestif.SHA256.t +let size = 256/8 + +let compare h1 h2 = Digestif.SHA256.unsafe_compare h1 h2 + |> Ordering.of_int + let hash_of_value (v : Value.value) = Representation.(blob_of_value v |> bytes_of_blob) |> Digestif.SHA256.digest_bytes +let hash_of_bytes bytes = Digestif.SHA256.digest_bytes bytes + +let hash_of_blob blob = Representation.bytes_of_blob blob |> Digestif.SHA256.digest_bytes + +let to_raw_string hash = Digestif.SHA256.to_raw_string hash + +let of_raw_string str = Digestif.SHA256.of_raw_string str + let hash_equals = Digestif.SHA256.equal let bytes_of_hash (h : hash) = Bytes.of_string (Digestif.SHA256.to_raw_string h) + +let power_of_two p = + let b = Bytes.make 32 '\x00' in + let byte = 31 - (p / 8) in + Bytes.set b byte (Char.chr (1 lsl (p mod 8))); + Bytes.unsafe_to_string b + +let pick n hash = + let threshold = Digestif.SHA256.of_raw_string (power_of_two (256 - n)) in + compare hash threshold = Ordering.Smaller |
