#ifndef MT_CRYPTO_H #define MT_CRYPTO_H #include #include #define MT_OK 0 #define MT_ERR_INVALID_INPUT 1 #define MT_ERR_OPENSSL_INIT 2 #define MT_ERR_KEYGEN_FAILED 3 #define MT_ERR_SIGN_FAILED 4 #define MT_ERR_VERIFY_FAILED 5 #define MT_ERR_KAT_MISMATCH 6 #define MT_ERR_PARAM_QUERY_FAILED 7 #define MT_ERR_PARAM_SIZE_MISMATCH 8 #define MT_ERR_PARAM_FETCH_FAILED 9 #define MT_ERR_INVALID_SECRET_KEY 10 #define MT_ERR_INVALID_PUBLIC_KEY 11 #define MT_ERR_SIGN_LENGTH_MISMATCH 12 #define MT_MLDSA65_PUBKEY_SIZE 1952 #define MT_MLDSA65_SECRETKEY_SIZE 4032 #define MT_MLDSA65_SIGNATURE_SIZE 3309 #define MT_MLDSA65_SEED_SIZE 32 #define MT_MLKEM768_PUBKEY_SIZE 1184 #define MT_MLKEM768_SECRETKEY_SIZE 2400 #define MT_MLKEM768_SEED_SIZE 64 int mt_keypair_from_seed_mldsa( const uint8_t seed[MT_MLDSA65_SEED_SIZE], uint8_t pk_out[MT_MLDSA65_PUBKEY_SIZE], uint8_t sk_out[MT_MLDSA65_SECRETKEY_SIZE] ); int mt_keypair_from_seed_mlkem( const uint8_t seed[MT_MLKEM768_SEED_SIZE], uint8_t pk_out[MT_MLKEM768_PUBKEY_SIZE], uint8_t sk_out[MT_MLKEM768_SECRETKEY_SIZE] ); int mt_sign_mldsa( const uint8_t sk[MT_MLDSA65_SECRETKEY_SIZE], const uint8_t* msg, size_t msg_len, uint8_t sig_out[MT_MLDSA65_SIGNATURE_SIZE] ); /* mt_sign_mldsa_ctx — FIPS 204 Algorithm 2 deterministic Sign с FIPS context. * Montana usage pattern: empty context (0-length) — equivalent к mt_sign_mldsa. * Non-empty context используется для NIST conformance testing с ACVP non-empty * context cases. ctx_len limit per FIPS 204: 255 bytes max. */ int mt_sign_mldsa_ctx( const uint8_t sk[MT_MLDSA65_SECRETKEY_SIZE], const uint8_t* msg, size_t msg_len, const uint8_t* ctx, size_t ctx_len, uint8_t sig_out[MT_MLDSA65_SIGNATURE_SIZE] ); int mt_verify_mldsa( const uint8_t pk[MT_MLDSA65_PUBKEY_SIZE], const uint8_t* msg, size_t msg_len, const uint8_t sig[MT_MLDSA65_SIGNATURE_SIZE] ); int mt_self_test(void); #endif