Commit manual pages after running 'man-update' and add new manual pages.
[dragonfly.git] / secure / lib / libcrypto / man / bn_internal.3
1 .rn '' }`
2 ''' $RCSfile$$Revision$$Date$
3 '''
4 ''' $Log$
5 '''
6 .de Sh
7 .br
8 .if t .Sp
9 .ne 5
10 .PP
11 \fB\\$1\fR
12 .PP
13 ..
14 .de Sp
15 .if t .sp .5v
16 .if n .sp
17 ..
18 .de Ip
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
23 ..
24 .de Vb
25 .ft CW
26 .nf
27 .ne \\$1
28 ..
29 .de Ve
30 .ft R
31
32 .fi
33 ..
34 '''
35 '''
36 '''     Set up \*(-- to give an unbreakable dash;
37 '''     string Tr holds user defined translation string.
38 '''     Bell System Logo is used as a dummy character.
39 '''
40 .tr \(*W-|\(bv\*(Tr
41 .ie n \{\
42 .ds -- \(*W-
43 .ds PI pi
44 .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
45 .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
46 .ds L" ""
47 .ds R" ""
48 '''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
49 '''   \*(L" and \*(R", except that they are used on ".xx" lines,
50 '''   such as .IP and .SH, which do another additional levels of
51 '''   double-quote interpretation
52 .ds M" """
53 .ds S" """
54 .ds N" """""
55 .ds T" """""
56 .ds L' '
57 .ds R' '
58 .ds M' '
59 .ds S' '
60 .ds N' '
61 .ds T' '
62 'br\}
63 .el\{\
64 .ds -- \(em\|
65 .tr \*(Tr
66 .ds L" ``
67 .ds R" ''
68 .ds M" ``
69 .ds S" ''
70 .ds N" ``
71 .ds T" ''
72 .ds L' `
73 .ds R' '
74 .ds M' `
75 .ds S' '
76 .ds N' `
77 .ds T' '
78 .ds PI \(*p
79 'br\}
80 .\"     If the F register is turned on, we'll generate
81 .\"     index entries out stderr for the following things:
82 .\"             TH      Title 
83 .\"             SH      Header
84 .\"             Sh      Subsection 
85 .\"             Ip      Item
86 .\"             X<>     Xref  (embedded
87 .\"     Of course, you have to process the output yourself
88 .\"     in some meaninful fashion.
89 .if \nF \{
90 .de IX
91 .tm Index:\\$1\t\\n%\t"\\$2"
92 ..
93 .nr % 0
94 .rr F
95 .\}
96 .TH bn_internal 3 "0.9.7d" "2/Sep/2004" "OpenSSL"
97 .UC
98 .if n .hy 0
99 .if n .na
100 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
101 .de CQ          \" put $1 in typewriter font
102 .ft CW
103 'if n "\c
104 'if t \\&\\$1\c
105 'if n \\&\\$1\c
106 'if n \&"
107 \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
108 '.ft R
109 ..
110 .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
111 .       \" AM - accent mark definitions
112 .bd B 3
113 .       \" fudge factors for nroff and troff
114 .if n \{\
115 .       ds #H 0
116 .       ds #V .8m
117 .       ds #F .3m
118 .       ds #[ \f1
119 .       ds #] \fP
120 .\}
121 .if t \{\
122 .       ds #H ((1u-(\\\\n(.fu%2u))*.13m)
123 .       ds #V .6m
124 .       ds #F 0
125 .       ds #[ \&
126 .       ds #] \&
127 .\}
128 .       \" simple accents for nroff and troff
129 .if n \{\
130 .       ds ' \&
131 .       ds ` \&
132 .       ds ^ \&
133 .       ds , \&
134 .       ds ~ ~
135 .       ds ? ?
136 .       ds ! !
137 .       ds /
138 .       ds q
139 .\}
140 .if t \{\
141 .       ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
142 .       ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
143 .       ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
144 .       ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
145 .       ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
146 .       ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
147 .       ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
148 .       ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
149 .       ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
150 .\}
151 .       \" troff and (daisy-wheel) nroff accents
152 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
153 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
154 .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
155 .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
156 .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
157 .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
158 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
159 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
160 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
161 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
162 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
163 .ds ae a\h'-(\w'a'u*4/10)'e
164 .ds Ae A\h'-(\w'A'u*4/10)'E
165 .ds oe o\h'-(\w'o'u*4/10)'e
166 .ds Oe O\h'-(\w'O'u*4/10)'E
167 .       \" corrections for vroff
168 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
169 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
170 .       \" for low resolution devices (crt and lpr)
171 .if \n(.H>23 .if \n(.V>19 \
172 \{\
173 .       ds : e
174 .       ds 8 ss
175 .       ds v \h'-1'\o'\(aa\(ga'
176 .       ds _ \h'-1'^
177 .       ds . \h'-1'.
178 .       ds 3 3
179 .       ds o a
180 .       ds d- d\h'-1'\(ga
181 .       ds D- D\h'-1'\(hy
182 .       ds th \o'bp'
183 .       ds Th \o'LP'
184 .       ds ae ae
185 .       ds Ae AE
186 .       ds oe oe
187 .       ds Oe OE
188 .\}
189 .rm #[ #] #H #V #F C
190 .SH "NAME"
191 bn_mul_words, bn_mul_add_words, bn_sqr_words, bn_div_words,
192 bn_add_words, bn_sub_words, bn_mul_comba4, bn_mul_comba8,
193 bn_sqr_comba4, bn_sqr_comba8, bn_cmp_words, bn_mul_normal,
194 bn_mul_low_normal, bn_mul_recursive, bn_mul_part_recursive,
195 bn_mul_low_recursive, bn_mul_high, bn_sqr_normal, bn_sqr_recursive,
196 bn_expand, bn_wexpand, bn_expand2, bn_fix_top, bn_check_top,
197 bn_print, bn_dump, bn_set_max, bn_set_high, bn_set_low \- BIGNUM
198 library internal functions
199 .SH "SYNOPSIS"
200 .PP
201 .Vb 9
202 \& BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w);
203 \& BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num,
204 \&   BN_ULONG w);
205 \& void     bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num);
206 \& BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);
207 \& BN_ULONG bn_add_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,
208 \&   int num);
209 \& BN_ULONG bn_sub_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,
210 \&   int num);
211 .Ve
212 .Vb 4
213 \& void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b);
214 \& void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b);
215 \& void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a);
216 \& void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a);
217 .Ve
218 .Vb 1
219 \& int bn_cmp_words(BN_ULONG *a, BN_ULONG *b, int n);
220 .Ve
221 .Vb 11
222 \& void bn_mul_normal(BN_ULONG *r, BN_ULONG *a, int na, BN_ULONG *b,
223 \&   int nb);
224 \& void bn_mul_low_normal(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n);
225 \& void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
226 \&   int dna,int dnb,BN_ULONG *tmp);
227 \& void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b,
228 \&   int n, int tna,int tnb, BN_ULONG *tmp);
229 \& void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b,
230 \&   int n2, BN_ULONG *tmp);
231 \& void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l,
232 \&   int n2, BN_ULONG *tmp);
233 .Ve
234 .Vb 2
235 \& void bn_sqr_normal(BN_ULONG *r, BN_ULONG *a, int n, BN_ULONG *tmp);
236 \& void bn_sqr_recursive(BN_ULONG *r, BN_ULONG *a, int n2, BN_ULONG *tmp);
237 .Ve
238 .Vb 3
239 \& void mul(BN_ULONG r, BN_ULONG a, BN_ULONG w, BN_ULONG c);
240 \& void mul_add(BN_ULONG r, BN_ULONG a, BN_ULONG w, BN_ULONG c);
241 \& void sqr(BN_ULONG r0, BN_ULONG r1, BN_ULONG a);
242 .Ve
243 .Vb 4
244 \& BIGNUM *bn_expand(BIGNUM *a, int bits);
245 \& BIGNUM *bn_wexpand(BIGNUM *a, int n);
246 \& BIGNUM *bn_expand2(BIGNUM *a, int n);
247 \& void bn_fix_top(BIGNUM *a);
248 .Ve
249 .Vb 6
250 \& void bn_check_top(BIGNUM *a);
251 \& void bn_print(BIGNUM *a);
252 \& void bn_dump(BN_ULONG *d, int n);
253 \& void bn_set_max(BIGNUM *a);
254 \& void bn_set_high(BIGNUM *r, BIGNUM *a, int n);
255 \& void bn_set_low(BIGNUM *r, BIGNUM *a, int n);
256 .Ve
257 .SH "DESCRIPTION"
258 This page documents the internal functions used by the OpenSSL
259 \fBBIGNUM\fR implementation. They are described here to facilitate
260 debugging and extending the library. They are \fInot\fR to be used by
261 applications.
262 .Sh "The \s-1BIGNUM\s0 structure"
263 .PP
264 .Vb 7
265 \& typedef struct bignum_st
266 \&        {
267 \&        int top;      /* index of last used d (most significant word) */
268 \&        BN_ULONG *d;  /* pointer to an array of 'BITS2' bit chunks */
269 \&        int max;      /* size of the d array */
270 \&        int neg;      /* sign */
271 \&        } BIGNUM;
272 .Ve
273 The big number is stored in \fBd\fR, a \fImalloc()\fRed array of \fB\s-1BN_ULONG\s0\fRs,
274 least significant first. A \fB\s-1BN_ULONG\s0\fR can be either 16, 32 or 64 bits
275 in size (\fB\s-1BITS2\s0\fR), depending on the \*(L'number of bits\*(R' specified in
276 \f(CWopenssl/bn.h\fR.
277 .PP
278 \fBmax\fR is the size of the \fBd\fR array that has been allocated.  \fBtop\fR
279 is the \*(L'last\*(R' entry being used, so for a value of 4, bn.d[0]=4 and
280 bn.top=1.  \fBneg\fR is 1 if the number is negative.  When a \fB\s-1BIGNUM\s0\fR is
281 \fB0\fR, the \fBd\fR field can be \fB\s-1NULL\s0\fR and \fBtop\fR == \fB0\fR.
282 .PP
283 Various routines in this library require the use of temporary
284 \fB\s-1BIGNUM\s0\fR variables during their execution.  Since dynamic memory
285 allocation to create \fB\s-1BIGNUM\s0\fRs is rather expensive when used in
286 conjunction with repeated subroutine calls, the \fB\s-1BN_CTX\s0\fR structure is
287 used.  This structure contains \fB\s-1BN_CTX_NUM\s0\fR \fB\s-1BIGNUM\s0\fRs, see
288 BN_CTX_start(3).
289 .Sh "Low-level arithmetic operations"
290 These functions are implemented in C and for several platforms in
291 assembly language:
292 .PP
293 \fIbn_mul_words\fR\|(\fBrp\fR, \fBap\fR, \fBnum\fR, \fBw\fR) operates on the \fBnum\fR word
294 arrays \fBrp\fR and \fBap\fR.  It computes \fBap\fR * \fBw\fR, places the result
295 in \fBrp\fR, and returns the high word (carry).
296 .PP
297 \fIbn_mul_add_words\fR\|(\fBrp\fR, \fBap\fR, \fBnum\fR, \fBw\fR) operates on the \fBnum\fR
298 word arrays \fBrp\fR and \fBap\fR.  It computes \fBap\fR * \fBw\fR + \fBrp\fR, places
299 the result in \fBrp\fR, and returns the high word (carry).
300 .PP
301 \fIbn_sqr_words\fR\|(\fBrp\fR, \fBap\fR, \fBn\fR) operates on the \fBnum\fR word array
302 \fBap\fR and the 2*\fBnum\fR word array \fBap\fR.  It computes \fBap\fR * \fBap\fR
303 word-wise, and places the low and high bytes of the result in \fBrp\fR.
304 .PP
305 \fIbn_div_words\fR\|(\fBh\fR, \fBl\fR, \fBd\fR) divides the two word number (\fBh\fR,\fBl\fR)
306 by \fBd\fR and returns the result.
307 .PP
308 \fIbn_add_words\fR\|(\fBrp\fR, \fBap\fR, \fBbp\fR, \fBnum\fR) operates on the \fBnum\fR word
309 arrays \fBap\fR, \fBbp\fR and \fBrp\fR.  It computes \fBap\fR + \fBbp\fR, places the
310 result in \fBrp\fR, and returns the high word (carry).
311 .PP
312 \fIbn_sub_words\fR\|(\fBrp\fR, \fBap\fR, \fBbp\fR, \fBnum\fR) operates on the \fBnum\fR word
313 arrays \fBap\fR, \fBbp\fR and \fBrp\fR.  It computes \fBap\fR \- \fBbp\fR, places the
314 result in \fBrp\fR, and returns the carry (1 if \fBbp\fR > \fBap\fR, 0
315 otherwise).
316 .PP
317 \fIbn_mul_comba4\fR\|(\fBr\fR, \fBa\fR, \fBb\fR) operates on the 4 word arrays \fBa\fR and
318 \fBb\fR and the 8 word array \fBr\fR.  It computes \fBa\fR*\fBb\fR and places the
319 result in \fBr\fR.
320 .PP
321 \fIbn_mul_comba8\fR\|(\fBr\fR, \fBa\fR, \fBb\fR) operates on the 8 word arrays \fBa\fR and
322 \fBb\fR and the 16 word array \fBr\fR.  It computes \fBa\fR*\fBb\fR and places the
323 result in \fBr\fR.
324 .PP
325 \fIbn_sqr_comba4\fR\|(\fBr\fR, \fBa\fR, \fBb\fR) operates on the 4 word arrays \fBa\fR and
326 \fBb\fR and the 8 word array \fBr\fR.
327 .PP
328 \fIbn_sqr_comba8\fR\|(\fBr\fR, \fBa\fR, \fBb\fR) operates on the 8 word arrays \fBa\fR and
329 \fBb\fR and the 16 word array \fBr\fR.
330 .PP
331 The following functions are implemented in C:
332 .PP
333 \fIbn_cmp_words\fR\|(\fBa\fR, \fBb\fR, \fBn\fR) operates on the \fBn\fR word arrays \fBa\fR
334 and \fBb\fR.  It returns 1, 0 and \-1 if \fBa\fR is greater than, equal and
335 less than \fBb\fR.
336 .PP
337 \fIbn_mul_normal\fR\|(\fBr\fR, \fBa\fR, \fBna\fR, \fBb\fR, \fBnb\fR) operates on the \fBna\fR
338 word array \fBa\fR, the \fBnb\fR word array \fBb\fR and the \fBna\fR+\fBnb\fR word
339 array \fBr\fR.  It computes \fBa\fR*\fBb\fR and places the result in \fBr\fR.
340 .PP
341 \fIbn_mul_low_normal\fR\|(\fBr\fR, \fBa\fR, \fBb\fR, \fBn\fR) operates on the \fBn\fR word
342 arrays \fBr\fR, \fBa\fR and \fBb\fR.  It computes the \fBn\fR low words of
343 \fBa\fR*\fBb\fR and places the result in \fBr\fR.
344 .PP
345 \fIbn_mul_recursive\fR\|(\fBr\fR, \fBa\fR, \fBb\fR, \fBn2\fR, \fBdna\fR, \fBdnb\fR, \fBt\fR) operates
346 on the word arrays \fBa\fR and \fBb\fR of length \fBn2\fR+\fBdna\fR and \fBn2\fR+\fBdnb\fR
347 (\fBdna\fR and \fBdnb\fR are currently allowed to be 0 or negative) and the 2*\fBn2\fR
348 word arrays \fBr\fR and \fBt\fR.  \fBn2\fR must be a power of 2.  It computes
349 \fBa\fR*\fBb\fR and places the result in \fBr\fR.
350 .PP
351 \fIbn_mul_part_recursive\fR\|(\fBr\fR, \fBa\fR, \fBb\fR, \fBn\fR, \fBtna\fR, \fBtnb\fR, \fBtmp\fR)
352 operates on the word arrays \fBa\fR and \fBb\fR of length \fBn\fR+\fBtna\fR and
353 \fBn\fR+\fBtnb\fR and the 4*\fBn\fR word arrays \fBr\fR and \fBtmp\fR.
354 .PP
355 \fIbn_mul_low_recursive\fR\|(\fBr\fR, \fBa\fR, \fBb\fR, \fBn2\fR, \fBtmp\fR) operates on the
356 \fBn2\fR word arrays \fBr\fR and \fBtmp\fR and the \fBn2\fR/2 word arrays \fBa\fR
357 and \fBb\fR.
358 .PP
359 \fIbn_mul_high\fR\|(\fBr\fR, \fBa\fR, \fBb\fR, \fBl\fR, \fBn2\fR, \fBtmp\fR) operates on the
360 \fBn2\fR word arrays \fBr\fR, \fBa\fR, \fBb\fR and \fBl\fR (?) and the 3*\fBn2\fR word
361 array \fBtmp\fR.
362 .PP
363 \fIBN_mul()\fR calls \fIbn_mul_normal()\fR, or an optimized implementation if the
364 factors have the same size: \fIbn_mul_comba8()\fR is used if they are 8
365 words long, \fIbn_mul_recursive()\fR if they are larger than
366 \fB\s-1BN_MULL_SIZE_NORMAL\s0\fR and the size is an exact multiple of the word
367 size, and \fIbn_mul_part_recursive()\fR for others that are larger than
368 \fB\s-1BN_MULL_SIZE_NORMAL\s0\fR.
369 .PP
370 \fIbn_sqr_normal\fR\|(\fBr\fR, \fBa\fR, \fBn\fR, \fBtmp\fR) operates on the \fBn\fR word array
371 \fBa\fR and the 2*\fBn\fR word arrays \fBtmp\fR and \fBr\fR.
372 .PP
373 The implementations use the following macros which, depending on the
374 architecture, may use \*(L"long long\*(R" C operations or inline assembler.
375 They are defined in \f(CWbn_lcl.h\fR.
376 .PP
377 \fImul\fR\|(\fBr\fR, \fBa\fR, \fBw\fR, \fBc\fR) computes \fBw\fR*\fBa\fR+\fBc\fR and places the
378 low word of the result in \fBr\fR and the high word in \fBc\fR.
379 .PP
380 \fImul_add\fR\|(\fBr\fR, \fBa\fR, \fBw\fR, \fBc\fR) computes \fBw\fR*\fBa\fR+\fBr\fR+\fBc\fR and
381 places the low word of the result in \fBr\fR and the high word in \fBc\fR.
382 .PP
383 \fIsqr\fR\|(\fBr0\fR, \fBr1\fR, \fBa\fR) computes \fBa\fR*\fBa\fR and places the low word
384 of the result in \fBr0\fR and the high word in \fBr1\fR.
385 .Sh "Size changes"
386 \fIbn_expand()\fR ensures that \fBb\fR has enough space for a \fBbits\fR bit
387 number.  \fIbn_wexpand()\fR ensures that \fBb\fR has enough space for an
388 \fBn\fR word number.  If the number has to be expanded, both macros
389 call \fIbn_expand2()\fR, which allocates a new \fBd\fR array and copies the
390 data.  They return \fB\s-1NULL\s0\fR on error, \fBb\fR otherwise.
391 .PP
392 The \fIbn_fix_top()\fR macro reduces \fBa->top\fR to point to the most
393 significant non-zero word when \fBa\fR has shrunk.
394 .Sh "Debugging"
395 \fIbn_check_top()\fR verifies that \f(CW((a)->top >= 0 && (a)->top
396 <= (a)->max)\fR.  A violation will cause the program to abort.
397 .PP
398 \fIbn_print()\fR prints \fBa\fR to stderr. \fIbn_dump()\fR prints \fBn\fR words at \fBd\fR
399 (in reverse order, i.e. most significant word first) to stderr.
400 .PP
401 \fIbn_set_max()\fR makes \fBa\fR a static number with a \fBmax\fR of its current size.
402 This is used by \fIbn_set_low()\fR and \fIbn_set_high()\fR to make \fBr\fR a read-only
403 \fB\s-1BIGNUM\s0\fR that contains the \fBn\fR low or high words of \fBa\fR.
404 .PP
405 If \fB\s-1BN_DEBUG\s0\fR is not defined, \fIbn_check_top()\fR, \fIbn_print()\fR, \fIbn_dump()\fR
406 and \fIbn_set_max()\fR are defined as empty macros.
407 .SH "SEE ALSO"
408 bn(3)
409
410 .rn }` ''
411 .IX Title "bn_internal 3"
412 .IX Name "bn_mul_words, bn_mul_add_words, bn_sqr_words, bn_div_words,
413 bn_add_words, bn_sub_words, bn_mul_comba4, bn_mul_comba8,
414 bn_sqr_comba4, bn_sqr_comba8, bn_cmp_words, bn_mul_normal,
415 bn_mul_low_normal, bn_mul_recursive, bn_mul_part_recursive,
416 bn_mul_low_recursive, bn_mul_high, bn_sqr_normal, bn_sqr_recursive,
417 bn_expand, bn_wexpand, bn_expand2, bn_fix_top, bn_check_top,
418 bn_print, bn_dump, bn_set_max, bn_set_high, bn_set_low - BIGNUM
419 library internal functions"
420
421 .IX Header "NAME"
422
423 .IX Header "SYNOPSIS"
424
425 .IX Header "DESCRIPTION"
426
427 .IX Subsection "The \s-1BIGNUM\s0 structure"
428
429 .IX Subsection "Low-level arithmetic operations"
430
431 .IX Subsection "Size changes"
432
433 .IX Subsection "Debugging"
434
435 .IX Header "SEE ALSO"
436