From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24D1436195C; Mon, 21 Sep 2026 05:16:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789967772; cv=none; b=TFdl7fv+iWyeE1fTKlgVLdJ+1+VsWhF5VYJwjyeDu/WSb1ubVPA9dslJ9vERu5d5cboGQ5X5Bj1Wp7dfa8ANwpdVgHJ7Mn4jACd87Tk/bQwBydCHu7vooGFLz7ZNoPO8/gUKZXzNAhbOH2o6I2SXi4JlXAtMBYRISFkNJaW9Jtg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789967772; c=relaxed/simple; bh=L9TXqDmje3l7vbXeBbsMs2/svsGmBQAvC/uNFmhLLmw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mVGxefTCZ1V5p/Fqv2Lbb1la38caHTddOJc9oiBB7uLwNNEnRlQl9twSmwLjHe9ljZ3yDNGOOauEeUTQhaSxEW14OPmOrrbpem1q1AH22FV2pfSyWgkyr625xWykwzzK3x4mKY9bY2dr0+hjtvHB36PbH7IaLCfIhFhfIzRuHFc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Rw2a6kH4; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Rw2a6kH4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BAE431F0089B; Mon, 21 Sep 2026 05:16:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789967769; bh=JtXdB4tOMY8yQZAnGFn5daFwsAwdwklSo1JeZmkW/k8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Rw2a6kH4ITMGqzwwlWBH9DjIOk8Nemf8R0QqFZUafMVf/lrVBFiIiSUCeU5njYOeE FhZPgIlXE2uAUSXDx4RK7H4143qgM0dwasVO6sStF3azimpR9Xbc/FB3wQsvVzTeA1 lG+Z3zG/EKGvqfI9KoFy4zoBFwXTTM0FNW4ykSLwr8Jo+4U1LSiNI41f5PXWJJXDrp 5M5UmqdGYCKjw0EK0CM7/Zz45UL7YY4R9WFMs9TWiKmr4uScADPUpLlMJ945bIbmZy eWcr1v1iEJWVmwUvrnnRz+8/X6chmPSWBLjrcac85zVOKGmdHZvFqqgbnkb4vhpjjo Gef2XAlWBgKGg== From: Eric Biggers To: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Herbert Xu , x86@kernel.org, linux-riscv@lists.infradead.org, Eric Biggers Subject: [PATCH 15/20] lib/crypto: riscv/aes: Copy aes-macros.S to library Date: Sun, 20 Sep 2026 22:09:01 -0700 Message-ID: <20260921050910.296144-16-ebiggers@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260921050910.296144-1-ebiggers@kernel.org> References: <20260921050910.296144-1-ebiggers@kernel.org> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copy arch/riscv/crypto/aes-macros.S to lib/crypto/riscv/aes-macros.S and make lib/crypto/riscv/aes-riscv64-zvkned.S include the latter copy. This makes it possible to change these macros without interfering with the remaining code in arch/riscv/crypto/. Of course, the copy in arch/riscv/crypto/ will be removed once the rest of the AES code there is migrated to the library. Signed-off-by: Eric Biggers --- lib/crypto/riscv/aes-macros.S | 166 ++++++++++++++++++++++++++ lib/crypto/riscv/aes-riscv64-zvkned.S | 2 +- 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 lib/crypto/riscv/aes-macros.S diff --git a/lib/crypto/riscv/aes-macros.S b/lib/crypto/riscv/aes-macros.S new file mode 100644 index 000000000000..1384164621a5 --- /dev/null +++ b/lib/crypto/riscv/aes-macros.S @@ -0,0 +1,166 @@ +/* SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause */ +// +// This file is dual-licensed, meaning that you can use it under your +// choice of either of the following two licenses: +// +// Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License 2.0 (the "License"). You can obtain +// a copy in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html +// +// or +// +// Copyright (c) 2023, Christoph Müllner +// Copyright (c) 2023, Phoebe Chen +// Copyright (c) 2023, Jerry Shih +// Copyright 2024 Google LLC +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file contains macros that are shared by the other aes-*.S files. The +// generated code of these macros depends on the following RISC-V extensions: +// - RV64I +// - RISC-V Vector ('V') with VLEN >= 128 +// - RISC-V Vector AES block cipher extension ('Zvkned') + +// Loads the AES round keys from \keyp into vector registers and jumps to code +// specific to the length of the key. Specifically: +// - If AES-128, loads round keys into v1-v11 and jumps to \label128. +// - If AES-192, loads round keys into v1-v13 and jumps to \label192. +// - If AES-256, loads round keys into v1-v15 and continues onwards. +// +// Also sets vl=4 and vtype=e32,m1,ta,ma. Clobbers t0 and t1. +.macro aes_begin keyp, label128, label192, key_len +.ifb \key_len + lwu t0, 480(\keyp) // t0 = key length in bytes +.endif + li t1, 24 // t1 = key length for AES-192 + vsetivli zero, 4, e32, m1, ta, ma + vle32.v v1, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v2, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v3, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v4, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v5, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v6, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v7, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v8, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v9, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v10, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v11, (\keyp) +.ifb \key_len + blt t0, t1, \label128 // If AES-128, goto label128. +.else + blt \key_len, t1, \label128 // If AES-128, goto label128. +.endif + addi \keyp, \keyp, 16 + vle32.v v12, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v13, (\keyp) +.ifb \key_len + beq t0, t1, \label192 // If AES-192, goto label192. +.else + beq \key_len, t1, \label192 // If AES-192, goto label192. +.endif + // Else, it's AES-256. + addi \keyp, \keyp, 16 + vle32.v v14, (\keyp) + addi \keyp, \keyp, 16 + vle32.v v15, (\keyp) +.endm + +// Encrypts \data using zvkned instructions, using the round keys loaded into +// v1-v11 (for AES-128), v1-v13 (for AES-192), or v1-v15 (for AES-256). \keylen +// is the AES key length in bits. vl and vtype must already be set +// appropriately. Note that if vl > 4, multiple blocks are encrypted. +.macro aes_encrypt data, keylen + vaesz.vs \data, v1 + vaesem.vs \data, v2 + vaesem.vs \data, v3 + vaesem.vs \data, v4 + vaesem.vs \data, v5 + vaesem.vs \data, v6 + vaesem.vs \data, v7 + vaesem.vs \data, v8 + vaesem.vs \data, v9 + vaesem.vs \data, v10 +.if \keylen == 128 + vaesef.vs \data, v11 +.elseif \keylen == 192 + vaesem.vs \data, v11 + vaesem.vs \data, v12 + vaesef.vs \data, v13 +.else + vaesem.vs \data, v11 + vaesem.vs \data, v12 + vaesem.vs \data, v13 + vaesem.vs \data, v14 + vaesef.vs \data, v15 +.endif +.endm + +// Same as aes_encrypt, but decrypts instead of encrypts. +.macro aes_decrypt data, keylen +.if \keylen == 128 + vaesz.vs \data, v11 +.elseif \keylen == 192 + vaesz.vs \data, v13 + vaesdm.vs \data, v12 + vaesdm.vs \data, v11 +.else + vaesz.vs \data, v15 + vaesdm.vs \data, v14 + vaesdm.vs \data, v13 + vaesdm.vs \data, v12 + vaesdm.vs \data, v11 +.endif + vaesdm.vs \data, v10 + vaesdm.vs \data, v9 + vaesdm.vs \data, v8 + vaesdm.vs \data, v7 + vaesdm.vs \data, v6 + vaesdm.vs \data, v5 + vaesdm.vs \data, v4 + vaesdm.vs \data, v3 + vaesdm.vs \data, v2 + vaesdf.vs \data, v1 +.endm + +// Expands to aes_encrypt or aes_decrypt according to \enc, which is 1 or 0. +.macro aes_crypt data, enc, keylen +.if \enc + aes_encrypt \data, \keylen +.else + aes_decrypt \data, \keylen +.endif +.endm diff --git a/lib/crypto/riscv/aes-riscv64-zvkned.S b/lib/crypto/riscv/aes-riscv64-zvkned.S index 0d988bc3d37b..7a52ea6c669d 100644 --- a/lib/crypto/riscv/aes-riscv64-zvkned.S +++ b/lib/crypto/riscv/aes-riscv64-zvkned.S @@ -48,7 +48,7 @@ .text .option arch, +zvkned -#include "../../arch/riscv/crypto/aes-macros.S" +#include "aes-macros.S" #define RNDKEYS a0 #define KEY_LEN a1 -- 2.55.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 E98E2C982EF for ; Mon, 21 Sep 2026 05:16: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: 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=nZ8TRvpeJ07hMiBIZ3IgRGwGZclS9lLRqSJkgKhWqo4=; b=gaFSt2IXx1RLbk sNFLqZhgsc+jKzP2u62UsqYY+AWNjOa1MfwVh2F1DYS4YdhcprGpUk0xTVN+BoVJ3J7vcRhX2Q+Q/ Fb3g8Kxo3QeYxCdhUgdXj2zUkw9xqcyuDe4Nroopmt+cZIj4v9MFlQfAKG+wd7vcYP6ezD4yEoweF 4Dp8WntOYyEHBVqIktxD3710fykh4HciXv+iVJfP2EhHJXjqiQiZm6ea5s37swt73C/7+DGlMSXlx /I4/WLhDMkUyGAzuyvzyNU+KsHHrLI7YzNmIk+JkNkiQK+iuzmeTZ9XDDUqlxXCJ2A/U2Af21VLse ynN3nQeyuiLFIi5tqlxw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8WO4-00000000tQ6-2Wnn; Mon, 21 Sep 2026 05:16:20 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8WNt-00000000tGe-1O2x for linux-riscv@lists.infradead.org; Mon, 21 Sep 2026 05:16:09 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 1AFB043900; Mon, 21 Sep 2026 05:16:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BAE431F0089B; Mon, 21 Sep 2026 05:16:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789967769; bh=JtXdB4tOMY8yQZAnGFn5daFwsAwdwklSo1JeZmkW/k8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Rw2a6kH4ITMGqzwwlWBH9DjIOk8Nemf8R0QqFZUafMVf/lrVBFiIiSUCeU5njYOeE FhZPgIlXE2uAUSXDx4RK7H4143qgM0dwasVO6sStF3azimpR9Xbc/FB3wQsvVzTeA1 lG+Z3zG/EKGvqfI9KoFy4zoBFwXTTM0FNW4ykSLwr8Jo+4U1LSiNI41f5PXWJJXDrp 5M5UmqdGYCKjw0EK0CM7/Zz45UL7YY4R9WFMs9TWiKmr4uScADPUpLlMJ945bIbmZy eWcr1v1iEJWVmwUvrnnRz+8/X6chmPSWBLjrcac85zVOKGmdHZvFqqgbnkb4vhpjjo Gef2XAlWBgKGg== From: Eric Biggers To: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Herbert Xu , x86@kernel.org, linux-riscv@lists.infradead.org, Eric Biggers Subject: [PATCH 15/20] lib/crypto: riscv/aes: Copy aes-macros.S to library Date: Sun, 20 Sep 2026 22:09:01 -0700 Message-ID: <20260921050910.296144-16-ebiggers@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260921050910.296144-1-ebiggers@kernel.org> References: <20260921050910.296144-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 Q29weSBhcmNoL3Jpc2N2L2NyeXB0by9hZXMtbWFjcm9zLlMgdG8gbGliL2NyeXB0by9yaXNjdi9h ZXMtbWFjcm9zLlMgYW5kCm1ha2UgbGliL2NyeXB0by9yaXNjdi9hZXMtcmlzY3Y2NC16dmtuZWQu UyBpbmNsdWRlIHRoZSBsYXR0ZXIgY29weS4KClRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gY2hh bmdlIHRoZXNlIG1hY3JvcyB3aXRob3V0IGludGVyZmVyaW5nIHdpdGgKdGhlIHJlbWFpbmluZyBj b2RlIGluIGFyY2gvcmlzY3YvY3J5cHRvLy4KCk9mIGNvdXJzZSwgdGhlIGNvcHkgaW4gYXJjaC9y aXNjdi9jcnlwdG8vIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZSByZXN0Cm9mIHRoZSBBRVMgY29k ZSB0aGVyZSBpcyBtaWdyYXRlZCB0byB0aGUgbGlicmFyeS4KClNpZ25lZC1vZmYtYnk6IEVyaWMg QmlnZ2VycyA8ZWJpZ2dlcnNAa2VybmVsLm9yZz4KLS0tCiBsaWIvY3J5cHRvL3Jpc2N2L2Flcy1t YWNyb3MuUyAgICAgICAgIHwgMTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvY3J5 cHRvL3Jpc2N2L2Flcy1yaXNjdjY0LXp2a25lZC5TIHwgICAyICstCiAyIGZpbGVzIGNoYW5nZWQs IDE2NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2NyeXB0by9yaXNjdi9hZXMtbWFjcm9zLlMKCmRpZmYgLS1naXQgYS9saWIvY3J5cHRvL3Jpc2N2 L2Flcy1tYWNyb3MuUyBiL2xpYi9jcnlwdG8vcmlzY3YvYWVzLW1hY3Jvcy5TCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTM4NDE2NDYyMWE1Ci0tLSAvZGV2L251bGwK KysrIGIvbGliL2NyeXB0by9yaXNjdi9hZXMtbWFjcm9zLlMKQEAgLTAsMCArMSwxNjYgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIE9SIEJTRC0yLUNsYXVzZSAqLwor Ly8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkLCBtZWFuaW5nIHRoYXQgeW91IGNhbiB1 c2UgaXQgdW5kZXIgeW91cgorLy8gY2hvaWNlIG9mIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIHR3 byBsaWNlbnNlczoKKy8vCisvLyBDb3B5cmlnaHQgMjAyMyBUaGUgT3BlblNTTCBQcm9qZWN0IEF1 dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFw YWNoZSBMaWNlbnNlIDIuMCAodGhlICJMaWNlbnNlIikuIFlvdSBjYW4gb2J0YWluCisvLyBhIGNv cHkgaW4gdGhlIGZpbGUgTElDRU5TRSBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBvciBhdAor Ly8gaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorLy8KKy8vIG9y CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDIzLCBDaHJpc3RvcGggTcO8bGxuZXIgPGNocmlzdG9w aC5tdWVsbG5lckB2cnVsbC5ldT4KKy8vIENvcHlyaWdodCAoYykgMjAyMywgUGhvZWJlIENoZW4g PHBob2ViZS5jaGVuQHNpZml2ZS5jb20+CisvLyBDb3B5cmlnaHQgKGMpIDIwMjMsIEplcnJ5IFNo aWggPGplcnJ5LnNoaWhAc2lmaXZlLmNvbT4KKy8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTEMK Ky8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK Ky8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8g IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhpcyBmaWxlIGNv bnRhaW5zIG1hY3JvcyB0aGF0IGFyZSBzaGFyZWQgYnkgdGhlIG90aGVyIGFlcy0qLlMgZmlsZXMu ICBUaGUKKy8vIGdlbmVyYXRlZCBjb2RlIG9mIHRoZXNlIG1hY3JvcyBkZXBlbmRzIG9uIHRoZSBm b2xsb3dpbmcgUklTQy1WIGV4dGVuc2lvbnM6CisvLyAtIFJWNjRJCisvLyAtIFJJU0MtViBWZWN0 b3IgKCdWJykgd2l0aCBWTEVOID49IDEyOAorLy8gLSBSSVNDLVYgVmVjdG9yIEFFUyBibG9jayBj aXBoZXIgZXh0ZW5zaW9uICgnWnZrbmVkJykKKworLy8gTG9hZHMgdGhlIEFFUyByb3VuZCBrZXlz IGZyb20gXGtleXAgaW50byB2ZWN0b3IgcmVnaXN0ZXJzIGFuZCBqdW1wcyB0byBjb2RlCisvLyBz cGVjaWZpYyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkuICBTcGVjaWZpY2FsbHk6CisvLyAgIC0g SWYgQUVTLTEyOCwgbG9hZHMgcm91bmQga2V5cyBpbnRvIHYxLXYxMSBhbmQganVtcHMgdG8gXGxh YmVsMTI4LgorLy8gICAtIElmIEFFUy0xOTIsIGxvYWRzIHJvdW5kIGtleXMgaW50byB2MS12MTMg YW5kIGp1bXBzIHRvIFxsYWJlbDE5Mi4KKy8vICAgLSBJZiBBRVMtMjU2LCBsb2FkcyByb3VuZCBr ZXlzIGludG8gdjEtdjE1IGFuZCBjb250aW51ZXMgb253YXJkcy4KKy8vCisvLyBBbHNvIHNldHMg dmw9NCBhbmQgdnR5cGU9ZTMyLG0xLHRhLG1hLiAgQ2xvYmJlcnMgdDAgYW5kIHQxLgorLm1hY3Jv CWFlc19iZWdpbglrZXlwLCBsYWJlbDEyOCwgbGFiZWwxOTIsIGtleV9sZW4KKy5pZmIgXGtleV9s ZW4KKwlsd3UJCXQwLCA0ODAoXGtleXApCS8vIHQwID0ga2V5IGxlbmd0aCBpbiBieXRlcworLmVu ZGlmCisJbGkJCXQxLCAyNAkJLy8gdDEgPSBrZXkgbGVuZ3RoIGZvciBBRVMtMTkyCisJdnNldGl2 bGkJemVybywgNCwgZTMyLCBtMSwgdGEsIG1hCisJdmxlMzIudgkJdjEsIChca2V5cCkKKwlhZGRp CQlca2V5cCwgXGtleXAsIDE2CisJdmxlMzIudgkJdjIsIChca2V5cCkKKwlhZGRpCQlca2V5cCwg XGtleXAsIDE2CisJdmxlMzIudgkJdjMsIChca2V5cCkKKwlhZGRpCQlca2V5cCwgXGtleXAsIDE2 CisJdmxlMzIudgkJdjQsIChca2V5cCkKKwlhZGRpCQlca2V5cCwgXGtleXAsIDE2CisJdmxlMzIu dgkJdjUsIChca2V5cCkKKwlhZGRpCQlca2V5cCwgXGtleXAsIDE2CisJdmxlMzIudgkJdjYsIChc a2V5cCkKKwlhZGRpCQlca2V5cCwgXGtleXAsIDE2CisJdmxlMzIudgkJdjcsIChca2V5cCkKKwlh ZGRpCQlca2V5cCwgXGtleXAsIDE2CisJdmxlMzIudgkJdjgsIChca2V5cCkKKwlhZGRpCQlca2V5 cCwgXGtleXAsIDE2CisJdmxlMzIudgkJdjksIChca2V5cCkKKwlhZGRpCQlca2V5cCwgXGtleXAs IDE2CisJdmxlMzIudgkJdjEwLCAoXGtleXApCisJYWRkaQkJXGtleXAsIFxrZXlwLCAxNgorCXZs ZTMyLnYJCXYxMSwgKFxrZXlwKQorLmlmYiBca2V5X2xlbgorCWJsdAkJdDAsIHQxLCBcbGFiZWwx MjgJLy8gSWYgQUVTLTEyOCwgZ290byBsYWJlbDEyOC4KKy5lbHNlCisJYmx0CQlca2V5X2xlbiwg dDEsIFxsYWJlbDEyOAkvLyBJZiBBRVMtMTI4LCBnb3RvIGxhYmVsMTI4LgorLmVuZGlmCisJYWRk aQkJXGtleXAsIFxrZXlwLCAxNgorCXZsZTMyLnYJCXYxMiwgKFxrZXlwKQorCWFkZGkJCVxrZXlw LCBca2V5cCwgMTYKKwl2bGUzMi52CQl2MTMsIChca2V5cCkKKy5pZmIgXGtleV9sZW4KKwliZXEJ CXQwLCB0MSwgXGxhYmVsMTkyCS8vIElmIEFFUy0xOTIsIGdvdG8gbGFiZWwxOTIuCisuZWxzZQor CWJlcQkJXGtleV9sZW4sIHQxLCBcbGFiZWwxOTIJLy8gSWYgQUVTLTE5MiwgZ290byBsYWJlbDE5 Mi4KKy5lbmRpZgorCS8vIEVsc2UsIGl0J3MgQUVTLTI1Ni4KKwlhZGRpCQlca2V5cCwgXGtleXAs IDE2CisJdmxlMzIudgkJdjE0LCAoXGtleXApCisJYWRkaQkJXGtleXAsIFxrZXlwLCAxNgorCXZs ZTMyLnYJCXYxNSwgKFxrZXlwKQorLmVuZG0KKworLy8gRW5jcnlwdHMgXGRhdGEgdXNpbmcgenZr bmVkIGluc3RydWN0aW9ucywgdXNpbmcgdGhlIHJvdW5kIGtleXMgbG9hZGVkIGludG8KKy8vIHYx LXYxMSAoZm9yIEFFUy0xMjgpLCB2MS12MTMgKGZvciBBRVMtMTkyKSwgb3IgdjEtdjE1IChmb3Ig QUVTLTI1NikuICBca2V5bGVuCisvLyBpcyB0aGUgQUVTIGtleSBsZW5ndGggaW4gYml0cy4gIHZs IGFuZCB2dHlwZSBtdXN0IGFscmVhZHkgYmUgc2V0CisvLyBhcHByb3ByaWF0ZWx5LiAgTm90ZSB0 aGF0IGlmIHZsID4gNCwgbXVsdGlwbGUgYmxvY2tzIGFyZSBlbmNyeXB0ZWQuCisubWFjcm8JYWVz X2VuY3J5cHQJZGF0YSwga2V5bGVuCisJdmFlc3oudnMJXGRhdGEsIHYxCisJdmFlc2VtLnZzCVxk YXRhLCB2MgorCXZhZXNlbS52cwlcZGF0YSwgdjMKKwl2YWVzZW0udnMJXGRhdGEsIHY0CisJdmFl c2VtLnZzCVxkYXRhLCB2NQorCXZhZXNlbS52cwlcZGF0YSwgdjYKKwl2YWVzZW0udnMJXGRhdGEs IHY3CisJdmFlc2VtLnZzCVxkYXRhLCB2OAorCXZhZXNlbS52cwlcZGF0YSwgdjkKKwl2YWVzZW0u dnMJXGRhdGEsIHYxMAorLmlmIFxrZXlsZW4gPT0gMTI4CisJdmFlc2VmLnZzCVxkYXRhLCB2MTEK Ky5lbHNlaWYgXGtleWxlbiA9PSAxOTIKKwl2YWVzZW0udnMJXGRhdGEsIHYxMQorCXZhZXNlbS52 cwlcZGF0YSwgdjEyCisJdmFlc2VmLnZzCVxkYXRhLCB2MTMKKy5lbHNlCisJdmFlc2VtLnZzCVxk YXRhLCB2MTEKKwl2YWVzZW0udnMJXGRhdGEsIHYxMgorCXZhZXNlbS52cwlcZGF0YSwgdjEzCisJ dmFlc2VtLnZzCVxkYXRhLCB2MTQKKwl2YWVzZWYudnMJXGRhdGEsIHYxNQorLmVuZGlmCisuZW5k bQorCisvLyBTYW1lIGFzIGFlc19lbmNyeXB0LCBidXQgZGVjcnlwdHMgaW5zdGVhZCBvZiBlbmNy eXB0cy4KKy5tYWNybwlhZXNfZGVjcnlwdAlkYXRhLCBrZXlsZW4KKy5pZiBca2V5bGVuID09IDEy OAorCXZhZXN6LnZzCVxkYXRhLCB2MTEKKy5lbHNlaWYgXGtleWxlbiA9PSAxOTIKKwl2YWVzei52 cwlcZGF0YSwgdjEzCisJdmFlc2RtLnZzCVxkYXRhLCB2MTIKKwl2YWVzZG0udnMJXGRhdGEsIHYx MQorLmVsc2UKKwl2YWVzei52cwlcZGF0YSwgdjE1CisJdmFlc2RtLnZzCVxkYXRhLCB2MTQKKwl2 YWVzZG0udnMJXGRhdGEsIHYxMworCXZhZXNkbS52cwlcZGF0YSwgdjEyCisJdmFlc2RtLnZzCVxk YXRhLCB2MTEKKy5lbmRpZgorCXZhZXNkbS52cwlcZGF0YSwgdjEwCisJdmFlc2RtLnZzCVxkYXRh LCB2OQorCXZhZXNkbS52cwlcZGF0YSwgdjgKKwl2YWVzZG0udnMJXGRhdGEsIHY3CisJdmFlc2Rt LnZzCVxkYXRhLCB2NgorCXZhZXNkbS52cwlcZGF0YSwgdjUKKwl2YWVzZG0udnMJXGRhdGEsIHY0 CisJdmFlc2RtLnZzCVxkYXRhLCB2MworCXZhZXNkbS52cwlcZGF0YSwgdjIKKwl2YWVzZGYudnMJ XGRhdGEsIHYxCisuZW5kbQorCisvLyBFeHBhbmRzIHRvIGFlc19lbmNyeXB0IG9yIGFlc19kZWNy eXB0IGFjY29yZGluZyB0byBcZW5jLCB3aGljaCBpcyAxIG9yIDAuCisubWFjcm8JYWVzX2NyeXB0 CWRhdGEsIGVuYywga2V5bGVuCisuaWYgXGVuYworCWFlc19lbmNyeXB0CVxkYXRhLCBca2V5bGVu CisuZWxzZQorCWFlc19kZWNyeXB0CVxkYXRhLCBca2V5bGVuCisuZW5kaWYKKy5lbmRtCmRpZmYg LS1naXQgYS9saWIvY3J5cHRvL3Jpc2N2L2Flcy1yaXNjdjY0LXp2a25lZC5TIGIvbGliL2NyeXB0 by9yaXNjdi9hZXMtcmlzY3Y2NC16dmtuZWQuUwppbmRleCAwZDk4OGJjM2QzN2IuLjdhNTJlYTZj NjY5ZCAxMDA2NDQKLS0tIGEvbGliL2NyeXB0by9yaXNjdi9hZXMtcmlzY3Y2NC16dmtuZWQuUwor KysgYi9saWIvY3J5cHRvL3Jpc2N2L2Flcy1yaXNjdjY0LXp2a25lZC5TCkBAIC00OCw3ICs0OCw3 IEBACiAudGV4dAogLm9wdGlvbiBhcmNoLCArenZrbmVkCiAKLSNpbmNsdWRlICIuLi8uLi9hcmNo L3Jpc2N2L2NyeXB0by9hZXMtbWFjcm9zLlMiCisjaW5jbHVkZSAiYWVzLW1hY3Jvcy5TIgogCiAj ZGVmaW5lIFJOREtFWVMJCWEwCiAjZGVmaW5lIEtFWV9MRU4JCWExCi0tIAoyLjU1LjAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBt YWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==