mpint.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. #ifndef PUTTY_MPINT_H
  2. #define PUTTY_MPINT_H
  3. /*
  4. * PuTTY's multiprecision integer library.
  5. *
  6. * This library is written with the aim of avoiding leaking the input
  7. * numbers via timing and cache side channels. This means avoiding
  8. * making any control flow change, or deciding the address of any
  9. * memory access, based on the value of potentially secret input data.
  10. *
  11. * But in a library that has to handle numbers of arbitrary size, you
  12. * can't avoid your control flow depending on the _size_ of the input!
  13. * So the rule is that an mp_int has a nominal size that need not be
  14. * its mathematical size: i.e. if you call (say) mp_from_bytes_be to
  15. * turn an array of 256 bytes into an integer, and all but the last of
  16. * those bytes is zero, then you get an mp_int which has space for 256
  17. * bytes of data but just happens to store the value 1. So the
  18. * _nominal_ sizes of input data - e.g. the size in bits of some
  19. * public-key modulus - are not considered secret, and control flow is
  20. * allowed to do what it likes based on those sizes. But the same
  21. * function, called with the same _nominally sized_ arguments
  22. * containing different values, should run in the same length of time.
  23. *
  24. * When a function returns an 'mp_int *', it is newly allocated to an
  25. * appropriate nominal size (which, again, depends only on the nominal
  26. * sizes of the inputs). Other functions have 'into' in their name,
  27. * and they instead overwrite the contents of an existing mp_int.
  28. *
  29. * Functions in this API which return values that are logically
  30. * boolean return them as 'unsigned' rather than the C99 bool type.
  31. * That's because C99 bool does an implicit test for non-zero-ness
  32. * when converting any other integer type to it, which compilers might
  33. * well implement using data-dependent control flow.
  34. */
  35. /*
  36. * Create and destroy mp_ints. A newly created one is initialised to
  37. * zero. mp_clear also resets an existing number to zero.
  38. */
  39. mp_int *mp_new(size_t maxbits);
  40. void mp_free(mp_int *);
  41. void mp_clear(mp_int *x);
  42. /*
  43. * Resize the physical size of existing mp_int, e.g. so that you have
  44. * room to transform it in place to a larger value. Destroys the old
  45. * mp_int in the process.
  46. */
  47. mp_int *mp_resize(mp_int *, size_t newmaxbits);
  48. /*
  49. * Create mp_ints from various sources: little- and big-endian binary
  50. * data, an ordinary C unsigned integer type, a decimal or hex string
  51. * (given either as a ptrlen or a C NUL-terminated string), and
  52. * another mp_int.
  53. *
  54. * The decimal and hex conversion functions have running time
  55. * dependent on the length of the input data, of course.
  56. */
  57. mp_int *mp_from_bytes_le(ptrlen bytes);
  58. mp_int *mp_from_bytes_be(ptrlen bytes);
  59. mp_int *mp_from_integer(uintmax_t n);
  60. mp_int *mp_from_decimal_pl(ptrlen decimal);
  61. mp_int *mp_from_decimal(const char *decimal);
  62. mp_int *mp_from_hex_pl(ptrlen hex);
  63. mp_int *mp_from_hex(const char *hex);
  64. mp_int *mp_copy(mp_int *x);
  65. /*
  66. * A macro for declaring large fixed numbers in source code (such as
  67. * elliptic curve parameters, or standard Diffie-Hellman moduli). The
  68. * idea is that you just write something like
  69. *
  70. * mp_int *value = MP_LITERAL(0x19284376283754638745693467245);
  71. *
  72. * and it newly allocates you an mp_int containing that number.
  73. *
  74. * Internally, the macro argument is stringified and passed to
  75. * mp_from_hex. That's not as fast as it could be if I had instead set
  76. * up some kind of mp_from_array_of_uint64_t() function, but I think
  77. * this system is valuable for the fact that the literal integers
  78. * appear in a very natural syntax that can be pasted directly out
  79. * into, say, Python if you want to cross-check a calculation.
  80. */
  81. static inline mp_int *mp__from_string_literal(const char *lit)
  82. {
  83. /* Don't call this directly; it's not equipped to deal with
  84. * hostile data. Use only via the MP_LITERAL macro. */
  85. if (lit[0] && (lit[1] == 'x' || lit[1] == 'X'))
  86. return mp_from_hex(lit+2);
  87. else
  88. return mp_from_decimal(lit);
  89. }
  90. // WINSCP
  91. static inline mp_int *mp__from_string_literal_check(const char *lit)
  92. {
  93. // WORKAROUND: C++Builder seems to limit stringified code to about 256 characters.
  94. // So make sure this is not the case.
  95. // If it is, we need to call mp__from_string_literal directly (MP_LITERAL_WINSCP_STR)
  96. // with a string (as in dh_group*_construct).
  97. assert(strlen(lit) < 200);
  98. return mp__from_string_literal(lit);
  99. }
  100. #define MP_LITERAL(number) mp__from_string_literal_check(#number)
  101. #define MP_LITERAL_WINSCP_STR(number) mp__from_string_literal(number)
  102. /*
  103. * Create an mp_int with the value 2^power.
  104. */
  105. mp_int *mp_power_2(size_t power);
  106. /*
  107. * Retrieve the value of a particular bit or byte of an mp_int. The
  108. * byte / bit index is not considered to be secret data. Out-of-range
  109. * byte/bit indices are handled cleanly and return zero.
  110. */
  111. uint8_t mp_get_byte(mp_int *x, size_t byte);
  112. unsigned mp_get_bit(mp_int *x, size_t bit);
  113. /*
  114. * Retrieve the value of an mp_int as a uintmax_t, assuming it's small
  115. * enough to fit.
  116. */
  117. uintmax_t mp_get_integer(mp_int *x);
  118. /*
  119. * Set an mp_int bit. Again, the bit index is not considered secret.
  120. * Do not pass an out-of-range index, on pain of assertion failure.
  121. */
  122. void mp_set_bit(mp_int *x, size_t bit, unsigned val);
  123. /*
  124. * Return the nominal size of an mp_int, in terms of the maximum
  125. * number of bytes or bits that can fit in it.
  126. */
  127. size_t mp_max_bytes(mp_int *x);
  128. size_t mp_max_bits(mp_int *x);
  129. /*
  130. * Return the _mathematical_ bit count of an mp_int (not its nominal
  131. * size), i.e. a value n such that 2^{n-1} <= x < 2^n.
  132. *
  133. * This function is supposed to run in constant time for a given
  134. * nominal input size. Of course it's likely that clients of this
  135. * function will promptly need to use the result as the limit of some
  136. * loop (e.g. marshalling an mp_int into an SSH packet, which doesn't
  137. * permit extra prefix zero bytes). But that's up to the caller to
  138. * decide the safety of.
  139. */
  140. size_t mp_get_nbits(mp_int *x);
  141. /*
  142. * Return the value of an mp_int as a decimal or hex string. The
  143. * result is dynamically allocated, and the caller is responsible for
  144. * freeing it.
  145. *
  146. * These functions should run in constant time for a given nominal
  147. * input size, even though the exact number of digits returned is
  148. * variable. They always allocate enough space for the largest output
  149. * that might be needed, but they don't always fill it.
  150. */
  151. char *mp_get_decimal(mp_int *x);
  152. char *mp_get_hex(mp_int *x);
  153. char *mp_get_hex_uppercase(mp_int *x);
  154. /*
  155. * Compare two mp_ints, or compare one mp_int against a C integer. The
  156. * 'eq' functions return 1 if the two inputs are equal, or 0
  157. * otherwise; the 'hs' functions return 1 if the first input is >= the
  158. * second, and 0 otherwise.
  159. */
  160. unsigned mp_cmp_hs(mp_int *a, mp_int *b);
  161. unsigned mp_cmp_eq(mp_int *a, mp_int *b);
  162. unsigned mp_hs_integer(mp_int *x, uintmax_t n);
  163. unsigned mp_eq_integer(mp_int *x, uintmax_t n);
  164. /*
  165. * Take the minimum or maximum of two mp_ints, without using a
  166. * conditional branch.
  167. */
  168. void mp_min_into(mp_int *r, mp_int *x, mp_int *y);
  169. void mp_max_into(mp_int *r, mp_int *x, mp_int *y);
  170. mp_int *mp_min(mp_int *x, mp_int *y);
  171. mp_int *mp_max(mp_int *x, mp_int *y);
  172. /*
  173. * Diagnostic function. Writes out x in hex to the supplied stdio
  174. * stream, preceded by the string 'prefix' and followed by 'suffix'.
  175. *
  176. * This is useful to put temporarily into code, but it's also
  177. * potentially useful to call from a debugger.
  178. */
  179. void mp_dump(FILE *fp, const char *prefix, mp_int *x, const char *suffix);
  180. /*
  181. * Overwrite one mp_int with another, or with a plain integer.
  182. */
  183. void mp_copy_into(mp_int *dest, mp_int *src);
  184. void mp_copy_integer_into(mp_int *dest, uintmax_t n);
  185. /*
  186. * Conditional selection. Overwrites dest with either src0 or src1,
  187. * according to the value of 'choose_src1'. choose_src1 should be 0 or
  188. * 1; if it's 1, then dest is set to src1, otherwise src0.
  189. *
  190. * The value of choose_src1 is considered to be secret data, so
  191. * control flow and memory access should not depend on it.
  192. */
  193. void mp_select_into(mp_int *dest, mp_int *src0, mp_int *src1,
  194. unsigned choose_src1);
  195. /*
  196. * Addition, subtraction and multiplication, either targeting an
  197. * existing mp_int or making a new one large enough to hold whatever
  198. * the output might be..
  199. */
  200. void mp_add_into(mp_int *r, mp_int *a, mp_int *b);
  201. void mp_sub_into(mp_int *r, mp_int *a, mp_int *b);
  202. void mp_mul_into(mp_int *r, mp_int *a, mp_int *b);
  203. mp_int *mp_add(mp_int *x, mp_int *y);
  204. mp_int *mp_sub(mp_int *x, mp_int *y);
  205. mp_int *mp_mul(mp_int *x, mp_int *y);
  206. /*
  207. * Bitwise operations.
  208. */
  209. void mp_and_into(mp_int *r, mp_int *a, mp_int *b);
  210. void mp_or_into(mp_int *r, mp_int *a, mp_int *b);
  211. void mp_xor_into(mp_int *r, mp_int *a, mp_int *b);
  212. void mp_bic_into(mp_int *r, mp_int *a, mp_int *b);
  213. /*
  214. * Addition, subtraction and multiplication with one argument small
  215. * enough to fit in a C integer. For mp_mul_integer_into, it has to be
  216. * even smaller than that.
  217. */
  218. void mp_add_integer_into(mp_int *r, mp_int *a, uintmax_t n);
  219. void mp_sub_integer_into(mp_int *r, mp_int *a, uintmax_t n);
  220. void mp_mul_integer_into(mp_int *r, mp_int *a, uint16_t n);
  221. /*
  222. * Conditional addition/subtraction. If yes == 1, sets r to a+b or a-b
  223. * (respectively). If yes == 0, sets r to just a. 'yes' is considered
  224. * secret data.
  225. */
  226. void mp_cond_add_into(mp_int *r, mp_int *a, mp_int *b, unsigned yes);
  227. void mp_cond_sub_into(mp_int *r, mp_int *a, mp_int *b, unsigned yes);
  228. /*
  229. * Swap x0 and x1 if swap == 1, and not if swap == 0. 'swap' is
  230. * considered secret.
  231. */
  232. void mp_cond_swap(mp_int *x0, mp_int *x1, unsigned swap);
  233. /*
  234. * Set x to 0 if clear == 1, and otherwise leave it unchanged. 'clear'
  235. * is considered secret.
  236. */
  237. void mp_cond_clear(mp_int *x, unsigned clear);
  238. /*
  239. * Division. mp_divmod_into divides n by d, and writes the quotient
  240. * into q and the remainder into r. You can pass either of q and r as
  241. * NULL if you don't need one of the outputs.
  242. *
  243. * mp_div and mp_mod are wrappers that return one or other of those
  244. * outputs as a freshly allocated mp_int of the appropriate size.
  245. *
  246. * Division by zero gives no error, and returns a quotient of 0 and a
  247. * remainder of n (so as to still satisfy the division identity that
  248. * n=qd+r).
  249. */
  250. void mp_divmod_into(mp_int *n, mp_int *d, mp_int *q, mp_int *r);
  251. mp_int *mp_div(mp_int *n, mp_int *d);
  252. mp_int *mp_mod(mp_int *x, mp_int *modulus);
  253. /*
  254. * Compute the residue of x mod m, where m is a small integer. x is
  255. * kept secret, but m is not.
  256. */
  257. uint32_t mp_mod_known_integer(mp_int *x, uint32_t m);
  258. /*
  259. * Integer nth root. mp_nthroot returns the largest integer x such
  260. * that x^n <= y, and if 'remainder' is non-NULL then it fills it with
  261. * the residue (y - x^n).
  262. *
  263. * Currently, n has to be small enough that the largest binomial
  264. * coefficient (n choose k) fits in 16 bits, which works out to at
  265. * most 18.
  266. */
  267. mp_int *mp_nthroot(mp_int *y, unsigned n, mp_int *remainder);
  268. /*
  269. * Trivially easy special case of mp_mod: reduce a number mod a power
  270. * of two.
  271. */
  272. void mp_reduce_mod_2to(mp_int *x, size_t p);
  273. /*
  274. * Modular inverses. mp_invert computes the inverse of x mod modulus
  275. * (and will expect the two to be coprime). mp_invert_mod_2to computes
  276. * the inverse of x mod 2^p, and is a great deal faster.
  277. */
  278. mp_int *mp_invert_mod_2to(mp_int *x, size_t p);
  279. mp_int *mp_invert(mp_int *x, mp_int *modulus);
  280. /*
  281. * Greatest common divisor.
  282. *
  283. * mp_gcd_into also returns a pair of Bezout coefficients, namely A,B
  284. * such that a*A - b*B = gcd. (The minus sign is so that both returned
  285. * coefficients can be positive.)
  286. *
  287. * You can pass any of mp_gcd_into's output pointers as NULL if you
  288. * don't need that output value.
  289. *
  290. * mp_gcd is a wrapper with a less cumbersome API, for the case where
  291. * the only output value you need is the gcd itself. mp_coprime is
  292. * even easier, if all you care about is whether or not that gcd is 1.
  293. */
  294. mp_int *mp_gcd(mp_int *a, mp_int *b);
  295. void mp_gcd_into(mp_int *a, mp_int *b,
  296. mp_int *gcd_out, mp_int *A_out, mp_int *B_out);
  297. unsigned mp_coprime(mp_int *a, mp_int *b);
  298. /*
  299. * System for taking square roots modulo an odd prime.
  300. *
  301. * In order to do this efficiently, you need to provide an extra piece
  302. * of information at setup time, namely a number which is not
  303. * congruent mod p to any square. Given p and that non-square, you can
  304. * use modsqrt_new to make a context containing all the necessary
  305. * equipment for actually calculating the square roots, and then you
  306. * can call mp_modsqrt as many times as you like on that context
  307. * before freeing it.
  308. *
  309. * The output parameter '*success' will be filled in with 1 if the
  310. * operation was successful, or 0 if the input number doesn't have a
  311. * square root mod p at all. In the latter case, the returned mp_int
  312. * will be nonsense and you shouldn't depend on it.
  313. *
  314. * ==== WARNING ====
  315. *
  316. * This function DOES NOT TREAT THE PRIME MODULUS AS SECRET DATA! It
  317. * will protect the number you're taking the square root _of_, but not
  318. * the number you're taking the root of it _mod_.
  319. *
  320. * (This is because the algorithm requires a number of loop iterations
  321. * equal to the number of factors of 2 in p-1. And the expected use of
  322. * this function is for elliptic-curve point decompression, in which
  323. * the modulus is always a well-known one written down in standards
  324. * documents.)
  325. */
  326. typedef struct ModsqrtContext ModsqrtContext;
  327. ModsqrtContext *modsqrt_new(mp_int *p, mp_int *any_nonsquare_mod_p);
  328. void modsqrt_free(ModsqrtContext *);
  329. mp_int *mp_modsqrt(ModsqrtContext *sc, mp_int *x, unsigned *success);
  330. /*
  331. * Functions for Montgomery multiplication, a fast technique for doing
  332. * a long series of modular multiplications all with the same modulus
  333. * (which has to be odd).
  334. *
  335. * You start by calling monty_new to set up a context structure
  336. * containing all the precomputed bits and pieces needed by the
  337. * algorithm. Then, any numbers you want to work with must first be
  338. * transformed into the internal Montgomery representation using
  339. * monty_import; having done that, you can use monty_mul and monty_pow
  340. * to operate on them efficiently; and finally, monty_export will
  341. * convert numbers back out of Montgomery representation to give their
  342. * ordinary values.
  343. *
  344. * Addition and subtraction are not optimised by the Montgomery trick,
  345. * but monty_add and monty_sub are provided anyway for convenience.
  346. *
  347. * There are also monty_invert and monty_modsqrt, which are analogues
  348. * of mp_invert and mp_modsqrt which take their inputs in Montgomery
  349. * representation. For mp_modsqrt, the prime modulus of the
  350. * ModsqrtContext must be the same as the modulus of the MontyContext.
  351. *
  352. * The query functions monty_modulus and monty_identity return numbers
  353. * stored inside the MontyContext, without copying them. The returned
  354. * pointers are still owned by the MontyContext, so don't free them!
  355. */
  356. MontyContext *monty_new(mp_int *modulus);
  357. void monty_free(MontyContext *mc);
  358. mp_int *monty_modulus(MontyContext *mc); /* doesn't transfer ownership */
  359. mp_int *monty_identity(MontyContext *mc); /* doesn't transfer ownership */
  360. void monty_import_into(MontyContext *mc, mp_int *r, mp_int *x);
  361. mp_int *monty_import(MontyContext *mc, mp_int *x);
  362. void monty_export_into(MontyContext *mc, mp_int *r, mp_int *x);
  363. mp_int *monty_export(MontyContext *mc, mp_int *x);
  364. void monty_mul_into(MontyContext *, mp_int *r, mp_int *, mp_int *);
  365. mp_int *monty_add(MontyContext *, mp_int *, mp_int *);
  366. mp_int *monty_sub(MontyContext *, mp_int *, mp_int *);
  367. mp_int *monty_mul(MontyContext *, mp_int *, mp_int *);
  368. mp_int *monty_pow(MontyContext *, mp_int *base, mp_int *exponent);
  369. mp_int *monty_invert(MontyContext *, mp_int *);
  370. mp_int *monty_modsqrt(ModsqrtContext *sc, mp_int *mx, unsigned *success);
  371. /*
  372. * Modular arithmetic functions which don't use an explicit
  373. * MontyContext. mp_modpow will use one internally (on the assumption
  374. * that the exponent is likely to be large enough to make it
  375. * worthwhile); the other three will just do ordinary non-Montgomery-
  376. * optimised modular reduction. Use mp_modmul if you only have one
  377. * product to compute; if you have a lot, consider using a
  378. * MontyContext in the client code.
  379. */
  380. mp_int *mp_modpow(mp_int *base, mp_int *exponent, mp_int *modulus);
  381. mp_int *mp_modmul(mp_int *x, mp_int *y, mp_int *modulus);
  382. mp_int *mp_modadd(mp_int *x, mp_int *y, mp_int *modulus);
  383. mp_int *mp_modsub(mp_int *x, mp_int *y, mp_int *modulus);
  384. /*
  385. * Shift an mp_int by a given number of bits. The shift count is
  386. * considered to be secret data, and as a result, the algorithm takes
  387. * O(n log n) time instead of the obvious O(n).
  388. *
  389. * There's no mp_lshift_safe, because the size of mp_int to allocate
  390. * would not be able to avoid depending on the shift count. So if you
  391. * need to behave independently of the size of a left shift, you have
  392. * to know a bound on the space you'll need by some other means.
  393. */
  394. void mp_lshift_safe_into(mp_int *r, mp_int *x, size_t shift);
  395. void mp_rshift_safe_into(mp_int *r, mp_int *x, size_t shift);
  396. mp_int *mp_rshift_safe(mp_int *x, size_t shift);
  397. /*
  398. * Shift an mp_int left or right by a fixed number of bits. The shift
  399. * count is NOT considered to be secret data! Use this if you're
  400. * always dividing by 2, for example, but don't use it to shift by a
  401. * variable amount derived from another secret number.
  402. *
  403. * The upside is that these functions run in sensible linear time.
  404. */
  405. void mp_lshift_fixed_into(mp_int *r, mp_int *a, size_t shift);
  406. void mp_rshift_fixed_into(mp_int *r, mp_int *x, size_t shift);
  407. mp_int *mp_lshift_fixed(mp_int *x, size_t shift);
  408. mp_int *mp_rshift_fixed(mp_int *x, size_t shift);
  409. /*
  410. * Generate a random mp_int.
  411. *
  412. * The _function_ definitions here will expect to be given a gen_data
  413. * function that provides random data. Normally you'd use this using
  414. * random_read() from sshrand.c, and the macro wrappers automate that.
  415. *
  416. * (This is a bit of a dodge to avoid mpint.c having a link-time
  417. * dependency on sshrand.c, so that programs can link against one but
  418. * not the other: if a client of this header uses one of these macros
  419. * then _they_ have link-time dependencies on both modules.)
  420. *
  421. * mp_random_bits[_fn] returns an integer 0 <= n < 2^bits.
  422. * mp_random_upto[_fn](limit) returns an integer 0 <= n < limit.
  423. * mp_random_in_range[_fn](lo,hi) returns an integer lo <= n < hi.
  424. */
  425. typedef void (*random_read_fn_t)(void *, size_t);
  426. mp_int *mp_random_bits_fn(size_t bits, random_read_fn_t randfn);
  427. mp_int *mp_random_upto_fn(mp_int *limit, random_read_fn_t randfn);
  428. mp_int *mp_random_in_range_fn(
  429. mp_int *lo_inclusive, mp_int *hi_exclusive, random_read_fn_t randfn);
  430. #define mp_random_bits(bits) mp_random_bits_fn(bits, random_read)
  431. #define mp_random_upto(limit) mp_random_upto_fn(limit, random_read)
  432. #define mp_random_in_range(lo, hi) mp_random_in_range_fn(lo, hi, random_read)
  433. #endif /* PUTTY_MPINT_H */