465ae83692
Based on 1 normalized pattern(s): gnupg is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version gnupg is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa 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 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 14 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520170856.639982569@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/* mpihelp-lshift.c - MPI helper functions
|
|
* Copyright (C) 1994, 1996, 1998, 2001 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"
|
|
|
|
/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
|
|
* and store the USIZE least significant digits of the result at WP.
|
|
* Return the bits shifted out from the most significant digit.
|
|
*
|
|
* Argument constraints:
|
|
* 1. 0 < CNT < BITS_PER_MP_LIMB
|
|
* 2. If the result is to be written over the input, WP must be >= UP.
|
|
*/
|
|
|
|
mpi_limb_t
|
|
mpihelp_lshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned int cnt)
|
|
{
|
|
mpi_limb_t high_limb, low_limb;
|
|
unsigned sh_1, sh_2;
|
|
mpi_size_t i;
|
|
mpi_limb_t retval;
|
|
|
|
sh_1 = cnt;
|
|
wp += 1;
|
|
sh_2 = BITS_PER_MPI_LIMB - sh_1;
|
|
i = usize - 1;
|
|
low_limb = up[i];
|
|
retval = low_limb >> sh_2;
|
|
high_limb = low_limb;
|
|
while (--i >= 0) {
|
|
low_limb = up[i];
|
|
wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
|
|
high_limb = low_limb;
|
|
}
|
|
wp[i] = high_limb << sh_1;
|
|
|
|
return retval;
|
|
}
|