aboutsummaryrefslogtreecommitdiffstats
path: root/shared
diff options
context:
space:
mode:
Diffstat (limited to 'shared')
-rw-r--r--shared/librelational_engine/flake.nix0
-rw-r--r--shared/librelational_engine/library.cpp47
-rw-r--r--shared/librelational_engine/library.h1
3 files changed, 46 insertions, 2 deletions
diff --git a/shared/librelational_engine/flake.nix b/shared/librelational_engine/flake.nix
deleted file mode 100644
index e69de29..0000000
--- a/shared/librelational_engine/flake.nix
+++ /dev/null
diff --git a/shared/librelational_engine/library.cpp b/shared/librelational_engine/library.cpp
index 8048486..cab8f93 100644
--- a/shared/librelational_engine/library.cpp
+++ b/shared/librelational_engine/library.cpp
@@ -2,8 +2,51 @@
#include <merklecpp.h>
#include <openssl/sha.h>
#include <iomanip>
+#include <fstream>
+#include <iterator>
+
+#include <sys/stat.h>
+
+std::vector<uint8_t> read_tree(const char* tree_path) {
+ std::ifstream file(tree_path, std::ios::binary);
+ file.unsetf(std::ios::skipws);
+ file.seekg(0, std::ios::end);
+ const std::streampos file_size = file.tellg();
+ file.seekg(0, std::ios::beg);
+ std::vector<uint8_t> v;
+ v.reserve(file_size);
+ v.insert(v.begin(), std::istream_iterator<uint8_t>(file), std::istream_iterator<uint8_t>());
+ return v;
+}
+
+void write_tree(const char* tree_path, const std::vector<uint8_t>& serialized_tree) {
+ std::ofstream out(tree_path, std::ios::out | std::ios::binary);
+ out.write(reinterpret_cast<const char*>(serialized_tree.data()), serialized_tree.size());
+ out.close();
+}
+
extern "C" {
#include "library.h"
+ extern void register_to_merkle(const char* tree_path, const char* computed_hash) {
+ struct stat st;
+ if (stat(tree_path, &st) == 0) {
+ const std::vector<uint8_t> tree_bytes = read_tree(tree_path);
+ merkle::Tree tree;
+ tree.deserialise(tree_bytes);
+ const merkle::Tree::Hash hash(computed_hash);
+ tree.insert(hash);
+ std::vector<uint8_t> target;
+ tree.serialise(target);
+ write_tree(tree_path, target);
+ } else {
+ merkle::Tree::Hash hash(computed_hash);
+ merkle::Tree tree;
+ tree.insert(hash);
+ std::vector<uint8_t> target;
+ tree.serialise(target);
+ write_tree(tree_path, target);
+ }
+ }
extern void merkle_generate_root(char** hashes, const int n, char* root) {
merkle::Tree tree;
for (int i = 0; i < n; i++){
@@ -23,8 +66,8 @@ extern "C" {
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);
std::memcpy(computed_hash, ss.str().c_str(), HASH_SIZE);
- std::cout << "⚙️ COMPUTED HASH: " << computed_hash << std::endl;
+ // std::cout << "⚙️ COMPUTED HASH: " << computed_hash << std::endl;
}
extern int trash() { return 100; }
-} \ No newline at end of file
+}
diff --git a/shared/librelational_engine/library.h b/shared/librelational_engine/library.h
index ebf8497..16734be 100644
--- a/shared/librelational_engine/library.h
+++ b/shared/librelational_engine/library.h
@@ -5,5 +5,6 @@
extern void merkle_generate_root(char**, const int, char*);
extern void compute_hash(char*, const char*);
+extern void register_to_merkle(const char*, const char*);
#endif //MERKLECPP_STUB_LIBRARY_H