packages feed

KpqC-0.1.0: cbits/native/common/native_signature.h

#include <stddef.h>
#include <stdint.h>

#define KPQC_JOIN_(left, right) left##right
#define KPQC_JOIN(left, right) KPQC_JOIN_(left, right)
#define KPQC_API(name) KPQC_JOIN(KPQC_NATIVE_PREFIX, name)

int KPQC_API(keypair)(uint8_t *public_key, uint8_t *secret_key) {
    return crypto_sign_keypair(public_key, secret_key);
}

int KPQC_API(sign)(uint8_t *signature, uint64_t *signature_len,
                   const uint8_t *message, size_t message_len,
                   const uint8_t *context, size_t context_len,
                   const uint8_t *secret_key) {
    size_t length = 0;
    int status = crypto_sign_signature(signature, &length, message, message_len,
                                       context, context_len, secret_key);
    *signature_len = (uint64_t)length;
    return status;
}

int KPQC_API(verify)(const uint8_t *signature, size_t signature_len,
                     const uint8_t *message, size_t message_len,
                     const uint8_t *context, size_t context_len,
                     const uint8_t *public_key) {
    return crypto_sign_verify(signature, signature_len, message, message_len,
                              context, context_len, public_key);
}

#if defined(KPQC_TEST_ENTROPY)
int KPQC_API(set_test_entropy)(const uint8_t *input, size_t length) {
    return kpqc_set_test_entropy(input, length);
}

size_t KPQC_API(test_entropy_remaining)(void) {
    return kpqc_test_entropy_remaining();
}

void KPQC_API(clear_test_entropy)(void) {
    kpqc_clear_test_entropy();
}
#endif