From owner-svn-src-head@freebsd.org Mon May 4 22:31:39 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 826572C561A; Mon, 4 May 2020 22:31:39 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49GHdl2sJ5z3Pcs; Mon, 4 May 2020 22:31:39 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5D65C39CE; Mon, 4 May 2020 22:31:39 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 044MVdmx036919; Mon, 4 May 2020 22:31:39 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 044MVd5f036918; Mon, 4 May 2020 22:31:39 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <202005042231.044MVd5f036918@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Mon, 4 May 2020 22:31:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r360642 - head/sys/opencrypto X-SVN-Group: head X-SVN-Commit-Author: jhb X-SVN-Commit-Paths: head/sys/opencrypto X-SVN-Commit-Revision: 360642 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 May 2020 22:31:39 -0000 Author: jhb Date: Mon May 4 22:31:38 2020 New Revision: 360642 URL: https://svnweb.freebsd.org/changeset/base/360642 Log: Use a lookup table of algorithm types for alg_is_* helpers. This makes it easier to maintain these functions as algorithms are added or removed. Reviewed by: cem Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D24668 Modified: head/sys/opencrypto/crypto.c Modified: head/sys/opencrypto/crypto.c ============================================================================== --- head/sys/opencrypto/crypto.c Mon May 4 22:02:49 2020 (r360641) +++ head/sys/opencrypto/crypto.c Mon May 4 22:31:38 2020 (r360642) @@ -684,85 +684,96 @@ crypto_select_driver(const struct crypto_session_param return best; } +static enum alg_type { + ALG_NONE = 0, + ALG_CIPHER, + ALG_DIGEST, + ALG_KEYED_DIGEST, + ALG_COMPRESSION, + ALG_AEAD +} alg_types[] = { + [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_KEYED_DIGEST, + [CRYPTO_SHA1_HMAC] = ALG_KEYED_DIGEST, + [CRYPTO_RIPEMD160_HMAC] = ALG_KEYED_DIGEST, + [CRYPTO_MD5_KPDK] = ALG_KEYED_DIGEST, + [CRYPTO_SHA1_KPDK] = 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_KEYED_DIGEST, + [CRYPTO_SHA2_384_HMAC] = ALG_KEYED_DIGEST, + [CRYPTO_SHA2_512_HMAC] = ALG_KEYED_DIGEST, + [CRYPTO_CAMELLIA_CBC] = ALG_CIPHER, + [CRYPTO_AES_XTS] = ALG_CIPHER, + [CRYPTO_AES_ICM] = ALG_CIPHER, + [CRYPTO_AES_NIST_GMAC] = ALG_KEYED_DIGEST, + [CRYPTO_AES_NIST_GCM_16] = ALG_AEAD, + [CRYPTO_BLAKE2B] = ALG_KEYED_DIGEST, + [CRYPTO_BLAKE2S] = ALG_KEYED_DIGEST, + [CRYPTO_CHACHA20] = ALG_CIPHER, + [CRYPTO_SHA2_224_HMAC] = 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_KEYED_DIGEST, + [CRYPTO_AES_CCM_CBC_MAC] = ALG_KEYED_DIGEST, + [CRYPTO_AES_CCM_16] = ALG_AEAD, +}; + +static enum alg_type +alg_type(int alg) +{ + + if (alg < nitems(alg_types)) + return (alg_types[alg]); + return (ALG_NONE); +} + static bool alg_is_compression(int alg) { - if (alg == CRYPTO_DEFLATE_COMP) - return (true); - return (false); + return (alg_type(alg) == 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_type(alg) == 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_type(alg) == ALG_DIGEST || + alg_type(alg) == ALG_KEYED_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_type(alg) == 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_type(alg) == ALG_AEAD); } /* Various sanity checks on crypto session parameters. */