|
|
#undef UNICODE // ## Not Yet
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <windows.h>
#include <wincrypt.h>
#define NTAG_MULTIPHASE 0x80000000
#define DES_TEST 0x00000008
#define UTILITY_BUF_SIZE 1024
#define UTILITY_BUF_SIZE_2 1050
#define EXPORT_BUFFER_LEN 32768
#define MAXKEYLEN 128
HCRYPTPROV hMe; CHAR pszMyName[64]; OFSTRUCT ImageInfoBuf; HFILE hFile; BYTE buf[UTILITY_BUF_SIZE]; BYTE buf2[UTILITY_BUF_SIZE]; DWORD BLen, BLen2, i; HCRYPTKEY hKey = 0; HCRYPTKEY hKey2 = 0; HCRYPTKEY hMyPubKey; HCRYPTKEY hClientKey; WORD wRandomSize; DWORD dRandom; BYTE *pTmp; DWORD count; BYTE *bRanbuf; BYTE *bcryptbuf; DWORD i; BYTE pData[8]; BYTE pHashData1[50]; DWORD BHashLen1; BYTE pHashData2[50]; DWORD BHashLen2; BYTE pHashSignData1[MAXKEYLEN]; DWORD BHashSignLen1; BYTE pHashSignData2[MAXKEYLEN]; DWORD BHashSignLen2; HCRYPTHASH hHash = 0;
BOOL Logon(int cArg);
BOOL TEncrypt(HCRYPTKEY hTKey, HCRYPTHASH hTHash, BOOL FinalFlag, DWORD dwFlags, BYTE *Tbuf, DWORD *pBLen, DWORD pdwBufLen, int cArg, CHAR *szAlgid, CHAR *szmode); BOOL TDecrypt(HCRYPTKEY hTKey, HCRYPTHASH hTHash, BOOL FinalFlag, DWORD dwFlags, BYTE *Tbuf, DWORD *pBLen, int cArg, CHAR *szAlgid, CHAR *szmode);
BOOL TestRC2(int cArg, CHAR *bbuf, DWORD bsize);
BOOL TestRC4(int cArg, CHAR *bbuf, DWORD bsize);
#ifdef TEST_VERSION
BOOL TestDES(int cArg, CHAR *bbuf, DWORD bsize); #endif
BOOL TestHash(int cArg, CHAR *bbuf, DWORD bsize);
BOOL TestExchange(int cArg, CHAR *bbuf, DWORD bsize);
BOOL Hash(int cArg, CHAR *bbuf, DWORD bsize, BYTE *pHashOut, DWORD *pHashLenOut, BYTE *pSigData, DWORD *pdwSigLen, DWORD Algid);
int __cdecl main(int cArg, char *rgszArg[]) {
// Make sure keys don't exist to start
strcpy(pszMyName, "stress"); CryptAcquireContext(&hMe, pszMyName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
while (TRUE) {
// Logon to provider
if (Logon(cArg)) exit(0);
pTmp = (BYTE *) &wRandomSize;
while (1) { if (RCRYPT_FAILED(CryptGenRandom(hMe, 2, pTmp))) { if (cArg > 1) printf("GenRandom failed = %x\n", GetLastError()); else printf("FAIL\n"); return(TRUE); } if (wRandomSize != 0) break; }
dRandom = (DWORD) (wRandomSize + (wRandomSize % 8));
if ((bRanbuf = VirtualAlloc(0, dRandom, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE)) == 0) { if (cArg > 1) { printf("malloc failed = %x\n", GetLastError()); } else printf("malloc FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptGenRandom(hMe, dRandom, bRanbuf))) { if (cArg > 1) printf("GenRandom failed = %x\n", GetLastError()); else printf("FAIL\n"); return(TRUE); }
if ((bcryptbuf = VirtualAlloc(0, dRandom + 8, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE)) == 0) { if (cArg > 1) { printf("malloc failed = %x\n", GetLastError()); } else printf("malloc FAIL\n"); return(TRUE); }
if (cArg > 1) { printf("bytes generated %x\n", wRandomSize); }
memcpy(bcryptbuf, bRanbuf, dRandom);
if (TestRC2(cArg, bcryptbuf, dRandom)) exit(0);
if (TestRC4(cArg, bcryptbuf, dRandom)) exit(0);
#ifdef TEST_VERSION
if (TestDES(cArg, bcryptbuf, dRandom)) exit(0); #endif
if (TestHash(cArg, bcryptbuf, dRandom)) exit(0);
if (TestExchange(cArg, bcryptbuf, dRandom)) exit(0);
if (VirtualFree(bRanbuf, 0, MEM_RELEASE) != TRUE) { if (cArg > 1) printf("VirtulaFree failed: %x\n", GetLastError()); }
if (VirtualFree(bcryptbuf, 0, MEM_RELEASE) != TRUE) { if (cArg > 1) printf("VirtulaFree failed: %x\n", GetLastError()); }
if (cArg > 1) printf("CryptReleaseContext ");
if (RCRYPT_FAILED(CryptReleaseContext(hMe, 0))) { printf("FAIL Error = %x\n", GetLastError()); return(TRUE); } else if (cArg > 1) printf("SUCCEED\n");
if (cArg > 1) printf("CryptAcquireContext Delete ");
strcpy(pszMyName, "stress"); if (RCRYPT_FAILED(CryptAcquireContext(&hMe, pszMyName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET))) { if (cArg > 1) printf("FAIL Error = %x\n", GetLastError()); return(FALSE); } else { if (cArg > 1) { printf("SUCCEED\n"); printf("\n"); } }
}
exit(0);
}
BOOL TestExchange(int cArg, CHAR *bbuf, DWORD bsize) { BYTE ExpBuf[EXPORT_BUFFER_LEN]; BYTE SigBuf[UTILITY_BUF_SIZE]; DWORD ExpBufLen, SigBufLen; HCRYPTKEY hKey2; HCRYPTHASH hHash; PUBLICKEYSTRUC *pPubKey; RSAPUBKEY *pRSAKey; //
// Generate a RC4 key
//
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RC4, CRYPT_EXPORTABLE, &hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptGenKey FAIL\n"); return(TRUE); }
//
// Look for our own exchange key
//
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_KEYEXCHANGE, &hKey2))) { if (cArg > 1) printf("cguk failed = %x", GetLastError()); else printf("CryptGetUserKey FAIL\n"); return (TRUE); }
//
// Export it in PUBLICKEYBLOB form
//
if (cArg > 1) printf("CryptExportKey (PKB) ");
ExpBufLen = EXPORT_BUFFER_LEN; if (RCRYPT_FAILED(CryptExportKey(hKey2, 0, PUBLICKEYBLOB, 0, ExpBuf, &ExpBufLen))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptExportKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
CryptDestroyKey(hKey2);
pPubKey = (PUBLICKEYSTRUC *)ExpBuf; pRSAKey = (RSAPUBKEY *)(ExpBuf + sizeof(PUBLICKEYSTRUC));
if (pPubKey->aiKeyAlg != CALG_RSA_KEYX) { printf("Pub key fails check\n"); return(TRUE); } if (pRSAKey->pubexp != 0x10001) { printf("RSA key fails check\n"); return(TRUE); } //
// Import it in PUBLICKEYBLOB form
//
if (cArg > 1) printf("CryptImportKey (PKB) ");
if (RCRYPT_FAILED(CryptImportKey(hMe, ExpBuf, ExpBufLen, 0, 0, &hKey2))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptImportKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
//
// Encrypt and Decrypt
//
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "RC4", "")) { return(TRUE); }
//
// Export the key in SIMPLEBLOB form
//
if (cArg > 1) printf("CryptExportKey ");
ExpBufLen = EXPORT_BUFFER_LEN; if (RCRYPT_FAILED(CryptExportKey(hKey, hKey2, SIMPLEBLOB, 0, ExpBuf, &ExpBufLen))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptExportKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
//
// Nuke the old key
//
if (RCRYPT_FAILED(CryptDestroyKey(hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyKey(hKey2))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
//
// Sign the blob with the key exchange key
//
if (cArg > 1) printf("CryptCreateHash "); if (RCRYPT_FAILED(CryptCreateHash(hMe, CALG_SHA, 0, 0, &hHash))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptCreateHash FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (cArg > 1) printf("CryptHashData "); if (RCRYPT_FAILED(CryptHashData(hHash, ExpBuf, ExpBufLen, 0))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptHashData FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (cArg > 1) printf("CryptSignHash (KEYX) ");
SigBufLen = UTILITY_BUF_SIZE; if (RCRYPT_FAILED(CryptSignHash(hHash, AT_KEYEXCHANGE, NULL, 0, SigBuf, &SigBufLen))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptSignHash FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyHash(hHash))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyHash FAIL\n"); return(TRUE); }
if (cArg > 1) printf("CryptCreateHash "); if (RCRYPT_FAILED(CryptCreateHash(hMe, CALG_SHA, 0, 0, &hHash))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptCreateHash FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (cArg > 1) printf("CryptHashData "); if (RCRYPT_FAILED(CryptHashData(hHash, ExpBuf, ExpBufLen, 0))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptHashData FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_KEYEXCHANGE, &hKey2))) { if (cArg > 1) printf("cguk failed = %x", GetLastError()); else printf("CryptGetUserKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("CryptVerifySignature (KEYX) "); if (RCRYPT_FAILED(CryptVerifySignature(hHash, SigBuf, SigBufLen, hKey2, 0, 0))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptVerifySignature FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey2))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyHash(hHash))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_KEYEXCHANGE, &hKey2))) { if (cArg > 1) printf("cguk failed = %x", GetLastError()); else printf("CryptGetUserKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("CryptImportKey "); if (RCRYPT_FAILED(CryptImportKey(hMe, ExpBuf, ExpBufLen, 0, 0, &hKey))) { if (cArg > 1) printf("failed = %x", GetLastError()); else printf("CryptImportKey FAIL\n"); return (TRUE); }
if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey2))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "RC4", "")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
return(FALSE);
}
BOOL TestRC2(int cArg, CHAR *bbuf, DWORD bsize) {
//
// Generate a RC2 key
//
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RC2, 0, &hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptGenKey FAIL\n"); return(TRUE); }
//
// Encrypt and Decrypt using CBC default mode
//
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "RC2", "CBC")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "RC2", "CBC")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
//
// Change mode to ECB
//
*pData = CRYPT_MODE_ECB;
if (RCRYPT_FAILED(CryptSetKeyParam(hKey, KP_MODE, pData, 0))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptSetKeyParam FAIL\n"); return(TRUE); }
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "RC2", "ECB")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "RC2", "ECB")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
//
// Change mode to CFB
//
*pData = CRYPT_MODE_CFB;
if (RCRYPT_FAILED(CryptSetKeyParam(hKey, KP_MODE, pData, 0))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptSetKeyParam FAIL\n"); return(TRUE); }
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "RC2", "CFB")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "RC2", "CFB")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
return(FALSE);
}
BOOL TestRC4(int cArg, CHAR *bbuf, DWORD bsize) {
//
// Generate a RC4 key
//
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RC4, 0, &hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptGenKey FAIL\n"); return(TRUE); }
//
// Encrypt and Decrypt
//
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "RC4", "")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "RC4", "")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
return(FALSE);
}
#ifdef TEST_VERSION
BOOL TestDES(int cArg, CHAR *bbuf, DWORD bsize) {
//
// Generate a DES key
//
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_DES, 0, &hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptGenKey FAIL\n"); return(TRUE); }
//
// Encrypt and Decrypt using CBC default mode
//
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "DES", "CBC")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "DES", "CBC")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
//
// Change mode to ECB
//
*pData = CRYPT_MODE_ECB;
if (RCRYPT_FAILED(CryptSetKeyParam(hKey, KP_MODE, pData, 0))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptSetKeyParam FAIL\n"); return(TRUE); }
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "DES", "ECB")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "DES", "ECB")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
//
// Change mode to CFB
//
*pData = CRYPT_MODE_CFB;
if (RCRYPT_FAILED(CryptSetKeyParam(hKey, KP_MODE, pData, 0))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptSetKeyParam FAIL\n"); return(TRUE); }
BLen = bsize; BLen2 = bsize + 8; if (TEncrypt(hKey, 0, TRUE, 0, bbuf, &BLen, BLen2, cArg, "DES", "CFB")) { return(TRUE); }
if (TDecrypt(hKey, 0, TRUE, 0, bbuf, &BLen, cArg, "DES", "CFB")) { return(TRUE); }
if (cArg > 1) printf("Compare data "); if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
if (RCRYPT_FAILED(CryptDestroyKey(hKey))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
return(FALSE);
} #endif
BOOL TestHash(int cArg, CHAR *bbuf, DWORD bsize) {
if (cArg > 1) printf("Hash, compare with MD4 & MD5 ");
BHashLen1 = 50; BHashSignLen1 = MAXKEYLEN; if (Hash(cArg, bbuf, bsize, pHashData1, &BHashLen1, pHashSignData1, &BHashSignLen1, CALG_MD4)) { return(TRUE); }
if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("Data corrupted check 1 in Hash test\n"); return(TRUE); }
BHashLen2 = 50; BHashSignLen2 = MAXKEYLEN; if (Hash(cArg, bbuf, bsize, pHashData2, &BHashLen2, pHashSignData2, &BHashSignLen2, CALG_MD4)) { return(TRUE); }
if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("Data corrupted check 2 in Hash test\n"); return(TRUE); }
if (BHashLen1 != BHashLen2) { printf("Hash lengths don't match MD4 FAIL\n"); return(TRUE); }
if (memcmp(pHashData1, pHashData2, BHashLen1) != 0) { printf("Hash data doesn't compare MD4 FAIL\n"); return(TRUE); }
if (BHashSignLen1 != BHashSignLen2) { printf("Hash signatures lengths don't match MD4 FAIL\n"); return(TRUE); }
if (memcmp(pHashSignData1, pHashSignData2, BHashLen1) != 0) { printf("Hash signature data doesn't compare MD4 FAIL\n"); return(TRUE); }
BHashLen1 = 50; BHashSignLen1 = MAXKEYLEN; if (Hash(cArg, bbuf, bsize, pHashData1, &BHashLen1, pHashSignData1, &BHashSignLen1, CALG_MD5)) { return(TRUE); }
if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("Data corrupted check 3 in Hash test\n"); return(TRUE); }
BHashLen2 = 50; BHashSignLen2 = MAXKEYLEN; if (Hash(cArg, bbuf, bsize, pHashData2, &BHashLen2, pHashSignData2, &BHashSignLen2, CALG_MD5)) { return(TRUE); }
if (memcmp(bbuf, bRanbuf, bsize) != 0) { printf("Data corrupted check 4 in Hash test\n"); return(TRUE); }
if (BHashLen1 != BHashLen2) { printf("Hash lengths don't match MD5 FAIL\n"); return(TRUE); }
if (memcmp(pHashData1, pHashData2, BHashLen1) != 0) { printf("Hash data doesn't compare MD5 FAIL\n"); return(TRUE); }
if (BHashSignLen1 != BHashSignLen2) { printf("Hash signatures lengths don't match MD5 FAIL\n"); return(TRUE); }
if (memcmp(pHashSignData1, pHashSignData2, BHashSignLen1) != 0) { printf("Hash signature data doesn't compare MD5 FAIL\n"); return(TRUE); }
if (cArg > 1) printf("SUCCEED\n");
return(FALSE); }
BOOL Hash(int cArg, CHAR *bbuf, DWORD bsize, BYTE *pHashOut, DWORD *pHashLenOut, BYTE *pSigData, DWORD *pdwSigLen, DWORD Algid) {
if (RCRYPT_FAILED(CryptCreateHash(hMe, Algid, 0, 0, &hHash))) { if (cArg > 1) printf("CryptCreateHash failed = %x\n", GetLastError()); else printf("CryptCreateHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptHashData(hHash, bbuf, bsize, 0))) { if (cArg > 1) printf("CryptUpDataHash failed = %x\n", GetLastError()); else printf("CryptHashData FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptSignHash(hHash, AT_SIGNATURE, 0, 0, pSigData, pdwSigLen))) { if (cArg > 1) printf("CryptSignHash failed = %x\n", GetLastError()); else printf("CryptSignHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyHash(hHash))) { if (cArg > 1) printf("CryptDestroyHash failed = %x\n", GetLastError()); else printf("CryptDestroyHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptCreateHash(hMe, Algid, 0, 0, &hHash))) { if (cArg > 1) printf("CryptCreateHash failed = %x\n", GetLastError()); else printf("CryptCreateHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptHashData(hHash, bbuf, bsize, 0))) { if (cArg > 1) printf("CryptUpDataHash failed = %x\n", GetLastError()); else printf("CryptHashData FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_SIGNATURE, &hKey2))) { if (cArg > 1) printf("cguk failed = %x", GetLastError()); else printf("CryptGetUserKey FAIL\n"); return (TRUE); }
if (RCRYPT_FAILED(CryptVerifySignature(hHash, pSigData, *pdwSigLen, hKey2, 0, 0))) { if (cArg > 1) printf("CryptVerifySignature failed = %x\n", GetLastError()); else printf("CryptVerifySignature FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyKey(hKey2))) { if (cArg > 1) printf("CryptDestroyKey failed = %x\n", GetLastError()); else printf("CryptDestroyKey FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyHash(hHash))) { if (cArg > 1) printf("CryptDestroyHash failed = %x\n", GetLastError()); else printf("CryptDestroyHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptCreateHash(hMe, Algid, 0, 0, &hHash))) { if (cArg > 1) printf("CryptCreateHash failed = %x\n", GetLastError()); else printf("CryptCreateHash FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptHashData(hHash, bbuf, bsize, 0))) { if (cArg > 1) printf("CryptUpDataHash failed = %x\n", GetLastError()); else printf("CryptHashData FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptGetHashParam(hHash, HP_HASHVAL, pHashOut, pHashLenOut, 0))) { if (cArg > 1) printf("CryptGetHashParam failed = %x\n", GetLastError()); else printf("CryptGetHashParam FAIL\n"); return(TRUE); }
if (RCRYPT_FAILED(CryptDestroyHash(hHash))) { if (cArg > 1) printf("CryptDestroyHash failed = %x\n", GetLastError()); else printf("CryptDestroyHash FAIL\n"); return(TRUE); }
return(FALSE);
}
BOOL Logon(int cArg) {
strcpy(pszMyName, "stress");
if (cArg > 1) printf("CryptAcquireContext ");
if (RCRYPT_FAILED(CryptAcquireContext(&hMe, pszMyName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))) { if (cArg > 1) printf("FAIL Error = %x\n", GetLastError()); return(TRUE); } else { if (cArg > 1) printf("SUCCEED\n"); }
if (cArg > 1) printf("CryptGenKeys ");
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RSA_SIGN, CRYPT_EXPORTABLE, &hClientKey))) { if (cArg > 1) printf("FAIL Error = %x\n", GetLastError()); return(TRUE); }
CryptDestroyKey(hClientKey);
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &hClientKey))) { if (cArg > 1) printf("FAIL Error = %x\n", GetLastError()); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
CryptDestroyKey(hClientKey);
return(FALSE);
}
BOOL TEncrypt(HCRYPTKEY hTKey, HCRYPTHASH hTHash, BOOL FinalFlag, DWORD dwFlags, BYTE *Tbuf, DWORD *pBLen, DWORD pdwBufLen, int cArg, CHAR *szAlgid, CHAR *szmode) { if (cArg > 1) printf("CryptEncrypt %s-%s ", szAlgid, szmode); if (RCRYPT_FAILED(CryptEncrypt(hTKey, hTHash, FinalFlag, dwFlags, Tbuf, pBLen, pdwBufLen))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptEncrypt FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
return(FALSE);
}
BOOL TDecrypt(HCRYPTKEY hTKey, HCRYPTHASH hTHash, BOOL FinalFlag, DWORD dwFlags, BYTE *Tbuf, DWORD *pBLen, int cArg, CHAR *szAlgid, CHAR *szmode) {
if (cArg > 1) printf("CryptDecrypt %s-%s ", szAlgid, szmode); if (RCRYPT_FAILED(CryptDecrypt(hTKey, hTHash, FinalFlag, dwFlags, Tbuf, pBLen))) { if (cArg > 1) printf("failed = %x\n", GetLastError()); else printf("CryptDecrypt FAIL\n"); return(TRUE); } if (cArg > 1) printf("SUCCEED\n");
return(FALSE);
}
|