Simplify BN_rand_range
[openssl.git] / crypto / bn / bn_mont2.h
1 /*
2  *
3  *      bn_mont2.h
4  *
5  *      Montgomery Modular Arithmetic Functions.
6  *
7  *      Copyright (C) Lenka Fibikova 2000
8  *
9  *
10  */
11
12 #ifndef HEADER_MONT2_H
13 #define HEADER_MONT2_H
14
15 #define MONTGOMERY
16
17 #include <openssl/bn.h>
18
19 typedef struct bn_mont_st{
20         int R_num_bits;
21         int p_num_bytes;
22         BIGNUM *p;
23         BN_ULONG p_inv_b_neg;   /* p' = p^{-1} mod b; b = 2^BN_BITS */
24 } BN_MONTGOMERY;
25
26 #define BN_from_mont(x, mont) (BN_mont_red((x), (mont)))
27
28
29 BN_MONTGOMERY *BN_mont_new();
30 int BN_to_mont(BIGNUM *x, BN_MONTGOMERY *mont, BN_CTX *ctx); 
31 void BN_mont_clear_free(BN_MONTGOMERY *mont);
32 int BN_mont_set(BIGNUM *p, BN_MONTGOMERY *mont, BN_CTX *ctx);
33 int BN_mont_red(BIGNUM *y, BN_MONTGOMERY *mont);
34 int BN_mont_mod_mul(BIGNUM *r, BIGNUM *x, BIGNUM *y, BN_MONTGOMERY *mont);
35
36 #endif