Page MenuHomeFreeBSD

D24668.id71289.diff
No OneTemporary

D24668.id71289.diff

Index: sys/opencrypto/crypto.c
===================================================================
--- sys/opencrypto/crypto.c
+++ sys/opencrypto/crypto.c
@@ -92,6 +92,12 @@
#include <machine/pcb.h>
#endif
+#define ALG_COMPRESSION 0x1
+#define ALG_CIPHER 0x2
+#define ALG_DIGEST 0x4
+#define ALG_KEYED_DIGEST 0x8
+#define ALG_AEAD 0x10
+
SDT_PROVIDER_DEFINE(opencrypto);
/*
@@ -684,85 +690,88 @@
return best;
}
+static int alg_flags[] = {
+ [CRYPTO_DES_CBC] = ALG_CIPHER,
+ [CRYPTO_3DES_CBC] = ALG_CIPHER,
+ [CRYPTO_BLF_CBC] = ALG_CIPHER,
+ [CRYPTO_CAST_CBC] = ALG_CIPHER,
+ [CRYPTO_SKIPJACK_CBC] = ALG_CIPHER,
+ [CRYPTO_MD5_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_SHA1_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_RIPEMD160_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_MD5_KPDK] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_SHA1_KPDK] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_AES_CBC] = ALG_CIPHER,
+ [CRYPTO_ARC4] = ALG_CIPHER,
+ [CRYPTO_MD5] = ALG_DIGEST,
+ [CRYPTO_SHA1] = ALG_DIGEST,
+ [CRYPTO_NULL_HMAC] = ALG_DIGEST,
+ [CRYPTO_NULL_CBC] = ALG_CIPHER,
+ [CRYPTO_DEFLATE_COMP] = ALG_COMPRESSION,
+ [CRYPTO_SHA2_256_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_SHA2_384_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_SHA2_512_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_CAMELLIA_CBC] = ALG_CIPHER,
+ [CRYPTO_AES_XTS] = ALG_CIPHER,
+ [CRYPTO_AES_ICM] = ALG_CIPHER,
+ [CRYPTO_AES_NIST_GMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_AES_NIST_GCM_16] = ALG_AEAD,
+ [CRYPTO_BLAKE2B] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_BLAKE2S] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_CHACHA20] = ALG_CIPHER,
+ [CRYPTO_SHA2_224_HMAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_RIPEMD160] = ALG_DIGEST,
+ [CRYPTO_SHA2_224] = ALG_DIGEST,
+ [CRYPTO_SHA2_256] = ALG_DIGEST,
+ [CRYPTO_SHA2_384] = ALG_DIGEST,
+ [CRYPTO_SHA2_512] = ALG_DIGEST,
+ [CRYPTO_POLY1305] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_AES_CCM_CBC_MAC] = ALG_DIGEST | ALG_KEYED_DIGEST,
+ [CRYPTO_AES_CCM_16] = ALG_AEAD,
+};
+
+static bool
+alg_has_flag(int alg, int flag)
+{
+
+ if (alg < nitems(alg_flags))
+ return ((alg_flags[alg] & flag) == flag);
+ return (false);
+}
+
static bool
alg_is_compression(int alg)
{
- if (alg == CRYPTO_DEFLATE_COMP)
- return (true);
- return (false);
+ return (alg_has_flag(ALG_COMPRESSION));
}
static bool
alg_is_cipher(int alg)
{
- if (alg >= CRYPTO_DES_CBC && alg <= CRYPTO_SKIPJACK_CBC)
- return (true);
- if (alg >= CRYPTO_AES_CBC && alg <= CRYPTO_ARC4)
- return (true);
- if (alg == CRYPTO_NULL_CBC)
- return (true);
- if (alg >= CRYPTO_CAMELLIA_CBC && alg <= CRYPTO_AES_ICM)
- return (true);
- if (alg == CRYPTO_CHACHA20)
- return (true);
- return (false);
+ return (alg_has_flag(ALG_CIPHER));
}
static bool
alg_is_digest(int alg)
{
- if (alg >= CRYPTO_MD5_HMAC && alg <= CRYPTO_SHA1_KPDK)
- return (true);
- if (alg >= CRYPTO_MD5 && alg <= CRYPTO_SHA1)
- return (true);
- if (alg == CRYPTO_NULL_HMAC)
- return (true);
- if (alg >= CRYPTO_SHA2_256_HMAC && alg <= CRYPTO_SHA2_512_HMAC)
- return (true);
- if (alg == CRYPTO_AES_NIST_GMAC)
- return (true);
- if (alg >= CRYPTO_BLAKE2B && alg <= CRYPTO_BLAKE2S)
- return (true);
- if (alg >= CRYPTO_SHA2_224_HMAC && alg <= CRYPTO_POLY1305)
- return (true);
- if (alg == CRYPTO_AES_CCM_CBC_MAC)
- return (true);
- return (false);
+ return (alg_has_flag(ALG_DIGEST));
}
static bool
alg_is_keyed_digest(int alg)
{
- if (alg >= CRYPTO_MD5_HMAC && alg <= CRYPTO_SHA1_KPDK)
- return (true);
- if (alg >= CRYPTO_SHA2_256_HMAC && alg <= CRYPTO_SHA2_512_HMAC)
- return (true);
- if (alg == CRYPTO_AES_NIST_GMAC)
- return (true);
- if (alg >= CRYPTO_BLAKE2B && alg <= CRYPTO_BLAKE2S)
- return (true);
- if (alg == CRYPTO_SHA2_224_HMAC)
- return (true);
- if (alg == CRYPTO_POLY1305)
- return (true);
- if (alg == CRYPTO_AES_CCM_CBC_MAC)
- return (true);
- return (false);
+ return (alg_has_flag(ALG_KEYED_DIGEST));
}
static bool
alg_is_aead(int alg)
{
- if (alg == CRYPTO_AES_NIST_GCM_16)
- return (true);
- if (alg == CRYPTO_AES_CCM_16)
- return (true);
- return (false);
+ return (alg_has_flag(ALG_AEAD));
}
/* Various sanity checks on crypto session parameters. */

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 10, 10:35 AM (16 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40540599
Default Alt Text
D24668.id71289.diff (4 KB)

Event Timeline