void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed) { assert(nShares<=1000); RandomPool rng; rng.IncorporateEntropy((byte *)seed, strlen(seed)); ChannelSwitch *channelSwitch; FileSource source(filename, false, new SecretSharing(rng, threshold, nShares, channelSwitch = new ChannelSwitch)); vector_member_ptrs<FileSink> fileSinks(nShares); string channel; for (int i=0; i<nShares; i++) { char extension[5] = ".000"; extension[1]='0'+byte(i/100); extension[2]='0'+byte((i/10)%10); extension[3]='0'+byte(i%10); fileSinks[i].reset(new FileSink((string(filename)+extension).c_str())); channel = WordToString<word32>(i); fileSinks[i]->Put((byte *)channel.data(), 4); channelSwitch->AddRoute(channel, *fileSinks[i], DEFAULT_CHANNEL); } source.PumpAll(); }
string RSAEncryptString(const char *pubFilename, const char *seed, const char *message) { FileSource pubFile(pubFilename, true, new HexDecoder); RSAES_OAEP_SHA_Encryptor pub(pubFile); RandomPool randPool; randPool.IncorporateEntropy((byte *)seed, strlen(seed)); string result; StringSource(message, true, new PK_EncryptorFilter(randPool, pub, new HexEncoder(new StringSink(result)))); return result; }
string RsaEncrypt(const string& pubkey, const char * data,int datalen) { StringSource pubSrc(pubkey,true); RSAES_OAEP_SHA_Encryptor pub(pubSrc); RandomPool randPool; string seed=GenRandomStr(16,32); randPool.IncorporateEntropy((byte *)seed.c_str(), seed.length()); string result; StringSource((const byte *)data,datalen, true, new PK_EncryptorFilter(randPool, pub,new StringSink(result))); return result; }
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed) { RandomPool randPool; randPool.IncorporateEntropy((byte *)seed, strlen(seed)); RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength); HexEncoder privFile(new FileSink(privFilename)); priv.DEREncode(privFile); privFile.MessageEnd(); RSAES_OAEP_SHA_Encryptor pub(priv); HexEncoder pubFile(new FileSink(pubFilename)); pub.DEREncode(pubFile); pubFile.MessageEnd(); }
void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed) { assert(nShares<=1000); RandomPool rng; rng.IncorporateEntropy((byte *)seed, strlen(seed)); ChannelSwitch *channelSwitch; string data = "ABCDABCD"; //FileSource source(filename, false, new SecretSharing(rng, threshold, nShares, channelSwitch = new ChannelSwitch)); ArraySource source((byte *)data.c_str(), data.length() + 4, false, new SecretSharing(rng, threshold, nShares, channelSwitch = new ChannelSwitch)); std::vector<string> buf(nShares); /*SecretSharing *sss = new SecretSharing(rng, threshold, nShares, channelSwitch = new ChannelSwitch); string pt = "abcd"; const unsigned char *c = (const unsigned char*) pt.c_str(); sss->Put(c, 5, true); sss->MessageEnd(-1, true); bool mesgs = sss->AnyMessages(); cout<<mesgs<<endl; lword max_ret = sss->MaxRetrievable(); cout<<max_ret<<endl; */ vector_member_ptrs<FileSink> fileSinks(nShares); vector_member_ptrs<ArraySink> sinks(nShares); string channel; for (int i=0; i<nShares; i++) { char extension[5] = ".000"; extension[1]='0'+byte(i/100); extension[2]='0'+byte((i/10)%10); extension[3]='0'+byte(i%10); fileSinks[i].reset(new FileSink((string(filename)+extension).c_str())); sinks[i].reset(new ArraySink((byte *) buf.at(i).c_str(), buf.at(i).length())); channel = WordToString<word32>(i); //cout<<channel.data()<<endl; //fileSinks[i]->Put((byte *)channel.data(), 4); sinks[i]->Put((byte *) channel.data(), 4); //channelSwitch->AddRoute(channel, *fileSinks[i], DEFAULT_CHANNEL); channelSwitch->AddRoute(channel, *sinks[i], DEFAULT_CHANNEL); } //istream *is = source.GetStream(); //cout<<is->rdbuf(); /*char cs = is->get(); while(is) { //cout<<cs; cs = is->get(); }*/ source.PumpAll(); cout<<buf.at(0)<<endl; }
//genrate random pubkey and privkey. bool GenKeyPair(string & pubKey, string& privKey,int keylen) { pubKey=""; privKey=""; RandomPool rp; string seed=GenRandomStr(32,64); rp.IncorporateEntropy((const byte *)seed.c_str(),seed.length()); RSAES_OAEP_SHA_Decryptor priv(rp,keylen); StringSink privkey(privKey); priv.DEREncode(privkey); privkey.MessageEnd(); RSAES_OAEP_SHA_Encryptor pub(priv); StringSink pubkey(pubKey); pub.DEREncode(pubkey); pubkey.MessageEnd(); return true; }