motion-openssl 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +53 -0
  3. data/lib/OpenSSL/aes.h +149 -0
  4. data/lib/OpenSSL/asn1.h +1419 -0
  5. data/lib/OpenSSL/asn1_mac.h +579 -0
  6. data/lib/OpenSSL/asn1t.h +973 -0
  7. data/lib/OpenSSL/bio.h +879 -0
  8. data/lib/OpenSSL/blowfish.h +130 -0
  9. data/lib/OpenSSL/bn.h +939 -0
  10. data/lib/OpenSSL/buffer.h +125 -0
  11. data/lib/OpenSSL/camellia.h +132 -0
  12. data/lib/OpenSSL/cast.h +107 -0
  13. data/lib/OpenSSL/cmac.h +82 -0
  14. data/lib/OpenSSL/cms.h +555 -0
  15. data/lib/OpenSSL/comp.h +79 -0
  16. data/lib/OpenSSL/conf.h +267 -0
  17. data/lib/OpenSSL/conf_api.h +89 -0
  18. data/lib/OpenSSL/crypto.h +661 -0
  19. data/lib/OpenSSL/des.h +257 -0
  20. data/lib/OpenSSL/des_old.h +497 -0
  21. data/lib/OpenSSL/dh.h +392 -0
  22. data/lib/OpenSSL/dsa.h +332 -0
  23. data/lib/OpenSSL/dso.h +451 -0
  24. data/lib/OpenSSL/dtls1.h +272 -0
  25. data/lib/OpenSSL/e_os2.h +328 -0
  26. data/lib/OpenSSL/ebcdic.h +26 -0
  27. data/lib/OpenSSL/ec.h +1282 -0
  28. data/lib/OpenSSL/ecdh.h +134 -0
  29. data/lib/OpenSSL/ecdsa.h +335 -0
  30. data/lib/OpenSSL/engine.h +960 -0
  31. data/lib/OpenSSL/err.h +389 -0
  32. data/lib/OpenSSL/evp.h +1534 -0
  33. data/lib/OpenSSL/hmac.h +109 -0
  34. data/lib/OpenSSL/idea.h +105 -0
  35. data/lib/OpenSSL/krb5_asn.h +240 -0
  36. data/lib/OpenSSL/kssl.h +197 -0
  37. data/lib/OpenSSL/lhash.h +240 -0
  38. data/lib/OpenSSL/libcrypto-tvOS.a +0 -0
  39. data/lib/OpenSSL/libcrypto.a +0 -0
  40. data/lib/OpenSSL/libssl-tvOS.a +0 -0
  41. data/lib/OpenSSL/libssl.a +0 -0
  42. data/lib/OpenSSL/md4.h +119 -0
  43. data/lib/OpenSSL/md5.h +119 -0
  44. data/lib/OpenSSL/mdc2.h +94 -0
  45. data/lib/OpenSSL/modes.h +163 -0
  46. data/lib/OpenSSL/obj_mac.h +4194 -0
  47. data/lib/OpenSSL/objects.h +1143 -0
  48. data/lib/OpenSSL/ocsp.h +637 -0
  49. data/lib/OpenSSL/opensslconf.h +262 -0
  50. data/lib/OpenSSL/opensslv.h +97 -0
  51. data/lib/OpenSSL/ossl_typ.h +211 -0
  52. data/lib/OpenSSL/pem.h +615 -0
  53. data/lib/OpenSSL/pem2.h +70 -0
  54. data/lib/OpenSSL/pkcs12.h +342 -0
  55. data/lib/OpenSSL/pkcs7.h +481 -0
  56. data/lib/OpenSSL/pqueue.h +99 -0
  57. data/lib/OpenSSL/rand.h +150 -0
  58. data/lib/OpenSSL/rc2.h +103 -0
  59. data/lib/OpenSSL/rc4.h +88 -0
  60. data/lib/OpenSSL/ripemd.h +105 -0
  61. data/lib/OpenSSL/rsa.h +664 -0
  62. data/lib/OpenSSL/safestack.h +2672 -0
  63. data/lib/OpenSSL/seed.h +149 -0
  64. data/lib/OpenSSL/sha.h +214 -0
  65. data/lib/OpenSSL/srp.h +169 -0
  66. data/lib/OpenSSL/srtp.h +147 -0
  67. data/lib/OpenSSL/ssl.h +3168 -0
  68. data/lib/OpenSSL/ssl2.h +265 -0
  69. data/lib/OpenSSL/ssl23.h +84 -0
  70. data/lib/OpenSSL/ssl3.h +774 -0
  71. data/lib/OpenSSL/stack.h +107 -0
  72. data/lib/OpenSSL/symhacks.h +516 -0
  73. data/lib/OpenSSL/tls1.h +810 -0
  74. data/lib/OpenSSL/ts.h +862 -0
  75. data/lib/OpenSSL/txt_db.h +112 -0
  76. data/lib/OpenSSL/ui.h +415 -0
  77. data/lib/OpenSSL/ui_compat.h +88 -0
  78. data/lib/OpenSSL/whrlpool.h +41 -0
  79. data/lib/OpenSSL/x509.h +1327 -0
  80. data/lib/OpenSSL/x509_vfy.h +647 -0
  81. data/lib/OpenSSL/x509v3.h +1055 -0
  82. data/lib/motion-openssl.rb +8 -0
  83. data/lib/motion-openssl/hooks.rb +8 -0
  84. data/lib/motion-openssl/hooks/openssl.rb +20 -0
  85. data/lib/motion-openssl/version.rb +5 -0
  86. data/motion/openssl.rb +1 -0
  87. data/motion/openssl/random.rb +18 -0
  88. metadata +229 -0
