#include "Conversion.hpp"
#include "HybridStrongRandom.hpp"
#include <NitroModules/ArrayBuffer.hpp>
#include <openssl/rand.h>

namespace icure::nitrokryptom::strongrandom {

void fill(const std::shared_ptr<margelo::nitro::ArrayBuffer>& data, int (*doFill)(unsigned char *, int)) {
    if (doFill(data->data(), conversions::safe_size_to_int(data->size())) != 1) {
        throw std::runtime_error("RAND_bytes/RAND_priv_bytes failed");
    }
}
    
}

namespace margelo::nitro::nitrokryptom {

void HybridStrongRandom::fill(const std::shared_ptr<ArrayBuffer>& buffer) {
    icure::nitrokryptom::strongrandom::fill(buffer, RAND_bytes);
}

void HybridStrongRandom::fillPrivate(const std::shared_ptr<ArrayBuffer>& buffer) {
    icure::nitrokryptom::strongrandom::fill(buffer, RAND_priv_bytes);
}

}
