in unittest/lib/testRsaSign.cpp [220:303]
VOID rsaTestKeysGenerate()
{
// Fill up our array of key blobs with generated keys
const UINT32 desiredFixedKeySizes[] = {
(8192 << 16) + 1, // 1 key of 8192 bits
(4096 << 16) + 2, // 2 keys of 4096 bits
(3072 << 16) + 3,
(2048 << 16) + 5,
(1536 << 16) + 2,
(1024 << 16) + 5,
(768 << 16) + 2,
(512 << 16) + 2,
0,
};
UINT32 bitSize;
char * sep = " [test key gen: ";
UINT32 previousSize = 0;
if( g_nRsaTestKeyBlobs >= MAX_RSA_TESTKEYS )
{
goto cleanup;
}
for( int i = 0; desiredFixedKeySizes[i] != 0; i++ )
{
bitSize = desiredFixedKeySizes[i] >> 16;
int n = desiredFixedKeySizes[i] & 0xff;
while( n-- && g_nRsaTestKeyBlobs < MAX_RSA_TESTKEYS )
{
if( bitSize == previousSize )
{
iprint( "." );
} else {
iprint( "%s%d", sep, bitSize );
sep = ",";
previousSize = bitSize;
}
rsaTestKeysAddOne( bitSize );
}
}
// And we fill the rest with randomly-sized keys
// For performance we favor the smaller key sizes.
// The last 10% of the keys are reserved for funky keys
while( g_nRsaTestKeyBlobs < MAX_RSA_TESTKEYS - MAX_RSA_TESTKEYS / 10 )
{
UINT32 r = g_rng.uint32();
// We use prime moduli as they are almost independent
if( (r % 53) == 0 )
{
bitSize = (UINT32) g_rng.sizet( 4096, 8192 );
} else if ( (r % 11) == 0 ) {
bitSize = (UINT32) g_rng.sizet( 2048, 4096 );
} else if( (r % 3) == 0 ) {
bitSize = (UINT32) g_rng.sizet( 1024, 2048 );
} else {
bitSize = (UINT32) g_rng.sizet( 512, 2048 );
}
if( bitSize == previousSize )
{
iprint( "." );
} else {
iprint( "%s%d", sep, bitSize );
sep = ",";
previousSize = bitSize;
}
rsaTestKeysAddOne( bitSize );
}
while( g_nRsaTestKeyBlobs < MAX_RSA_TESTKEYS )
{
bitSize = (UINT32) g_rng.sizet( 3 * 512, 6 * 512 );
iprint( ",F%d", bitSize );
rsaTestKeysAddOneFunky( bitSize );
}
iprint( "]" );
cleanup:
return;
}