switched from PracticalSocket to libasio
[anytun.git] / src / mpi.h
blobd85be2f84f0c4bec6906e29eab1aa6b4f9ccb306
1 /*
2 * anytun
4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
32 #ifndef _MPI_H_
33 #define _MPI_H_
35 #include "datatypes.h"
36 #include "buffer.h"
38 #include <gcrypt.h>
41 /**
42 * This class is a wrapper for the libgcrypt multi precision integer library [1]
43 * [1] http://www.gnupg.org/documentation/manuals/gcrypt/MPI-library.html
47 class Mpi
49 public:
50 Mpi();
51 virtual ~Mpi();
52 Mpi(u_int8_t length);
53 Mpi(const Mpi &src);
54 Mpi(const u_int8_t * src, u_int32_t len);
56 void operator=(const Mpi &src);
57 void operator=(u_int32_t src);
58 Mpi operator+(const Mpi &b) const;
59 Mpi operator+(const u_int32_t &b) const;
60 Mpi operator*(const u_int32_t n) const;
61 Mpi operator/(const Mpi &b) const;
63 Mpi operator^(const Mpi &b) const;
65 Mpi mul2exp(u_int32_t e) const; // value * 2^e
67 /**
68 * returns a new[] u_int8_t* buffer with the MPI value in the
69 * GCRYMPI_FMT_STD (2-complement stored without a length header).<br>
70 * you have to delete it by hand with delete[]!
71 * @param buf_len size of the new buffer that is returned
72 * @return a byte buffer of size buf_len
74 u_int8_t *getNewBuf(size_t* written) const;
75 std::string getHexDump() const;
76 u_int32_t getLength() const;
78 protected:
79 gcry_mpi_t val_;
84 #endif