crypto/fipsmodule/ml_dsa/ml_dsa.h (160 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0 OR ISC
#ifndef ML_DSA_H
#define ML_DSA_H
#include <stddef.h>
#include <stdint.h>
#include <openssl/base.h>
#include <openssl/evp.h>
#define MLDSA44_PUBLIC_KEY_BYTES 1312
#define MLDSA44_PRIVATE_KEY_BYTES 2560
#define MLDSA44_SIGNATURE_BYTES 2420
#define MLDSA44_KEYGEN_SEED_BYTES 32
#define MLDSA44_SIGNATURE_SEED_BYTES 32
#define MLDSA65_PUBLIC_KEY_BYTES 1952
#define MLDSA65_PRIVATE_KEY_BYTES 4032
#define MLDSA65_SIGNATURE_BYTES 3309
#define MLDSA65_KEYGEN_SEED_BYTES 32
#define MLDSA65_SIGNATURE_SEED_BYTES 32
#define MLDSA87_PUBLIC_KEY_BYTES 2592
#define MLDSA87_PRIVATE_KEY_BYTES 4896
#define MLDSA87_SIGNATURE_BYTES 4627
#define MLDSA87_KEYGEN_SEED_BYTES 32
#define MLDSA87_SIGNATURE_SEED_BYTES 32
#if defined(__cplusplus)
extern "C" {
#endif
OPENSSL_EXPORT int ml_dsa_44_keypair(uint8_t *public_key,
uint8_t *secret_key,
uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_44_pack_pk_from_sk(uint8_t *public_key,
const uint8_t *private_key);
int ml_dsa_44_keypair_internal_no_self_test(uint8_t *public_key,
uint8_t *private_key,
const uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_44_keypair_internal(uint8_t *public_key,
uint8_t *private_key,
const uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_44_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_44_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_44_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
int ml_dsa_44_sign_internal_no_self_test(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_extmu_44_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_44_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_44_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_44_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len);
int ml_dsa_44_verify_internal_no_self_test(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len);
OPENSSL_EXPORT int ml_dsa_extmu_44_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len);
OPENSSL_EXPORT int ml_dsa_65_keypair(uint8_t *public_key,
uint8_t *secret_key,
uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_65_pack_pk_from_sk(uint8_t *public_key,
const uint8_t *private_key);
OPENSSL_EXPORT int ml_dsa_65_keypair_internal(uint8_t *public_key,
uint8_t *private_key,
const uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_65_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_65_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_65_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_extmu_65_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_65_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_65_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_65_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len);
OPENSSL_EXPORT int ml_dsa_extmu_65_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len);
OPENSSL_EXPORT int ml_dsa_87_keypair(uint8_t *public_key,
uint8_t *secret_key,
uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_87_pack_pk_from_sk(uint8_t *public_key,
const uint8_t *private_key);
OPENSSL_EXPORT int ml_dsa_87_keypair_internal(uint8_t *public_key,
uint8_t *private_key,
const uint8_t *seed);
OPENSSL_EXPORT int ml_dsa_87_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_87_sign(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_87_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_extmu_87_sign_internal(const uint8_t *private_key,
uint8_t *sig, size_t *sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len,
const uint8_t *rnd);
OPENSSL_EXPORT int ml_dsa_87_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *ctx_string, size_t ctx_string_len);
OPENSSL_EXPORT int ml_dsa_extmu_87_verify(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len);
OPENSSL_EXPORT int ml_dsa_87_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *message, size_t message_len,
const uint8_t *pre, size_t pre_len);
OPENSSL_EXPORT int ml_dsa_extmu_87_verify_internal(const uint8_t *public_key,
const uint8_t *sig, size_t sig_len,
const uint8_t *mu, size_t mu_len,
const uint8_t *pre, size_t pre_len);
#if defined(__cplusplus)
}
#endif
#endif