// Combine seed and salt using std::seed_seq.
// Entropy: Seed-low, Seed-high, Salt...
- size_t Size = Salt.size() + 2;
- uint32_t Data[Size];
- Data[0] = Seed;
- Data[1] = Seed >> 32;
- std::copy_n(Salt.begin(), Salt.size(), Data + 2);
+ std::vector<uint32_t> Data;
+ Data.reserve(2 + Salt.size()/4 + 1);
+ Data.push_back(Seed);
+ Data.push_back(Seed >> 32);
- std::seed_seq SeedSeq(Data, Data + Size);
+ uint32_t Pack = 0;
+ for (size_t I = 0; I < Salt.size(); ++I) {
+ Pack <<= 8;
+ Pack += Salt[I];
+
+ if (I%4 == 3)
+ Data.push_back(Pack);
+ }
+ Data.push_back(Pack);
+
+ std::seed_seq SeedSeq(Data.begin(), Data.end());
Generator.seed(SeedSeq);
}