mirror of
https://github.com/libtom/libtomcrypt
synced 2026-08-25 20:26:07 -04:00
489 lines
17 KiB
C
489 lines
17 KiB
C
/* LibTomCrypt, modular cryptographic library -- Tom St Denis */
|
|
/* SPDX-License-Identifier: Unlicense */
|
|
#include "tomcrypt_private.h"
|
|
|
|
#ifdef LTC_GCM_SIV_MODE
|
|
|
|
#ifdef LTC_TEST
|
|
|
|
typedef struct {
|
|
const char *key; /* 32 (AES128) or 64 (AES256) hex chars */
|
|
const char *nonce; /* 24 hex chars */
|
|
const char *aad; /* hex */
|
|
const char *pt; /* hex */
|
|
const char *result; /* ciphertext || tag, hex */
|
|
} gcm_siv_kat_t;
|
|
|
|
/* RFC 8452 Appendix C.1 - AEAD_AES_128_GCM_SIV */
|
|
static const gcm_siv_kat_t s_kat_128[] = {
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"",
|
|
"dc20e2d83f25705bb49e439eca56de25"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"0100000000000000",
|
|
"b5d839330ac7b786578782fff6013b815b287c22493a364c"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"010000000000000000000000",
|
|
"7323ea61d05932260047d942a4978db357391a0bc4fdec8b0d106639"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"01000000000000000000000000000000",
|
|
"743f7c8077ab25f8624e2e948579cf77303aaf90f6fe21199c6068577437a0c4"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"0100000000000000000000000000000002000000000000000000000000000000",
|
|
"84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a94451a8e45dcd4578c667cd86847bf6155ff"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000",
|
|
"3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b5e6e311dbf395d35b0fe39c2714388f8"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000",
|
|
"2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f8a263dd317aa88d56bdf3936dba75bb8"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"0200000000000000",
|
|
"1e6daba35669f4273b0a1a2560969cdf790d99759abd1508"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"020000000000000000000000",
|
|
"296c7889fd99f41917f4462008299c5102745aaa3a0c469fad9e075a"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"02000000000000000000000000000000",
|
|
"e2b0c5da79a901c1745f700525cb335b8f8936ec039e4e4bb97ebd8c4457441f"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"0200000000000000000000000000000003000000000000000000000000000000",
|
|
"620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71e6af6a7f87287da059a71684ed3498e1"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000",
|
|
"50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e6a8cc3865f76897c2e4b245cf31c51f2"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000",
|
|
"2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80cdc46ae475563de037001ef84ae21744"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"010000000000000000000000",
|
|
"02000000",
|
|
"a8fe3e8707eb1f84fb28f8cb73de8e99e2f48a14"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"010000000000000000000000000000000200",
|
|
"0300000000000000000000000000000004000000",
|
|
"6bb0fecf5ded9b77f902c7d5da236a4391dd029724afc9805e976f451e6d87f6fe106514"
|
|
},
|
|
{
|
|
"01000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"0100000000000000000000000000000002000000",
|
|
"030000000000000000000000000000000400",
|
|
"44d0aaf6fb2f1f34add5e8064e83e12a2adabff9b2ef00fb47920cc72a0c0f13b9fd"
|
|
},
|
|
{
|
|
"e66021d5eb8e4f4066d4adb9c33560e4",
|
|
"f46e44bb3da0015c94f70887",
|
|
"",
|
|
"",
|
|
"a4194b79071b01a87d65f706e3949578"
|
|
},
|
|
{
|
|
"36864200e0eaf5284d884a0e77d31646",
|
|
"bae8e37fc83441b16034566b",
|
|
"46bb91c3c5",
|
|
"7a806c",
|
|
"af60eb711bd85bc1e4d3e0a462e074eea428a8"
|
|
},
|
|
{
|
|
"aedb64a6c590bc84d1a5e269e4b47801",
|
|
"afc0577e34699b9e671fdd4f",
|
|
"fc880c94a95198874296",
|
|
"bdc66f146545",
|
|
"bb93a3e34d3cd6a9c45545cfc11f03ad743dba20f966"
|
|
},
|
|
{
|
|
"d5cc1fd161320b6920ce07787f86743b",
|
|
"275d1ab32f6d1f0434d8848c",
|
|
"046787f3ea22c127aaf195d1894728",
|
|
"1177441f195495860f",
|
|
"4f37281f7ad12949d01d02fd0cd174c84fc5dae2f60f52fd2b"
|
|
},
|
|
{
|
|
"b3fed1473c528b8426a582995929a149",
|
|
"9e9ad8780c8d63d0ab4149c0",
|
|
"c9882e5386fd9f92ec489c8fde2be2cf97e74e93",
|
|
"9f572c614b4745914474e7c7",
|
|
"f54673c5ddf710c745641c8bc1dc2f871fb7561da1286e655e24b7b0"
|
|
},
|
|
{
|
|
"2d4ed87da44102952ef94b02b805249b",
|
|
"ac80e6f61455bfac8308a2d4",
|
|
"2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a",
|
|
"0d8c8451178082355c9e940fea2f58",
|
|
"c9ff545e07b88a015f05b274540aa183b3449b9f39552de99dc214a1190b0b"
|
|
},
|
|
{
|
|
"bde3b2f204d1e9f8b06bc47f9745b3d1",
|
|
"ae06556fb6aa7890bebc18fe",
|
|
"1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f",
|
|
"6b3db4da3d57aa94842b9803a96e07fb6de7",
|
|
"6298b296e24e8cc35dce0bed484b7f30d5803e377094f04709f64d7b985310a4db84"
|
|
},
|
|
{
|
|
"f901cfe8a69615a93fdf7a98cad48179",
|
|
"6245709fb18853f68d833640",
|
|
"7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21",
|
|
"e42a3c02c25b64869e146d7b233987bddfc240871d",
|
|
"391cc328d484a4f46406181bcd62efd9b3ee197d052d15506c84a9edd65e13e9d24a2a6e70"
|
|
}
|
|
};
|
|
|
|
/* RFC 8452 Appendix C.2 - AEAD_AES_256_GCM_SIV */
|
|
static const gcm_siv_kat_t s_kat_256[] = {
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"",
|
|
"07f5f4169bbf55a8400cd47ea6fd400f"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"0100000000000000",
|
|
"c2ef328e5c71c83b843122130f7364b761e0b97427e3df28"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"010000000000000000000000",
|
|
"9aab2aeb3faa0a34aea8e2b18ca50da9ae6559e48fd10f6e5c9ca17e"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"01000000000000000000000000000000",
|
|
"85a01b63025ba19b7fd3ddfc033b3e76c9eac6fa700942702e90862383c6c366"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"0100000000000000000000000000000002000000000000000000000000000000",
|
|
"4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027fe819e63abcd020b006a976397632eb5d"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000",
|
|
"c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5790bc96880a99ba804bd12c0e6a22cc4"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"",
|
|
"01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000",
|
|
"c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce112864c269fc0d9d88c61fa47e39aa08"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"0200000000000000",
|
|
"1de22967237a813291213f267e3b452f02d01ae33e4ec854"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"020000000000000000000000",
|
|
"163d6f9cc1b346cd453a2e4cc1a4a19ae800941ccdc57cc8413c277f"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"02000000000000000000000000000000",
|
|
"c91545823cc24f17dbb0e9e807d5ec17b292d28ff61189e8e49f3875ef91aff7"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"0200000000000000000000000000000003000000000000000000000000000000",
|
|
"07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365aea1bad12702e1965604374aab96dbbc"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000",
|
|
"c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe2503332742b228c647173616cfd44c54eb"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"01",
|
|
"02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000",
|
|
"67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c895bde0285037c5de81e5b570a049b62a0"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"010000000000000000000000",
|
|
"02000000",
|
|
"22b3f4cd1835e517741dfddccfa07fa4661b74cf"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"010000000000000000000000000000000200",
|
|
"0300000000000000000000000000000004000000",
|
|
"43dd0163cdb48f9fe3212bf61b201976067f342bb879ad976d8242acc188ab59cabfe307"
|
|
},
|
|
{
|
|
"0100000000000000000000000000000000000000000000000000000000000000",
|
|
"030000000000000000000000",
|
|
"0100000000000000000000000000000002000000",
|
|
"030000000000000000000000000000000400",
|
|
"462401724b5ce6588d5a54aae5375513a075cfcdf5042112aa29685c912fc2056543"
|
|
},
|
|
{
|
|
"e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200",
|
|
"e0eaf5284d884a0e77d31646",
|
|
"",
|
|
"",
|
|
"169fbb2fbf389a995f6390af22228a62"
|
|
},
|
|
{
|
|
"bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269",
|
|
"e4b47801afc0577e34699b9e",
|
|
"4fbdc66f14",
|
|
"671fdd",
|
|
"0eaccb93da9bb81333aee0c785b240d319719d"
|
|
},
|
|
{
|
|
"6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3",
|
|
"2f6d1f0434d8848c1177441f",
|
|
"6787f3ea22c127aaf195",
|
|
"195495860f04",
|
|
"a254dad4f3f96b62b84dc40c84636a5ec12020ec8c2c"
|
|
},
|
|
{
|
|
"d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0",
|
|
"9f572c614b4745914474e7c7",
|
|
"489c8fde2be2cf97e74e932d4ed87d",
|
|
"c9882e5386fd9f92ec",
|
|
"0df9e308678244c44bc0fd3dc6628dfe55ebb0b9fb2295c8c2"
|
|
},
|
|
{
|
|
"a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235",
|
|
"5c9e940fea2f582950a70d5a",
|
|
"0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f",
|
|
"1db2316fd568378da107b52b",
|
|
"8dbeb9f7255bf5769dd56692404099c2587f64979f21826706d497d5"
|
|
},
|
|
{
|
|
"9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb",
|
|
"6de71860f762ebfbd08284e4",
|
|
"f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f",
|
|
"21702de0de18baa9c9596291b08466",
|
|
"793576dfa5c0f88729a7ed3c2f1bffb3080d28f6ebb5d3648ce97bd5ba67fd"
|
|
},
|
|
{
|
|
"b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7",
|
|
"028ec6eb5ea7e298342a94d4",
|
|
"9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7",
|
|
"b202b370ef9768ec6561c4fe6b7e7296fa85",
|
|
"857e16a64915a787637687db4a9519635cdd454fc2a154fea91f8363a39fec7d0a49"
|
|
},
|
|
{
|
|
"3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23",
|
|
"688089e55540db1872504e1c",
|
|
"734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541",
|
|
"ced532ce4159b035277d4dfbb7db62968b13cd4eec",
|
|
"626660c26ea6612fb17ad91e8e767639edd6c9faee9d6c7029675b89eaf4ba1ded1a286594"
|
|
}
|
|
};
|
|
|
|
/* RFC 8452 Appendix C.3 - Counter Wrap Tests (AES-256) */
|
|
static const gcm_siv_kat_t s_kat_wrap[] = {
|
|
{
|
|
"0000000000000000000000000000000000000000000000000000000000000000",
|
|
"000000000000000000000000",
|
|
"",
|
|
"000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108",
|
|
"f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3eaffffffff000000000000000000000000"
|
|
},
|
|
{
|
|
"0000000000000000000000000000000000000000000000000000000000000000",
|
|
"000000000000000000000000",
|
|
"",
|
|
"eb3640277c7ffd1303c7a542d02d3e4c0000000000000000",
|
|
"18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56dffffffff000000000000000000000000"
|
|
}
|
|
};
|
|
|
|
static int s_run_kat(int cipher, unsigned long keylen, const gcm_siv_kat_t *vec, unsigned long n, const char *name)
|
|
{
|
|
unsigned char key[32], nonce[12];
|
|
unsigned char *aad = NULL, *pt = NULL, *exp = NULL;
|
|
unsigned char *ct = NULL, *out = NULL, tag[16];
|
|
unsigned long aadlen, ptlen, explen, ctlen, taglen;
|
|
unsigned long klen, nlen, slen;
|
|
unsigned long i;
|
|
int err = CRYPT_OK;
|
|
|
|
for (i = 0; i < n; i++) {
|
|
klen = sizeof(key);
|
|
if ((err = base16_decode(vec[i].key, XSTRLEN(vec[i].key), key, &klen)) != CRYPT_OK) return err;
|
|
if (klen != keylen) return CRYPT_FAIL_TESTVECTOR;
|
|
|
|
nlen = sizeof(nonce);
|
|
if ((err = base16_decode(vec[i].nonce, XSTRLEN(vec[i].nonce), nonce, &nlen)) != CRYPT_OK) return err;
|
|
if (nlen != 12) return CRYPT_FAIL_TESTVECTOR;
|
|
|
|
aadlen = XSTRLEN(vec[i].aad) / 2;
|
|
ptlen = XSTRLEN(vec[i].pt) / 2;
|
|
explen = XSTRLEN(vec[i].result) / 2;
|
|
if (explen != ptlen + 16) return CRYPT_FAIL_TESTVECTOR;
|
|
ctlen = ptlen;
|
|
|
|
aad = aadlen ? XMALLOC(aadlen) : NULL;
|
|
pt = ptlen ? XMALLOC(ptlen) : NULL;
|
|
exp = XMALLOC(explen);
|
|
ct = ctlen ? XMALLOC(ctlen) : NULL;
|
|
out = ptlen ? XMALLOC(ptlen) : NULL;
|
|
if (explen == 0 || (aadlen && !aad) || (ptlen && (!pt || !out)) || !exp || (ctlen && !ct)) {
|
|
err = CRYPT_MEM;
|
|
goto cleanup;
|
|
}
|
|
|
|
if (aadlen) {
|
|
slen = aadlen;
|
|
if ((err = base16_decode(vec[i].aad, XSTRLEN(vec[i].aad), aad, &slen)) != CRYPT_OK) goto cleanup;
|
|
}
|
|
if (ptlen) {
|
|
slen = ptlen;
|
|
if ((err = base16_decode(vec[i].pt, XSTRLEN(vec[i].pt), pt, &slen)) != CRYPT_OK) goto cleanup;
|
|
}
|
|
slen = explen;
|
|
if ((err = base16_decode(vec[i].result, XSTRLEN(vec[i].result), exp, &slen)) != CRYPT_OK) goto cleanup;
|
|
|
|
/* encrypt */
|
|
taglen = sizeof(tag);
|
|
if ((err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, pt, ptlen, ct, tag, &taglen, LTC_ENCRYPT)) != CRYPT_OK) {
|
|
goto cleanup;
|
|
}
|
|
if (ctlen && (ltc_compare_testvector(ct, ctlen, exp, ctlen, name, (int)i) != 0)) {
|
|
err = CRYPT_FAIL_TESTVECTOR;
|
|
goto cleanup;
|
|
}
|
|
if (ltc_compare_testvector(tag, 16, exp + ctlen, 16, name, (int)(i + 0x100)) != 0) {
|
|
err = CRYPT_FAIL_TESTVECTOR;
|
|
goto cleanup;
|
|
}
|
|
|
|
/* decrypt */
|
|
if ((err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, ct, ctlen, out, tag, &taglen, LTC_DECRYPT)) != CRYPT_OK) {
|
|
goto cleanup;
|
|
}
|
|
if (ptlen && (ltc_compare_testvector(out, ptlen, pt, ptlen, name, (int)(i + 0x200)) != 0)) {
|
|
err = CRYPT_FAIL_TESTVECTOR;
|
|
goto cleanup;
|
|
}
|
|
|
|
/* tampered tag must fail */
|
|
tag[0] ^= 0x80;
|
|
err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, ct, ctlen, out, tag, &taglen, LTC_DECRYPT);
|
|
if (err == CRYPT_OK) {
|
|
err = CRYPT_FAIL_TESTVECTOR;
|
|
goto cleanup;
|
|
}
|
|
err = CRYPT_OK;
|
|
|
|
XFREE(aad); aad = NULL;
|
|
XFREE(pt); pt = NULL;
|
|
XFREE(exp); exp = NULL;
|
|
XFREE(ct); ct = NULL;
|
|
XFREE(out); out = NULL;
|
|
}
|
|
|
|
cleanup:
|
|
if (aad) XFREE(aad);
|
|
if (pt) XFREE(pt);
|
|
if (exp) XFREE(exp);
|
|
if (ct) XFREE(ct);
|
|
if (out) XFREE(out);
|
|
return err;
|
|
}
|
|
|
|
#endif /* LTC_TEST */
|
|
|
|
int gcm_siv_test(void)
|
|
{
|
|
#ifndef LTC_TEST
|
|
return CRYPT_NOP;
|
|
#else
|
|
int cipher, err;
|
|
if ((cipher = find_cipher("aes")) == -1) return CRYPT_NOP;
|
|
if ((err = s_run_kat(cipher, 16, s_kat_128, LTC_ARRAY_SIZE(s_kat_128), "AES-128-GCM-SIV")) != CRYPT_OK) return err;
|
|
if ((err = s_run_kat(cipher, 32, s_kat_256, LTC_ARRAY_SIZE(s_kat_256), "AES-256-GCM-SIV")) != CRYPT_OK) return err;
|
|
if ((err = s_run_kat(cipher, 32, s_kat_wrap, LTC_ARRAY_SIZE(s_kat_wrap), "AES-256-GCM-SIV-wrap")) != CRYPT_OK) return err;
|
|
return CRYPT_OK;
|
|
#endif
|
|
}
|
|
|
|
#endif
|