]>
Commit | Line | Data |
---|---|---|
aa6bb135 RS |
1 | /* |
2 | * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. | |
85bcf27c | 3 | * |
aa6bb135 RS |
4 | * Licensed under the OpenSSL license (the "License"). You may not use |
5 | * this file except in compliance with the License. You can obtain a copy | |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
85bcf27c MC |
8 | */ |
9 | ||
10 | #ifndef HEADER_BN_INT_H | |
0f113f3e | 11 | # define HEADER_BN_INT_H |
85bcf27c | 12 | |
0f113f3e | 13 | # include <openssl/bn.h> |
99ba9fd0 | 14 | # include <limits.h> |
85bcf27c MC |
15 | |
16 | #ifdef __cplusplus | |
17 | extern "C" { | |
18 | #endif | |
19 | ||
02a62d1a MC |
20 | BIGNUM *bn_wexpand(BIGNUM *a, int words); |
21 | BIGNUM *bn_expand2(BIGNUM *a, int words); | |
22 | ||
23 | void bn_correct_top(BIGNUM *a); | |
24 | ||
0f113f3e MC |
25 | /* |
26 | * Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'. | |
27 | * This is an array r[] of values that are either zero or odd with an | |
28 | * absolute value less than 2^w satisfying scalar = \sum_j r[j]*2^j where at | |
29 | * most one of any w+1 consecutive digits is non-zero with the exception that | |
30 | * the most significant digit may be only w-1 zeros away from that next | |
31 | * non-zero digit. | |
85bcf27c MC |
32 | */ |
33 | signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len); | |
34 | ||
35 | int bn_get_top(const BIGNUM *a); | |
36 | ||
37 | void bn_set_top(BIGNUM *a, int top); | |
38 | ||
39 | int bn_get_dmax(const BIGNUM *a); | |
40 | ||
41 | /* Set all words to zero */ | |
42 | void bn_set_all_zero(BIGNUM *a); | |
43 | ||
44 | /* | |
45 | * Copy the internal BIGNUM words into out which holds size elements (and size | |
46 | * must be bigger than top) | |
47 | */ | |
48 | int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size); | |
49 | ||
50 | BN_ULONG *bn_get_words(const BIGNUM *a); | |
51 | ||
52 | /* | |
53 | * Set the internal data words in a to point to words which contains size | |
54 | * elements. The BN_FLG_STATIC_DATA flag is set | |
55 | */ | |
56 | void bn_set_static_words(BIGNUM *a, BN_ULONG *words, int size); | |
57 | ||
58 | /* | |
e22d2199 EK |
59 | * Copy words into the BIGNUM |a|, reallocating space as necessary. |
60 | * The negative flag of |a| is not modified. | |
61 | * Returns 1 on success and 0 on failure. | |
85bcf27c | 62 | */ |
e22d2199 EK |
63 | /* |
64 | * |num_words| is int because bn_expand2 takes an int. This is an internal | |
65 | * function so we simply trust callers not to pass negative values. | |
66 | */ | |
67 | int bn_set_words(BIGNUM *a, BN_ULONG *words, int num_words); | |
85bcf27c MC |
68 | |
69 | size_t bn_sizeof_BIGNUM(void); | |
70 | ||
71 | /* | |
72 | * Return element el from an array of BIGNUMs starting at base (required | |
73 | * because callers do not know the size of BIGNUM at compilation time) | |
74 | */ | |
75 | BIGNUM *bn_array_el(BIGNUM *base, int el); | |
76 | ||
77 | ||
78 | #ifdef __cplusplus | |
79 | } | |
80 | #endif | |
81 | ||
82 | #endif |