0000: 23 20 74 63 6c 54 6f 6d 4d 61 74 68 2e 64 65 63 # tclTomMath.dec
0010: 6c 73 20 2d 2d 0a 23 0a 23 09 54 68 69 73 20 66 ls --.#.#.This f
0020: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 ile contains the
0030: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f declarations fo
0040: 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 r the functions
0050: 69 6e 20 27 6c 69 62 74 6f 6d 6d 61 74 68 27 0a in 'libtommath'.
0060: 23 09 74 68 61 74 20 61 72 65 20 63 6f 6e 74 61 #.that are conta
0070: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 ined within the
0080: 54 63 6c 20 6c 69 62 72 61 72 79 2e 20 20 54 68 Tcl library. Th
0090: 69 73 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 is file is used
00a0: 74 6f 0a 23 09 67 65 6e 65 72 61 74 65 20 74 68 to.#.generate th
00b0: 65 20 27 74 63 6c 54 6f 6d 4d 61 74 68 44 65 63 e 'tclTomMathDec
00c0: 6c 73 2e 68 27 20 61 6e 64 20 27 74 63 6c 53 74 ls.h' and 'tclSt
00d0: 75 62 49 6e 69 74 2e 63 27 20 66 69 6c 65 73 2e ubInit.c' files.
00e0: 0a 23 0a 23 20 49 66 20 79 6f 75 20 65 64 69 74 .#.# If you edit
00f0: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 64 76 61 this file, adva
0100: 6e 63 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e nce the revision
0110: 20 6e 75 6d 62 65 72 20 28 61 6e 64 20 74 68 65 number (and the
0120: 20 65 70 6f 63 68 0a 23 20 69 66 20 74 68 65 20 epoch.# if the
0130: 6e 65 77 20 73 74 75 62 73 20 61 72 65 20 6e 6f new stubs are no
0140: 74 20 62 61 63 6b 77 61 72 64 20 63 6f 6d 70 61 t backward compa
0150: 74 69 62 6c 65 29 20 69 6e 20 74 63 6c 54 6f 6d tible) in tclTom
0160: 4d 61 74 68 44 65 63 6c 73 2e 68 0a 23 0a 23 20 MathDecls.h.#.#
0170: 43 6f 70 79 72 69 67 68 74 20 c2 a9 20 32 30 30 Copyright © 200
0180: 35 20 4b 65 76 69 6e 20 42 2e 20 4b 65 6e 6e 79 5 Kevin B. Kenny
0190: 2e 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72 65 . All rights re
01a0: 73 65 72 76 65 64 2e 0a 23 0a 23 20 53 65 65 20 served..#.# See
01b0: 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e 73 the file "licens
01c0: 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e 66 e.terms" for inf
01d0: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67 ormation on usag
01e0: 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62 75 e and redistribu
01f0: 74 69 6f 6e 0a 23 20 6f 66 20 74 68 69 73 20 66 tion.# of this f
0200: 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61 20 44 ile, and for a D
0210: 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c ISCLAIMER OF ALL
0220: 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 0a 6c 69 WARRANTIES...li
0230: 62 72 61 72 79 20 74 63 6c 0a 0a 23 20 44 65 66 brary tcl..# Def
0240: 69 6e 65 20 74 68 65 20 75 6e 73 75 70 70 6f 72 ine the unsuppor
0250: 74 65 64 20 67 65 6e 65 72 69 63 20 69 6e 74 65 ted generic inte
0260: 72 66 61 63 65 73 2e 0a 0a 69 6e 74 65 72 66 61 rfaces...interfa
0270: 63 65 20 74 63 6c 54 6f 6d 4d 61 74 68 0a 73 63 ce tclTomMath.sc
0280: 73 70 65 63 20 45 58 54 45 52 4e 0a 0a 23 20 44 spec EXTERN..# D
0290: 65 63 6c 61 72 65 20 65 61 63 68 20 6f 66 20 74 eclare each of t
02a0: 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 he functions in
02b0: 74 68 65 20 54 63 6c 20 74 6f 6d 6d 61 74 68 20 the Tcl tommath
02c0: 69 6e 74 65 72 66 61 63 65 0a 0a 64 65 63 6c 61 interface..decla
02d0: 72 65 20 30 20 7b 0a 20 20 20 20 69 6e 74 20 4d re 0 {. int M
02e0: 50 5f 57 55 52 20 54 63 6c 42 4e 5f 65 70 6f 63 P_WUR TclBN_epoc
02f0: 68 28 76 6f 69 64 29 0a 7d 0a 64 65 63 6c 61 72 h(void).}.declar
0300: 65 20 31 20 7b 0a 20 20 20 20 69 6e 74 20 4d 50 e 1 {. int MP
0310: 5f 57 55 52 20 54 63 6c 42 4e 5f 72 65 76 69 73 _WUR TclBN_revis
0320: 69 6f 6e 28 76 6f 69 64 29 0a 7d 0a 0a 64 65 63 ion(void).}..dec
0330: 6c 61 72 65 20 32 20 7b 0a 20 20 20 20 6d 70 5f lare 2 {. mp_
0340: 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e err MP_WUR TclBN
0350: 5f 6d 70 5f 61 64 64 28 63 6f 6e 73 74 20 6d 70 _mp_add(const mp
0360: 5f 69 6e 74 20 2a 61 2c 20 63 6f 6e 73 74 20 6d _int *a, const m
0370: 70 5f 69 6e 74 20 2a 62 2c 20 6d 70 5f 69 6e 74 p_int *b, mp_int
0380: 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 65 20 33 *c).}.declare 3
0390: 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 {. mp_err MP
03a0: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 61 64 _WUR TclBN_mp_ad
03b0: 64 5f 64 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 d_d(const mp_int
03c0: 20 2a 61 2c 20 6d 70 5f 64 69 67 69 74 20 62 2c *a, mp_digit b,
03d0: 20 6d 70 5f 69 6e 74 20 2a 63 29 0a 7d 0a 64 65 mp_int *c).}.de
03e0: 63 6c 61 72 65 20 34 20 7b 0a 20 20 20 20 6d 70 clare 4 {. mp
03f0: 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 _err MP_WUR TclB
0400: 4e 5f 6d 70 5f 61 6e 64 28 63 6f 6e 73 74 20 6d N_mp_and(const m
0410: 70 5f 69 6e 74 20 2a 61 2c 20 63 6f 6e 73 74 20 p_int *a, const
0420: 6d 70 5f 69 6e 74 20 2a 62 2c 20 6d 70 5f 69 6e mp_int *b, mp_in
0430: 74 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 65 20 t *c).}.declare
0440: 35 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 63 6c 5 {. void Tcl
0450: 42 4e 5f 6d 70 5f 63 6c 61 6d 70 28 6d 70 5f 69 BN_mp_clamp(mp_i
0460: 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *a).}.declare
0470: 20 36 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 63 6 {. void Tc
0480: 6c 42 4e 5f 6d 70 5f 63 6c 65 61 72 28 6d 70 5f lBN_mp_clear(mp_
0490: 69 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 int *a).}.declar
04a0: 65 20 37 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 e 7 {. void T
04b0: 63 6c 42 4e 5f 6d 70 5f 63 6c 65 61 72 5f 6d 75 clBN_mp_clear_mu
04c0: 6c 74 69 28 6d 70 5f 69 6e 74 20 2a 61 2c 20 2e lti(mp_int *a, .
04d0: 2e 2e 29 0a 7d 0a 64 65 63 6c 61 72 65 20 38 20 ..).}.declare 8
04e0: 7b 0a 20 20 20 20 6d 70 5f 6f 72 64 20 4d 50 5f {. mp_ord MP_
04f0: 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 63 6d 70 WUR TclBN_mp_cmp
0500: 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 (const mp_int *a
0510: 2c 20 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a , const mp_int *
0520: 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 39 20 7b b).}.declare 9 {
0530: 0a 20 20 20 20 6d 70 5f 6f 72 64 20 4d 50 5f 57 . mp_ord MP_W
0540: 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 63 6d 70 5f UR TclBN_mp_cmp_
0550: 64 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a d(const mp_int *
0560: 61 2c 20 6d 70 5f 64 69 67 69 74 20 62 29 0a 7d a, mp_digit b).}
0570: 0a 64 65 63 6c 61 72 65 20 31 30 20 7b 0a 20 20 .declare 10 {.
0580: 20 20 6d 70 5f 6f 72 64 20 4d 50 5f 57 55 52 20 mp_ord MP_WUR
0590: 54 63 6c 42 4e 5f 6d 70 5f 63 6d 70 5f 6d 61 67 TclBN_mp_cmp_mag
05a0: 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 (const mp_int *a
05b0: 2c 20 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a , const mp_int *
05c0: 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 31 31 20 b).}.declare 11
05d0: 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f {. mp_err MP_
05e0: 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 63 6f 70 WUR TclBN_mp_cop
05f0: 79 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a y(const mp_int *
0600: 61 2c 20 6d 70 5f 69 6e 74 20 2a 62 29 0a 7d 0a a, mp_int *b).}.
0610: 64 65 63 6c 61 72 65 20 31 32 20 7b 0a 20 20 20 declare 12 {.
0620: 20 69 6e 74 20 4d 50 5f 57 55 52 20 54 63 6c 42 int MP_WUR TclB
0630: 4e 5f 6d 70 5f 63 6f 75 6e 74 5f 62 69 74 73 28 N_mp_count_bits(
0640: 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 29 const mp_int *a)
0650: 0a 7d 0a 64 65 63 6c 61 72 65 20 31 33 20 7b 0a .}.declare 13 {.
0660: 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 mp_err MP_WU
0670: 52 20 54 63 6c 42 4e 5f 6d 70 5f 64 69 76 28 63 R TclBN_mp_div(c
0680: 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 onst mp_int *a,
0690: 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 62 2c const mp_int *b,
06a0: 20 6d 70 5f 69 6e 74 20 2a 71 2c 20 6d 70 5f 69 mp_int *q, mp_i
06b0: 6e 74 20 2a 72 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *r).}.declare
06c0: 20 31 34 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 14 {. mp_err
06d0: 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 MP_WUR TclBN_mp
06e0: 5f 64 69 76 5f 64 28 63 6f 6e 73 74 20 6d 70 5f _div_d(const mp_
06f0: 69 6e 74 20 2a 61 2c 20 6d 70 5f 64 69 67 69 74 int *a, mp_digit
0700: 20 62 2c 20 6d 70 5f 69 6e 74 20 2a 71 2c 20 6d b, mp_int *q, m
0710: 70 5f 64 69 67 69 74 20 2a 72 29 0a 7d 0a 64 65 p_digit *r).}.de
0720: 63 6c 61 72 65 20 31 35 20 7b 0a 20 20 20 20 6d clare 15 {. m
0730: 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c p_err MP_WUR Tcl
0740: 42 4e 5f 6d 70 5f 64 69 76 5f 32 28 63 6f 6e 73 BN_mp_div_2(cons
0750: 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 6d 70 5f t mp_int *a, mp_
0760: 69 6e 74 20 2a 71 29 0a 7d 0a 64 65 63 6c 61 72 int *q).}.declar
0770: 65 20 31 36 20 7b 0a 20 20 20 20 6d 70 5f 65 72 e 16 {. mp_er
0780: 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d r MP_WUR TclBN_m
0790: 70 5f 64 69 76 5f 32 64 28 63 6f 6e 73 74 20 6d p_div_2d(const m
07a0: 70 5f 69 6e 74 20 2a 61 2c 20 69 6e 74 20 62 2c p_int *a, int b,
07b0: 20 6d 70 5f 69 6e 74 20 2a 71 2c 20 6d 70 5f 69 mp_int *q, mp_i
07c0: 6e 74 20 2a 72 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *r).}.declare
07d0: 20 31 38 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 18 {. void T
07e0: 63 6c 42 4e 5f 6d 70 5f 65 78 63 68 28 6d 70 5f clBN_mp_exch(mp_
07f0: 69 6e 74 20 2a 61 2c 20 6d 70 5f 69 6e 74 20 2a int *a, mp_int *
0800: 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 31 39 20 b).}.declare 19
0810: 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f {. mp_err MP_
0820: 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 65 78 70 WUR TclBN_mp_exp
0830: 74 5f 6e 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 t_n(const mp_int
0840: 20 2a 61 2c 20 69 6e 74 20 62 2c 20 6d 70 5f 69 *a, int b, mp_i
0850: 6e 74 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *c).}.declare
0860: 20 32 30 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 {. mp_err
0870: 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 MP_WUR TclBN_mp
0880: 5f 67 72 6f 77 28 6d 70 5f 69 6e 74 20 2a 61 2c _grow(mp_int *a,
0890: 20 69 6e 74 20 73 69 7a 65 29 0a 7d 0a 64 65 63 int size).}.dec
08a0: 6c 61 72 65 20 32 31 20 7b 0a 20 20 20 20 6d 70 lare 21 {. mp
08b0: 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 _err MP_WUR TclB
08c0: 4e 5f 6d 70 5f 69 6e 69 74 28 6d 70 5f 69 6e 74 N_mp_init(mp_int
08d0: 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 65 20 32 *a).}.declare 2
08e0: 32 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 2 {. mp_err M
08f0: 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 69 P_WUR TclBN_mp_i
0900: 6e 69 74 5f 63 6f 70 79 28 6d 70 5f 69 6e 74 20 nit_copy(mp_int
0910: 2a 61 2c 20 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 *a, const mp_int
0920: 20 2a 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 32 *b).}.declare 2
0930: 33 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 3 {. mp_err M
0940: 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 69 P_WUR TclBN_mp_i
0950: 6e 69 74 5f 6d 75 6c 74 69 28 6d 70 5f 69 6e 74 nit_multi(mp_int
0960: 20 2a 61 2c 20 2e 2e 2e 29 0a 7d 0a 64 65 63 6c *a, ...).}.decl
0970: 61 72 65 20 32 34 20 7b 0a 20 20 20 20 6d 70 5f are 24 {. mp_
0980: 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e err MP_WUR TclBN
0990: 5f 6d 70 5f 69 6e 69 74 5f 73 65 74 28 6d 70 5f _mp_init_set(mp_
09a0: 69 6e 74 20 2a 61 2c 20 6d 70 5f 64 69 67 69 74 int *a, mp_digit
09b0: 20 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 32 35 b).}.declare 25
09c0: 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 {. mp_err MP
09d0: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 69 6e _WUR TclBN_mp_in
09e0: 69 74 5f 73 69 7a 65 28 6d 70 5f 69 6e 74 20 2a it_size(mp_int *
09f0: 61 2c 20 69 6e 74 20 73 69 7a 65 29 0a 7d 0a 64 a, int size).}.d
0a00: 65 63 6c 61 72 65 20 32 36 20 7b 0a 20 20 20 20 eclare 26 {.
0a10: 6d 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 mp_err MP_WUR Tc
0a20: 6c 42 4e 5f 6d 70 5f 6c 73 68 64 28 6d 70 5f 69 lBN_mp_lshd(mp_i
0a30: 6e 74 20 2a 61 2c 20 69 6e 74 20 73 68 69 66 74 nt *a, int shift
0a40: 29 0a 7d 0a 64 65 63 6c 61 72 65 20 32 37 20 7b ).}.declare 27 {
0a50: 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 . mp_err MP_W
0a60: 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 6d 6f 64 28 UR TclBN_mp_mod(
0a70: 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c const mp_int *a,
0a80: 20 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 62 const mp_int *b
0a90: 2c 20 6d 70 5f 69 6e 74 20 2a 72 29 0a 7d 0a 64 , mp_int *r).}.d
0aa0: 65 63 6c 61 72 65 20 32 38 20 7b 0a 20 20 20 20 eclare 28 {.
0ab0: 6d 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 mp_err MP_WUR Tc
0ac0: 6c 42 4e 5f 6d 70 5f 6d 6f 64 5f 32 64 28 63 6f lBN_mp_mod_2d(co
0ad0: 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 69 nst mp_int *a, i
0ae0: 6e 74 20 62 2c 20 6d 70 5f 69 6e 74 20 2a 72 29 nt b, mp_int *r)
0af0: 0a 7d 0a 64 65 63 6c 61 72 65 20 32 39 20 7b 0a .}.declare 29 {.
0b00: 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 mp_err MP_WU
0b10: 52 20 54 63 6c 42 4e 5f 6d 70 5f 6d 75 6c 28 63 R TclBN_mp_mul(c
0b20: 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 onst mp_int *a,
0b30: 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 62 2c const mp_int *b,
0b40: 20 6d 70 5f 69 6e 74 20 2a 70 29 0a 7d 0a 64 65 mp_int *p).}.de
0b50: 63 6c 61 72 65 20 33 30 20 7b 0a 20 20 20 20 6d clare 30 {. m
0b60: 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c p_err MP_WUR Tcl
0b70: 42 4e 5f 6d 70 5f 6d 75 6c 5f 64 28 63 6f 6e 73 BN_mp_mul_d(cons
0b80: 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 6d 70 5f t mp_int *a, mp_
0b90: 64 69 67 69 74 20 62 2c 20 6d 70 5f 69 6e 74 20 digit b, mp_int
0ba0: 2a 70 29 0a 7d 0a 64 65 63 6c 61 72 65 20 33 31 *p).}.declare 31
0bb0: 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 {. mp_err MP
0bc0: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 6d 75 _WUR TclBN_mp_mu
0bd0: 6c 5f 32 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 l_2(const mp_int
0be0: 20 2a 61 2c 20 6d 70 5f 69 6e 74 20 2a 70 29 0a *a, mp_int *p).
0bf0: 7d 0a 64 65 63 6c 61 72 65 20 33 32 20 7b 0a 20 }.declare 32 {.
0c00: 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 52 mp_err MP_WUR
0c10: 20 54 63 6c 42 4e 5f 6d 70 5f 6d 75 6c 5f 32 64 TclBN_mp_mul_2d
0c20: 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 (const mp_int *a
0c30: 2c 20 69 6e 74 20 64 2c 20 6d 70 5f 69 6e 74 20 , int d, mp_int
0c40: 2a 70 29 0a 7d 0a 64 65 63 6c 61 72 65 20 33 33 *p).}.declare 33
0c50: 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 {. mp_err MP
0c60: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 6e 65 _WUR TclBN_mp_ne
0c70: 67 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a g(const mp_int *
0c80: 61 2c 20 6d 70 5f 69 6e 74 20 2a 62 29 0a 7d 0a a, mp_int *b).}.
0c90: 64 65 63 6c 61 72 65 20 33 34 20 7b 0a 20 20 20 declare 34 {.
0ca0: 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 mp_err MP_WUR T
0cb0: 63 6c 42 4e 5f 6d 70 5f 6f 72 28 63 6f 6e 73 74 clBN_mp_or(const
0cc0: 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 63 6f 6e 73 mp_int *a, cons
0cd0: 74 20 6d 70 5f 69 6e 74 20 2a 62 2c 20 6d 70 5f t mp_int *b, mp_
0ce0: 69 6e 74 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 int *c).}.declar
0cf0: 65 20 33 35 20 7b 0a 20 20 20 20 6d 70 5f 65 72 e 35 {. mp_er
0d00: 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d r MP_WUR TclBN_m
0d10: 70 5f 72 61 64 69 78 5f 73 69 7a 65 28 63 6f 6e p_radix_size(con
0d20: 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 69 6e st mp_int *a, in
0d30: 74 20 72 61 64 69 78 2c 20 69 6e 74 20 2a 73 69 t radix, int *si
0d40: 7a 65 29 0a 7d 0a 64 65 63 6c 61 72 65 20 33 36 ze).}.declare 36
0d50: 20 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 {. mp_err MP
0d60: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 72 65 _WUR TclBN_mp_re
0d70: 61 64 5f 72 61 64 69 78 28 6d 70 5f 69 6e 74 20 ad_radix(mp_int
0d80: 2a 61 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a *a, const char *
0d90: 73 74 72 2c 20 69 6e 74 20 72 61 64 69 78 29 0a str, int radix).
0da0: 7d 0a 64 65 63 6c 61 72 65 20 33 37 20 7b 0a 20 }.declare 37 {.
0db0: 20 20 20 76 6f 69 64 20 54 63 6c 42 4e 5f 6d 70 void TclBN_mp
0dc0: 5f 72 73 68 64 28 6d 70 5f 69 6e 74 20 2a 61 2c _rshd(mp_int *a,
0dd0: 20 69 6e 74 20 73 68 69 66 74 29 0a 7d 0a 64 65 int shift).}.de
0de0: 63 6c 61 72 65 20 33 38 20 7b 0a 20 20 20 20 6d clare 38 {. m
0df0: 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c p_err MP_WUR Tcl
0e00: 42 4e 5f 6d 70 5f 73 68 72 69 6e 6b 28 6d 70 5f BN_mp_shrink(mp_
0e10: 69 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 int *a).}.declar
0e20: 65 20 34 31 20 7b 0a 20 20 20 20 6d 70 5f 65 72 e 41 {. mp_er
0e30: 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d r MP_WUR TclBN_m
0e40: 70 5f 73 71 72 74 28 63 6f 6e 73 74 20 6d 70 5f p_sqrt(const mp_
0e50: 69 6e 74 20 2a 61 2c 20 6d 70 5f 69 6e 74 20 2a int *a, mp_int *
0e60: 62 29 0a 7d 0a 64 65 63 6c 61 72 65 20 34 32 20 b).}.declare 42
0e70: 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f {. mp_err MP_
0e80: 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 73 75 62 WUR TclBN_mp_sub
0e90: 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 (const mp_int *a
0ea0: 2c 20 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a , const mp_int *
0eb0: 62 2c 20 6d 70 5f 69 6e 74 20 2a 63 29 0a 7d 0a b, mp_int *c).}.
0ec0: 64 65 63 6c 61 72 65 20 34 33 20 7b 0a 20 20 20 declare 43 {.
0ed0: 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 mp_err MP_WUR T
0ee0: 63 6c 42 4e 5f 6d 70 5f 73 75 62 5f 64 28 63 6f clBN_mp_sub_d(co
0ef0: 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 6d nst mp_int *a, m
0f00: 70 5f 64 69 67 69 74 20 62 2c 20 6d 70 5f 69 6e p_digit b, mp_in
0f10: 74 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 65 20 t *c).}.declare
0f20: 34 37 20 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 47 {. size_t
0f30: 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f MP_WUR TclBN_mp_
0f40: 75 62 69 6e 5f 73 69 7a 65 28 63 6f 6e 73 74 20 ubin_size(const
0f50: 6d 70 5f 69 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 mp_int *a).}.dec
0f60: 6c 61 72 65 20 34 38 20 7b 0a 20 20 20 20 6d 70 lare 48 {. mp
0f70: 5f 65 72 72 20 4d 50 5f 57 55 52 20 54 63 6c 42 _err MP_WUR TclB
0f80: 4e 5f 6d 70 5f 78 6f 72 28 63 6f 6e 73 74 20 6d N_mp_xor(const m
0f90: 70 5f 69 6e 74 20 2a 61 2c 20 63 6f 6e 73 74 20 p_int *a, const
0fa0: 6d 70 5f 69 6e 74 20 2a 62 2c 20 6d 70 5f 69 6e mp_int *b, mp_in
0fb0: 74 20 2a 63 29 0a 7d 0a 64 65 63 6c 61 72 65 20 t *c).}.declare
0fc0: 34 39 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 63 49 {. void Tc
0fd0: 6c 42 4e 5f 6d 70 5f 7a 65 72 6f 28 6d 70 5f 69 lBN_mp_zero(mp_i
0fe0: 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *a).}.declare
0ff0: 20 36 33 20 7b 0a 20 20 20 20 69 6e 74 20 4d 50 63 {. int MP
1000: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 63 6e _WUR TclBN_mp_cn
1010: 74 5f 6c 73 62 28 63 6f 6e 73 74 20 6d 70 5f 69 t_lsb(const mp_i
1020: 6e 74 20 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 65 nt *a).}.declare
1030: 20 36 35 20 7b 0a 20 20 20 20 69 6e 74 20 4d 50 65 {. int MP
1040: 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 69 6e _WUR TclBN_mp_in
1050: 69 74 5f 69 36 34 28 6d 70 5f 69 6e 74 20 2a 62 it_i64(mp_int *b
1060: 69 67 6e 75 6d 2c 20 69 6e 74 36 34 5f 74 20 69 ignum, int64_t i
1070: 6e 69 74 56 61 6c 29 0a 7d 0a 64 65 63 6c 61 72 nitVal).}.declar
1080: 65 20 36 36 20 7b 0a 20 20 20 20 69 6e 74 20 4d e 66 {. int M
1090: 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 69 P_WUR TclBN_mp_i
10a0: 6e 69 74 5f 75 36 34 28 6d 70 5f 69 6e 74 20 2a nit_u64(mp_int *
10b0: 62 69 67 6e 75 6d 2c 20 75 69 6e 74 36 34 5f 74 bignum, uint64_t
10c0: 20 69 6e 69 74 56 61 6c 29 0a 7d 0a 0a 64 65 63 initVal).}..dec
10d0: 6c 61 72 65 20 36 38 20 7b 0a 20 20 20 20 76 6f lare 68 {. vo
10e0: 69 64 20 54 63 6c 42 4e 5f 6d 70 5f 73 65 74 5f id TclBN_mp_set_
10f0: 75 36 34 28 6d 70 5f 69 6e 74 20 2a 61 2c 20 75 u64(mp_int *a, u
1100: 69 6e 74 36 34 5f 74 20 69 29 0a 7d 0a 64 65 63 int64_t i).}.dec
1110: 6c 61 72 65 20 36 39 20 7b 0a 20 20 20 20 75 69 lare 69 {. ui
1120: 6e 74 36 34 5f 74 20 4d 50 5f 57 55 52 20 54 63 nt64_t MP_WUR Tc
1130: 6c 42 4e 5f 6d 70 5f 67 65 74 5f 6d 61 67 5f 75 lBN_mp_get_mag_u
1140: 36 34 28 63 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 64(const mp_int
1150: 2a 61 29 0a 7d 0a 64 65 63 6c 61 72 65 20 37 30 *a).}.declare 70
1160: 20 7b 0a 20 20 20 20 76 6f 69 64 20 54 63 6c 42 {. void TclB
1170: 4e 5f 6d 70 5f 73 65 74 5f 69 36 34 28 6d 70 5f N_mp_set_i64(mp_
1180: 69 6e 74 20 2a 61 2c 20 69 6e 74 36 34 5f 74 20 int *a, int64_t
1190: 69 29 0a 7d 0a 64 65 63 6c 61 72 65 20 37 31 20 i).}.declare 71
11a0: 7b 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f {. mp_err MP_
11b0: 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 75 6e 70 WUR TclBN_mp_unp
11c0: 61 63 6b 28 6d 70 5f 69 6e 74 20 2a 72 6f 70 2c ack(mp_int *rop,
11d0: 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 6d size_t count, m
11e0: 70 5f 6f 72 64 65 72 20 6f 72 64 65 72 2c 20 73 p_order order, s
11f0: 69 7a 65 5f 74 20 73 69 7a 65 2c 0a 09 20 20 20 ize_t size,..
1200: 20 6d 70 5f 65 6e 64 69 61 6e 20 65 6e 64 69 61 mp_endian endia
1210: 6e 2c 20 73 69 7a 65 5f 74 20 6e 61 69 6c 73 2c n, size_t nails,
1220: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 70 29 const void *op)
1230: 0a 7d 0a 64 65 63 6c 61 72 65 20 37 32 20 7b 0a .}.declare 72 {.
1240: 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 55 mp_err MP_WU
1250: 52 20 54 63 6c 42 4e 5f 6d 70 5f 70 61 63 6b 28 R TclBN_mp_pack(
1260: 76 6f 69 64 20 2a 72 6f 70 2c 20 73 69 7a 65 5f void *rop, size_
1270: 74 20 6d 61 78 63 6f 75 6e 74 2c 20 73 69 7a 65 t maxcount, size
1280: 5f 74 20 2a 77 72 69 74 74 65 6e 2c 20 6d 70 5f _t *written, mp_
1290: 6f 72 64 65 72 20 6f 72 64 65 72 2c 0a 09 20 20 order order,..
12a0: 20 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 6d size_t size, m
12b0: 70 5f 65 6e 64 69 61 6e 20 65 6e 64 69 61 6e 2c p_endian endian,
12c0: 20 73 69 7a 65 5f 74 20 6e 61 69 6c 73 2c 20 63 size_t nails, c
12d0: 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 6f 70 29 onst mp_int *op)
12e0: 0a 7d 0a 0a 64 65 63 6c 61 72 65 20 37 36 20 7b .}..declare 76 {
12f0: 0a 20 20 20 20 6d 70 5f 65 72 72 20 4d 50 5f 57 . mp_err MP_W
1300: 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 73 69 67 6e UR TclBN_mp_sign
1310: 65 64 5f 72 73 68 28 63 6f 6e 73 74 20 6d 70 5f ed_rsh(const mp_
1320: 69 6e 74 20 2a 61 2c 20 69 6e 74 20 62 2c 20 6d int *a, int b, m
1330: 70 5f 69 6e 74 20 2a 63 29 0a 7d 0a 64 65 63 6c p_int *c).}.decl
1340: 61 72 65 20 37 37 20 7b 0a 20 20 20 20 73 69 7a are 77 {. siz
1350: 65 5f 74 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e e_t MP_WUR TclBN
1360: 5f 6d 70 5f 70 61 63 6b 5f 63 6f 75 6e 74 28 63 _mp_pack_count(c
1370: 6f 6e 73 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 onst mp_int *a,
1380: 73 69 7a 65 5f 74 20 6e 61 69 6c 73 2c 20 73 69 size_t nails, si
1390: 7a 65 5f 74 20 73 69 7a 65 29 0a 7d 0a 0a 23 20 ze_t size).}..#
13a0: 41 64 64 65 64 20 69 6e 20 6c 69 62 74 6f 6d 6d Added in libtomm
13b0: 61 74 68 20 31 2e 32 2e 30 0a 64 65 63 6c 61 72 ath 1.2.0.declar
13c0: 65 20 37 38 20 7b 0a 20 20 20 20 69 6e 74 20 4d e 78 {. int M
13d0: 50 5f 57 55 52 20 54 63 6c 42 4e 5f 6d 70 5f 74 P_WUR TclBN_mp_t
13e0: 6f 5f 75 62 69 6e 28 63 6f 6e 73 74 20 6d 70 5f o_ubin(const mp_
13f0: 69 6e 74 20 2a 61 2c 20 75 6e 73 69 67 6e 65 64 int *a, unsigned
1400: 20 63 68 61 72 20 2a 62 75 66 2c 20 73 69 7a 65 char *buf, size
1410: 5f 74 20 6d 61 78 6c 65 6e 2c 20 73 69 7a 65 5f _t maxlen, size_
1420: 74 20 2a 77 72 69 74 74 65 6e 29 0a 7d 0a 64 65 t *written).}.de
1430: 63 6c 61 72 65 20 38 30 20 7b 0a 20 20 20 20 69 clare 80 {. i
1440: 6e 74 20 4d 50 5f 57 55 52 20 54 63 6c 42 4e 5f nt MP_WUR TclBN_
1450: 6d 70 5f 74 6f 5f 72 61 64 69 78 28 63 6f 6e 73 mp_to_radix(cons
1460: 74 20 6d 70 5f 69 6e 74 20 2a 61 2c 20 63 68 61 t mp_int *a, cha
1470: 72 20 2a 73 74 72 2c 20 73 69 7a 65 5f 74 20 6d r *str, size_t m
1480: 61 78 6c 65 6e 2c 20 73 69 7a 65 5f 74 20 2a 77 axlen, size_t *w
1490: 72 69 74 74 65 6e 2c 20 69 6e 74 20 72 61 64 69 ritten, int radi
14a0: 78 29 0a 7d 0a 0a 0a 23 20 4c 6f 63 61 6c 20 56 x).}...# Local V
14b0: 61 72 69 61 62 6c 65 73 3a 0a 23 20 6d 6f 64 65 ariables:.# mode
14c0: 3a 20 74 63 6c 0a 23 20 45 6e 64 3a 0a : tcl.# End:.