Do you have solid proof that this is the case? That nothing was tweaked to improve the speed of CPU generation? No one should be in the habit of taking someone's word for it.
Yes. Bitcoin 0.1.0 does the double hash here:
loop
{
BlockSHA256(&tmp.block, nBlocks0, &tmp.hash1);
BlockSHA256(&tmp.hash1, nBlocks1, &hash);
if (hash <= hashTarget)
And BlockSHA256 converts to the correct endianness, and calls the crypto++ routine
CryptoPP::SHA256::Transform.
As to Bitcoin 0.3.24 the double hash is:
for (;;)
{
// Crypto++ SHA-256
// Hash pdata using pmidstate as the starting state into
// preformatted buffer phash1, then hash phash1 into phash
nNonce++;
SHA256Transform(phash1, pdata, pmidstate);
SHA256Transform(phash, phash1, pSHA256InitState);
// Return the nonce if the hash has at least some zero bits,
// caller will check if it has enough to reach the target
if (((unsigned short*)phash)[14] == 0)
return nNonce;
And SHA256Transform merely calls memcpy to init the state, and calls the same crypto++ routine:
CryptoPP::SHA256::Transform. Because it is the same, I do not expect any significant performance difference between 0.1.0 and 0.3.24. I have a mirror of the 0.1.0 code if you want to try compiling it:
http://www.zorinaq.com/pub/