VPP19.08.2 crypto_ia32 do not support aes-gcm icv_size 8/12 crypto, any ideas?
static_always_inline int
aes_gcm (const u8 * in, u8 * out, const u8 * addt, const u8 * iv, u8 * tag,
u32 data_bytes, u32 aad_bytes, u8 tag_len, aes_gcm_key_data_t * kd,
int aes_rounds, int is_encrypt)
{
int i;
__m128i r, Y0, T = { };
ghash_data_t _gd, *gd = &_gd;
_mm_prefetch (iv, _MM_HINT_T0);
_mm_prefetch (in, _MM_HINT_T0);
_mm_prefetch (in + CLIB_CACHE_LINE_BYTES, _MM_HINT_T0);
/* calculate ghash for AAD - optimized for ipsec common cases */
if (aad_bytes == 8)
T = aesni_gcm_ghash (T, kd, (__m128i *) addt, 8);
else if (aad_bytes == 12)
T = aesni_gcm_ghash (T, kd, (__m128i *) addt, 12);
else
T = aesni_gcm_ghash (T, kd, (__m128i *) addt, aad_bytes);
/* initalize counter */
Y0 = _mm_loadu_si128 ((__m128i *) iv);
Y0 = _mm_insert_epi32 (Y0, clib_host_to_net_u32 (1), 3);
/* ghash and encrypt/edcrypt */
if (is_encrypt)
T = aesni_gcm_enc (T, kd, Y0, in, out, data_bytes, aes_rounds);
else
T = aesni_gcm_dec (T, kd, Y0, in, out, data_bytes, aes_rounds);
_mm_prefetch (tag, _MM_HINT_T0);
/* Finalize ghash */
r[0] = data_bytes;
r[1] = aad_bytes;
/* bytes to bits */
r <<= 3;
/* interleaved computation of final ghash and E(Y0, k) */
ghash_mul_first (gd, r ^ T, kd->Hi[0]);
r = kd->Ke[0] ^ Y0;
for (i = 1; i < 5; i += 1)
r = _mm_aesenc_si128 (r, kd->Ke[i]);
ghash_reduce (gd);
ghash_reduce2 (gd);
for (; i < 9; i += 1)
r = _mm_aesenc_si128 (r, kd->Ke[i]);
T = ghash_final (gd);
for (; i < aes_rounds; i += 1)
r = _mm_aesenc_si128 (r, kd->Ke[i]);
r = _mm_aesenclast_si128 (r, kd->Ke[aes_rounds]);
T = aesni_gcm_bswap (T) ^ r;
/* tag_len 16 -> 0 */
tag_len &= 0xf;
if (is_encrypt)
{
/* store tag */
if (tag_len)
aesni_gcm_store_partial ((__m128i *) tag, T, (1 << tag_len) - 1); // must
be tag_en
else
_mm_storeu_si128 ((__m128i *) tag, T);
}
else
{
/* check tag */
u16 tag_mask = tag_len ? (1 << tag_len) - 1 : 0xffff;
r = _mm_loadu_si128 ((__m128i *) tag);
if (_mm_movemask_epi8 (r == T) != tag_mask) { // what is
this? it will return 0, when tag_len equals 12
return 0;
}
}
return 1;
}
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#17158): https://lists.fd.io/g/vpp-dev/message/17158
Mute This Topic: https://lists.fd.io/mt/76042116/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-