1 /* 2 * Copyright (c) 2003 Bob Deblier 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 * 18 */ 19 20 /*!\file mpnumber.h 21 * \brief Multi-precision numbers, headers. 22 * \author Bob Deblier <bob.deblier@telenet.be> 23 * \ingroup MP_m 24 */ 25 26 #ifndef _MPNUMBER_H 27 #define _MPNUMBER_H 28 29 #include "beecrypt/mp.h" 30 31 #ifdef __cplusplus 32 # include <iostream> 33 #endif 34 35 #ifdef __cplusplus 36 struct BEECRYPTAPI mpnumber 37 #else 38 struct _mpnumber 39 #endif 40 { 41 size_t size; 42 mpw* data; 43 44 #ifdef __cplusplus 45 static const mpnumber ZERO; 46 static const mpnumber ONE; 47 48 mpnumber(); 49 mpnumber(unsigned int); 50 mpnumber(size_t, const mpw*); 51 mpnumber(const mpnumber&); 52 ~mpnumber(); 53 54 const mpnumber& operator=(const mpnumber&); 55 56 void wipe(); 57 58 size_t bitlength() const; 59 #endif 60 }; 61 62 #ifndef __cplusplus 63 typedef struct _mpnumber mpnumber; 64 #else 65 BEECRYPTAPI 66 std::ostream& operator<<(std::ostream&, const mpnumber&); 67 #endif 68 69 #ifdef __cplusplus 70 extern "C" { 71 #endif 72 73 BEECRYPTAPI 74 void mpnzero(mpnumber*); 75 BEECRYPTAPI 76 void mpnsize(mpnumber*, size_t); 77 BEECRYPTAPI 78 void mpninit(mpnumber*, size_t, const mpw*); 79 BEECRYPTAPI 80 void mpnfree(mpnumber*); 81 BEECRYPTAPI 82 void mpncopy(mpnumber*, const mpnumber*); 83 BEECRYPTAPI 84 void mpnwipe(mpnumber*); 85 86 BEECRYPTAPI 87 void mpnset (mpnumber*, size_t, const mpw*); 88 BEECRYPTAPI 89 void mpnsetw (mpnumber*, mpw); 90 91 BEECRYPTAPI 92 int mpnsetbin(mpnumber*, const byte*, size_t); 93 BEECRYPTAPI 94 int mpnsethex(mpnumber*, const char*); 95 96 BEECRYPTAPI 97 int mpninv(mpnumber*, const mpnumber*, const mpnumber*); 98 99 /*!\brief Truncate the mpnumber to the specified number of (least significant) bits. 100 */ 101 BEECRYPTAPI 102 size_t mpntrbits(mpnumber*, size_t); 103 BEECRYPTAPI 104 size_t mpnbits(const mpnumber*); 105 106 #ifdef __cplusplus 107 } 108 #endif 109 110 #endif 111