Thanks, Jeff. I'll be testing it and trying to use over bytes, not
archives, then let's se what we get. I report any success or failure.

Thanks a lot,
Douglas

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/

Reply via email to