--- rsaref/source/nn.h 2018/04/24 16:37:52 1.1 +++ rsaref/source/nn.h 2018/04/24 16:37:58 1.1.1.2 @@ -1,8 +1,8 @@ /* NN.H - header file for NN.C */ -/* Copyright (C) 1991-2 RSA Laboratories, a division of RSA Data - Security, Inc. All rights reserved. +/* Copyright (C) RSA Laboratories, a division of RSA Data Security, + Inc., created 1991. All rights reserved. */ /* Type definitions. @@ -32,9 +32,8 @@ typedef UINT2 NN_HALF_DIGIT; /* Macros. */ -#define LOW_HALF(x) (NN_HALF_DIGIT)((x) & MAX_NN_HALF_DIGIT) -#define HIGH_HALF(x) \ - (NN_HALF_DIGIT)(((x) >> NN_HALF_DIGIT_BITS) & MAX_NN_HALF_DIGIT) +#define LOW_HALF(x) ((x) & MAX_NN_HALF_DIGIT) +#define HIGH_HALF(x) (((x) >> NN_HALF_DIGIT_BITS) & MAX_NN_HALF_DIGIT) #define TO_HIGH_HALF(x) (((NN_DIGIT)(x)) << NN_HALF_DIGIT_BITS) #define DIGIT_MSB(x) (unsigned int)(((x) >> (NN_DIGIT_BITS - 1)) & 1) #define DIGIT_2MSB(x) (unsigned int)(((x) >> (NN_DIGIT_BITS - 2)) & 3) @@ -53,9 +52,14 @@ typedef UINT2 NN_HALF_DIGIT; NN_Add (a, b, c, digits) Computes a = b + c. NN_Sub (a, b, c, digits) Computes a = b - c. NN_Mult (a, b, c, digits) Computes a = b * c. + NN_LShift (a, b, c, digits) Computes a = b * 2^c. + NN_RShift (a, b, c, digits) Computes a = b / 2^c. + NN_Div (a, b, c, cDigits, d, dDigits) Computes a = c div d and b = c mod d. + + NUMBER THEORY NN_Mod (a, b, bDigits, c, cDigits) Computes a = b mod c. NN_ModMult (a, b, c, d, digits) Computes a = b * c mod d. - NN_ModExp (a, b, c, cDigits, d, dDigits) Computes a = b^c mod . + NN_ModExp (a, b, c, cDigits, d, dDigits) Computes a = b^c mod d. NN_ModInv (a, b, c, digits) Computes a = 1/b mod c. NN_Gcd (a, b, c, digits) Computes a = gcd (b, c). @@ -81,6 +85,14 @@ NN_DIGIT NN_Add PROTO_LIST NN_DIGIT NN_Sub PROTO_LIST ((NN_DIGIT *, NN_DIGIT *, NN_DIGIT *, unsigned int)); void NN_Mult PROTO_LIST ((NN_DIGIT *, NN_DIGIT *, NN_DIGIT *, unsigned int)); +void NN_Div PROTO_LIST + ((NN_DIGIT *, NN_DIGIT *, NN_DIGIT *, unsigned int, NN_DIGIT *, + unsigned int)); +NN_DIGIT NN_LShift PROTO_LIST + ((NN_DIGIT *, NN_DIGIT *, unsigned int, unsigned int)); +NN_DIGIT NN_RShift PROTO_LIST + ((NN_DIGIT *, NN_DIGIT *, unsigned int, unsigned int)); + void NN_Mod PROTO_LIST ((NN_DIGIT *, NN_DIGIT *, unsigned int, NN_DIGIT *, unsigned int)); void NN_ModMult PROTO_LIST