montana/Montana-Protocol/Code/crates/mt-crypto-native/src/lib.rs

61 lines
2.3 KiB
Rust
Raw Normal View History

#![allow(non_snake_case)]
use libc::{c_int, size_t};
// [C-1] EXEMPT — FFI boundary constants.
//
// mt-crypto-native — sub-FFI crate которым пользуется mt-crypto. Чтобы избежать
// циклической зависимости (mt-crypto уже импортирует mt-crypto-native), эти
// размеры дублируются здесь как primary FFI contract значения. Authoritative
// SSOT для остального workspace остаётся mt_crypto::{PUBLIC_KEY_SIZE,
// SECRET_KEY_SIZE, SIGNATURE_SIZE, KEYPAIR_SEED_SIZE, MLKEM_*}.
//
// Sync проверяется regression-тестом mt_crypto_native_consts_match в
// crates/mt-crypto/tests/native_consts_sync.rs — расхождение даёт failing
// build.
pub const MLDSA65_PUBKEY_SIZE: usize = 1952;
pub const MLDSA65_SECRETKEY_SIZE: usize = 4032;
pub const MLDSA65_SIGNATURE_SIZE: usize = 3309;
pub const MLDSA65_SEED_SIZE: usize = 32;
pub const MLKEM768_PUBKEY_SIZE: usize = 1184;
pub const MLKEM768_SECRETKEY_SIZE: usize = 2400;
pub const MLKEM768_SEED_SIZE: usize = 64;
pub const MT_OK: c_int = 0;
pub const MT_ERR_INVALID_INPUT: c_int = 1;
pub const MT_ERR_OPENSSL_INIT: c_int = 2;
pub const MT_ERR_KEYGEN_FAILED: c_int = 3;
pub const MT_ERR_SIGN_FAILED: c_int = 4;
pub const MT_ERR_VERIFY_FAILED: c_int = 5;
pub const MT_ERR_KAT_MISMATCH: c_int = 6;
pub const MT_ERR_PARAM_QUERY_FAILED: c_int = 7;
pub const MT_ERR_PARAM_SIZE_MISMATCH: c_int = 8;
pub const MT_ERR_PARAM_FETCH_FAILED: c_int = 9;
pub const MT_ERR_INVALID_SECRET_KEY: c_int = 10;
pub const MT_ERR_INVALID_PUBLIC_KEY: c_int = 11;
pub const MT_ERR_SIGN_LENGTH_MISMATCH: c_int = 12;
extern "C" {
pub fn mt_keypair_from_seed_mldsa(seed: *const u8, pk_out: *mut u8, sk_out: *mut u8) -> c_int;
pub fn mt_keypair_from_seed_mlkem(seed: *const u8, pk_out: *mut u8, sk_out: *mut u8) -> c_int;
pub fn mt_sign_mldsa(sk: *const u8, msg: *const u8, msg_len: size_t, sig_out: *mut u8)
-> c_int;
pub fn mt_sign_mldsa_ctx(
sk: *const u8,
msg: *const u8,
msg_len: size_t,
ctx: *const u8,
ctx_len: size_t,
sig_out: *mut u8,
) -> c_int;
pub fn mt_verify_mldsa(pk: *const u8, msg: *const u8, msg_len: size_t, sig: *const u8)
-> c_int;
pub fn mt_self_test() -> c_int;
}