Tcl Source Code

Hex Artifact Content
Login

Artifact 4f087b4e376c4cbe2280ed138c34d62c04861d80caa784097b4818b7aa74ac7e:


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:.