VOID rsaTestKeysGenerate()

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;
}