cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

generic_mpih-rshift.c (1499B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/* mpih-rshift.c  -  MPI helper functions
      3 * Copyright (C) 1994, 1996, 1998, 1999,
      4 *               2000, 2001 Free Software Foundation, Inc.
      5 *
      6 * This file is part of GNUPG
      7 *
      8 * Note: This code is heavily based on the GNU MP Library.
      9 *	 Actually it's the same code with only minor changes in the
     10 *	 way the data is stored; this is to support the abstraction
     11 *	 of an optional secure memory allocation which may be used
     12 *	 to avoid revealing of sensitive data due to paging etc.
     13 *	 The GNU MP Library itself is published under the LGPL;
     14 *	 however I decided to publish this code under the plain GPL.
     15 */
     16
     17#include "mpi-internal.h"
     18
     19/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
     20 * and store the USIZE least significant limbs of the result at WP.
     21 * The bits shifted out to the right are returned.
     22 *
     23 * Argument constraints:
     24 * 1. 0 < CNT < BITS_PER_MP_LIMB
     25 * 2. If the result is to be written over the input, WP must be <= UP.
     26 */
     27
     28mpi_limb_t
     29mpihelp_rshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt)
     30{
     31	mpi_limb_t high_limb, low_limb;
     32	unsigned sh_1, sh_2;
     33	mpi_size_t i;
     34	mpi_limb_t retval;
     35
     36	sh_1 = cnt;
     37	wp -= 1;
     38	sh_2 = BITS_PER_MPI_LIMB - sh_1;
     39	high_limb = up[0];
     40	retval = high_limb << sh_2;
     41	low_limb = high_limb;
     42	for (i = 1; i < usize; i++) {
     43		high_limb = up[i];
     44		wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
     45		low_limb = high_limb;
     46	}
     47	wp[i] = low_limb >> sh_1;
     48
     49	return retval;
     50}