1*0c814320Stb /* $OpenBSD: mlkem_tests_util.h,v 1.4 2024/12/26 00:04:24 tb Exp $ */ 2d4ed7533Stb /* 38889493eStb * Copyright (c) 2024 Bob Beck <beck@obtuse.com> 48889493eStb * Copyright (c) 2024 Theo Buehler <tb@openbsd.org> 575c083a0Sbeck * 675c083a0Sbeck * Permission to use, copy, modify, and/or distribute this software for any 775c083a0Sbeck * purpose with or without fee is hereby granted, provided that the above 875c083a0Sbeck * copyright notice and this permission notice appear in all copies. 975c083a0Sbeck * 1075c083a0Sbeck * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1175c083a0Sbeck * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1275c083a0Sbeck * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 1375c083a0Sbeck * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1475c083a0Sbeck * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 1575c083a0Sbeck * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 16d4ed7533Stb * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17d4ed7533Stb */ 1875c083a0Sbeck 1975c083a0Sbeck #ifndef MLKEM_TEST_UTIL_H 2075c083a0Sbeck #define MLKEM_TEST_UTIL_H 2175c083a0Sbeck 228889493eStb #include <stddef.h> 23d4ed7533Stb #include <stdint.h> 24d4ed7533Stb 258889493eStb #include "bytestring.h" 2675c083a0Sbeck 27*0c814320Stb #include "mlkem.h" 28*0c814320Stb #include "mlkem_internal.h" 2975c083a0Sbeck 308889493eStb int compare_data(const uint8_t *want, const uint8_t *got, size_t len, 31*0c814320Stb const char *msg); 3275c083a0Sbeck 33*0c814320Stb int mlkem768_encode_private_key(const void *priv, uint8_t **out_buf, 34*0c814320Stb size_t *out_len); 35*0c814320Stb int mlkem768_encode_public_key(const void *pub, uint8_t **out_buf, 36*0c814320Stb size_t *out_len); 37*0c814320Stb int mlkem1024_encode_private_key(const void *priv, uint8_t **out_buf, 38*0c814320Stb size_t *out_len); 39*0c814320Stb int mlkem1024_encode_public_key(const void *pub, uint8_t **out_buf, 40*0c814320Stb size_t *out_len); 4175c083a0Sbeck 42*0c814320Stb int mlkem768_decap(uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], 43*0c814320Stb const uint8_t *ciphertext, size_t ciphertext_len, const void *priv); 44*0c814320Stb void mlkem768_encap(uint8_t *out_ciphertext, 45*0c814320Stb uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], const void *pub); 46*0c814320Stb void mlkem768_encap_external_entropy(uint8_t *out_ciphertext, 47*0c814320Stb uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], const void *pub, 48*0c814320Stb const uint8_t entropy[MLKEM_ENCAP_ENTROPY]); 49*0c814320Stb void mlkem768_generate_key(uint8_t *out_encoded_public_key, 50*0c814320Stb uint8_t optional_out_seed[MLKEM_SEED_BYTES], void *out_private_key); 51*0c814320Stb void mlkem768_generate_key_external_entropy(uint8_t *out_encoded_public_key, 52*0c814320Stb void *out_private_key, const uint8_t entropy[MLKEM_SEED_BYTES]); 53*0c814320Stb int mlkem768_parse_private_key(void *priv, CBS *private_key_cbs); 54*0c814320Stb int mlkem768_parse_public_key(void *pub, CBS *in); 55*0c814320Stb void mlkem768_public_from_private(void *out_public_key, const void *private_key); 56*0c814320Stb 57*0c814320Stb int mlkem1024_decap(uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], 58*0c814320Stb const uint8_t *ciphertext, size_t ciphertext_len, const void *priv); 59*0c814320Stb void mlkem1024_encap(uint8_t *out_ciphertext, 60*0c814320Stb uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], const void *pub); 61*0c814320Stb void mlkem1024_encap_external_entropy(uint8_t *out_ciphertext, 62*0c814320Stb uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES], const void *pub, 63*0c814320Stb const uint8_t entropy[MLKEM_ENCAP_ENTROPY]); 64*0c814320Stb void mlkem1024_generate_key(uint8_t *out_encoded_public_key, 65*0c814320Stb uint8_t optional_out_seed[MLKEM_SEED_BYTES], void *out_private_key); 66*0c814320Stb void mlkem1024_generate_key_external_entropy(uint8_t *out_encoded_public_key, 67*0c814320Stb void *out_private_key, const uint8_t entropy[MLKEM_SEED_BYTES]); 68*0c814320Stb int mlkem1024_parse_private_key(void *priv, CBS *private_key_cbs); 69*0c814320Stb int mlkem1024_parse_public_key(void *pub, CBS *in); 70*0c814320Stb void mlkem1024_public_from_private(void *out_public_key, const void *private_key); 71*0c814320Stb 72*0c814320Stb typedef int (*mlkem_encode_private_key_fn)(const void *, uint8_t **, size_t *); 73*0c814320Stb typedef int (*mlkem_encode_public_key_fn)(const void *, uint8_t **, size_t *); 74*0c814320Stb typedef int (*mlkem_decap_fn)(uint8_t [MLKEM_SHARED_SECRET_BYTES], 75*0c814320Stb const uint8_t *, size_t, const void *); 76*0c814320Stb typedef void (*mlkem_encap_fn)(uint8_t *, uint8_t [MLKEM_SHARED_SECRET_BYTES], 77*0c814320Stb const void *); 78*0c814320Stb typedef void (*mlkem_encap_external_entropy_fn)(uint8_t *, 79*0c814320Stb uint8_t [MLKEM_SHARED_SECRET_BYTES], const void *, 80*0c814320Stb const uint8_t [MLKEM_ENCAP_ENTROPY]); 81*0c814320Stb typedef void (*mlkem_generate_key_fn)(uint8_t *, uint8_t *, void *); 82*0c814320Stb typedef void (*mlkem_generate_key_external_entropy_fn)(uint8_t *, void *, 83*0c814320Stb const uint8_t [MLKEM_SEED_BYTES]); 84*0c814320Stb typedef int (*mlkem_parse_private_key_fn)(void *, CBS *); 85*0c814320Stb typedef int (*mlkem_parse_public_key_fn)(void *, CBS *); 86*0c814320Stb typedef void (*mlkem_public_from_private_fn)(void *out_public_key, 87*0c814320Stb const void *private_key); 8875c083a0Sbeck 898889493eStb #endif /* MLKEM_TEST_UTIL_H */ 90