source: svn/trunk/newcon3bcm2_21bu/dta/src/bootloader/rsa/mpclshift.c

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 1.3 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2002-2009, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * Filename: mpclshift.c
11 *
12 ***************************************************************************/
13/*
14 * Multiple-Precision Modular Arithmetic Routines
15 *
16 *
17 * Change log:  07/17/02 -      Created.
18 *              07/29/02 -      Split functions mpcopy(), mplong2mp(),
19 *                              mpzero(), newabs() into separate files.
20 *              07/30/02 - newabs & sign support removed definitely.
21 */
22
23
24#include "mp2.h"
25
26/* global vars */
27
28/* optimization: do not swap bytes in word, assume input is given
29 * as little-endian 32-bit words. */ 
30#undef INPUT_IS_NOT_LITTLE_ENDIAN_WORD32_ARRAY
31
32/* Left shift by k 30-bit units (ie. by 30*k bits) */
33void mpclshift (mp a, u32 k, mp b)
34{
35        register u32 *aa = a;
36        register u32 *bb = b;
37        register u32 kk = k;
38        u32 sa = *a;
39        register u32 sb = sa+kk;
40
41        if (iszero(aa)) return;
42
43        /* set new length */
44        *bb = sb;
45
46        /* shift the remaining chunks */
47        for (aa+=sa, bb+=sb; sb>0; sb--, aa--, bb--)
48                *bb = (sb>kk)? *aa : 0L;
49
50        return;
51}
Note: See TracBrowser for help on using the repository browser.