From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DF9581075266 for ; Thu, 19 Mar 2026 06:20:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Ews+SaNXC4g16N6suJzU028kWzdWjI2UIVzYKFKekLA=; b=RkEU/JpuKzHNAHU6p6EPWq66HF ppK3w0BCrdVK4lNQvyfFd5jyR6Oubgf5YdqqplZIymrONbsCbbA9EhtV1jIiuYM1UztjLM/hHBS0O h4lV1qkEAflvgmxaj8U7xItvwEsT3tsHiPRsQ8YD0lmeP63llFwXhTGBhTaSxU5HExtOv1Btls/qq qb8aCgLsAKWzGScM6tn67n0sseGQ74eQH+er0AW3SW/aGnYS/0g3imj8zPHYUfdk15t0v4n8BfuzF EnL2S/uiCAVlsA2oqkwkT2HRQJkPMVZHd5dz23OCECGlR9vdrMseBinKQQ3mCumY65/GLHG8z75ge DqUy5Mjw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w36k5-0000000A0wQ-3Jli; Thu, 19 Mar 2026 06:20:25 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w36j5-00000009zol-0qOV; Thu, 19 Mar 2026 06:19:23 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 83AA56185A; Thu, 19 Mar 2026 06:19:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD107C2BCC4; Thu, 19 Mar 2026 06:19:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773901162; bh=A17Or1mhILOD8g/OauvklfFcseA7rh2PNPCFHHxYHps=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rLuXxi5JU7e4lhDja+r/raWzll947pWc4MN189ypr8SfFoCCk+3TWuQLyZg5+aqur KtJWSfl0m9oJzz/nIxydzurMQxR/TXkO3B2H6vPc8ohT6HxPfCtyBjfA+jfePcJTLv iXWK9SuB8JbbOGVLAdzzUmS/keEKFG5TpF5elm5N3dm7pANpOfiyrfurP6rzophpj0 PgPEoS+zkDU/xnBynkSgZcrtmGPnxFbVyqi30/9F0B7YBbz8fyFYdGGZgkOat5RGXw RDkNDtSWLFnuvY0vc62CKN9KHXl5vaSu/UIq1pYiP609MOnMgpbb18sNPGGJfx/fIG WUzFLC7v2SSNg== From: Eric Biggers To: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Herbert Xu , linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, x86@kernel.org, Eric Biggers Subject: [PATCH 16/19] crypto: ghash - Remove ghash from crypto_shash API Date: Wed, 18 Mar 2026 23:17:17 -0700 Message-ID: <20260319061723.1140720-17-ebiggers@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319061723.1140720-1-ebiggers@kernel.org> References: <20260319061723.1140720-1-ebiggers@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Now that there are no users of the "ghash" crypto_shash algorithm, remove it. GHASH remains supported via the library API. Signed-off-by: Eric Biggers --- crypto/Kconfig | 7 -- crypto/Makefile | 1 - crypto/ghash-generic.c | 162 ----------------------------------------- crypto/tcrypt.c | 9 --- crypto/testmgr.c | 6 -- crypto/testmgr.h | 109 --------------------------- 6 files changed, 294 deletions(-) delete mode 100644 crypto/ghash-generic.c diff --git a/crypto/Kconfig b/crypto/Kconfig index 13ccf5ac2f1a..efb482ea192d 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -886,17 +886,10 @@ config CRYPTO_CMAC select CRYPTO_MANAGER help CMAC (Cipher-based Message Authentication Code) authentication mode (NIST SP800-38B and IETF RFC4493) -config CRYPTO_GHASH - tristate "GHASH" - select CRYPTO_HASH - select CRYPTO_LIB_GF128MUL - help - GCM GHASH function (NIST SP800-38D) - config CRYPTO_HMAC tristate "HMAC (Keyed-Hash MAC)" select CRYPTO_HASH select CRYPTO_MANAGER help diff --git a/crypto/Makefile b/crypto/Makefile index 04e269117589..17f4fca9b9e5 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -169,11 +169,10 @@ CFLAGS_jitterentropy.o = -O0 KASAN_SANITIZE_jitterentropy.o = n UBSAN_SANITIZE_jitterentropy.o = n jitterentropy_rng-y := jitterentropy.o jitterentropy-kcapi.o obj-$(CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE) += jitterentropy-testing.o obj-$(CONFIG_CRYPTO_BENCHMARK) += tcrypt.o -obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o obj-$(CONFIG_CRYPTO_USER_API) += af_alg.o obj-$(CONFIG_CRYPTO_USER_API_HASH) += algif_hash.o obj-$(CONFIG_CRYPTO_USER_API_SKCIPHER) += algif_skcipher.o obj-$(CONFIG_CRYPTO_USER_API_RNG) += algif_rng.o obj-$(CONFIG_CRYPTO_USER_API_AEAD) += algif_aead.o diff --git a/crypto/ghash-generic.c b/crypto/ghash-generic.c deleted file mode 100644 index e5803c249c12..000000000000 --- a/crypto/ghash-generic.c +++ /dev/null @@ -1,162 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * GHASH: hash function for GCM (Galois/Counter Mode). - * - * Copyright (c) 2007 Nokia Siemens Networks - Mikko Herranen - * Copyright (c) 2009 Intel Corp. - * Author: Huang Ying - */ - -/* - * GHASH is a keyed hash function used in GCM authentication tag generation. - * - * The original GCM paper [1] presents GHASH as a function GHASH(H, A, C) which - * takes a 16-byte hash key H, additional authenticated data A, and a ciphertext - * C. It formats A and C into a single byte string X, interprets X as a - * polynomial over GF(2^128), and evaluates this polynomial at the point H. - * - * However, the NIST standard for GCM [2] presents GHASH as GHASH(H, X) where X - * is the already-formatted byte string containing both A and C. - * - * "ghash" in the Linux crypto API uses the 'X' (pre-formatted) convention, - * since the API supports only a single data stream per hash. Thus, the - * formatting of 'A' and 'C' is done in the "gcm" template, not in "ghash". - * - * The reason "ghash" is separate from "gcm" is to allow "gcm" to use an - * accelerated "ghash" when a standalone accelerated "gcm(aes)" is unavailable. - * It is generally inappropriate to use "ghash" for other purposes, since it is - * an "ε-almost-XOR-universal hash function", not a cryptographic hash function. - * It can only be used securely in crypto modes specially designed to use it. - * - * [1] The Galois/Counter Mode of Operation (GCM) - * (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.694.695&rep=rep1&type=pdf) - * [2] Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC - * (https://csrc.nist.gov/publications/detail/sp/800-38d/final) - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static int ghash_init(struct shash_desc *desc) -{ - struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); - - memset(dctx, 0, sizeof(*dctx)); - - return 0; -} - -static int ghash_setkey(struct crypto_shash *tfm, - const u8 *key, unsigned int keylen) -{ - struct ghash_ctx *ctx = crypto_shash_ctx(tfm); - be128 k; - - if (keylen != GHASH_BLOCK_SIZE) - return -EINVAL; - - if (ctx->gf128) - gf128mul_free_4k(ctx->gf128); - - BUILD_BUG_ON(sizeof(k) != GHASH_BLOCK_SIZE); - memcpy(&k, key, GHASH_BLOCK_SIZE); /* avoid violating alignment rules */ - ctx->gf128 = gf128mul_init_4k_lle(&k); - memzero_explicit(&k, GHASH_BLOCK_SIZE); - - if (!ctx->gf128) - return -ENOMEM; - - return 0; -} - -static int ghash_update(struct shash_desc *desc, - const u8 *src, unsigned int srclen) -{ - struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); - u8 *dst = dctx->buffer; - - do { - crypto_xor(dst, src, GHASH_BLOCK_SIZE); - gf128mul_4k_lle((be128 *)dst, ctx->gf128); - src += GHASH_BLOCK_SIZE; - srclen -= GHASH_BLOCK_SIZE; - } while (srclen >= GHASH_BLOCK_SIZE); - - return srclen; -} - -static void ghash_flush(struct shash_desc *desc, const u8 *src, - unsigned int len) -{ - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); - struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); - u8 *dst = dctx->buffer; - - if (len) { - crypto_xor(dst, src, len); - gf128mul_4k_lle((be128 *)dst, ctx->gf128); - } -} - -static int ghash_finup(struct shash_desc *desc, const u8 *src, - unsigned int len, u8 *dst) -{ - struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); - u8 *buf = dctx->buffer; - - ghash_flush(desc, src, len); - memcpy(dst, buf, GHASH_BLOCK_SIZE); - - return 0; -} - -static void ghash_exit_tfm(struct crypto_tfm *tfm) -{ - struct ghash_ctx *ctx = crypto_tfm_ctx(tfm); - if (ctx->gf128) - gf128mul_free_4k(ctx->gf128); -} - -static struct shash_alg ghash_alg = { - .digestsize = GHASH_DIGEST_SIZE, - .init = ghash_init, - .update = ghash_update, - .finup = ghash_finup, - .setkey = ghash_setkey, - .descsize = sizeof(struct ghash_desc_ctx), - .base = { - .cra_name = "ghash", - .cra_driver_name = "ghash-generic", - .cra_priority = 100, - .cra_flags = CRYPTO_AHASH_ALG_BLOCK_ONLY, - .cra_blocksize = GHASH_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct ghash_ctx), - .cra_module = THIS_MODULE, - .cra_exit = ghash_exit_tfm, - }, -}; - -static int __init ghash_mod_init(void) -{ - return crypto_register_shash(&ghash_alg); -} - -static void __exit ghash_mod_exit(void) -{ - crypto_unregister_shash(&ghash_alg); -} - -module_init(ghash_mod_init); -module_exit(ghash_mod_exit); - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("GHASH hash function"); -MODULE_ALIAS_CRYPTO("ghash"); -MODULE_ALIAS_CRYPTO("ghash-generic"); diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index aded37546137..1773f5f71351 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c @@ -1648,14 +1648,10 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) case 45: ret = min(ret, tcrypt_test("rfc4309(ccm(aes))")); break; - case 46: - ret = min(ret, tcrypt_test("ghash")); - break; - case 48: ret = min(ret, tcrypt_test("sha3-224")); break; case 49: @@ -2249,15 +2245,10 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) fallthrough; case 317: test_hash_speed("blake2b-512", sec, generic_hash_speed_template); if (mode > 300 && mode < 400) break; fallthrough; - case 318: - klen = 16; - test_hash_speed("ghash", sec, generic_hash_speed_template); - if (mode > 300 && mode < 400) break; - fallthrough; case 319: test_hash_speed("crc32c", sec, generic_hash_speed_template); if (mode > 300 && mode < 400) break; fallthrough; case 322: diff --git a/crypto/testmgr.c b/crypto/testmgr.c index 0b0ad358e091..dd01f86dd6fe 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -4983,16 +4983,10 @@ static const struct alg_test_desc alg_test_descs[] = { .generic_driver = "gcm_base(ctr(sm4-generic),ghash-lib)", .test = alg_test_aead, .suite = { .aead = __VECS(sm4_gcm_tv_template) } - }, { - .alg = "ghash", - .test = alg_test_hash, - .suite = { - .hash = __VECS(ghash_tv_template) - } }, { .alg = "hctr2(aes)", .generic_driver = "hctr2_base(xctr(aes-lib),polyval-lib)", .test = alg_test_skcipher, .suite = { diff --git a/crypto/testmgr.h b/crypto/testmgr.h index 1c69c11c0cdb..a3274abacfde 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h @@ -6181,119 +6181,10 @@ static const struct hash_testvec wp256_tv_template[] = { "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62" "\x07\xC5\x62\xF9\x88\xE9\x5C\x69", }, }; -static const struct hash_testvec ghash_tv_template[] = -{ - { - .key = "\xdf\xa6\xbf\x4d\xed\x81\xdb\x03" - "\xff\xca\xff\x95\xf8\x30\xf0\x61", - .ksize = 16, - .plaintext = "\x95\x2b\x2a\x56\xa5\x60\x04a\xc0" - "\xb3\x2b\x66\x56\xa0\x5b\x40\xb6", - .psize = 16, - .digest = "\xda\x53\xeb\x0a\xd2\xc5\x5b\xb6" - "\x4f\xc4\x80\x2c\xc3\xfe\xda\x60", - }, { - .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" - "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", - .ksize = 16, - .plaintext = "what do ya want for nothing?", - .psize = 28, - .digest = "\x3e\x1f\x5c\x4d\x65\xf0\xef\xce" - "\x0d\x61\x06\x27\x66\x51\xd5\xe2", - }, { - .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", - .ksize = 16, - .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", - .psize = 50, - .digest = "\xfb\x49\x8a\x36\xe1\x96\xe1\x96" - "\xe1\x96\xe1\x96\xe1\x96\xe1\x96", - }, { - .key = "\xda\x53\xeb\x0a\xd2\xc5\x5b\xb6" - "\x4f\xc4\x80\x2c\xc3\xfe\xda\x60", - .ksize = 16, - .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", - .psize = 50, - .digest = "\x2b\x5c\x0c\x7f\x52\xd1\x60\xc2" - "\x49\xed\x6e\x32\x7a\xa9\xbe\x08", - }, { - .key = "\x95\x2b\x2a\x56\xa5\x60\x04a\xc0" - "\xb3\x2b\x66\x56\xa0\x5b\x40\xb6", - .ksize = 16, - .plaintext = "Test With Truncation", - .psize = 20, - .digest = "\xf8\x94\x87\x2a\x4b\x63\x99\x28" - "\x23\xf7\x93\xf7\x19\xf5\x96\xd9", - }, { - .key = "\x0a\x1b\x2c\x3d\x4e\x5f\x64\x71" - "\x82\x93\xa4\xb5\xc6\xd7\xe8\xf9", - .ksize = 16, - .plaintext = "\x56\x6f\x72\x20\x6c\x61\x75\x74" - "\x65\x72\x20\x4c\x61\x75\x73\x63" - "\x68\x65\x6e\x20\x75\x6e\x64\x20" - "\x53\x74\x61\x75\x6e\x65\x6e\x20" - "\x73\x65\x69\x20\x73\x74\x69\x6c" - "\x6c\x2c\x0a\x64\x75\x20\x6d\x65" - "\x69\x6e\x20\x74\x69\x65\x66\x74" - "\x69\x65\x66\x65\x73\x20\x4c\x65" - "\x62\x65\x6e\x3b\x0a\x64\x61\x73" - "\x73\x20\x64\x75\x20\x77\x65\x69" - "\xc3\x9f\x74\x20\x77\x61\x73\x20" - "\x64\x65\x72\x20\x57\x69\x6e\x64" - "\x20\x64\x69\x72\x20\x77\x69\x6c" - "\x6c\x2c\x0a\x65\x68\x20\x6e\x6f" - "\x63\x68\x20\x64\x69\x65\x20\x42" - "\x69\x72\x6b\x65\x6e\x20\x62\x65" - "\x62\x65\x6e\x2e\x0a\x0a\x55\x6e" - "\x64\x20\x77\x65\x6e\x6e\x20\x64" - "\x69\x72\x20\x65\x69\x6e\x6d\x61" - "\x6c\x20\x64\x61\x73\x20\x53\x63" - "\x68\x77\x65\x69\x67\x65\x6e\x20" - "\x73\x70\x72\x61\x63\x68\x2c\x0a" - "\x6c\x61\x73\x73\x20\x64\x65\x69" - "\x6e\x65\x20\x53\x69\x6e\x6e\x65" - "\x20\x62\x65\x73\x69\x65\x67\x65" - "\x6e\x2e\x0a\x4a\x65\x64\x65\x6d" - "\x20\x48\x61\x75\x63\x68\x65\x20" - "\x67\x69\x62\x74\x20\x64\x69\x63" - "\x68\x2c\x20\x67\x69\x62\x20\x6e" - "\x61\x63\x68\x2c\x0a\x65\x72\x20" - "\x77\x69\x72\x64\x20\x64\x69\x63" - "\x68\x20\x6c\x69\x65\x62\x65\x6e" - "\x20\x75\x6e\x64\x20\x77\x69\x65" - "\x67\x65\x6e\x2e\x0a\x0a\x55\x6e" - "\x64\x20\x64\x61\x6e\x6e\x20\x6d" - "\x65\x69\x6e\x65\x20\x53\x65\x65" - "\x6c\x65\x20\x73\x65\x69\x74\x20" - "\x77\x65\x69\x74\x2c\x20\x73\x65" - "\x69\x20\x77\x65\x69\x74\x2c\x0a" - "\x64\x61\x73\x73\x20\x64\x69\x72" - "\x20\x64\x61\x73\x20\x4c\x65\x62" - "\x65\x6e\x20\x67\x65\x6c\x69\x6e" - "\x67\x65\x2c\x0a\x62\x72\x65\x69" - "\x74\x65\x20\x64\x69\x63\x68\x20" - "\x77\x69\x65\x20\x65\x69\x6e\x20" - "\x46\x65\x69\x65\x72\x6b\x6c\x65" - "\x69\x64\x0a\xc3\xbc\x62\x65\x72" - "\x20\x64\x69\x65\x20\x73\x69\x6e" - "\x6e\x65\x6e\x64\x65\x6e\x20\x44" - "\x69\x6e\x67\x65\x2e\x2e\x2e\x0a", - .psize = 400, - .digest = "\xad\xb1\xc1\xe9\x56\x70\x31\x1d" - "\xbb\x5b\xdf\x5e\x70\x72\x1a\x57", - }, -}; - /* * HMAC-MD5 test vectors from RFC2202 * (These need to be fixed to not use strlen). */ static const struct hash_testvec hmac_md5_tv_template[] = -- 2.53.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0AC7A1075260 for ; Thu, 19 Mar 2026 06:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=X/vQny99caLmq60o63VchaAR42lzXgARt8mCDCxRASQ=; b=1oV/uBQ+HK/IAJ MbZ9W0Ypv+owtGLWkHsDo4EiMwxN3Z2t3MRYTpVr3Z3MUaUxHr294umjbPpmoZsuM3uW5ZMWhYkZ8 0rMqF76JmcyYsXS/pL1MAwOIB1C0dGqlzT0RGmWB8MV71qMeVFuTaNqetG5j0mo/ibcjSTxLzcX5Q s549vkcIDldKiPHT8fXpbnGfMWmzHKedkNuAozc4WiO7eSMyl4jj0xesGTlik1bmSD3ulXsNpcu9l V5Y2jaBxC1x5vrjVILIuW2NAH32rGGkl0muROWoTR6P+pRW0vgnrYQ4eravRcmh/VUQ90OTeXNoIQ kqaJsKARP7qwyUF0tctA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w36k9-0000000A11d-1XJJ; Thu, 19 Mar 2026 06:20:29 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w36j5-00000009zol-0qOV; Thu, 19 Mar 2026 06:19:23 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 83AA56185A; Thu, 19 Mar 2026 06:19:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD107C2BCC4; Thu, 19 Mar 2026 06:19:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773901162; bh=A17Or1mhILOD8g/OauvklfFcseA7rh2PNPCFHHxYHps=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rLuXxi5JU7e4lhDja+r/raWzll947pWc4MN189ypr8SfFoCCk+3TWuQLyZg5+aqur KtJWSfl0m9oJzz/nIxydzurMQxR/TXkO3B2H6vPc8ohT6HxPfCtyBjfA+jfePcJTLv iXWK9SuB8JbbOGVLAdzzUmS/keEKFG5TpF5elm5N3dm7pANpOfiyrfurP6rzophpj0 PgPEoS+zkDU/xnBynkSgZcrtmGPnxFbVyqi30/9F0B7YBbz8fyFYdGGZgkOat5RGXw RDkNDtSWLFnuvY0vc62CKN9KHXl5vaSu/UIq1pYiP609MOnMgpbb18sNPGGJfx/fIG WUzFLC7v2SSNg== From: Eric Biggers To: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Herbert Xu , linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, x86@kernel.org, Eric Biggers Subject: [PATCH 16/19] crypto: ghash - Remove ghash from crypto_shash API Date: Wed, 18 Mar 2026 23:17:17 -0700 Message-ID: <20260319061723.1140720-17-ebiggers@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319061723.1140720-1-ebiggers@kernel.org> References: <20260319061723.1140720-1-ebiggers@kernel.org> MIME-Version: 1.0 X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Tm93IHRoYXQgdGhlcmUgYXJlIG5vIHVzZXJzIG9mIHRoZSAiZ2hhc2giIGNyeXB0b19zaGFzaCBh bGdvcml0aG0sCnJlbW92ZSBpdC4gIEdIQVNIIHJlbWFpbnMgc3VwcG9ydGVkIHZpYSB0aGUgbGli cmFyeSBBUEkuCgpTaWduZWQtb2ZmLWJ5OiBFcmljIEJpZ2dlcnMgPGViaWdnZXJzQGtlcm5lbC5v cmc+Ci0tLQogY3J5cHRvL0tjb25maWcgICAgICAgICB8ICAgNyAtLQogY3J5cHRvL01ha2VmaWxl ICAgICAgICB8ICAgMSAtCiBjcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jIHwgMTYyIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBjcnlwdG8vdGNyeXB0LmMgICAgICAgIHwg ICA5IC0tLQogY3J5cHRvL3Rlc3RtZ3IuYyAgICAgICB8ICAgNiAtLQogY3J5cHRvL3Rlc3RtZ3Iu aCAgICAgICB8IDEwOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdl ZCwgMjk0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGNyeXB0by9naGFzaC1nZW5l cmljLmMKCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4 IDEzY2NmNWFjMmYxYS4uZWZiNDgyZWExOTJkIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZwor KysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtODg2LDE3ICs4ODYsMTAgQEAgY29uZmlnIENSWVBUT19D TUFDCiAJc2VsZWN0IENSWVBUT19NQU5BR0VSCiAJaGVscAogCSAgQ01BQyAoQ2lwaGVyLWJhc2Vk IE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSkgYXV0aGVudGljYXRpb24KIAkgIG1vZGUgKE5J U1QgU1A4MDAtMzhCIGFuZCBJRVRGIFJGQzQ0OTMpCiAKLWNvbmZpZyBDUllQVE9fR0hBU0gKLQl0 cmlzdGF0ZSAiR0hBU0giCi0Jc2VsZWN0IENSWVBUT19IQVNICi0Jc2VsZWN0IENSWVBUT19MSUJf R0YxMjhNVUwKLQloZWxwCi0JICBHQ00gR0hBU0ggZnVuY3Rpb24gKE5JU1QgU1A4MDAtMzhEKQot CiBjb25maWcgQ1JZUFRPX0hNQUMKIAl0cmlzdGF0ZSAiSE1BQyAoS2V5ZWQtSGFzaCBNQUMpIgog CXNlbGVjdCBDUllQVE9fSEFTSAogCXNlbGVjdCBDUllQVE9fTUFOQUdFUgogCWhlbHAKZGlmZiAt LWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCAwNGUyNjkxMTc1 ODkuLjE3ZjRmY2E5YjllNSAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0 by9NYWtlZmlsZQpAQCAtMTY5LDExICsxNjksMTAgQEAgQ0ZMQUdTX2ppdHRlcmVudHJvcHkubyA9 IC1PMAogS0FTQU5fU0FOSVRJWkVfaml0dGVyZW50cm9weS5vID0gbgogVUJTQU5fU0FOSVRJWkVf aml0dGVyZW50cm9weS5vID0gbgogaml0dGVyZW50cm9weV9ybmcteSA6PSBqaXR0ZXJlbnRyb3B5 Lm8gaml0dGVyZW50cm9weS1rY2FwaS5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJP UFlfVEVTVElOVEVSRkFDRSkgKz0gaml0dGVyZW50cm9weS10ZXN0aW5nLm8KIG9iai0kKENPTkZJ R19DUllQVE9fQkVOQ0hNQVJLKSArPSB0Y3J5cHQubwotb2JqLSQoQ09ORklHX0NSWVBUT19HSEFT SCkgKz0gZ2hhc2gtZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1VTRVJfQVBJKSArPSBh Zl9hbGcubwogb2JqLSQoQ09ORklHX0NSWVBUT19VU0VSX0FQSV9IQVNIKSArPSBhbGdpZl9oYXNo Lm8KIG9iai0kKENPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVIpICs9IGFsZ2lmX3NrY2lw aGVyLm8KIG9iai0kKENPTkZJR19DUllQVE9fVVNFUl9BUElfUk5HKSArPSBhbGdpZl9ybmcubwog b2JqLSQoQ09ORklHX0NSWVBUT19VU0VSX0FQSV9BRUFEKSArPSBhbGdpZl9hZWFkLm8KZGlmZiAt LWdpdCBhL2NyeXB0by9naGFzaC1nZW5lcmljLmMgYi9jcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTgwM2MyNDljMTIuLjAwMDAwMDAwMDAwMAot LS0gYS9jcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAg QEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBHSEFT SDogaGFzaCBmdW5jdGlvbiBmb3IgR0NNIChHYWxvaXMvQ291bnRlciBNb2RlKS4KLSAqCi0gKiBD b3B5cmlnaHQgKGMpIDIwMDcgTm9raWEgU2llbWVucyBOZXR3b3JrcyAtIE1pa2tvIEhlcnJhbmVu IDxtaDFAaWtpLmZpPgotICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnAuCi0gKiAgIEF1 dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+Ci0gKi8KLQotLyoKLSAqIEdI QVNIIGlzIGEga2V5ZWQgaGFzaCBmdW5jdGlvbiB1c2VkIGluIEdDTSBhdXRoZW50aWNhdGlvbiB0 YWcgZ2VuZXJhdGlvbi4KLSAqCi0gKiBUaGUgb3JpZ2luYWwgR0NNIHBhcGVyIFsxXSBwcmVzZW50 cyBHSEFTSCBhcyBhIGZ1bmN0aW9uIEdIQVNIKEgsIEEsIEMpIHdoaWNoCi0gKiB0YWtlcyBhIDE2 LWJ5dGUgaGFzaCBrZXkgSCwgYWRkaXRpb25hbCBhdXRoZW50aWNhdGVkIGRhdGEgQSwgYW5kIGEg Y2lwaGVydGV4dAotICogQy4gIEl0IGZvcm1hdHMgQSBhbmQgQyBpbnRvIGEgc2luZ2xlIGJ5dGUg c3RyaW5nIFgsIGludGVycHJldHMgWCBhcyBhCi0gKiBwb2x5bm9taWFsIG92ZXIgR0YoMl4xMjgp LCBhbmQgZXZhbHVhdGVzIHRoaXMgcG9seW5vbWlhbCBhdCB0aGUgcG9pbnQgSC4KLSAqCi0gKiBI b3dldmVyLCB0aGUgTklTVCBzdGFuZGFyZCBmb3IgR0NNIFsyXSBwcmVzZW50cyBHSEFTSCBhcyBH SEFTSChILCBYKSB3aGVyZSBYCi0gKiBpcyB0aGUgYWxyZWFkeS1mb3JtYXR0ZWQgYnl0ZSBzdHJp bmcgY29udGFpbmluZyBib3RoIEEgYW5kIEMuCi0gKgotICogImdoYXNoIiBpbiB0aGUgTGludXgg Y3J5cHRvIEFQSSB1c2VzIHRoZSAnWCcgKHByZS1mb3JtYXR0ZWQpIGNvbnZlbnRpb24sCi0gKiBz aW5jZSB0aGUgQVBJIHN1cHBvcnRzIG9ubHkgYSBzaW5nbGUgZGF0YSBzdHJlYW0gcGVyIGhhc2gu ICBUaHVzLCB0aGUKLSAqIGZvcm1hdHRpbmcgb2YgJ0EnIGFuZCAnQycgaXMgZG9uZSBpbiB0aGUg ImdjbSIgdGVtcGxhdGUsIG5vdCBpbiAiZ2hhc2giLgotICoKLSAqIFRoZSByZWFzb24gImdoYXNo IiBpcyBzZXBhcmF0ZSBmcm9tICJnY20iIGlzIHRvIGFsbG93ICJnY20iIHRvIHVzZSBhbgotICog YWNjZWxlcmF0ZWQgImdoYXNoIiB3aGVuIGEgc3RhbmRhbG9uZSBhY2NlbGVyYXRlZCAiZ2NtKGFl cykiIGlzIHVuYXZhaWxhYmxlLgotICogSXQgaXMgZ2VuZXJhbGx5IGluYXBwcm9wcmlhdGUgdG8g dXNlICJnaGFzaCIgZm9yIG90aGVyIHB1cnBvc2VzLCBzaW5jZSBpdCBpcwotICogYW4gIs61LWFs bW9zdC1YT1ItdW5pdmVyc2FsIGhhc2ggZnVuY3Rpb24iLCBub3QgYSBjcnlwdG9ncmFwaGljIGhh c2ggZnVuY3Rpb24uCi0gKiBJdCBjYW4gb25seSBiZSB1c2VkIHNlY3VyZWx5IGluIGNyeXB0byBt b2RlcyBzcGVjaWFsbHkgZGVzaWduZWQgdG8gdXNlIGl0LgotICoKLSAqIFsxXSBUaGUgR2Fsb2lz L0NvdW50ZXIgTW9kZSBvZiBPcGVyYXRpb24gKEdDTSkKLSAqICAgICAoaHR0cDovL2NpdGVzZWVy eC5pc3QucHN1LmVkdS92aWV3ZG9jL2Rvd25sb2FkP2RvaT0xMC4xLjEuNjk0LjY5NSZyZXA9cmVw MSZ0eXBlPXBkZikKLSAqIFsyXSBSZWNvbW1lbmRhdGlvbiBmb3IgQmxvY2sgQ2lwaGVyIE1vZGVz IG9mIE9wZXJhdGlvbjogR2Fsb2lzL0NvdW50ZXIgTW9kZSAoR0NNKSBhbmQgR01BQwotICogICAg IChodHRwczovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2RldGFpbC9zcC84MDAtMzhkL2Zp bmFsKQotICovCi0KLSNpbmNsdWRlIDxjcnlwdG8vZ2YxMjhtdWwuaD4KLSNpbmNsdWRlIDxjcnlw dG8vZ2hhc2guaD4KLSNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgotI2luY2x1ZGUg PGNyeXB0by91dGlscy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0 cmluZy5oPgotCi1zdGF0aWMgaW50IGdoYXNoX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2Mp Ci17Ci0Jc3RydWN0IGdoYXNoX2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7 Ci0KLQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKCpkY3R4KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBnaGFzaF9zZXRrZXkoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLAotCQkJY29u c3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKLXsKLQlzdHJ1Y3QgZ2hhc2hfY3R4ICpj dHggPSBjcnlwdG9fc2hhc2hfY3R4KHRmbSk7Ci0JYmUxMjggazsKLQotCWlmIChrZXlsZW4gIT0g R0hBU0hfQkxPQ0tfU0laRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY3R4LT5nZjEyOCkK LQkJZ2YxMjhtdWxfZnJlZV80ayhjdHgtPmdmMTI4KTsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yo aykgIT0gR0hBU0hfQkxPQ0tfU0laRSk7Ci0JbWVtY3B5KCZrLCBrZXksIEdIQVNIX0JMT0NLX1NJ WkUpOyAvKiBhdm9pZCB2aW9sYXRpbmcgYWxpZ25tZW50IHJ1bGVzICovCi0JY3R4LT5nZjEyOCA9 IGdmMTI4bXVsX2luaXRfNGtfbGxlKCZrKTsKLQltZW16ZXJvX2V4cGxpY2l0KCZrLCBHSEFTSF9C TE9DS19TSVpFKTsKLQotCWlmICghY3R4LT5nZjEyOCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnaGFzaF91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2Mg KmRlc2MsCi0JCQkgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKLXsKLQlzdHJ1 Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKLQlzdHJ1Y3Qg Z2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KGRlc2MtPnRmbSk7Ci0JdTggKmRzdCA9 IGRjdHgtPmJ1ZmZlcjsKLQotCWRvIHsKLQkJY3J5cHRvX3hvcihkc3QsIHNyYywgR0hBU0hfQkxP Q0tfU0laRSk7Ci0JCWdmMTI4bXVsXzRrX2xsZSgoYmUxMjggKilkc3QsIGN0eC0+Z2YxMjgpOwot CQlzcmMgKz0gR0hBU0hfQkxPQ0tfU0laRTsKLQkJc3JjbGVuIC09IEdIQVNIX0JMT0NLX1NJWkU7 Ci0JfSB3aGlsZSAoc3JjbGVuID49IEdIQVNIX0JMT0NLX1NJWkUpOwotCi0JcmV0dXJuIHNyY2xl bjsKLX0KLQotc3RhdGljIHZvaWQgZ2hhc2hfZmx1c2goc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2Ms IGNvbnN0IHU4ICpzcmMsCi0JCQl1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCBnaGFzaF9j dHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKLQlzdHJ1Y3QgZ2hhc2hfZGVz Y19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKLQl1OCAqZHN0ID0gZGN0eC0+YnVm ZmVyOwotCi0JaWYgKGxlbikgewotCQljcnlwdG9feG9yKGRzdCwgc3JjLCBsZW4pOwotCQlnZjEy OG11bF80a19sbGUoKGJlMTI4ICopZHN0LCBjdHgtPmdmMTI4KTsKLQl9Ci19Ci0KLXN0YXRpYyBp bnQgZ2hhc2hfZmludXAoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpzcmMsCi0J CSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqZHN0KQotewotCXN0cnVjdCBnaGFzaF9kZXNj X2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwotCXU4ICpidWYgPSBkY3R4LT5idWZm ZXI7Ci0KLQlnaGFzaF9mbHVzaChkZXNjLCBzcmMsIGxlbik7Ci0JbWVtY3B5KGRzdCwgYnVmLCBH SEFTSF9CTE9DS19TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBnaGFzaF9l eGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCXN0cnVjdCBnaGFzaF9jdHggKmN0 eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JaWYgKGN0eC0+Z2YxMjgpCi0JCWdmMTI4bXVsX2Zy ZWVfNGsoY3R4LT5nZjEyOCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGdoYXNoX2Fs ZyA9IHsKLQkuZGlnZXN0c2l6ZQk9IEdIQVNIX0RJR0VTVF9TSVpFLAotCS5pbml0CQk9IGdoYXNo X2luaXQsCi0JLnVwZGF0ZQkJPSBnaGFzaF91cGRhdGUsCi0JLmZpbnVwCQk9IGdoYXNoX2ZpbnVw LAotCS5zZXRrZXkJCT0gZ2hhc2hfc2V0a2V5LAotCS5kZXNjc2l6ZQk9IHNpemVvZihzdHJ1Y3Qg Z2hhc2hfZGVzY19jdHgpLAotCS5iYXNlCQk9IHsKLQkJLmNyYV9uYW1lCQk9ICJnaGFzaCIsCi0J CS5jcmFfZHJpdmVyX25hbWUJPSAiZ2hhc2gtZ2VuZXJpYyIsCi0JCS5jcmFfcHJpb3JpdHkJCT0g MTAwLAotCQkuY3JhX2ZsYWdzCQk9IENSWVBUT19BSEFTSF9BTEdfQkxPQ0tfT05MWSwKLQkJLmNy YV9ibG9ja3NpemUJCT0gR0hBU0hfQkxPQ0tfU0laRSwKLQkJLmNyYV9jdHhzaXplCQk9IHNpemVv ZihzdHJ1Y3QgZ2hhc2hfY3R4KSwKLQkJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0JCS5j cmFfZXhpdAkJPSBnaGFzaF9leGl0X3RmbSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQg Z2hhc2hfbW9kX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZn aGFzaF9hbGcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZ2hhc2hfbW9kX2V4aXQodm9pZCkK LXsKLQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmZ2hhc2hfYWxnKTsKLX0KLQotbW9kdWxlX2lu aXQoZ2hhc2hfbW9kX2luaXQpOwotbW9kdWxlX2V4aXQoZ2hhc2hfbW9kX2V4aXQpOwotCi1NT0RV TEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkdIQVNIIGhhc2ggZnVuY3Rp b24iKTsKLU1PRFVMRV9BTElBU19DUllQVE8oImdoYXNoIik7Ci1NT0RVTEVfQUxJQVNfQ1JZUFRP KCJnaGFzaC1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8v dGNyeXB0LmMKaW5kZXggYWRlZDM3NTQ2MTM3Li4xNzczZjVmNzEzNTEgMTAwNjQ0Ci0tLSBhL2Ny eXB0by90Y3J5cHQuYworKysgYi9jcnlwdG8vdGNyeXB0LmMKQEAgLTE2NDgsMTQgKzE2NDgsMTAg QEAgc3RhdGljIGludCBkb190ZXN0KGNvbnN0IGNoYXIgKmFsZywgdTMyIHR5cGUsIHUzMiBtYXNr LCBpbnQgbSwgdTMyIG51bV9tYikKIAogCWNhc2UgNDU6CiAJCXJldCA9IG1pbihyZXQsIHRjcnlw dF90ZXN0KCJyZmM0MzA5KGNjbShhZXMpKSIpKTsKIAkJYnJlYWs7CiAKLQljYXNlIDQ2OgotCQly ZXQgPSBtaW4ocmV0LCB0Y3J5cHRfdGVzdCgiZ2hhc2giKSk7Ci0JCWJyZWFrOwotCiAJY2FzZSA0 ODoKIAkJcmV0ID0gbWluKHJldCwgdGNyeXB0X3Rlc3QoInNoYTMtMjI0IikpOwogCQlicmVhazsK IAogCWNhc2UgNDk6CkBAIC0yMjQ5LDE1ICsyMjQ1LDEwIEBAIHN0YXRpYyBpbnQgZG9fdGVzdChj b25zdCBjaGFyICphbGcsIHUzMiB0eXBlLCB1MzIgbWFzaywgaW50IG0sIHUzMiBudW1fbWIpCiAJ CWZhbGx0aHJvdWdoOwogCWNhc2UgMzE3OgogCQl0ZXN0X2hhc2hfc3BlZWQoImJsYWtlMmItNTEy Iiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAm JiBtb2RlIDwgNDAwKSBicmVhazsKIAkJZmFsbHRocm91Z2g7Ci0JY2FzZSAzMTg6Ci0JCWtsZW4g PSAxNjsKLQkJdGVzdF9oYXNoX3NwZWVkKCJnaGFzaCIsIHNlYywgZ2VuZXJpY19oYXNoX3NwZWVk X3RlbXBsYXRlKTsKLQkJaWYgKG1vZGUgPiAzMDAgJiYgbW9kZSA8IDQwMCkgYnJlYWs7Ci0JCWZh bGx0aHJvdWdoOwogCWNhc2UgMzE5OgogCQl0ZXN0X2hhc2hfc3BlZWQoImNyYzMyYyIsIHNlYywg Z2VuZXJpY19oYXNoX3NwZWVkX3RlbXBsYXRlKTsKIAkJaWYgKG1vZGUgPiAzMDAgJiYgbW9kZSA8 IDQwMCkgYnJlYWs7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgMzIyOgpkaWZmIC0tZ2l0IGEvY3J5 cHRvL3Rlc3RtZ3IuYyBiL2NyeXB0by90ZXN0bWdyLmMKaW5kZXggMGIwYWQzNThlMDkxLi5kZDAx Zjg2ZGQ2ZmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3Rt Z3IuYwpAQCAtNDk4MywxNiArNDk4MywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0 X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsKIAkJLmdlbmVyaWNfZHJpdmVyID0gImdjbV9iYXNl KGN0cihzbTQtZ2VuZXJpYyksZ2hhc2gtbGliKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfYWVhZCwK IAkJLnN1aXRlID0gewogCQkJLmFlYWQgPSBfX1ZFQ1Moc200X2djbV90dl90ZW1wbGF0ZSkKIAkJ fQotCX0sIHsKLQkJLmFsZyA9ICJnaGFzaCIsCi0JCS50ZXN0ID0gYWxnX3Rlc3RfaGFzaCwKLQkJ LnN1aXRlID0gewotCQkJLmhhc2ggPSBfX1ZFQ1MoZ2hhc2hfdHZfdGVtcGxhdGUpCi0JCX0KIAl9 LCB7CiAJCS5hbGcgPSAiaGN0cjIoYWVzKSIsCiAJCS5nZW5lcmljX2RyaXZlciA9ICJoY3RyMl9i YXNlKHhjdHIoYWVzLWxpYikscG9seXZhbC1saWIpIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9za2Np cGhlciwKIAkJLnN1aXRlID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0 by90ZXN0bWdyLmgKaW5kZXggMWM2OWMxMWMwY2RiLi5hMzI3NGFiYWNmZGUgMTAwNjQ0Ci0tLSBh L2NyeXB0by90ZXN0bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtNjE4MSwxMTkgKzYx ODEsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYXNoX3Rlc3R2ZWMgd3AyNTZfdHZfdGVtcGxh dGVbXSA9IHsKIAkJCSAgIlx4OEFceDdBXHg1QVx4NTJceERFXHhFRVx4NjVceDYyIgogCQkJICAi XHgwN1x4QzVceDYyXHhGOVx4ODhceEU5XHg1Q1x4NjkiLAogCX0sCiB9OwogCi1zdGF0aWMgY29u c3Qgc3RydWN0IGhhc2hfdGVzdHZlYyBnaGFzaF90dl90ZW1wbGF0ZVtdID0KLXsKLQl7Ci0JCS5r ZXkJPSAiXHhkZlx4YTZceGJmXHg0ZFx4ZWRceDgxXHhkYlx4MDMiCi0JCQkgICJceGZmXHhjYVx4 ZmZceDk1XHhmOFx4MzBceGYwXHg2MSIsCi0JCS5rc2l6ZQk9IDE2LAotCQkucGxhaW50ZXh0ID0g Ilx4OTVceDJiXHgyYVx4NTZceGE1XHg2MFx4MDRhXHhjMCIKLQkJCSAgICAgIlx4YjNceDJiXHg2 Nlx4NTZceGEwXHg1Ylx4NDBceGI2IiwKLQkJLnBzaXplCT0gMTYsCi0JCS5kaWdlc3QJPSAiXHhk YVx4NTNceGViXHgwYVx4ZDJceGM1XHg1Ylx4YjYiCi0JCQkgICJceDRmXHhjNFx4ODBceDJjXHhj M1x4ZmVceGRhXHg2MCIsCi0JfSwgewotCQkua2V5CT0gIlx4MGJceDBiXHgwYlx4MGJceDBiXHgw Ylx4MGJceDBiIgotCQkJICAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiLAotCQku a3NpemUJPSAxNiwKLQkJLnBsYWludGV4dCA9ICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/ IiwKLQkJLnBzaXplCT0gMjgsCi0JCS5kaWdlc3QJPSAiXHgzZVx4MWZceDVjXHg0ZFx4NjVceGYw XHhlZlx4Y2UiCi0JCQkgICJceDBkXHg2MVx4MDZceDI3XHg2Nlx4NTFceGQ1XHhlMiIsCi0JfSwg ewotCQkua2V5CT0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgotCQkJICAiXHhh YVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiLAotCQkua3NpemUJPSAxNiwKLQkJLnBsYWlu dGV4dCA9ICJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQi Ci0JCQkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhk ZCIKLQkJCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRc eGRkIgotCQkJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhk ZCIsCi0JCS5wc2l6ZQk9IDUwLAotCQkuZGlnZXN0CT0gIlx4ZmJceDQ5XHg4YVx4MzZceGUxXHg5 Nlx4ZTFceDk2IgotCQkJICAiXHhlMVx4OTZceGUxXHg5Nlx4ZTFceDk2XHhlMVx4OTYiLAotCX0s IHsKLQkJLmtleQk9ICJceGRhXHg1M1x4ZWJceDBhXHhkMlx4YzVceDViXHhiNiIKLQkJCSAgIlx4 NGZceGM0XHg4MFx4MmNceGMzXHhmZVx4ZGFceDYwIiwKLQkJLmtzaXplCT0gMTYsCi0JCS5wbGFp bnRleHQgPSAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNk IgotCQkJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4 Y2QiCi0JCQkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNk XHhjZCIKLQkJCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4 Y2QiLAotCQkucHNpemUJPSA1MCwKLQkJLmRpZ2VzdAk9ICJceDJiXHg1Y1x4MGNceDdmXHg1Mlx4 ZDFceDYwXHhjMiIKLQkJCSAgIlx4NDlceGVkXHg2ZVx4MzJceDdhXHhhOVx4YmVceDA4IiwKLQl9 LCB7Ci0JCS5rZXkJPSAiXHg5NVx4MmJceDJhXHg1Nlx4YTVceDYwXHgwNGFceGMwIgotCQkJICAi XHhiM1x4MmJceDY2XHg1Nlx4YTBceDViXHg0MFx4YjYiLAotCQkua3NpemUJPSAxNiwKLQkJLnBs YWludGV4dCA9ICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIsCi0JCS5wc2l6ZQk9IDIwLAotCQkuZGln ZXN0CT0gIlx4ZjhceDk0XHg4N1x4MmFceDRiXHg2M1x4OTlceDI4IgotCQkJICAiXHgyM1x4Zjdc eDkzXHhmN1x4MTlceGY1XHg5Nlx4ZDkiLAotCX0sIHsKLQkJLmtleQk9ICJceDBhXHgxYlx4MmNc eDNkXHg0ZVx4NWZceDY0XHg3MSIKLQkJCSJceDgyXHg5M1x4YTRceGI1XHhjNlx4ZDdceGU4XHhm OSIsCi0JCS5rc2l6ZQk9IDE2LAotCQkucGxhaW50ZXh0ID0gIlx4NTZceDZmXHg3Mlx4MjBceDZj XHg2MVx4NzVceDc0IgotCQkJIlx4NjVceDcyXHgyMFx4NGNceDYxXHg3NVx4NzNceDYzIgotCQkJ Ilx4NjhceDY1XHg2ZVx4MjBceDc1XHg2ZVx4NjRceDIwIgotCQkJIlx4NTNceDc0XHg2MVx4NzVc eDZlXHg2NVx4NmVceDIwIgotCQkJIlx4NzNceDY1XHg2OVx4MjBceDczXHg3NFx4NjlceDZjIgot CQkJIlx4NmNceDJjXHgwYVx4NjRceDc1XHgyMFx4NmRceDY1IgotCQkJIlx4NjlceDZlXHgyMFx4 NzRceDY5XHg2NVx4NjZceDc0IgotCQkJIlx4NjlceDY1XHg2Nlx4NjVceDczXHgyMFx4NGNceDY1 IgotCQkJIlx4NjJceDY1XHg2ZVx4M2JceDBhXHg2NFx4NjFceDczIgotCQkJIlx4NzNceDIwXHg2 NFx4NzVceDIwXHg3N1x4NjVceDY5IgotCQkJIlx4YzNceDlmXHg3NFx4MjBceDc3XHg2MVx4NzNc eDIwIgotCQkJIlx4NjRceDY1XHg3Mlx4MjBceDU3XHg2OVx4NmVceDY0IgotCQkJIlx4MjBceDY0 XHg2OVx4NzJceDIwXHg3N1x4NjlceDZjIgotCQkJIlx4NmNceDJjXHgwYVx4NjVceDY4XHgyMFx4 NmVceDZmIgotCQkJIlx4NjNceDY4XHgyMFx4NjRceDY5XHg2NVx4MjBceDQyIgotCQkJIlx4Njlc eDcyXHg2Ylx4NjVceDZlXHgyMFx4NjJceDY1IgotCQkJIlx4NjJceDY1XHg2ZVx4MmVceDBhXHgw YVx4NTVceDZlIgotCQkJIlx4NjRceDIwXHg3N1x4NjVceDZlXHg2ZVx4MjBceDY0IgotCQkJIlx4 NjlceDcyXHgyMFx4NjVceDY5XHg2ZVx4NmRceDYxIgotCQkJIlx4NmNceDIwXHg2NFx4NjFceDcz XHgyMFx4NTNceDYzIgotCQkJIlx4NjhceDc3XHg2NVx4NjlceDY3XHg2NVx4NmVceDIwIgotCQkJ Ilx4NzNceDcwXHg3Mlx4NjFceDYzXHg2OFx4MmNceDBhIgotCQkJIlx4NmNceDYxXHg3M1x4NzNc eDIwXHg2NFx4NjVceDY5IgotCQkJIlx4NmVceDY1XHgyMFx4NTNceDY5XHg2ZVx4NmVceDY1Igot CQkJIlx4MjBceDYyXHg2NVx4NzNceDY5XHg2NVx4NjdceDY1IgotCQkJIlx4NmVceDJlXHgwYVx4 NGFceDY1XHg2NFx4NjVceDZkIgotCQkJIlx4MjBceDQ4XHg2MVx4NzVceDYzXHg2OFx4NjVceDIw IgotCQkJIlx4NjdceDY5XHg2Mlx4NzRceDIwXHg2NFx4NjlceDYzIgotCQkJIlx4NjhceDJjXHgy MFx4NjdceDY5XHg2Mlx4MjBceDZlIgotCQkJIlx4NjFceDYzXHg2OFx4MmNceDBhXHg2NVx4NzJc eDIwIgotCQkJIlx4NzdceDY5XHg3Mlx4NjRceDIwXHg2NFx4NjlceDYzIgotCQkJIlx4NjhceDIw XHg2Y1x4NjlceDY1XHg2Mlx4NjVceDZlIgotCQkJIlx4MjBceDc1XHg2ZVx4NjRceDIwXHg3N1x4 NjlceDY1IgotCQkJIlx4NjdceDY1XHg2ZVx4MmVceDBhXHgwYVx4NTVceDZlIgotCQkJIlx4NjRc eDIwXHg2NFx4NjFceDZlXHg2ZVx4MjBceDZkIgotCQkJIlx4NjVceDY5XHg2ZVx4NjVceDIwXHg1 M1x4NjVceDY1IgotCQkJIlx4NmNceDY1XHgyMFx4NzNceDY1XHg2OVx4NzRceDIwIgotCQkJIlx4 NzdceDY1XHg2OVx4NzRceDJjXHgyMFx4NzNceDY1IgotCQkJIlx4NjlceDIwXHg3N1x4NjVceDY5 XHg3NFx4MmNceDBhIgotCQkJIlx4NjRceDYxXHg3M1x4NzNceDIwXHg2NFx4NjlceDcyIgotCQkJ Ilx4MjBceDY0XHg2MVx4NzNceDIwXHg0Y1x4NjVceDYyIgotCQkJIlx4NjVceDZlXHgyMFx4Njdc eDY1XHg2Y1x4NjlceDZlIgotCQkJIlx4NjdceDY1XHgyY1x4MGFceDYyXHg3Mlx4NjVceDY5Igot CQkJIlx4NzRceDY1XHgyMFx4NjRceDY5XHg2M1x4NjhceDIwIgotCQkJIlx4NzdceDY5XHg2NVx4 MjBceDY1XHg2OVx4NmVceDIwIgotCQkJIlx4NDZceDY1XHg2OVx4NjVceDcyXHg2Ylx4NmNceDY1 IgotCQkJIlx4NjlceDY0XHgwYVx4YzNceGJjXHg2Mlx4NjVceDcyIgotCQkJIlx4MjBceDY0XHg2 OVx4NjVceDIwXHg3M1x4NjlceDZlIgotCQkJIlx4NmVceDY1XHg2ZVx4NjRceDY1XHg2ZVx4MjBc eDQ0IgotCQkJIlx4NjlceDZlXHg2N1x4NjVceDJlXHgyZVx4MmVceDBhIiwKLQkJLnBzaXplCT0g NDAwLAotCQkuZGlnZXN0ID0gIlx4YWRceGIxXHhjMVx4ZTlceDU2XHg3MFx4MzFceDFkIgotCQkJ Ilx4YmJceDViXHhkZlx4NWVceDcwXHg3Mlx4MWFceDU3IiwKLQl9LAotfTsKLQogLyoKICAqIEhN QUMtTUQ1IHRlc3QgdmVjdG9ycyBmcm9tIFJGQzIyMDIKICAqIChUaGVzZSBuZWVkIHRvIGJlIGZp eGVkIHRvIG5vdCB1c2Ugc3RybGVuKS4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBoYXNoX3Rl c3R2ZWMgaG1hY19tZDVfdHZfdGVtcGxhdGVbXSA9Ci0tIAoyLjUzLjAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxp c3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==