Hi, all!
I am trying to make CryptoPP::SecretSharing  to work with in memory byte 
objects.
My current solution partly works. I can reconstruct the original secret 
except for the last byte or two, depends on the length of original secret.
Could you please suggest me how to fix this.

The code:
std::vector<Bytes> SecretShareBytes(const Bytes& secret, int threshold, int 
nShares)
{
CryptoPP::AutoSeededRandomPool rng;

CryptoPP::ChannelSwitch *channelSwitch;
CryptoPP::ArraySource source( secret.data(), secret.size(), false,new 
CryptoPP::SecretSharing( rng, threshold, nShares, channelSwitch = new 
CryptoPP::ChannelSwitch) );

        std::vector<Bytes> shares( nShares );
CryptoPP::vector_member_ptrs<CryptoPP::ArraySink> arraySinks( nShares );
std::string channel;
for (int i = 0; i < nShares; i++)
{
shares[i] = Bytes( secret.size() + sizeof(int) );
arraySinks[i].reset( new CryptoPP::ArraySink((byte*)shares[i].data(), 
shares[i].size()) );

channel = CryptoPP::WordToString<word32>(i);
                arraySinks[i]->Put( (byte *)channel.data(), 4 );
  channelSwitch->AddRoute( 
channel,*arraySinks[i],CryptoPP::BufferedTransformation::NULL_CHANNEL );
}

source.PumpAll();
return shares;
}


Bytes SecretRecoverBytes(std::vector<Bytes>& shares, int threshold)
{
Bytes bytes( shares[0].size() - sizeof( int ) );
CryptoPP::SecretRecovery recovery( threshold, new 
CryptoPP::ArraySink(bytes.data(), bytes.size()) );

CryptoPP::SecByteBlock channel(4);
for (int i = 0; i < threshold; i++)
{
CryptoPP::ArraySource arraySource(shares[i].data(), shares[i].size(), 
false);

arraySource.Pump(4);
arraySource.Get( channel, 4 );
arraySource.Attach( new CryptoPP::ChannelSwitch( recovery, std::string( 
(char *)channel.begin(), 4) ) );

arraySource.PumpAll();
}

return bytes;
}

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to