|
| 1 | + |
1 | 2 | /** |
2 | 3 | * @file |
3 | 4 | * @brief This is the public header file to be included by applications |
|
17 | 18 | #define acvp_h |
18 | 19 |
|
19 | 20 | #include <stddef.h> |
| 21 | +#include <stdbool.h> |
20 | 22 |
|
21 | 23 | #ifdef __cplusplus |
22 | 24 | extern "C" |
@@ -273,7 +275,11 @@ typedef enum acvp_cipher { |
273 | 275 | ACVP_SLH_DSA_KEYGEN, |
274 | 276 | ACVP_SLH_DSA_SIGGEN, |
275 | 277 | ACVP_SLH_DSA_SIGVER, |
276 | | - ACVP_CIPHER_END |
| 278 | + ACVP_ASCON_AEAD128, // 120 |
| 279 | + ACVP_ASCON_CXOF128, |
| 280 | + ACVP_ASCON_HASH256, |
| 281 | + ACVP_ASCON_XOF128, |
| 282 | + ACVP_CIPHER_END |
277 | 283 | } ACVP_CIPHER; |
278 | 284 |
|
279 | 285 |
|
@@ -387,6 +393,14 @@ typedef enum acvp_alg_type_dsa { |
387 | 393 | ACVP_SUB_DSA_SIGVER, |
388 | 394 | } ACVP_SUB_DSA; |
389 | 395 |
|
| 396 | +/** @enum ACVP_SUB_ASCON */ |
| 397 | +typedef enum acvp_alg_type_ascon { |
| 398 | + ACVP_SUB_ASCON_AEAD128 = ACVP_ASCON_AEAD128, |
| 399 | + ACVP_SUB_ASCON_CXOF128, |
| 400 | + ACVP_SUB_ASCON_HASH256, |
| 401 | + ACVP_SUB_ASCON_XOF128, |
| 402 | +} ACVP_SUB_ASCON; |
| 403 | + |
390 | 404 | /** @enum ACVP_SUB_RSA */ |
391 | 405 | typedef enum acvp_alg_type_rsa { |
392 | 406 | ACVP_SUB_RSA_KEYGEN = ACVP_RSA_KEYGEN, |
@@ -1959,6 +1973,71 @@ typedef struct acvp_dsa_tc_t { |
1959 | 1973 | unsigned char *msg; |
1960 | 1974 | } ACVP_DSA_TC; |
1961 | 1975 |
|
| 1976 | +/** @enum ACVP_ASCON_MODE */ |
| 1977 | +typedef enum acvp_ascon_mode { |
| 1978 | + ACVP_ASCON_MODE_AEAD128 = 0, |
| 1979 | + ACVP_ASCON_MODE_CXOF128, |
| 1980 | + ACVP_ASCON_MODE_HASH256, |
| 1981 | + ACVP_ASCON_MODE_XOF128, |
| 1982 | + ACVP_ASCON_MODE_NONE, |
| 1983 | +} ACVP_ASCON_MODE; |
| 1984 | + |
| 1985 | +/** @enum ACVP_ASCON_PARM */ |
| 1986 | +typedef enum acvp_ascon_parm { |
| 1987 | + ACVP_ASCON_MODE_PARM = 1, |
| 1988 | + ACVP_ASCON_REV_PARM, |
| 1989 | + ACVP_ASCON_DIR_PARM, |
| 1990 | + ACVP_ASCON_PAYLEN_PARM, |
| 1991 | + ACVP_ASCON_ADLEN_PARM, |
| 1992 | + ACVP_ASCON_TAGLEN_PARM, |
| 1993 | + ACVP_ASCON_NONCEMASK_PARM, |
| 1994 | + ACVP_ASCON_MSGLEN_PARM, |
| 1995 | + ACVP_ASCON_OUTLEN_PARM, |
| 1996 | + ACVP_ASCON_CUSSTRLEN_PARM, |
| 1997 | +} ACVP_ASCON_PARM; |
| 1998 | + |
| 1999 | +typedef enum acvp_ascon_direction { |
| 2000 | + ACVP_ASCON_DIR_ENCRYPT = 1, |
| 2001 | + ACVP_ASCON_DIR_DECRYPT, |
| 2002 | + ACVP_ASCON_DIR_BOTH, |
| 2003 | +} ACVP_ASCON_DIRECTION; |
| 2004 | + |
| 2005 | +typedef enum acvp_ascon_testtype { |
| 2006 | + ACVP_ASCON_AFT = 1, |
| 2007 | +} ACVP_ASCON_TESTTYPE; |
| 2008 | + |
| 2009 | +/** |
| 2010 | + * @struct ACVP_ASCON_TC |
| 2011 | + * @brief This struct holds data that represents a single test case for ASCON |
| 2012 | + * testing. This data is passed between libacvp and the crypto module. |
| 2013 | + */ |
| 2014 | +typedef struct acvp_ascon_tc_t { |
| 2015 | + int tg_id; |
| 2016 | + int tc_id; |
| 2017 | + ACVP_CIPHER cipher; |
| 2018 | + ACVP_ASCON_TESTTYPE testtype; |
| 2019 | + ACVP_ASCON_MODE mode; |
| 2020 | + ACVP_ASCON_DIRECTION direction; // AEAD128 |
| 2021 | + bool supports_nonce_mask; // AEAD128 |
| 2022 | + unsigned char *key; // AEAD128 |
| 2023 | + unsigned char *second_key; // AEAD128 |
| 2024 | + unsigned char *nonce; // AEAD128 |
| 2025 | + unsigned char *ad; // AEAD128 |
| 2026 | + int ad_len; // AEAD128 |
| 2027 | + unsigned char *tag; // AEAD128 |
| 2028 | + int tag_len; // AEAD128 |
| 2029 | + bool tag_match; // AEAD128 |
| 2030 | + unsigned char *pt; // AEAD128 |
| 2031 | + unsigned char *ct; // AEAD128 |
| 2032 | + int payload_len; // AEAD128 |
| 2033 | + unsigned char *msg; // CXOF128, Hash256, XOF128 |
| 2034 | + int msg_len; // CXOF128, Hash256, XOF128 |
| 2035 | + unsigned char *md; // CXOF128, XOF128 |
| 2036 | + int out_len; // CXOF128, XOF128 |
| 2037 | + unsigned char *cs; // CXOF128 |
| 2038 | + int cs_len; // CXOF128 |
| 2039 | +} ACVP_ASCON_TC; |
| 2040 | + |
1962 | 2041 | /** @enum ACVP_KAS_ECC_MODE */ |
1963 | 2042 | typedef enum acvp_kas_ecc_mode { |
1964 | 2043 | ACVP_KAS_ECC_MODE_COMPONENT = 1, |
@@ -2997,11 +3076,14 @@ typedef struct acvp_test_case_t { |
2997 | 3076 | ACVP_ML_DSA_TC *ml_dsa; |
2998 | 3077 | ACVP_ML_KEM_TC *ml_kem; |
2999 | 3078 | ACVP_SLH_DSA_TC *slh_dsa; |
3000 | | - } tc; //!< the union abstracting the test case for passing to the user application |
| 3079 | + ACVP_ASCON_TC *ascon; |
| 3080 | + } tc; //!< the union abstracting the test case for passing to the user |
| 3081 | + //!< application |
3001 | 3082 | } ACVP_TEST_CASE; |
3002 | 3083 |
|
3003 | 3084 |
|
3004 | 3085 |
|
| 3086 | + |
3005 | 3087 | /** @defgroup APIs Public APIs for libacvp |
3006 | 3088 | * @brief this section describes APIs for libacvp. |
3007 | 3089 | */ |
@@ -3332,6 +3414,39 @@ ACVP_RESULT acvp_cap_dsa_set_parm(ACVP_CTX *ctx, |
3332 | 3414 | ACVP_DSA_PARM param, |
3333 | 3415 | int value); |
3334 | 3416 |
|
| 3417 | +/** |
| 3418 | + * @brief acvp_enable_ascon_cap() |
| 3419 | + * This function should be used to enable ASCON capabilities. Specific |
| 3420 | + * modes and parameters can use acvp_cap_ascon_set_parm. |
| 3421 | + * |
| 3422 | + * When the application enables a crypto capability, such as ASCON, it |
| 3423 | + * also needs to specify a callback function that will be used by libacvp when |
| 3424 | + * that crypto capability is needed during a test session. |
| 3425 | + * |
| 3426 | + * @param ctx Pointer to ACVP_CTX that was previously created by calling |
| 3427 | + * acvp_create_test_session. |
| 3428 | + * @param cipher ACVP_CIPHER enum value identifying the crypto capability. |
| 3429 | + * @param crypto_handler Address of function implemented by application that is |
| 3430 | + * invoked by libacvp when the crypto capability is needed during a test |
| 3431 | + * session. This crypto_handler function is expected to return 0 on success and |
| 3432 | + * 1 for failure. |
| 3433 | + * |
| 3434 | + * @return ACVP_RESULT |
| 3435 | + */ |
| 3436 | +ACVP_RESULT |
| 3437 | +acvp_cap_ascon_enable(ACVP_CTX *ctx, ACVP_CIPHER cipher, |
| 3438 | + int (*crypto_handler)(ACVP_TEST_CASE *test_case)); |
| 3439 | + |
| 3440 | +ACVP_RESULT |
| 3441 | +acvp_cap_ascon_set_parm(ACVP_CTX *ctx, ACVP_CIPHER cipher, |
| 3442 | + ACVP_ASCON_MODE mode, ACVP_ASCON_PARM param, |
| 3443 | + int value); |
| 3444 | + |
| 3445 | +ACVP_RESULT |
| 3446 | +acvp_cap_ascon_set_domain(ACVP_CTX *ctx, ACVP_CIPHER cipher, |
| 3447 | + ACVP_ASCON_MODE mode, ACVP_ASCON_PARM param, int min, |
| 3448 | + int max, int increment); |
| 3449 | + |
3335 | 3450 | /** |
3336 | 3451 | * @brief acvp_enable_kas_ecc_cap() |
3337 | 3452 | * This function should be used to enable KAS-ECC capabilities. Specific modes and |
|
0 commit comments