@@ -0,0 +1,130 @@
1
+ /* crypto/bf/blowfish.h */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+
59
+ #ifndef HEADER_BLOWFISH_H
60
+ # define HEADER_BLOWFISH_H
61
+
62
+ # include <openssl/e_os2.h>
63
+
64
+ #ifdef __cplusplus
65
+ extern "C" {
66
+ #endif
67
+
68
+ # ifdef OPENSSL_NO_BF
69
+ # error BF is disabled.
70
+ # endif
71
+
72
+ # define BF_ENCRYPT 1
73
+ # define BF_DECRYPT 0
74
+
75
+ /*-
76
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
77
+ * ! BF_LONG has to be at least 32 bits wide. If it's wider, then !
78
+ * ! BF_LONG_LOG2 has to be defined along. !
79
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
80
+ */
81
+
82
+ # if defined(__LP32__)
83
+ # define BF_LONG unsigned long
84
+ # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
85
+ # define BF_LONG unsigned long
86
+ # define BF_LONG_LOG2 3
87
+ /*
88
+ * _CRAY note. I could declare short, but I have no idea what impact
89
+ * does it have on performance on none-T3E machines. I could declare
90
+ * int, but at least on C90 sizeof(int) can be chosen at compile time.
91
+ * So I've chosen long...
92
+ * <appro@fy.chalmers.se>
93
+ */
94
+ # else
95
+ # define BF_LONG unsigned int
96
+ # endif
97
+
98
+ # define BF_ROUNDS 16
99
+ # define BF_BLOCK 8
100
+
101
+ typedef struct bf_key_st {
102
+ BF_LONG P[BF_ROUNDS + 2];
103
+ BF_LONG S[4 * 256];
104
+ } BF_KEY;
105
+
106
+ # ifdef OPENSSL_FIPS
107
+ void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data);
108
+ # endif
109
+ void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
110
+
111
+ void BF_encrypt(BF_LONG *data, const BF_KEY *key);
112
+ void BF_decrypt(BF_LONG *data, const BF_KEY *key);
113
+
114
+ void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
115
+ const BF_KEY *key, int enc);
116
+ void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
117
+ const BF_KEY *schedule, unsigned char *ivec, int enc);
118
+ void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,
119
+ long length, const BF_KEY *schedule,
120
+ unsigned char *ivec, int *num, int enc);
121
+ void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
122
+ long length, const BF_KEY *schedule,
123
+ unsigned char *ivec, int *num);
124
+ const char *BF_options(void);
125
+
126
+ #ifdef __cplusplus
127
+ }
128
+ #endif
129
+
130
+ #endif
@@ -0,0 +1,939 @@
1
+ /* crypto/bn/bn.h */
2
+ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+ /* ====================================================================
59
+ * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
60
+ *
61
+ * Redistribution and use in source and binary forms, with or without
62
+ * modification, are permitted provided that the following conditions
63
+ * are met:
64
+ *
65
+ * 1. Redistributions of source code must retain the above copyright
66
+ * notice, this list of conditions and the following disclaimer.
67
+ *
68
+ * 2. Redistributions in binary form must reproduce the above copyright
69
+ * notice, this list of conditions and the following disclaimer in
70
+ * the documentation and/or other materials provided with the
71
+ * distribution.
72
+ *
73
+ * 3. All advertising materials mentioning features or use of this
74
+ * software must display the following acknowledgment:
75
+ * "This product includes software developed by the OpenSSL Project
76
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77
+ *
78
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79
+ * endorse or promote products derived from this software without
80
+ * prior written permission. For written permission, please contact
81
+ * openssl-core@openssl.org.
82
+ *
83
+ * 5. Products derived from this software may not be called "OpenSSL"
84
+ * nor may "OpenSSL" appear in their names without prior written
85
+ * permission of the OpenSSL Project.
86
+ *
87
+ * 6. Redistributions of any form whatsoever must retain the following
88
+ * acknowledgment:
89
+ * "This product includes software developed by the OpenSSL Project
90
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91
+ *
92
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
104
+ * ====================================================================
105
+ *
106
+ * This product includes cryptographic software written by Eric Young
107
+ * (eay@cryptsoft.com). This product includes software written by Tim
108
+ * Hudson (tjh@cryptsoft.com).
109
+ *
110
+ */
111
+ /* ====================================================================
112
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113
+ *
114
+ * Portions of the attached software ("Contribution") are developed by
115
+ * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116
+ *
117
+ * The Contribution is licensed pursuant to the Eric Young open source
118
+ * license provided above.
119
+ *
120
+ * The binary polynomial arithmetic software is originally written by
121
+ * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
122
+ *
123
+ */
124
+
125
+ #ifndef HEADER_BN_H
126
+ # define HEADER_BN_H
127
+
128
+ # include <openssl/e_os2.h>
129
+ # ifndef OPENSSL_NO_FP_API
130
+ # include <stdio.h> /* FILE */
131
+ # endif
132
+ # include <openssl/ossl_typ.h>
133
+ # include <openssl/crypto.h>
134
+
135
+ #ifdef __cplusplus
136
+ extern "C" {
137
+ #endif
138
+
139
+ /*
140
+ * These preprocessor symbols control various aspects of the bignum headers
141
+ * and library code. They're not defined by any "normal" configuration, as
142
+ * they are intended for development and testing purposes. NB: defining all
143
+ * three can be useful for debugging application code as well as openssl
144
+ * itself. BN_DEBUG - turn on various debugging alterations to the bignum
145
+ * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up
146
+ * mismanagement of bignum internals. You must also define BN_DEBUG.
147
+ */
148
+ /* #define BN_DEBUG */
149
+ /* #define BN_DEBUG_RAND */
150
+
151
+ # ifndef OPENSSL_SMALL_FOOTPRINT
152
+ # define BN_MUL_COMBA
153
+ # define BN_SQR_COMBA
154
+ # define BN_RECURSION
155
+ # endif
156
+
157
+ /*
158
+ * This next option uses the C libraries (2 word)/(1 word) function. If it is
159
+ * not defined, I use my C version (which is slower). The reason for this
160
+ * flag is that when the particular C compiler library routine is used, and
161
+ * the library is linked with a different compiler, the library is missing.
162
+ * This mostly happens when the library is built with gcc and then linked
163
+ * using normal cc. This would be a common occurrence because gcc normally
164
+ * produces code that is 2 times faster than system compilers for the big
165
+ * number stuff. For machines with only one compiler (or shared libraries),
166
+ * this should be on. Again this in only really a problem on machines using
167
+ * "long long's", are 32bit, and are not using my assembler code.
168
+ */
169
+ # if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \
170
+ defined(OPENSSL_SYS_WIN32) || defined(linux)
171
+ # ifndef BN_DIV2W
172
+ # define BN_DIV2W
173
+ # endif
174
+ # endif
175
+
176
+ /*
177
+ * assuming long is 64bit - this is the DEC Alpha unsigned long long is only
178
+ * 64 bits :-(, don't define BN_LLONG for the DEC Alpha
179
+ */
180
+ # ifdef SIXTY_FOUR_BIT_LONG
181
+ # define BN_ULLONG unsigned long long
182
+ # define BN_ULONG unsigned long
183
+ # define BN_LONG long
184
+ # define BN_BITS 128
185
+ # define BN_BYTES 8
186
+ # define BN_BITS2 64
187
+ # define BN_BITS4 32
188
+ # define BN_MASK (0xffffffffffffffffffffffffffffffffLL)
189
+ # define BN_MASK2 (0xffffffffffffffffL)
190
+ # define BN_MASK2l (0xffffffffL)
191
+ # define BN_MASK2h (0xffffffff00000000L)
192
+ # define BN_MASK2h1 (0xffffffff80000000L)
193
+ # define BN_TBIT (0x8000000000000000L)
194
+ # define BN_DEC_CONV (10000000000000000000UL)
195
+ # define BN_DEC_FMT1 "%lu"
196
+ # define BN_DEC_FMT2 "%019lu"
197
+ # define BN_DEC_NUM 19
198
+ # define BN_HEX_FMT1 "%lX"
199
+ # define BN_HEX_FMT2 "%016lX"
200
+ # endif
201
+
202
+ /*
203
+ * This is where the long long data type is 64 bits, but long is 32. For
204
+ * machines where there are 64bit registers, this is the mode to use. IRIX,
205
+ * on R4000 and above should use this mode, along with the relevant assembler
206
+ * code :-). Do NOT define BN_LLONG.
207
+ */
208
+ # ifdef SIXTY_FOUR_BIT
209
+ # undef BN_LLONG
210
+ # undef BN_ULLONG
211
+ # define BN_ULONG unsigned long long
212
+ # define BN_LONG long long
213
+ # define BN_BITS 128
214
+ # define BN_BYTES 8
215
+ # define BN_BITS2 64
216
+ # define BN_BITS4 32
217
+ # define BN_MASK2 (0xffffffffffffffffLL)
218
+ # define BN_MASK2l (0xffffffffL)
219
+ # define BN_MASK2h (0xffffffff00000000LL)
220
+ # define BN_MASK2h1 (0xffffffff80000000LL)
221
+ # define BN_TBIT (0x8000000000000000LL)
222
+ # define BN_DEC_CONV (10000000000000000000ULL)
223
+ # define BN_DEC_FMT1 "%llu"
224
+ # define BN_DEC_FMT2 "%019llu"
225
+ # define BN_DEC_NUM 19
226
+ # define BN_HEX_FMT1 "%llX"
227
+ # define BN_HEX_FMT2 "%016llX"
228
+ # endif
229
+
230
+ # ifdef THIRTY_TWO_BIT
231
+ # ifdef BN_LLONG
232
+ # if defined(_WIN32) && !defined(__GNUC__)
233
+ # define BN_ULLONG unsigned __int64
234
+ # define BN_MASK (0xffffffffffffffffI64)
235
+ # else
236
+ # define BN_ULLONG unsigned long long
237
+ # define BN_MASK (0xffffffffffffffffLL)
238
+ # endif
239
+ # endif
240
+ # define BN_ULONG unsigned int
241
+ # define BN_LONG int
242
+ # define BN_BITS 64
243
+ # define BN_BYTES 4
244
+ # define BN_BITS2 32
245
+ # define BN_BITS4 16
246
+ # define BN_MASK2 (0xffffffffL)
247
+ # define BN_MASK2l (0xffff)
248
+ # define BN_MASK2h1 (0xffff8000L)
249
+ # define BN_MASK2h (0xffff0000L)
250
+ # define BN_TBIT (0x80000000L)
251
+ # define BN_DEC_CONV (1000000000L)
252
+ # define BN_DEC_FMT1 "%u"
253
+ # define BN_DEC_FMT2 "%09u"
254
+ # define BN_DEC_NUM 9
255
+ # define BN_HEX_FMT1 "%X"
256
+ # define BN_HEX_FMT2 "%08X"
257
+ # endif
258
+
259
+ # define BN_DEFAULT_BITS 1280
260
+
261
+ # define BN_FLG_MALLOCED 0x01
262
+ # define BN_FLG_STATIC_DATA 0x02
263
+
264
+ /*
265
+ * avoid leaking exponent information through timing,
266
+ * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime,
267
+ * BN_div() will call BN_div_no_branch,
268
+ * BN_mod_inverse() will call BN_mod_inverse_no_branch.
269
+ */
270
+ # define BN_FLG_CONSTTIME 0x04
271
+
272
+ # ifdef OPENSSL_NO_DEPRECATED
273
+ /* deprecated name for the flag */
274
+ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME
275
+ /*
276
+ * avoid leaking exponent information through timings
277
+ * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime)
278
+ */
279
+ # endif
280
+
281
+ # ifndef OPENSSL_NO_DEPRECATED
282
+ # define BN_FLG_FREE 0x8000
283
+ /* used for debuging */
284
+ # endif
285
+ # define BN_set_flags(b,n) ((b)->flags|=(n))
286
+ # define BN_get_flags(b,n) ((b)->flags&(n))
287
+
288
+ /*
289
+ * get a clone of a BIGNUM with changed flags, for *temporary* use only (the
290
+ * two BIGNUMs cannot not be used in parallel!)
291
+ */
292
+ # define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \
293
+ (dest)->top=(b)->top, \
294
+ (dest)->dmax=(b)->dmax, \
295
+ (dest)->neg=(b)->neg, \
296
+ (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \
297
+ | ((b)->flags & ~BN_FLG_MALLOCED) \
298
+ | BN_FLG_STATIC_DATA \
299
+ | (n)))
300
+
301
+ /* Already declared in ossl_typ.h */
302
+ # if 0
303
+ typedef struct bignum_st BIGNUM;
304
+ /* Used for temp variables (declaration hidden in bn_lcl.h) */
305
+ typedef struct bignum_ctx BN_CTX;
306
+ typedef struct bn_blinding_st BN_BLINDING;
307
+ typedef struct bn_mont_ctx_st BN_MONT_CTX;
308
+ typedef struct bn_recp_ctx_st BN_RECP_CTX;
309
+ typedef struct bn_gencb_st BN_GENCB;
310
+ # endif
311
+
312
+ struct bignum_st {
313
+ BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit
314
+ * chunks. */
315
+ int top; /* Index of last used d +1. */
316
+ /* The next are internal book keeping for bn_expand. */
317
+ int dmax; /* Size of the d array. */
318
+ int neg; /* one if the number is negative */
319
+ int flags;
320
+ };
321
+
322
+ /* Used for montgomery multiplication */
323
+ struct bn_mont_ctx_st {
324
+ int ri; /* number of bits in R */
325
+ BIGNUM RR; /* used to convert to montgomery form */
326
+ BIGNUM N; /* The modulus */
327
+ BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only
328
+ * stored for bignum algorithm) */
329
+ BN_ULONG n0[2]; /* least significant word(s) of Ni; (type
330
+ * changed with 0.9.9, was "BN_ULONG n0;"
331
+ * before) */
332
+ int flags;
333
+ };
334
+
335
+ /*
336
+ * Used for reciprocal division/mod functions It cannot be shared between
337
+ * threads
338
+ */
339
+ struct bn_recp_ctx_st {
340
+ BIGNUM N; /* the divisor */
341
+ BIGNUM Nr; /* the reciprocal */
342
+ int num_bits;
343
+ int shift;
344
+ int flags;
345
+ };
346
+
347
+ /* Used for slow "generation" functions. */
348
+ struct bn_gencb_st {
349
+ unsigned int ver; /* To handle binary (in)compatibility */
350
+ void *arg; /* callback-specific data */
351
+ union {
352
+ /* if(ver==1) - handles old style callbacks */
353
+ void (*cb_1) (int, int, void *);
354
+ /* if(ver==2) - new callback style */
355
+ int (*cb_2) (int, int, BN_GENCB *);
356
+ } cb;
357
+ };
358
+ /* Wrapper function to make using BN_GENCB easier, */
359
+ int BN_GENCB_call(BN_GENCB *cb, int a, int b);
360
+ /* Macro to populate a BN_GENCB structure with an "old"-style callback */
361
+ # define BN_GENCB_set_old(gencb, callback, cb_arg) { \
362
+ BN_GENCB *tmp_gencb = (gencb); \
363
+ tmp_gencb->ver = 1; \
364
+ tmp_gencb->arg = (cb_arg); \
365
+ tmp_gencb->cb.cb_1 = (callback); }
366
+ /* Macro to populate a BN_GENCB structure with a "new"-style callback */
367
+ # define BN_GENCB_set(gencb, callback, cb_arg) { \
368
+ BN_GENCB *tmp_gencb = (gencb); \
369
+ tmp_gencb->ver = 2; \
370
+ tmp_gencb->arg = (cb_arg); \
371
+ tmp_gencb->cb.cb_2 = (callback); }
372
+
373
+ # define BN_prime_checks 0 /* default: select number of iterations based
374
+ * on the size of the number */
375
+
376
+ /*
377
+ * number of Miller-Rabin iterations for an error rate of less than 2^-80 for
378
+ * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of
379
+ * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996];
380
+ * original paper: Damgaard, Landrock, Pomerance: Average case error
381
+ * estimates for the strong probable prime test. -- Math. Comp. 61 (1993)
382
+ * 177-194)
383
+ */
384
+ # define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \
385
+ (b) >= 850 ? 3 : \
386
+ (b) >= 650 ? 4 : \
387
+ (b) >= 550 ? 5 : \
388
+ (b) >= 450 ? 6 : \
389
+ (b) >= 400 ? 7 : \
390
+ (b) >= 350 ? 8 : \
391
+ (b) >= 300 ? 9 : \
392
+ (b) >= 250 ? 12 : \
393
+ (b) >= 200 ? 15 : \
394
+ (b) >= 150 ? 18 : \
395
+ /* b >= 100 */ 27)
396
+
397
+ # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8)
398
+
399
+ /* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */
400
+ # define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \
401
+ (((w) == 0) && ((a)->top == 0)))
402
+ # define BN_is_zero(a) ((a)->top == 0)
403
+ # define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg)
404
+ # define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg))
405
+ # define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1))
406
+
407
+ # define BN_one(a) (BN_set_word((a),1))
408
+ # define BN_zero_ex(a) \
409
+ do { \
410
+ BIGNUM *_tmp_bn = (a); \
411
+ _tmp_bn->top = 0; \
412
+ _tmp_bn->neg = 0; \
413
+ } while(0)
414
+ # ifdef OPENSSL_NO_DEPRECATED
415
+ # define BN_zero(a) BN_zero_ex(a)
416
+ # else
417
+ # define BN_zero(a) (BN_set_word((a),0))
418
+ # endif
419
+
420
+ const BIGNUM *BN_value_one(void);
421
+ char *BN_options(void);
422
+ BN_CTX *BN_CTX_new(void);
423
+ # ifndef OPENSSL_NO_DEPRECATED
424
+ void BN_CTX_init(BN_CTX *c);
425
+ # endif
426
+ void BN_CTX_free(BN_CTX *c);
427
+ void BN_CTX_start(BN_CTX *ctx);
428
+ BIGNUM *BN_CTX_get(BN_CTX *ctx);
429
+ void BN_CTX_end(BN_CTX *ctx);
430
+ int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
431
+ int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom);
432
+ int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
433
+ int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
434
+ int BN_num_bits(const BIGNUM *a);
435
+ int BN_num_bits_word(BN_ULONG);
436
+ BIGNUM *BN_new(void);
437
+ void BN_init(BIGNUM *);
438
+ void BN_clear_free(BIGNUM *a);
439
+ BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);
440
+ void BN_swap(BIGNUM *a, BIGNUM *b);
441
+ BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
442
+ int BN_bn2bin(const BIGNUM *a, unsigned char *to);
443
+ BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret);
444
+ int BN_bn2mpi(const BIGNUM *a, unsigned char *to);
445
+ int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
446
+ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
447
+ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
448
+ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
449
+ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
450
+ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
451
+ /** BN_set_negative sets sign of a BIGNUM
452
+ * \param b pointer to the BIGNUM object
453
+ * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise
454
+ */
455
+ void BN_set_negative(BIGNUM *b, int n);
456
+ /** BN_is_negative returns 1 if the BIGNUM is negative
457
+ * \param a pointer to the BIGNUM object
458
+ * \return 1 if a < 0 and 0 otherwise
459
+ */
460
+ # define BN_is_negative(a) ((a)->neg != 0)
461
+
462
+ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
463
+ BN_CTX *ctx);
464
+ # define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx))
465
+ int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
466
+ int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
467
+ BN_CTX *ctx);
468
+ int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
469
+ const BIGNUM *m);
470
+ int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
471
+ BN_CTX *ctx);
472
+ int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
473
+ const BIGNUM *m);
474
+ int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
475
+ BN_CTX *ctx);
476
+ int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
477
+ int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
478
+ int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m);
479
+ int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m,
480
+ BN_CTX *ctx);
481
+ int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m);
482
+
483
+ BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
484
+ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);
485
+ int BN_mul_word(BIGNUM *a, BN_ULONG w);
486
+ int BN_add_word(BIGNUM *a, BN_ULONG w);
487
+ int BN_sub_word(BIGNUM *a, BN_ULONG w);
488
+ int BN_set_word(BIGNUM *a, BN_ULONG w);
489
+ BN_ULONG BN_get_word(const BIGNUM *a);
490
+
491
+ int BN_cmp(const BIGNUM *a, const BIGNUM *b);
492
+ void BN_free(BIGNUM *a);
493
+ int BN_is_bit_set(const BIGNUM *a, int n);
494
+ int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
495
+ int BN_lshift1(BIGNUM *r, const BIGNUM *a);
496
+ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
497
+
498
+ int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
499
+ const BIGNUM *m, BN_CTX *ctx);
500
+ int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
501
+ const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
502
+ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
503
+ const BIGNUM *m, BN_CTX *ctx,
504
+ BN_MONT_CTX *in_mont);
505
+ int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p,
506
+ const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
507
+ int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1,
508
+ const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m,
509
+ BN_CTX *ctx, BN_MONT_CTX *m_ctx);
510
+ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
511
+ const BIGNUM *m, BN_CTX *ctx);
512
+
513
+ int BN_mask_bits(BIGNUM *a, int n);
514
+ # ifndef OPENSSL_NO_FP_API
515
+ int BN_print_fp(FILE *fp, const BIGNUM *a);
516
+ # endif
517
+ # ifdef HEADER_BIO_H
518
+ int BN_print(BIO *fp, const BIGNUM *a);
519
+ # else
520
+ int BN_print(void *fp, const BIGNUM *a);
521
+ # endif
522
+ int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);
523
+ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
524
+ int BN_rshift1(BIGNUM *r, const BIGNUM *a);
525
+ void BN_clear(BIGNUM *a);
526
+ BIGNUM *BN_dup(const BIGNUM *a);
527
+ int BN_ucmp(const BIGNUM *a, const BIGNUM *b);
528
+ int BN_set_bit(BIGNUM *a, int n);
529
+ int BN_clear_bit(BIGNUM *a, int n);
530
+ char *BN_bn2hex(const BIGNUM *a);
531
+ char *BN_bn2dec(const BIGNUM *a);
532
+ int BN_hex2bn(BIGNUM **a, const char *str);
533
+ int BN_dec2bn(BIGNUM **a, const char *str);
534
+ int BN_asc2bn(BIGNUM **a, const char *str);
535
+ int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
536
+ int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns
537
+ * -2 for
538
+ * error */
539
+ BIGNUM *BN_mod_inverse(BIGNUM *ret,
540
+ const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
541
+ BIGNUM *BN_mod_sqrt(BIGNUM *ret,
542
+ const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
543
+
544
+ void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
545
+
546
+ /* Deprecated versions */
547
+ # ifndef OPENSSL_NO_DEPRECATED
548
+ BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe,
549
+ const BIGNUM *add, const BIGNUM *rem,
550
+ void (*callback) (int, int, void *), void *cb_arg);
551
+ int BN_is_prime(const BIGNUM *p, int nchecks,
552
+ void (*callback) (int, int, void *),
553
+ BN_CTX *ctx, void *cb_arg);
554
+ int BN_is_prime_fasttest(const BIGNUM *p, int nchecks,
555
+ void (*callback) (int, int, void *), BN_CTX *ctx,
556
+ void *cb_arg, int do_trial_division);
557
+ # endif /* !defined(OPENSSL_NO_DEPRECATED) */
558
+
559
+ /* Newer versions */
560
+ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
561
+ const BIGNUM *rem, BN_GENCB *cb);
562
+ int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);
563
+ int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,
564
+ int do_trial_division, BN_GENCB *cb);
565
+
566
+ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);
567
+
568
+ int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
569
+ const BIGNUM *Xp, const BIGNUM *Xp1,
570
+ const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx,
571
+ BN_GENCB *cb);
572
+ int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1,
573
+ BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e,
574
+ BN_CTX *ctx, BN_GENCB *cb);
575
+
576
+ BN_MONT_CTX *BN_MONT_CTX_new(void);
577
+ void BN_MONT_CTX_init(BN_MONT_CTX *ctx);
578
+ int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
579
+ BN_MONT_CTX *mont, BN_CTX *ctx);
580
+ # define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\
581
+ (r),(a),&((mont)->RR),(mont),(ctx))
582
+ int BN_from_montgomery(BIGNUM *r, const BIGNUM *a,
583
+ BN_MONT_CTX *mont, BN_CTX *ctx);
584
+ void BN_MONT_CTX_free(BN_MONT_CTX *mont);
585
+ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx);
586
+ BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from);
587
+ BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
588
+ const BIGNUM *mod, BN_CTX *ctx);
589
+
590
+ /* BN_BLINDING flags */
591
+ # define BN_BLINDING_NO_UPDATE 0x00000001
592
+ # define BN_BLINDING_NO_RECREATE 0x00000002
593
+
594
+ BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);
595
+ void BN_BLINDING_free(BN_BLINDING *b);
596
+ int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);
597
+ int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
598
+ int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
599
+ int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *);
600
+ int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
601
+ BN_CTX *);
602
+ # ifndef OPENSSL_NO_DEPRECATED
603
+ unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *);
604
+ void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);
605
+ # endif
606
+ CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *);
607
+ unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
608
+ void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
609
+ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
610
+ const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
611
+ int (*bn_mod_exp) (BIGNUM *r,
612
+ const BIGNUM *a,
613
+ const BIGNUM *p,
614
+ const BIGNUM *m,
615
+ BN_CTX *ctx,
616
+ BN_MONT_CTX *m_ctx),
617
+ BN_MONT_CTX *m_ctx);
618
+
619
+ # ifndef OPENSSL_NO_DEPRECATED
620
+ void BN_set_params(int mul, int high, int low, int mont);
621
+ int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */
622
+ # endif
623
+
624
+ void BN_RECP_CTX_init(BN_RECP_CTX *recp);
625
+ BN_RECP_CTX *BN_RECP_CTX_new(void);
626
+ void BN_RECP_CTX_free(BN_RECP_CTX *recp);
627
+ int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx);
628
+ int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,
629
+ BN_RECP_CTX *recp, BN_CTX *ctx);
630
+ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
631
+ const BIGNUM *m, BN_CTX *ctx);
632
+ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
633
+ BN_RECP_CTX *recp, BN_CTX *ctx);
634
+
635
+ # ifndef OPENSSL_NO_EC2M
636
+
637
+ /*
638
+ * Functions for arithmetic over binary polynomials represented by BIGNUMs.
639
+ * The BIGNUM::neg property of BIGNUMs representing binary polynomials is
640
+ * ignored. Note that input arguments are not const so that their bit arrays
641
+ * can be expanded to the appropriate size if needed.
642
+ */
643
+
644
+ /*
645
+ * r = a + b
646
+ */
647
+ int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
648
+ # define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b)
649
+ /*
650
+ * r=a mod p
651
+ */
652
+ int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p);
653
+ /* r = (a * b) mod p */
654
+ int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
655
+ const BIGNUM *p, BN_CTX *ctx);
656
+ /* r = (a * a) mod p */
657
+ int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
658
+ /* r = (1 / b) mod p */
659
+ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx);
660
+ /* r = (a / b) mod p */
661
+ int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
662
+ const BIGNUM *p, BN_CTX *ctx);
663
+ /* r = (a ^ b) mod p */
664
+ int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
665
+ const BIGNUM *p, BN_CTX *ctx);
666
+ /* r = sqrt(a) mod p */
667
+ int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
668
+ BN_CTX *ctx);
669
+ /* r^2 + r = a mod p */
670
+ int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
671
+ BN_CTX *ctx);
672
+ # define BN_GF2m_cmp(a, b) BN_ucmp((a), (b))
673
+ /*-
674
+ * Some functions allow for representation of the irreducible polynomials
675
+ * as an unsigned int[], say p. The irreducible f(t) is then of the form:
676
+ * t^p[0] + t^p[1] + ... + t^p[k]
677
+ * where m = p[0] > p[1] > ... > p[k] = 0.
678
+ */
679
+ /* r = a mod p */
680
+ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]);
681
+ /* r = (a * b) mod p */
682
+ int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
683
+ const int p[], BN_CTX *ctx);
684
+ /* r = (a * a) mod p */
685
+ int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],
686
+ BN_CTX *ctx);
687
+ /* r = (1 / b) mod p */
688
+ int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[],
689
+ BN_CTX *ctx);
690
+ /* r = (a / b) mod p */
691
+ int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
692
+ const int p[], BN_CTX *ctx);
693
+ /* r = (a ^ b) mod p */
694
+ int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
695
+ const int p[], BN_CTX *ctx);
696
+ /* r = sqrt(a) mod p */
697
+ int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a,
698
+ const int p[], BN_CTX *ctx);
699
+ /* r^2 + r = a mod p */
700
+ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a,
701
+ const int p[], BN_CTX *ctx);
702
+ int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max);
703
+ int BN_GF2m_arr2poly(const int p[], BIGNUM *a);
704
+
705
+ # endif
706
+
707
+ /*
708
+ * faster mod functions for the 'NIST primes' 0 <= a < p^2
709
+ */
710
+ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
711
+ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
712
+ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
713
+ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
714
+ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
715
+
716
+ const BIGNUM *BN_get0_nist_prime_192(void);
717
+ const BIGNUM *BN_get0_nist_prime_224(void);
718
+ const BIGNUM *BN_get0_nist_prime_256(void);
719
+ const BIGNUM *BN_get0_nist_prime_384(void);
720
+ const BIGNUM *BN_get0_nist_prime_521(void);
721
+
722
+ /* library internal functions */
723
+
724
+ # define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\
725
+ (a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2))
726
+ # define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words)))
727
+ BIGNUM *bn_expand2(BIGNUM *a, int words);
728
+ # ifndef OPENSSL_NO_DEPRECATED
729
+ BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */
730
+ # endif
731
+
732
+ /*-
733
+ * Bignum consistency macros
734
+ * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from
735
+ * bignum data after direct manipulations on the data. There is also an
736
+ * "internal" macro, bn_check_top(), for verifying that there are no leading
737
+ * zeroes. Unfortunately, some auditing is required due to the fact that
738
+ * bn_fix_top() has become an overabused duct-tape because bignum data is
739
+ * occasionally passed around in an inconsistent state. So the following
740
+ * changes have been made to sort this out;
741
+ * - bn_fix_top()s implementation has been moved to bn_correct_top()
742
+ * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and
743
+ * bn_check_top() is as before.
744
+ * - if BN_DEBUG *is* defined;
745
+ * - bn_check_top() tries to pollute unused words even if the bignum 'top' is
746
+ * consistent. (ed: only if BN_DEBUG_RAND is defined)
747
+ * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything.
748
+ * The idea is to have debug builds flag up inconsistent bignums when they
749
+ * occur. If that occurs in a bn_fix_top(), we examine the code in question; if
750
+ * the use of bn_fix_top() was appropriate (ie. it follows directly after code
751
+ * that manipulates the bignum) it is converted to bn_correct_top(), and if it
752
+ * was not appropriate, we convert it permanently to bn_check_top() and track
753
+ * down the cause of the bug. Eventually, no internal code should be using the
754
+ * bn_fix_top() macro. External applications and libraries should try this with
755
+ * their own code too, both in terms of building against the openssl headers
756
+ * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it
757
+ * defined. This not only improves external code, it provides more test
758
+ * coverage for openssl's own code.
759
+ */
760
+
761
+ # ifdef BN_DEBUG
762
+
763
+ /* We only need assert() when debugging */
764
+ # include <assert.h>
765
+
766
+ # ifdef BN_DEBUG_RAND
767
+ /* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */
768
+ # ifndef RAND_pseudo_bytes
769
+ int RAND_pseudo_bytes(unsigned char *buf, int num);
770
+ # define BN_DEBUG_TRIX
771
+ # endif
772
+ # define bn_pollute(a) \
773
+ do { \
774
+ const BIGNUM *_bnum1 = (a); \
775
+ if(_bnum1->top < _bnum1->dmax) { \
776
+ unsigned char _tmp_char; \
777
+ /* We cast away const without the compiler knowing, any \
778
+ * *genuinely* constant variables that aren't mutable \
779
+ * wouldn't be constructed with top!=dmax. */ \
780
+ BN_ULONG *_not_const; \
781
+ memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \
782
+ /* Debug only - safe to ignore error return */ \
783
+ RAND_pseudo_bytes(&_tmp_char, 1); \
784
+ memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \
785
+ (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \
786
+ } \
787
+ } while(0)
788
+ # ifdef BN_DEBUG_TRIX
789
+ # undef RAND_pseudo_bytes
790
+ # endif
791
+ # else
792
+ # define bn_pollute(a)
793
+ # endif
794
+ # define bn_check_top(a) \
795
+ do { \
796
+ const BIGNUM *_bnum2 = (a); \
797
+ if (_bnum2 != NULL) { \
798
+ assert((_bnum2->top == 0) || \
799
+ (_bnum2->d[_bnum2->top - 1] != 0)); \
800
+ bn_pollute(_bnum2); \
801
+ } \
802
+ } while(0)
803
+
804
+ # define bn_fix_top(a) bn_check_top(a)
805
+
806
+ # define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)
807
+ # define bn_wcheck_size(bn, words) \
808
+ do { \
809
+ const BIGNUM *_bnum2 = (bn); \
810
+ assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \
811
+ /* avoid unused variable warning with NDEBUG */ \
812
+ (void)(_bnum2); \
813
+ } while(0)
814
+
815
+ # else /* !BN_DEBUG */
816
+
817
+ # define bn_pollute(a)
818
+ # define bn_check_top(a)
819
+ # define bn_fix_top(a) bn_correct_top(a)
820
+ # define bn_check_size(bn, bits)
821
+ # define bn_wcheck_size(bn, words)
822
+
823
+ # endif
824
+
825
+ # define bn_correct_top(a) \
826
+ { \
827
+ BN_ULONG *ftl; \
828
+ int tmp_top = (a)->top; \
829
+ if (tmp_top > 0) \
830
+ { \
831
+ for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \
832
+ if (*(ftl--)) break; \
833
+ (a)->top = tmp_top; \
834
+ } \
835
+ bn_pollute(a); \
836
+ }
837
+
838
+ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num,
839
+ BN_ULONG w);
840
+ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w);
841
+ void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num);
842
+ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);
843
+ BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
844
+ int num);
845
+ BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
846
+ int num);
847
+
848
+ /* Primes from RFC 2409 */
849
+ BIGNUM *get_rfc2409_prime_768(BIGNUM *bn);
850
+ BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn);
851
+
852
+ /* Primes from RFC 3526 */
853
+ BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn);
854
+ BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn);
855
+ BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn);
856
+ BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn);
857
+ BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn);
858
+ BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn);
859
+
860
+ int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom);
861
+
862
+ /* BEGIN ERROR CODES */
863
+ /*
864
+ * The following lines are auto generated by the script mkerr.pl. Any changes
865
+ * made after this point may be overwritten when the script is next run.
866
+ */
867
+ void ERR_load_BN_strings(void);
868
+
869
+ /* Error codes for the BN functions. */
870
+
871
+ /* Function codes. */
872
+ # define BN_F_BNRAND 127
873
+ # define BN_F_BN_BLINDING_CONVERT_EX 100
874
+ # define BN_F_BN_BLINDING_CREATE_PARAM 128
875
+ # define BN_F_BN_BLINDING_INVERT_EX 101
876
+ # define BN_F_BN_BLINDING_NEW 102
877
+ # define BN_F_BN_BLINDING_UPDATE 103
878
+ # define BN_F_BN_BN2DEC 104
879
+ # define BN_F_BN_BN2HEX 105
880
+ # define BN_F_BN_CTX_GET 116
881
+ # define BN_F_BN_CTX_NEW 106
882
+ # define BN_F_BN_CTX_START 129
883
+ # define BN_F_BN_DIV 107
884
+ # define BN_F_BN_DIV_NO_BRANCH 138
885
+ # define BN_F_BN_DIV_RECP 130
886
+ # define BN_F_BN_EXP 123
887
+ # define BN_F_BN_EXPAND2 108
888
+ # define BN_F_BN_EXPAND_INTERNAL 120
889
+ # define BN_F_BN_GF2M_MOD 131
890
+ # define BN_F_BN_GF2M_MOD_EXP 132
891
+ # define BN_F_BN_GF2M_MOD_MUL 133
892
+ # define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134
893
+ # define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135
894
+ # define BN_F_BN_GF2M_MOD_SQR 136
895
+ # define BN_F_BN_GF2M_MOD_SQRT 137
896
+ # define BN_F_BN_LSHIFT 145
897
+ # define BN_F_BN_MOD_EXP2_MONT 118
898
+ # define BN_F_BN_MOD_EXP_MONT 109
899
+ # define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124
900
+ # define BN_F_BN_MOD_EXP_MONT_WORD 117
901
+ # define BN_F_BN_MOD_EXP_RECP 125
902
+ # define BN_F_BN_MOD_EXP_SIMPLE 126
903
+ # define BN_F_BN_MOD_INVERSE 110
904
+ # define BN_F_BN_MOD_INVERSE_NO_BRANCH 139
905
+ # define BN_F_BN_MOD_LSHIFT_QUICK 119
906
+ # define BN_F_BN_MOD_MUL_RECIPROCAL 111
907
+ # define BN_F_BN_MOD_SQRT 121
908
+ # define BN_F_BN_MPI2BN 112
909
+ # define BN_F_BN_NEW 113
910
+ # define BN_F_BN_RAND 114
911
+ # define BN_F_BN_RAND_RANGE 122
912
+ # define BN_F_BN_RSHIFT 146
913
+ # define BN_F_BN_USUB 115
914
+
915
+ /* Reason codes. */
916
+ # define BN_R_ARG2_LT_ARG3 100
917
+ # define BN_R_BAD_RECIPROCAL 101
918
+ # define BN_R_BIGNUM_TOO_LONG 114
919
+ # define BN_R_BITS_TOO_SMALL 118
920
+ # define BN_R_CALLED_WITH_EVEN_MODULUS 102
921
+ # define BN_R_DIV_BY_ZERO 103
922
+ # define BN_R_ENCODING_ERROR 104
923
+ # define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105
924
+ # define BN_R_INPUT_NOT_REDUCED 110
925
+ # define BN_R_INVALID_LENGTH 106
926
+ # define BN_R_INVALID_RANGE 115
927
+ # define BN_R_INVALID_SHIFT 119
928
+ # define BN_R_NOT_A_SQUARE 111
929
+ # define BN_R_NOT_INITIALIZED 107
930
+ # define BN_R_NO_INVERSE 108
931
+ # define BN_R_NO_SOLUTION 116
932
+ # define BN_R_P_IS_NOT_PRIME 112
933
+ # define BN_R_TOO_MANY_ITERATIONS 113
934
+ # define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109
935
+
936
+ #ifdef __cplusplus
937
+ }
938
+ #endif
939
+ #endif