libcryptosec
SecretSharer.h
Go to the documentation of this file.
1 #ifndef SECRETSHARER_H_
2 #define SECRETSHARER_H_
3 
4 #include <vector>
5 #include <string>
6 #include <sstream>
7 #include <istream>
8 
9 #include "ByteArray.h"
10 #include "Random.h"
11 
14 
18 class SecretSharer {
19 public:
31  static void split(std::istream *data, int parts, int threshold, std::vector<std::ostream*> *secrets)
33 
45  static void join(std::vector<std::istream* > *secrets, unsigned int parts, unsigned int threshold, std::ostream *secret)
46  throw (SecretSharerException);
47 private:
48 
49  static unsigned char * int2char(unsigned int value);
50  static unsigned int char2int(unsigned char *data);
51  static char * bin2hex(unsigned char *data, int ndata);
52  static unsigned char * hex2bin(char *data, unsigned int *length);
53  static void setHeader(std::vector<std::ostream *>* secrets);
54  static unsigned int * getHeader(std::vector<std::istream *>* secrets);
55  static unsigned int * order_parts(unsigned int *seq, unsigned int parts, unsigned int threshold);
56 
57  static void rand_bytes(unsigned char *data, int num) throw (RandomException);
58  static unsigned int eval (unsigned int * poly, unsigned int n, unsigned int x, unsigned int mod)
59  throw (SecretSharerException);
60  static void split_poly (std::istream *data, int parts, int threshold, std::vector<std::ostream *>* secrets)
62  static unsigned int get_limited_16 (std::istream *data, unsigned int limit, struct splitContext * ctx)
63  throw (RandomException);
64  static void split_out (unsigned int d, std::vector<std::ostream *>* secrets, int parts, int threshold)
66  static void split_xor (std::istream *data, int parts, std::vector<std::ostream *>* secrets)
67  throw (RandomException);
68 
69  static void ExtBinEuclid(unsigned int * u, unsigned int * v, unsigned int * u1, unsigned int * u2, unsigned int * u3);
70  static unsigned int invert(unsigned int n, unsigned int modulus)
71  throw (SecretSharerException);
72 
73  static unsigned int interp (unsigned int i, unsigned int x [], unsigned int y [], unsigned int n, unsigned int mod)
74  throw (SecretSharerException);
75  static unsigned int get_assemble_16(std::vector<std::istream *>* secrets, unsigned int i, struct assembleContext * ctx, unsigned int limit);
76  static unsigned int get_assemble (std::vector<std::istream *>* secrets, unsigned int *seq, unsigned int threshold, unsigned int x [], struct assembleContext * ctx)
77  throw (SecretSharerException);
78  static void assemble_poly(std::vector<std::istream *>* secrets, unsigned int *seq, unsigned int threshold, std::ostream *secret)
79  throw (SecretSharerException);
80  static void assemble_xor(std::vector<std::istream *>* secrets, unsigned int parts, std::ostream *secret);
81 };
82 #endif /*SECRETSHARER_H_*/
Definition: RandomException.h:6
Definition: SecretSharer.cpp:274
Definition: SecretSharer.cpp:546
static void split(std::istream *data, int parts, int threshold, std::vector< std::ostream *> *secrets)
Definition: SecretSharer.cpp:439
Definition: SecretSharer.h:18
Definition: SecretSharerException.h:6
static void join(std::vector< std::istream * > *secrets, unsigned int parts, unsigned int threshold, std::ostream *secret)
Definition: SecretSharer.cpp:756