#include <stdlib.h>
#include <string.h>
#include "libbitcoinpqc/ml_dsa.h"
#include "../../dilithium/ref/api.h"
#include "../../dilithium/ref/randombytes.h"
#include "../../dilithium/ref/params.h"
#include "../../dilithium/ref/sign.h"
extern void ml_dsa_init_random_source(const uint8_t *random_data, size_t random_data_size);
extern void ml_dsa_setup_custom_random(void);
extern void ml_dsa_restore_original_random(void);
int ml_dsa_44_keygen(
uint8_t *pk,
uint8_t *sk,
const uint8_t *random_data,
size_t random_data_size
) {
if (!pk || !sk || !random_data || random_data_size < 128) {
return -1;
}
ml_dsa_init_random_source(random_data, random_data_size);
ml_dsa_setup_custom_random();
int result = crypto_sign_keypair(pk, sk);
ml_dsa_restore_original_random();
return result;
}