Hi Douglas, Does it break when you insert your files (arguments) into Wei's driver program? Can you post your code? It would be a big help - claiming seg faults (so I assume Linux/Unix) does not tell the group much.
Also, have you run cryptest -v (I think it is -v) to validate? Jeff ----- Original Message ----- From: "Douglas de Oliveira Mendes" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Tuesday, October 18, 2005 3:56 PM Subject: Re: Example of using SecretSharing class > I'm getting segfault here: > > channelSwitch->AddRoute(channel, *fileSinks[i], > BufferedTransformation::NULL_CHANNEL); > > Have you tested the example? > > Jeffrey Walton escreveu: > > >Hi Douglas, > > > >Let's try and get you moving... I took the following from Crypto++ 5.2.1. > > > >Jeff > > > >************************************************ > >************************************************ > >>From Usage (actually, usage.dat): > > > >- To secret share a file (shares will be named file.000, file.001, etc) > > cryptest ss threshold number-of-shares file > > > >- To reconstruct a secret-shared file > > cryptest sr file share1 share2 [....] > > (number of shares given must be equal to threshold) > > > >- To information disperse a file (shares will be named file.000, file.001, etc) > > cryptest id threshold number-of-shares file > > > >- To reconstruct an information-dispersed file > > cryptest ir file share1 share2 [....] > > (number of shares given must be equal to threshold) > > > >************************************************ > >************************************************ > >And the functions. See test.cpp, lines 491-592 > > > >************************************************ > >void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed) > >{ > > assert(nShares<=1000); > > > > RandomPool rng; > > rng.Put((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], BufferedTransformation::NULL_CHANNEL); > > } > > > > source.PumpAll(); > >} > > > >************************************************ > >void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFilenames) > >{ > > assert(threshold<=1000); > > > > SecretRecovery recovery(threshold, new FileSink(outFilename)); > > > > vector_member_ptrs<FileSource> fileSources(threshold); > > SecByteBlock channel(4); > > int i; > > for (i=0; i<threshold; i++) > > { > > fileSources[i].reset(new FileSource(inFilenames[i], false)); > > fileSources[i]->Pump(4); > > fileSources[i]->Get(channel, 4); > > fileSources[i]->Attach(new ChannelSwitch(recovery, string((char *)channel.begin(), 4))); > > } > > > > while (fileSources[0]->Pump(256)) > > for (i=1; i<threshold; i++) > > fileSources[i]->Pump(256); > > > > for (i=0; i<threshold; i++) > > fileSources[i]->PumpAll(); > >} > > > >************************************************ > >void InformationDisperseFile(int threshold, int nShares, const char *filename) > >{ > > assert(nShares<=1000); > > > > ChannelSwitch *channelSwitch; > > FileSource source(filename, false, new InformationDispersal(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], BufferedTransformation::NULL_CHANNEL); > > } > > > > source.PumpAll(); > >} > > > >************************************************ > >void InformationRecoverFile(int threshold, const char *outFilename, char *const *inFilenames) > >{ > > assert(threshold<=1000); > > > > InformationRecovery recovery(threshold, new FileSink(outFilename)); > > > > vector_member_ptrs<FileSource> fileSources(threshold); > > SecByteBlock channel(4); > > int i; > > for (i=0; i<threshold; i++) > > { > > fileSources[i].reset(new FileSource(inFilenames[i], false)); > > fileSources[i]->Pump(4); > > fileSources[i]->Get(channel, 4); > > fileSources[i]->Attach(new ChannelSwitch(recovery, string((char *)channel.begin(), 4))); > > } > > > > while (fileSources[0]->Pump(256)) > > for (i=1; i<threshold; i++) > > fileSources[i]->Pump(256); > > > > for (i=0; i<threshold; i++) > > fileSources[i]->PumpAll(); > >} > > > > > > > > > > > > > > _______________________________________________________ > Promoção Yahoo! Acesso Grátis: a cada hora navegada você acumula cupons e concorre a mais de 500 prêmios! Participe! http://yahoo.fbiz.com.br/ >
