From patchwork Wed Jun 21 22:47:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gary R Hook X-Patchwork-Id: 9803123 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 058026038C for ; Wed, 21 Jun 2017 22:48:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D53EE2818E for ; Wed, 21 Jun 2017 22:48:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C830728372; Wed, 21 Jun 2017 22:48:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F1342818E for ; Wed, 21 Jun 2017 22:48:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752092AbdFUWr7 (ORCPT ); Wed, 21 Jun 2017 18:47:59 -0400 Received: from mail-bn3nam01on0066.outbound.protection.outlook.com ([104.47.33.66]:6298 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751755AbdFUWr6 (ORCPT ); Wed, 21 Jun 2017 18:47:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Nhy50Z0g5QsyMpSKwM+Y6SqWfRQupqKSNS/PMGo3lpk=; b=RbDukHLWlKAz43G+hcuTnkMT7/RTnNwdxpyGU8d8O98MViCgHktuQayGHxMS8qzMbTT0uauSTpNbxtNHYEFkWY86w4oNW24P7UjwnLCD9uV1CcCOdPcW24O/nC9a/wCsGNvHZ0hXyLrrAoioF3bRzNB0kp4/d/iq8mW9OqGAZMw= Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Received: from taos.amd.com (165.204.77.1) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.168.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Wed, 21 Jun 2017 22:47:54 +0000 Subject: [PATCH 1/4] crypto: ccp - Fix base RSA function for version 5 CCPs From: Gary R Hook To: linux-crypto@vger.kernel.org Cc: thomas.lendacky@amd.com, herbert@gondor.apana.org.au, davem@davemloft.net Date: Wed, 21 Jun 2017 17:47:46 -0500 Message-ID: <20170621224746.15132.94790.stgit@taos.amd.com> In-Reply-To: <20170621224655.15132.20473.stgit@taos.amd.com> References: <20170621224655.15132.20473.stgit@taos.amd.com> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: DM5PR12CA0067.namprd12.prod.outlook.com (10.175.83.157) To CY4PR12MB1318.namprd12.prod.outlook.com (10.168.168.143) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5753cf4e-9e45-42b9-69ed-08d4b8f78e53 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:CY4PR12MB1318; X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 3:OMEIRLP4dMI3Tz8dp2u6xYiAxUtpU+tVI6GQddN7h7dUlpQTDM5S766SwEW5TJi0WCChCiWMZZcM6UvlaXlYsi1xUzqCtp7//IdUySMLED3kRkPgLofb9v2eb76N3GOEW7CTpfBNvQ3WNZ0C4uhYLXlxwBq4rMDFs7vBS2vKMo2LlHNuzIMMuNBkmUGVp4Sc00RdHq0F5aHitJCKawxjEAjABef4/l/gLUhglzZDntA+hkPEeBfpo56HT3YvUJ+WoL4g4sIrLCgt4tdh4GnhT4uLmciKd+Xs2LZPnvKdBDdirC0cwaZ4zRq7C0hItR38aQiO16ldf2YKBFhi48wBVJ1tm1bKKGMrVD+D2LjkgqA= X-MS-TrafficTypeDiagnostic: CY4PR12MB1318: X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 25:e9T0sTBN/R6hMqqzZg7p8KLq0+ieBFIa26mBCVNXzKHRYUiUfsFIbmXF8ihkVgsNiCdbA2odviN5vINaOBykLuoky6s2WgwO4TdNI3ddNwDaScCqEoaP5bZRNyNkUYYLq2zMg0gBqei7OjY+7pAgehzJUjcfgXYl+25d67ebA07L0ftJlZmoh0+CMyIRevcWelYTAqpzTPyMfq8dnYFJSyPJlLj+YRoAUEhKqKA629HMn2d5Z7hHOCfJw/Nx3oKDqJBOjkqhpdc+mxxxlKYDR3p0s/XVpx5JUbusWPChFHO8ZfboQPxjUa8nuqOE6GmWPCt/zc9p0hr/ZoIB/g7blQaIljpPBW8705DdTEhYcPnXEhdiCoQqDW4IKLEXeau4G/CM6GSkVqyOwhxgwGbALxfPDCdMVvX1rbwtTua77eHsy3QO+G3GRq0OMFDLWg1sYR9pDDfFodSxDAgNpchm38cDLr1xgmiJScErVGNS/2uK5z0NTK5dJgL/x13khHRBU1hdcvyboA23F5w0b/BPAzVnxV3TFOoVVIn8Rlp03VGWwdORAzqWQ/rKbs7i+mQpmxXJbRx7xscPTpcStOScud86z/vHGen23wf81IhQHg7V+AT4YSqfzh3mCrhoMvicVdHQDgQCeG6LS0iHt9q4rrrs7GejKUoWCA7ySmYT8vvz3vjd7ukJQlBkuPTUnYiuKkbIUK4uD8Cvc8/AuQiZgPLjJQ7jF4x5yIxtBig92FqOMiNUFl3lqI0Z5L3YNcfd9Nn4tEnbmexK65eLUFW1pkksnD/xc4p7QTOQW1e10FP6cbWG/7lA7Hl+0WEa7IZRfH02cuTYg7RPpYR+0Fn4djk6sSuZtohaTQ90X0ySmEtGW5/efuUpvP5+onD7OKsuZPBL2NrPA6fE98MyAl+wGi9V8eyraEHSh/QUlAxj2 BI= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 31:XHI4UgwKb1na685tJR+qplqo+Y06BoLhrIt6u0O92MjhEaB4M1BDgbIJkvlQ1ZESOpy/i04p/aerC3SrZfPbawqvZuC09dOYYTAm66fmSrbB5t7NTjyNMe/XLfs0Z7ISy/IEauJ3lCvfffG9bL3LmvcNb22+KtUsKjZBaF2/LP65f3+auDb2xhoE3jdS6DElHbiBgs34jDwKu6INHZdbgYQGFzLU2cHznM/mVz+SpX+bo/dhyIW8hZKaODYqHdnCzc9bb8QKXbmsAmB8mY1QPh84yA5q9zPF2ZM+l6W5gIg2DJFokSbmBLqo5voOUtHVFVmTMGOLRrITk6/TFc7Mip6vu2wx5FKUVn8WrBBAE4mUdIc0fm6GRNtE0Pn6GbNqRYsxZ8rrETKGBlQj2TRzgIzQUgZ5fm47QGsDKIJ1tjAWBnxMjN0Ug/EOKL8DB7LqMeiODK2bXf9h57mm1yccHCO4ptIMFk6YyyQg5Uw1hHAey9RJq4v2NBNRzqAH4Oa7cvCmZTPYiP/MV75ZkjmqQ+NlRpUQh4ODJakftZ2+x2nBTQs2XhTcQvcEJV2Yy53sxn10NnV1iNRBR8L0JJM0JAMTd4EIiznHGfkMjJwmBeMKGmz1oJ5sdvNt1ArkCk1m6AFVK5zC5ZUQYW8z6PHAV6QBWDE8y58x5Ycl1tGvFVI= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 20:C2+I3nUNvfp85VEjQcn/sTrnfDvcNrFcS71coEXu8+y0J55QSmhwUo5qS0BfTuP2so4QLrpaHVG4HVY/tXXnqv0cB60TdQ1FvtuGWdItmiy+EMXxxvViwr6qgQFokYHl8nRbDT+Na2bY15EWWsQ2T1Z3gF5+3wLy+G0Q8pO7J6Dc/f0vz3Si37GrnkXXdzpIPNkzd1RTkAxmVtj6AQ9CRu/0GM9NWOBF1vWpXC+a6H9rhvXwyraI8r/BDnfvottGBTRB9sNDWy2qQZ0ZO9Afna/BDNDVZmL+2ZDxGMHVSt4bSZagp/HI4x6JYOUzL9+l/QTvk5/zvvLzpWesI6QEzkpDplDQvJjAix2a3VJMkRHgxy6JSd0SO5qtGuAuRbRpRVIm60TRWXH2OnZNH1+30edyPGJxGDpHM93x9kYERhjcf46Xgm/SqDmbiYBp/kUFrxp4TfrkyMetoox/UrUaskRO+CU3yZO4sp7ESS+sKmXJjbi5WEnNMe6WHiF3B0Hc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123560025)(20161123562025)(20161123558100)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY4PR12MB1318; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY4PR12MB1318; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMzE4OzQ6MktteHRBVVdLR1dXY203RVE2bnk0SUJZM1hQ?= =?utf-8?B?VFJYWHUrWmx0SjdaRElQQWFVbEx5UWtVU0dWeVM2cmdwSERSZXNkbkRyZGx4?= =?utf-8?B?T0VCSWg2S2RzK0daT3Z3V3dLS3lrdUtvM3JFbU5mcm9wZzZrUlNWVGw2cDF1?= =?utf-8?B?bGx5aTZrYzcwMXM0N2lsS1ZNdWt3ZFluSmE3d0lsUmNIRmY1aG5vS1pSVFhp?= =?utf-8?B?QXBvbXFFSGRHTTlLMFkxbzFxc2JNVXh3ZWFnQkVsSlNGQytUT1IzaUUxdkNu?= =?utf-8?B?QVR4ZFFYdkRlbDVIbTQ3NFFBTHhKNGJ4ZVZ3U1hOYWQ2bElmcEducnBYOURB?= =?utf-8?B?eWtDRktQZTNUZWNBZUx6R0FHZWUrc2cvYTNtUEV1MnlaS0dUQ2RvRDlhZkxt?= =?utf-8?B?ZUM4SFdOQmNOV1RHQ2huc2xVb1ppRTZQRmdLaUllN1Nlcno2bXFRa0RVcUJB?= =?utf-8?B?UVFnOVF5V0R6cjI1ZlBGL0o1VEJIdVplb1J3czJYRi9RalpBMkY5NzU2UjdU?= =?utf-8?B?SUpkOWVmd2JjQUh4WFRzaW5VQjNFKy95TTVvYTg5NVdsaGFQMGt5a2R1Zmcx?= =?utf-8?B?MEQxei9jb2lSSEFKdERUUkhCM1ZTeGhVV2hNQkkyTVd3dys1U1pkRlpMVU53?= =?utf-8?B?VTE3OWxWVFJXbjBHSjJnNEhtQ0JJRkhnZFk5MzU3c3NaR1Y5b3FXYXVRaStR?= =?utf-8?B?OGx3L0ZJa0MwSDF3SFhRQTVGZzlsZFZTN3lUMEdpeGdyUExrbEE5UmFtVll5?= =?utf-8?B?L1lOVFVKWXlzZnl0N2dnUEhKTjhKNmE5Und6WlhsbTFFR281TE1INm13d0VG?= =?utf-8?B?U2R4NWl3WHQ1WklzOXZjaVMvRUtmYlU1eEFXR2gwNzByMzNYalJkQm9jRTVT?= =?utf-8?B?ZzkvN1JoZUdvQW1tcWloc3FCUWlZOGNoTys0OWtYd01VTHJ6dlh0MW5sUUxM?= =?utf-8?B?ZkZmREczbW1STURMYzcxZWdiUThheGxmY0dWemZBcVZwZ21zUEhFcExtcFBM?= =?utf-8?B?SnNxcEJ2WmJFQ2FHQ0JFVW9sU25KREQzWnhBVkg4L0VZZlZhZ0ovM05kckJa?= =?utf-8?B?dVBvNTcreFVjZTJwcnplOXhyZzNldkZudzZwSytLY2VuL0hVK1VsTWNDdzhE?= =?utf-8?B?VlR1elR3dTFDYktWVGJoaGNqaFRGSFNxMXZxSEJYOXA2UWxpS1FUTW83OHd6?= =?utf-8?B?c0JPTStBR0gyS3VhSm1LMmF5VUhRRmRoc0pJelBvVEdyZExtejVZRlVLU1Fu?= =?utf-8?B?cG5nNkZYb2xkVUtUdElTWTd1SFpTWlJRZEhVM2NXdVc4ZVg2VVorZnQ5ZXpM?= =?utf-8?B?eDY5SlgxWlQrYkNuSWVrTEZpSi9FZ3ZTSDE1Yzd1TTh0L1YwQWpBT1BsM1My?= =?utf-8?B?TkVmak1sS2dVUnB6QXB6OGYxUmc1QVBQRUtiZEszQ3ZPaWFHTXd3RlliTkZF?= =?utf-8?B?cy95T0w0MzdQZUpwaG04Skt5VHAya1VEdUVIck9lSG13YXBqaUpNcHRocVJO?= =?utf-8?B?QUVQVHpXMzYrWnNyZ205Vm4wdXdxb1lTRzcyUGZ4dkxrVTBLSWgwalJPYnRn?= =?utf-8?B?RXBjZ0dwQmgxeTNWTHJWeHUrSU5tbVpjbk9RMlg1STJmTFljQ3BnN21Ua0du?= =?utf-8?Q?b1Ot4RkiX/hqlBEexc1?= X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39410400002)(39450400003)(39850400002)(39400400002)(39860400002)(38730400002)(72206003)(8676002)(53936002)(2950100002)(6916009)(6666003)(6116002)(2906002)(47776003)(83506001)(86362001)(478600001)(1076002)(66066001)(575784001)(3846002)(230700001)(50466002)(50986999)(189998001)(33646002)(23676002)(2361001)(305945005)(2351001)(4001350100001)(54356999)(81166006)(76176999)(5660300001)(110136004)(25786009)(55016002)(4326008)(7736002)(42186005)(103116003)(53416004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:taos.amd.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMzE4OzIzOnNmOC9NbGc2NWRodEdWK0ZlZkdnYmg2MEJr?= =?utf-8?B?VVVqWlNSNG9VSnZ0NDdQUGR5T2pNcHk4bEwvNjhqcVlIVXlDTmNiUlErR3Zp?= =?utf-8?B?bi9xU21DQkRGbVUvejJHd3kzbXdsd3hxZ09vYi9QMm16Y1daN0hURjI4cHN1?= =?utf-8?B?UnZkR1pya2VVaklOcEFhWm5ZSjF3RjVhWCs5cDdFcWZtWEx6TG53Y3Z2aDZp?= =?utf-8?B?R2wwYWZ6UDNRbTlkdnpYc21DdGlORStCamNEZUhELzlvbUE3bUVtSE1pMWE1?= =?utf-8?B?c3pzYkFXUzlEdjBVWTNoZFFuMVdvWWlBdDVJZU1WYWxsVTNrY0pQTzVkKy9s?= =?utf-8?B?NlcrVDZDUHZCeGxDZ0xWV0EwZGswQVdrWTJCWUZuWG42emZqVGgwSkVPVzJM?= =?utf-8?B?OVpuSnppWFRpT09tYjVkdmpHYVkzOU9tbmtZZExEUFg4MnZnT0ErUHlhUjla?= =?utf-8?B?eW1KUGdRVkpGbU9HTTNvaXJUOENFa1F4UG9kVUdlWmZ6L25aMlpQeXBMOGJK?= =?utf-8?B?UktkeXhKTElLKzk1OVcvWHFUUm1sMGZKQUpsSXgyOXp5dzZETjY2My9QUU9G?= =?utf-8?B?K2RsWWVjSDM2VS84L0FYY1JBOVAvSWN0b1hrbVhRcndLRm9ZZTVvOVllTU1s?= =?utf-8?B?YnM0eTdTTEFzb0JZNjNwckNOR1YvWElDUUNjRk44ZFQrR1QvT1JEcUNpb3pS?= =?utf-8?B?L2djQVprWHhya2h2VmpKeis4MGFhT2JYQ0RWbk82V2RhYVZNc2dnb0NEUng5?= =?utf-8?B?VkZtOUlKNmp4K2ZVOE9CSFkvZmRZaEswVVAxQURJQ1MybnB0TTh1NjNsUi82?= =?utf-8?B?LzViWU9leEtvcWl3Q0YvcVpXZ2IwTU1VdTBqUWxUY2NuWExGNk1lbEVqU1ow?= =?utf-8?B?MnhQMU1nUzFrYzkrMCtPb2tKbjFmcUNmNnprczFYVmtlOHdiMkF6TXU4ZVJR?= =?utf-8?B?QWRvenl3ZkphTFBJeFRHM3dZeEZlbzhLVlhvVytnOEx6Q0VmNTltRmNJVk40?= =?utf-8?B?dDc0MnV4ckhZM1YxRklpNEtPdHNEcFV0NkU5Ym1zVitMNjRrY0RzN2xoSEs5?= =?utf-8?B?OWhmNlI4NTRaSUpIeGJJMU9acWszcGJ6L0xGZ09ZeEsxQ3N5U1dxYU1iSGp6?= =?utf-8?B?OGt4bFRPVUZCa3cyR1ovTWt2M1N1Y2t4TDhNeEFlZk5GTWJZWG1yVUFLdmhz?= =?utf-8?B?WU5xUnQrSk40U1hhYnJlbVBPMjUxVU1taWVjWnhmWENqa05jMlp0UTd1QzBG?= =?utf-8?B?K2JPOWlISUlZRUJlRjNTUVpkRVVENmZHZXJaaEFrdWVnNEx1UkNyU1JVbVdI?= =?utf-8?B?QndSVE5FdTEzbnVxNUJOUWZxa0twMVEzZzFRS2I3MEMraGswTU4yem9kMUYr?= =?utf-8?B?NHlUY2M0QWczTUVTT2JzOW5HR3lTU1JvaVZJd0JVdUFVVVJSVUNsM0Qxc3Mr?= =?utf-8?B?enFJL0dpTTNRYUFFTUtDRi91dXJES3Z4cEtYdWptamo2MlJIYit2YUEvRXRV?= =?utf-8?B?dDdYTXhPRzlLQUZqQ0xjZUdMYnA1aTFiWWVUMU9YcmlZNjhuUEVRTkJLQ2dy?= =?utf-8?B?Q1VoVit4MTlaRkhic3NwS3Fodk1RVXc9PQ==?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMzE4OzY6aENjTmhmTmpPYU1CdkhnSCs4SkpDeklVbHg1?= =?utf-8?B?M1h4YTFHOXdEWHZycGU0dzdGMUZIbGNKeHphQTloZDZUYSsvWXJXTTl0ZjR3?= =?utf-8?B?RUtJNS9CWTlOaHJPdlJzVkI2dTd0R1lIWkc2ZHRBZGZQaGoxeDFZN3oweGM3?= =?utf-8?B?MnhKRUsrZUVUdWRDbmVFbzBOVEdodHEyVFdYdWhFRHJpczVCeElzYjd5MEdC?= =?utf-8?B?NGltUjhnNHJkOG93YTZGcDdYZytYRmJ0aUxHQStoVkpsV2E1elNzZloyVytp?= =?utf-8?B?NGlaWU12YW9pU2IwY0RnSkRaSjVPUVErRWpzUFAzaUVxQVErdU5nMW9TdDN3?= =?utf-8?B?S3BGaXd6U0twYldTUjhNTklhdng2MFgyeHNOWkluVldKU3h1UHlCUHZ1SWha?= =?utf-8?B?UTgzUWpFUEJ5TTZOeGVGZitldzFuT3luMVowdFIxUUNQY0lLcThiSXNhNTBQ?= =?utf-8?B?WTFNVC90SzhNck9YODNsdGNhU3JveVZlaGJEQVhZMDZ1Q29QeHNLcmxZVFdh?= =?utf-8?B?ZmZkVjQxSHBnVnFhZ2VXV0dlME9VR3djUCs4QkVwOFVwZlo4WmtaYmFES25x?= =?utf-8?B?WXlzalYrSlZGNzg3NmY4VUd2MWVyTmZnVDZWcEdFS1cvNWtuSWloYmh0UWF3?= =?utf-8?B?Rm45TUN1dG00WnVJNjh6R3doMkJjdjBMOWNpNnZ3OEJHQjdvcnpMaDlTSUl5?= =?utf-8?B?QkRxOTJNeFkyenV0SFpWWFVjNjhLTyt5dWR3ZndzWUlGQm1DNm00VUdpTmk1?= =?utf-8?B?TmtyTkFhbGxSVFRrV2tyK3RFTElKdm1YeWFlQzY4d09mQzJIZkNzWnZIUGdv?= =?utf-8?B?eDlyRHFwSU5kTERIU0J1dTJNQm5SZDNNSkNpK2xLUkZEV3RjWlVkSWNtL1BY?= =?utf-8?B?MVRXM0tESjVTQkN4cjd4NUcwNUVoNGpGbTErSzR5clJhR2RGS0NSME1tRG9I?= =?utf-8?B?RkZjcndjbEdhV0k1QUlCUUROUnYxakZ6UlR4NVIzUFh3Wm5KeEJUSXc3b1B3?= =?utf-8?B?Q1FNNnVWeExEUVJwVzBNYUp3a3c4WUhtMTBMSGViL2tkY2syT0MrbkFGMyto?= =?utf-8?B?M0NkRHdMbjBDVTQzYzQzYk5GUjRkR2FVd0NFTS9BTFJZSm1uVVZlVEFCSDdX?= =?utf-8?B?QWQvRHEyejJlZGxYNHhha1R4Sm1hdFI1TDFHQ1c5clBmZnZtUTVka2JoQW41?= =?utf-8?B?am1mZE50UHkrVXpLTTR5ZnRZZFZod0Q5L1dyWXpSbmJTbGRiNlFQR09IUUc0?= =?utf-8?B?Z2xEc09PNnhQMkFKc1FIOHlCS1hkaTJrTlhVZzl0aXBGRy9lY0todXFlaVJC?= =?utf-8?B?OUlhaWlrVDN0bjR3b1QzK3JPOWQ1a2dFRkhCTTdnUDUvNW90YUpDUTZ0eU10?= =?utf-8?Q?2IHiVn1?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 5:SnCDa/Ahs0tAJGwQlGTcMg6QrCCcxNXOV08ahI3HOul5SYr6vHIUtPIKIVs73N5i/XUtTv3qDXo8AtJ63aLlK71Es42TS/X8itg48kDflwigxK/uoCGjYfa/UkFugpTwkIXsvHAre1YOoHXp7cYtEcM5n6v8JpM7+lxkg+UedV02iBQQSC8h7Wuc1tEGIxkR3W4+600mlVUdw6snkZdJtbsTA6DJ9c0j5ya01+GzQyrbEp/SHeHCoPH8Tl0yUIDGL7kK3qOcsjBVKZLcr8XaikYI3KSeR9O/Ngo+aa5Gx1qlnHnb6yesyp9bSnoafU/iaWiI059qoIhINPTBhF0J/C8UxFVKuLnTajl5+rGRqNnpJ5MGQAj+FVuQzlM3yP8Z7R8vbRs+Mt4tfTMOmeVkYLN+ElD8DBTbFWlDFUb1oWiLO5/qWpRdpm9M07anH11Xf8zKQgfDmAL5WPDXDFe+Mstoa2AbaIkjU5SesEym7i/GkSWIvBQOBQLrYrjdpC/o; 24:XnlSBuBg7VEZXnDum2k13qV5Fr6nqLKRy8AJcb3FYlsIlkwbGRjfJAhHKWGMQ8kLny/CMMdI/++SI3TWvnkXId+nFjk5BlK8uijGsTi0tzU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 7:tYfATzNuKMH3TiZqa6wx+BHE3baPcpKd4DLX71jKnuVTebzovimqnZxFSbXB24HRanFIjW0hNqIwo5DGtyFyWQ6eLfNIPOT89TnUg7BEYpx9SfYcb+NvIQ/AamfTxy7ym763m5CX7qdgqhIal24CU5udiA3qbLZGHmhvxXnTqqHXiYfZcIbGPvLREsbH6fYJ/CHXXDnJkD1JXPppx/Kl4VcV32Jrzu1P7a+4pN6cdudPOvIU0cASR3pqPAwG9g7MC2YVnGGafenTSHvfNJD7fs3eqQ1RV3N6XM50hJSKYayr3h7BfxPe/L8F74aWqZILFJ9eMOhp0GXGmiHaTy8oIwlqDHwl0c0YFIO9vVLHcbJjJxvP+HxV+EhmcTj5K8C4mowbkuHkMgWlr1IBHZ7AVjiB4cb3ADoaGA5v2WKSSD3rPyC6pA9IyF4239zHxSMt5q8sX0FbIC6qBy8bkoPMmDaN3ZW/iAcb8zjl9ZzuPgF/IXlrqeChz8ohqt3Vgb335JE9X9JRM7Gaz9KydRDBP3D6GOaInjuA1R4k4k3kWfOPochQ/LViScYsES62oVEGmDQeY7UhreCSYrZT2Oo38n7/ZZ/hLNjSqKcjusmFL8sixdqkz65oeZN7VX1xLttT2+ymkmPHtE1bdHMD2s7dLepU5WWk2TWzpX8aBRPRJdV3yFL33lMT93YiFgffop3L2brY4PVcqnHK/VP9d5q0fNeDXTqL/HPV7a3Lkh6l+KAASpW30S50nT7NnGfxE3MgPZqOFCpS7htD+WJ9wdQ+r41GmM9H2mxXZ6Vk0zAjTeE= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1318; 20:1kYukTszdUL0UmC+HQk3ySp6V3PMyPufrU80YYsbDDfeNIGMcX/E/E6ZKgRB+vwVXE3nH+IIAUWftMAqpW+Uuep5HoIWfqkpITYXHqHuue0ZA2iZaO2hUUuk8PSZdGslsFOwdMZqGNTxjmqBJ/ox59+NNeRjZygbiXpdtjorE1Vy8VFI+hFOyKYgR5mAGsNUxqh5qmd7XDYc1mVZC2msO/ByqkfjxDinsxoFj3W1cnEDtuR4efiON8PaKh5dgiJY X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2017 22:47:54.7534 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Version 5 devices have requirements for buffer lengths, as well as parameter format (e.g. bits vs. bytes). Fix the base CCP driver code to meet requirements all supported versions. Signed-off-by: Gary R Hook --- drivers/crypto/ccp/ccp-dev-v5.c | 10 ++-- drivers/crypto/ccp/ccp-ops.c | 95 ++++++++++++++++++++++++--------------- 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/drivers/crypto/ccp/ccp-dev-v5.c b/drivers/crypto/ccp/ccp-dev-v5.c index b10d2d2075cb..632518efd685 100644 --- a/drivers/crypto/ccp/ccp-dev-v5.c +++ b/drivers/crypto/ccp/ccp-dev-v5.c @@ -469,7 +469,7 @@ static int ccp5_perform_rsa(struct ccp_op *op) CCP5_CMD_PROT(&desc) = 0; function.raw = 0; - CCP_RSA_SIZE(&function) = op->u.rsa.mod_size >> 3; + CCP_RSA_SIZE(&function) = (op->u.rsa.mod_size + 7) >> 3; CCP5_CMD_FUNCTION(&desc) = function.raw; CCP5_CMD_LEN(&desc) = op->u.rsa.input_len; @@ -484,10 +484,10 @@ static int ccp5_perform_rsa(struct ccp_op *op) CCP5_CMD_DST_HI(&desc) = ccp_addr_hi(&op->dst.u.dma); CCP5_CMD_DST_MEM(&desc) = CCP_MEMTYPE_SYSTEM; - /* Exponent is in LSB memory */ - CCP5_CMD_KEY_LO(&desc) = op->sb_key * LSB_ITEM_SIZE; - CCP5_CMD_KEY_HI(&desc) = 0; - CCP5_CMD_KEY_MEM(&desc) = CCP_MEMTYPE_SB; + /* Key (Exponent) is in external memory */ + CCP5_CMD_KEY_LO(&desc) = ccp_addr_lo(&op->exp.u.dma); + CCP5_CMD_KEY_HI(&desc) = ccp_addr_hi(&op->exp.u.dma); + CCP5_CMD_KEY_MEM(&desc) = CCP_MEMTYPE_SYSTEM; return ccp5_do_cmd(&desc, op->cmd_q); } diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c index c0dfdacbdff5..11155e52c52c 100644 --- a/drivers/crypto/ccp/ccp-ops.c +++ b/drivers/crypto/ccp/ccp-ops.c @@ -1731,10 +1731,10 @@ static int ccp_run_sha_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) { struct ccp_rsa_engine *rsa = &cmd->u.rsa; - struct ccp_dm_workarea exp, src; - struct ccp_data dst; + struct ccp_dm_workarea exp, src, dst; struct ccp_op op; unsigned int sb_count, i_len, o_len; + unsigned int key_size_bytes; int ret; if (rsa->key_size > CCP_RSA_MAX_WIDTH) @@ -1743,31 +1743,41 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) if (!rsa->exp || !rsa->mod || !rsa->src || !rsa->dst) return -EINVAL; - /* The RSA modulus must precede the message being acted upon, so - * it must be copied to a DMA area where the message and the - * modulus can be concatenated. Therefore the input buffer - * length required is twice the output buffer length (which - * must be a multiple of 256-bits). - */ - o_len = ((rsa->key_size + 255) / 256) * 32; - i_len = o_len * 2; - - sb_count = o_len / CCP_SB_BYTES; - memset(&op, 0, sizeof(op)); op.cmd_q = cmd_q; - op.jobid = ccp_gen_jobid(cmd_q->ccp); - op.sb_key = cmd_q->ccp->vdata->perform->sballoc(cmd_q, sb_count); + op.jobid = CCP_NEW_JOBID(cmd_q->ccp); - if (!op.sb_key) - return -EIO; + /* Compute o_len, i_len in bytes. */ + if (cmd_q->ccp->vdata->version < CCP_VERSION(5, 0)) { + /* The RSA modulus must precede the message being acted upon, so + * it must be copied to a DMA area where the message and the + * modulus can be concatenated. Therefore the input buffer + * length required is twice the output buffer length (which + * must be a multiple of 256-bits). sb_count is the + * number of storage block slots required for the modulus + */ + key_size_bytes = (rsa->key_size + 7) >> 3; + o_len = ((rsa->key_size + 255) / 256) * CCP_SB_BYTES; + i_len = key_size_bytes * 2; + + sb_count = o_len / CCP_SB_BYTES; + + op.sb_key = cmd_q->ccp->vdata->perform->sballoc(cmd_q, + sb_count); + if (!op.sb_key) + return -EIO; + } else { + /* A version 5 device allows a modulus size that will not fit + * in the LSB, so the command will transfer it from memory. + * But more importantly, the buffer sizes must be a multiple + * of 32 bytes; rounding up may be required. + */ + key_size_bytes = 32 * ((rsa->key_size + 255) / 256); + o_len = key_size_bytes; + i_len = o_len * 2; /* bytes */ + op.sb_key = cmd_q->sb_key; + } - /* The RSA exponent may span multiple (32-byte) SB entries and must - * be in little endian format. Reverse copy each 32-byte chunk - * of the exponent (En chunk to E0 chunk, E(n-1) chunk to E1 chunk) - * and each byte within that chunk and do not perform any byte swap - * operations on the passthru operation. - */ ret = ccp_init_dm_workarea(&exp, cmd_q, o_len, DMA_TO_DEVICE); if (ret) goto e_sb; @@ -1775,11 +1785,23 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) ret = ccp_reverse_set_dm_area(&exp, 0, rsa->exp, 0, rsa->exp_len); if (ret) goto e_exp; - ret = ccp_copy_to_sb(cmd_q, &exp, op.jobid, op.sb_key, - CCP_PASSTHRU_BYTESWAP_NOOP); - if (ret) { - cmd->engine_error = cmd_q->cmd_error; - goto e_exp; + + if (cmd_q->ccp->vdata->version < CCP_VERSION(4, 0)) { + /* The RSA exponent may span multiple (32-byte) KSB entries and + * must be in little endian format. Reverse copy each 32-byte + * chunk of the exponent (En chunk to E0 chunk, E(n-1) chunk to + * E1 chunk) and each byte within that chunk and do not perform + * any byte swap operations on the passthru operation. + */ + ret = ccp_copy_to_sb(cmd_q, &exp, op.jobid, op.sb_key, + CCP_PASSTHRU_BYTESWAP_NOOP); + if (ret) { + cmd->engine_error = cmd_q->cmd_error; + goto e_exp; + } + } else { + op.exp.u.dma.address = exp.dma.address; + op.exp.u.dma.offset = 0; } /* Concatenate the modulus and the message. Both the modulus and @@ -1793,13 +1815,13 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) ret = ccp_reverse_set_dm_area(&src, 0, rsa->mod, 0, rsa->mod_len); if (ret) goto e_src; - ret = ccp_reverse_set_dm_area(&src, o_len, rsa->src, 0, rsa->src_len); + ret = ccp_reverse_set_dm_area(&src, key_size_bytes, rsa->src, 0, + rsa->src_len); if (ret) goto e_src; /* Prepare the output area for the operation */ - ret = ccp_init_data(&dst, cmd_q, rsa->dst, rsa->mod_len, - o_len, DMA_FROM_DEVICE); + ret = ccp_init_dm_workarea(&dst, cmd_q, o_len, DMA_FROM_DEVICE); if (ret) goto e_src; @@ -1807,9 +1829,9 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) op.src.u.dma.address = src.dma.address; op.src.u.dma.offset = 0; op.src.u.dma.length = i_len; - op.dst.u.dma.address = dst.dm_wa.dma.address; + op.dst.u.dma.address = dst.dma.address; op.dst.u.dma.offset = 0; - op.dst.u.dma.length = o_len; + op.dst.u.dma.length = key_size_bytes; op.u.rsa.mod_size = rsa->key_size; op.u.rsa.input_len = i_len; @@ -1820,10 +1842,10 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) goto e_dst; } - ccp_reverse_get_dm_area(&dst.dm_wa, 0, rsa->dst, 0, rsa->mod_len); + ccp_reverse_get_dm_area(&dst, 0, rsa->dst, 0, rsa->mod_len); e_dst: - ccp_free_data(&dst, cmd_q); + ccp_dm_free(&dst); e_src: ccp_dm_free(&src); @@ -1832,7 +1854,8 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) ccp_dm_free(&exp); e_sb: - cmd_q->ccp->vdata->perform->sbfree(cmd_q, op.sb_key, sb_count); + if (cmd_q->ccp->vdata->version < CCP_VERSION(5, 0)) + cmd_q->ccp->vdata->perform->sbfree(cmd_q, op.sb_key, sb_count); return ret; }