1 /* $NetBSD: bn_mp_lshd.c,v 1.1.1.2 2014/04/24 12:45:31 pettai Exp $ */
5 /* LibTomMath, multiple-precision integer library -- Tom St Denis
7 * LibTomMath is a library that provides multiple-precision
8 * integer arithmetic as well as number theoretic functionality.
10 * The library was designed directly after the MPI library by
11 * Michael Fromberger but has been written from scratch with
12 * additional optimizations in place.
14 * The library is free for all purposes without any express
17 * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
20 /* shift left a certain amount of digits */
21 int mp_lshd (mp_int
* a
, int b
)
25 /* if its less than zero return */
30 /* grow to fit the new digits */
31 if (a
->alloc
< a
->used
+ b
) {
32 if ((res
= mp_grow (a
, a
->used
+ b
)) != MP_OKAY
) {
38 register mp_digit
*top
, *bottom
;
40 /* increment the used by the shift amount then copy upwards */
44 top
= a
->dp
+ a
->used
- 1;
47 bottom
= a
->dp
+ a
->used
- 1 - b
;
49 /* much like mp_rshd this is implemented using a sliding window
50 * except the window goes the otherway around. Copying from
51 * the bottom to the top. see bn_mp_rshd.c for more info.
53 for (x
= a
->used
- 1; x
>= b
; x
--) {
57 /* zero the lower digits */
59 for (x
= 0; x
< b
; x
++) {
67 /* Source: /cvs/libtom/libtommath/bn_mp_lshd.c,v */
69 /* Date: 2006/12/28 01:25:13 */