Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp417951ybt; Fri, 10 Jul 2020 03:17:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvNmlVl2rnpeD5FZVf2Hea/ybSk1jH74e84ozAGgu76BNSrzbjwsJZu2je7N+ChERKuoN6 X-Received: by 2002:a17:906:35d2:: with SMTP id p18mr63245206ejb.393.1594376222775; Fri, 10 Jul 2020 03:17:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594376222; cv=none; d=google.com; s=arc-20160816; b=FBJJF+jWFAlvfpb6+e9V3EPhfHWHDtbfK3sqy9WmFTZJPgGXi7I/89v1FojHSkGuS0 3pX604AUPgYPpIeCBZpmGdOpUpoLVm6/F4mVknJ1DpPy+WflGWE0L+PcthxuoY/33VVQ /61hJ7CjjfoAy5we9p83wbdqzI/69a2YgqEkGU4EbUVwkZmld0RYQXoBCquPp9/SsDNy ZQzYJP1/4udiCqGyW+0lBFmo2rqxKJbcU1kufn0xRSTBqI3B5j2C0lmbaQkS/lG9BEZt IIgdqs3ZvXIJbGu1DcO54EwvR0Xf4JIi1ZrT/KqHHQNu/dK6BxRTbUeM790933pn+YFi 0OEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=cLP9AT05SbkJblktlIZ9pPumNY/vu7KudOIRJfuLm8Y=; b=N8gHnach/UdmBTGOeltrlMkHNaO3fRR5T6CWv9Ag0inx/xWue4P+qe7hP0TBqlbnZ3 5mVn2+GGRaXGX+7poX9p8+vPmEUSP0QjKWDqmzNf5xQu+Y/+ED2Gjsb4DrWyt/gD0+oz eodcGoJkBeSIq2e8TH/Ezr+XZdantHW1Vq3AHYxoyPYXNMaCcRJRoY2wZnGjAT1jzoVY ENgDc2NxRpntlEL/YN218urim/yHKndqqOxKpZ7pWQQv6v/tEz6xpI9aeUS8zyOYi2xV XtbS6eiGS4n02qCNt6Vi0wqwneUj4WrK3pfH4fvOMTUMPbtpVWLfWuNA/0vm6ljKpz07 0mzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@chronox.de header.s=strato-dkim-0002 header.b=ksLHS3Er; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dg2si4186795edb.326.2020.07.10.03.16.29; Fri, 10 Jul 2020 03:17:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@chronox.de header.s=strato-dkim-0002 header.b=ksLHS3Er; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726933AbgGJKQ1 (ORCPT + 99 others); Fri, 10 Jul 2020 06:16:27 -0400 Received: from mo4-p01-ob.smtp.rzone.de ([85.215.255.50]:32190 "EHLO mo4-p01-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726496AbgGJKQ0 (ORCPT ); Fri, 10 Jul 2020 06:16:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1594376185; s=strato-dkim-0002; d=chronox.de; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=cLP9AT05SbkJblktlIZ9pPumNY/vu7KudOIRJfuLm8Y=; b=ksLHS3EriIEaWWI3tB+ceePet6qg0EGeR6MJg+jrbplzF1oRuApiKSXNpzuyUFoQKg 1YCH3z7Pbj+LsSTk6KhGI8JKROkUMJuyddpU4yT1QmP+nWuHE1T4mFvUEXWLNlPQksUA zkBerd6sXFjzHZjcuNhjG3239odrev56V77M9m3wkIXM4YNG4/5l6T396tCGAvxj+Ftu VNYnsZAenBUJa3KbD1dK4omBOyHYf8oibU0oE1RUAHqqoeTVkh+wc96rOMSBykxbsJF3 RrEmGMpryaFQ7N24pOVSfNQ9HG5ZLV4yjur+GSPTX4HbCsXcWNOXkI5HLi6aXG7Ttg0L 88mw== X-RZG-AUTH: ":P2ERcEykfu11Y98lp/T7+hdri+uKZK8TKWEqNyiHySGSa9k9xmwdNnzGHXPaIvSfHReW" X-RZG-CLASS-ID: mo00 Received: from positron.chronox.de by smtp.strato.de (RZmta 46.10.5 DYNA|AUTH) with ESMTPSA id y0546bw6AAGEZsh (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Fri, 10 Jul 2020 12:16:14 +0200 (CEST) From: Stephan =?ISO-8859-1?Q?M=FCller?= To: herbert@gondor.apana.org.au Cc: linux-crypto@vger.kernel.org, Marcelo Cerri , Tianjia Zhang Subject: [PATCH 2/3] lib/mpi: Add mpi_sub_ui() Date: Fri, 10 Jul 2020 12:10:40 +0200 Message-ID: <4577235.31r3eYUQgx@positron.chronox.de> In-Reply-To: <2543601.mvXUDI8C0e@positron.chronox.de> References: <2543601.mvXUDI8C0e@positron.chronox.de> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Add mpi_sub_ui() based on Gnu PG mpz_sub_ui() from mpz/aors_ui.h adapting the code to the kernel's structures and coding style and also removing the defines used to produce mpz_sub_ui() and mpz_add_ui() from the same code. Signed-off-by: Marcelo Henrique Cerri Signed-off-by: Stephan Mueller --- include/linux/mpi.h | 3 +++ lib/mpi/Makefile | 1 + lib/mpi/mpi-sub-ui.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 lib/mpi/mpi-sub-ui.c diff --git a/include/linux/mpi.h b/include/linux/mpi.h index 7bd6d8af0004..5d906dfbf3ed 100644 --- a/include/linux/mpi.h +++ b/include/linux/mpi.h @@ -63,6 +63,9 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod); int mpi_cmp_ui(MPI u, ulong v); int mpi_cmp(MPI u, MPI v); +/*-- mpi-sub-ui.c --*/ +int mpi_sub_ui(MPI w, MPI u, unsigned long vval); + /*-- mpi-bit.c --*/ void mpi_normalize(MPI a); unsigned mpi_get_nbits(MPI a); diff --git a/lib/mpi/Makefile b/lib/mpi/Makefile index d5874a7f5ff9..43b8fce14079 100644 --- a/lib/mpi/Makefile +++ b/lib/mpi/Makefile @@ -16,6 +16,7 @@ mpi-y = \ mpicoder.o \ mpi-bit.o \ mpi-cmp.o \ + mpi-sub-ui.o \ mpih-cmp.o \ mpih-div.o \ mpih-mul.o \ diff --git a/lib/mpi/mpi-sub-ui.c b/lib/mpi/mpi-sub-ui.c new file mode 100644 index 000000000000..fa6b085bac36 --- /dev/null +++ b/lib/mpi/mpi-sub-ui.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* mpi-sub-ui.c - MPI functions + * Copyright 1991, 1993, 1994, 1996, 1999-2002, 2004, 2012, 2013, 2015 + * Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + * The GNU MP Library itself is published under the LGPL; + * however I decided to publish this code under the plain GPL. + */ + +#include "mpi-internal.h" + +int mpi_sub_ui(MPI w, MPI u, unsigned long vval) +{ + if (u->nlimbs == 0) { + if (mpi_resize(w, 1) < 0) + return -ENOMEM; + w->d[0] = vval; + w->nlimbs = (vval != 0); + w->sign = (vval != 0); + return 0; + } + + /* If not space for W (and possible carry), increase space. */ + if (mpi_resize(w, u->nlimbs + 1)) + return -ENOMEM; + + if (u->sign) { + mpi_limb_t cy; + + cy = mpihelp_add_1(w->d, u->d, u->nlimbs, (mpi_limb_t) vval); + w->d[u->nlimbs] = cy; + w->nlimbs = u->nlimbs + cy; + w->sign = 1; + } else { + /* The signs are different. Need exact comparison to determine + * which operand to subtract from which. + */ + if (u->nlimbs == 1 && u->d[0] < vval) { + w->d[0] = vval - u->d[0]; + w->nlimbs = 1; + w->sign = 1; + } else { + mpihelp_sub_1(w->d, u->d, u->nlimbs, (mpi_limb_t) vval); + /* Size can decrease with at most one limb. */ + w->nlimbs = (u->nlimbs - (w->d[u->nlimbs - 1] == 0)); + w->sign = 0; + } + } + + mpi_normalize(w); + return 0; +} +EXPORT_SYMBOL_GPL(mpi_sub_ui); -- 2.26.2