bignum.h revision 8d520ff1dc2da35cdca849e982051b86468016d8
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Big number math
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This program is free software; you can redistribute it and/or modify
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * it under the terms of the GNU General Public License version 2 as
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * published by the Free Software Foundation.
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Alternatively, this software may be distributed under the terms of BSD
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * license.
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See README and COPYING for more details.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef BIGNUM_H
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BIGNUM_H
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct bignum;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct bignum * bignum_init(void);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void bignum_deinit(struct bignum *n);
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)size_t bignum_get_unsigned_bin_len(struct bignum *n);
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_get_unsigned_bin(const struct bignum *n, u8 *buf, size_t *len);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_set_unsigned_bin(struct bignum *n, const u8 *buf, size_t len);
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_cmp(const struct bignum *a, const struct bignum *b);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_cmp_d(const struct bignum *a, unsigned long b);
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int bignum_add(const struct bignum *a, const struct bignum *b,
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	       struct bignum *c);
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int bignum_sub(const struct bignum *a, const struct bignum *b,
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	       struct bignum *c);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_mul(const struct bignum *a, const struct bignum *b,
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	       struct bignum *c);
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int bignum_mulmod(const struct bignum *a, const struct bignum *b,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		  const struct bignum *c, struct bignum *d);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int bignum_exptmod(const struct bignum *a, const struct bignum *b,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		   const struct bignum *c, struct bignum *d);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif /* BIGNUM_H */
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)