mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	As lib/mpi is mostly used by crypto code, move it under lib/crypto so that patches touching it get directed to the right mailing list. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Reviewed-by: Mimi Zohar <zohar@linux.ibm.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
/* mpih-rshift.c  -  MPI helper functions
 | 
						|
 * Copyright (C) 1994, 1996, 1998, 1999,
 | 
						|
 *               2000, 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 limbs long) CNT bits to the right
 | 
						|
 * and store the USIZE least significant limbs of the result at WP.
 | 
						|
 * The bits shifted out to the right are returned.
 | 
						|
 *
 | 
						|
 * 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_rshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned 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;
 | 
						|
	high_limb = up[0];
 | 
						|
	retval = high_limb << sh_2;
 | 
						|
	low_limb = high_limb;
 | 
						|
	for (i = 1; i < usize; i++) {
 | 
						|
		high_limb = up[i];
 | 
						|
		wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
 | 
						|
		low_limb = high_limb;
 | 
						|
	}
 | 
						|
	wp[i] = low_limb >> sh_1;
 | 
						|
 | 
						|
	return retval;
 | 
						|
}
 |