21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}<br />

return TRUE;<br />

pDlgData->cbRequested);<br />

case WM_COMMAND:<br />

if (LOWORD(wParam) = = IDOK && HIWORD(wParam) = = BN_CLICKED) {<br />

EndDialog(hwndDlg, TRUE);<br />

return TRUE;<br />

}<br />

break;<br />

case WM_MOUSEMOVE:<br />

pDlgData = (SPC_DIALOGDATA *)GetWindowLong(hwndDlg, DWL_USER);<br />

if (pDlgData->dEntropy < pDlgData->cbRequested) {<br />

MousePos.ptMousePos.x = LOWORD(lParam);<br />

MousePos.ptMousePos.y = HIWORD(lParam);<br />

MousePos.dwTickCount = GetTickCount( );<br />

ClientToScreen(hwndDlg, &(MousePos.ptMousePos));<br />

CryptHashData(pDlgData->hHash, (BYTE *)&MousePos, sizeof(MousePos), 0);<br />

if ((MousePos.ptMousePos.x != pDlgData->ptLastPos.x ||<br />

MousePos.ptMousePos.y != pDlgData->ptLastPos.y) &&<br />

MousePos.dwTickCount - pDlgData->dwLastTime > 100) {<br />

pDlgData->ptLastPos = MousePos.ptMousePos;<br />

pDlgData->dwLastTime = MousePos.dwTickCount;<br />

pDlgData->dEntropy += SPC_ENTROPY_PER_SAMPLE;<br />

SendDlgItemMessage(hwndDlg, SPC_PROGRESS_BARID, PBM_SETPOS,<br />

(WPARAM)pDlgData->dEntropy, 0);<br />

if (pDlgData->dEntropy >= pDlgData->cbRequested) {<br />

EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE);<br />

SetFocus(GetDlgItem(hwndDlg, IDOK));<br />

MessageBeep(0xFFFFFFFF);<br />

}<br />

}<br />

}<br />

return TRUE;<br />

return FALSE;<br />

}<br />

BOOL SpcGatherMouseEntropy(HINSTANCE hInstance, HWND hWndParent,<br />

BYTE *pbOutput, DWORD cbOutput) {<br />

BOOL bResult = FALSE;<br />

BYTE *pbHashData = 0;<br />

DWORD cbHashData, dwByteCount = sizeof(DWORD);<br />

HCRYPTHASH hHash = 0;<br />

HCRYPTPROV hProvider = 0;<br />

SPC_DIALOGDATA DialogData;<br />

if (!CryptAcquireContext(&hProvider, 0, MS_DEF_PROV, PROV_RSA_FULL,<br />

CRYPT_VERIFYCONTEXT)) goto done;<br />

if (!CryptCreateHash(hProvider, CALG_SHA1, 0, 0, &hHash)) goto done;<br />

if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&cbHashData, &dwByteCount,<br />

0)) goto done;<br />

Gathering Entropy from Mouse Events on Windows | 641<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!