From bc33836f06e315005db152854ceaa199ed752820 Mon Sep 17 00:00:00 2001
From: open-license-manager <rillf@maildrop.cc>
Date: 周一, 13 10月 2014 06:24:56 +0800
Subject: [PATCH] linux build

---
 src/tools/base_lib/win/CryptoHelperWindows.cpp |  724 +++++++++++++++++++++++++------------------------------
 1 files changed, 326 insertions(+), 398 deletions(-)

diff --git a/src/tools/base_lib/win/CryptoHelperWindows.cpp b/src/tools/base_lib/win/CryptoHelperWindows.cpp
index e2d8cff..8669926 100644
--- a/src/tools/base_lib/win/CryptoHelperWindows.cpp
+++ b/src/tools/base_lib/win/CryptoHelperWindows.cpp
@@ -17,438 +17,366 @@
 
 namespace license {
 
-	CryptoHelperWindows::CryptoHelperWindows() {
-		m_hCryptProv = NULL;
-		m_hCryptKey = NULL;
-		if (!CryptAcquireContext(
-			&m_hCryptProv,
-			"license++sign",
-			MS_ENHANCED_PROV,
-			PROV_RSA_FULL,
-			0))
-		{
-			// If the key container cannot be opened, try creating a new
-			// container by specifying a container name and setting the 
-			// CRYPT_NEWKEYSET flag.
-			printf("Error in AcquireContext 0x%08x \n", GetLastError());
-			if (NTE_BAD_KEYSET == GetLastError())
-			{
-				if (!CryptAcquireContext(
-					&m_hCryptProv,
-					"license++sign",
-					MS_ENHANCED_PROV,
-					PROV_RSA_FULL,
-					CRYPT_NEWKEYSET))
-				{
-					printf("Error in AcquireContext 0x%08x \n",
-						GetLastError());
-					throw logic_error("");
-				}
-			}
-			else
-			{
-				printf(" Error in AcquireContext 0x%08x \n", GetLastError());
+CryptoHelperWindows::CryptoHelperWindows() {
+	m_hCryptProv = NULL;
+	m_hCryptKey = NULL;
+	if (!CryptAcquireContext(&m_hCryptProv, "license++sign", MS_ENHANCED_PROV,
+			PROV_RSA_FULL, 0)) {
+		// If the key container cannot be opened, try creating a new
+		// container by specifying a container name and setting the
+		// CRYPT_NEWKEYSET flag.
+		printf("Error in AcquireContext 0x%08x \n", GetLastError());
+		if (NTE_BAD_KEYSET == GetLastError()) {
+			if (!CryptAcquireContext(&m_hCryptProv, "license++sign",
+					MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)) {
+				printf("Error in AcquireContext 0x%08x \n", GetLastError());
 				throw logic_error("");
 			}
-		}
-
-	}
-
-
-	/**
-	This method calls the CryptGenKey function to get a handle to an
-
-	exportable key-pair. The key-pair is  generated with the RSA public-key
-	key exchange algorithm using Microsoft Enhanced Cryptographic Provider.
-	*/
-	void CryptoHelperWindows::generateKeyPair()
-	{
-		HRESULT       hr = S_OK;
-		DWORD         dwErrCode;
-		// If the handle to key container is NULL, fail.
-		if (m_hCryptProv == NULL)
-			throw logic_error("Cryptocontext not correctly initialized");
-		// Release a previously acquired handle to key-pair.
-		if (m_hCryptKey)
-			m_hCryptKey = NULL;
-		// Call the CryptGenKey method to get a handle
-		// to a new exportable key-pair.
-		if (!CryptGenKey(m_hCryptProv,
-			ENCRYPT_ALGORITHM,
-			KEYLENGTH | CRYPT_EXPORTABLE,
-			&m_hCryptKey))
-		{
-			dwErrCode = GetLastError();
-			throw logic_error(string("Error generating keys ") + to_string(dwErrCode));
+		} else {
+			printf(" Error in AcquireContext 0x%08x \n", GetLastError());
+			throw logic_error("");
 		}
 	}
 
-	/* This method calls the CryptExportKey function to get the Public key
-	 in a string suitable for C source inclusion.
-	 */
-	const string CryptoHelperWindows::exportPublicKey() const
-	{
-		HRESULT hr = S_OK;
-		DWORD    dwErrCode;
-		DWORD dwBlobLen;
-		BYTE *pbKeyBlob = NULL;
-		stringstream ss;
-		// If the handle to key container is NULL, fail.
-		if (m_hCryptKey == NULL)
-			throw logic_error("call GenerateKey first.");
-		// This call here determines the length of the key
-		// blob.
-		if (!CryptExportKey(
-			m_hCryptKey,
-			NULL,
-			PUBLICKEYBLOB,
-			0,
-			NULL,
-			&dwBlobLen))
-		{
-			dwErrCode = GetLastError();
-			throw logic_error(string("Error calculating size of public key ") + to_string(dwErrCode));
-		}
-		// Allocate memory for the pbKeyBlob.
-		if ((pbKeyBlob = new BYTE[dwBlobLen]) == NULL)
-		{
-			throw logic_error(string("Out of memory exporting public key "));
-		}
-		// Do the actual exporting into the key BLOB.
-		if (!CryptExportKey(
-			m_hCryptKey,
-			NULL,
-			PUBLICKEYBLOB,
-			0,
-			pbKeyBlob,
-			&dwBlobLen))
-		{
-			delete pbKeyBlob;
-			dwErrCode = GetLastError();
-			throw logic_error(string("Error exporting public key ") + to_string(dwErrCode));
-		}
-		else
-		{
-			ss << "\t";
-			for (unsigned int i = 0; i < dwBlobLen; i++){
-				if (i != 0){
-					ss << ", ";
-					if (i % 10 == 0){
-						ss << "\\" << endl << "\t";
-					}
+}
+
+/**
+ This method calls the CryptGenKey function to get a handle to an
+
+ exportable key-pair. The key-pair is  generated with the RSA public-key
+ key exchange algorithm using Microsoft Enhanced Cryptographic Provider.
+ */
+void CryptoHelperWindows::generateKeyPair() {
+	HRESULT hr = S_OK;
+	DWORD dwErrCode;
+	// If the handle to key container is NULL, fail.
+	if (m_hCryptProv == NULL)
+		throw logic_error("Cryptocontext not correctly initialized");
+	// Release a previously acquired handle to key-pair.
+	if (m_hCryptKey)
+		m_hCryptKey = NULL;
+	// Call the CryptGenKey method to get a handle
+	// to a new exportable key-pair.
+	if (!CryptGenKey(m_hCryptProv,
+	ENCRYPT_ALGORITHM,
+	KEYLENGTH | CRYPT_EXPORTABLE, &m_hCryptKey)) {
+		dwErrCode = GetLastError();
+		throw logic_error(
+				string("Error generating keys ") + to_string(dwErrCode));
+	}
+}
+
+/* This method calls the CryptExportKey function to get the Public key
+ in a string suitable for C source inclusion.
+ */
+const string CryptoHelperWindows::exportPublicKey() const {
+	HRESULT hr = S_OK;
+	DWORD dwErrCode;
+	DWORD dwBlobLen;
+	BYTE *pbKeyBlob = NULL;
+	stringstream ss;
+	// If the handle to key container is NULL, fail.
+	if (m_hCryptKey == NULL)
+		throw logic_error("call GenerateKey first.");
+	// This call here determines the length of the key
+	// blob.
+	if (!CryptExportKey(m_hCryptKey,
+	NULL, PUBLICKEYBLOB, 0,
+	NULL, &dwBlobLen)) {
+		dwErrCode = GetLastError();
+		throw logic_error(
+				string("Error calculating size of public key ")
+						+ to_string(dwErrCode));
+	}
+	// Allocate memory for the pbKeyBlob.
+	if ((pbKeyBlob = new BYTE[dwBlobLen]) == NULL) {
+		throw logic_error(string("Out of memory exporting public key "));
+	}
+	// Do the actual exporting into the key BLOB.
+	if (!CryptExportKey(m_hCryptKey,
+	NULL, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen)) {
+		delete pbKeyBlob;
+		dwErrCode = GetLastError();
+		throw logic_error(
+				string("Error exporting public key ") + to_string(dwErrCode));
+	} else {
+		ss << "\t";
+		for (unsigned int i = 0; i < dwBlobLen; i++) {
+			if (i != 0) {
+				ss << ", ";
+				if (i % 10 == 0) {
+					ss << "\\" << endl << "\t";
 				}
-				ss << to_string(pbKeyBlob[i]);
 			}
-			delete pbKeyBlob;
+			ss << to_string(pbKeyBlob[i]);
 		}
-		return ss.str();
+		delete pbKeyBlob;
+	}
+	return ss.str();
+}
+
+CryptoHelperWindows::~CryptoHelperWindows() {
+	if (m_hCryptProv) {
+		CryptReleaseContext(m_hCryptProv, 0);
+		m_hCryptProv = NULL;
+	}
+	if (m_hCryptKey)
+		m_hCryptKey = NULL;
+}
+
+//--------------------------------------------------------------------
+// This method calls the CryptExportKey function to get the Private key
+// in a byte array. The byte array is allocated on the heap and the size
+// of this is returned to the caller. The caller is responsible for releasing // this memory using a delete call.
+//--------------------------------------------------------------------
+const string CryptoHelperWindows::exportPrivateKey() const {
+	HRESULT hr = S_OK;
+	DWORD dwErrCode;
+	DWORD dwBlobLen;
+	BYTE *pbKeyBlob;
+	stringstream ss;
+	// If the handle to key container is NULL, fail.
+	if (m_hCryptKey == NULL)
+		throw logic_error(string("call GenerateKey first."));
+	// This call here determines the length of the key
+	// blob.
+	if (!CryptExportKey(m_hCryptKey,
+	NULL, PRIVATEKEYBLOB, 0,
+	NULL, &dwBlobLen)) {
+		dwErrCode = GetLastError();
+		throw logic_error(
+				string("Error calculating size of private key ")
+						+ to_string(dwErrCode));
+	}
+	// Allocate memory for the pbKeyBlob.
+	if ((pbKeyBlob = new BYTE[dwBlobLen]) == NULL) {
+		throw logic_error(string("Out of memory exporting private key "));
 	}
 
-	CryptoHelperWindows::~CryptoHelperWindows() {
-		if (m_hCryptProv)
-		{
-			CryptReleaseContext(m_hCryptProv, 0);
-			m_hCryptProv = NULL;
-		}
-		if (m_hCryptKey)
-			m_hCryptKey = NULL;
-	}
-
-	//--------------------------------------------------------------------
-	// This method calls the CryptExportKey function to get the Private key
-	// in a byte array. The byte array is allocated on the heap and the size
-	// of this is returned to the caller. The caller is responsible for releasing // this memory using a delete call.
-	//--------------------------------------------------------------------
-	const string CryptoHelperWindows::exportPrivateKey() const
-	{
-		HRESULT       hr = S_OK;
-		DWORD         dwErrCode;
-		DWORD dwBlobLen;
-		BYTE *pbKeyBlob;
-		stringstream ss;
-		// If the handle to key container is NULL, fail.
-		if (m_hCryptKey == NULL)
-			throw logic_error(string("call GenerateKey first."));
-		// This call here determines the length of the key
-		// blob.
-		if (!CryptExportKey(
-			m_hCryptKey,
-			NULL,
-			PRIVATEKEYBLOB,
-			0,
-			NULL,
-			&dwBlobLen))
-		{
-			dwErrCode = GetLastError();
-			throw logic_error(string("Error calculating size of private key ") + to_string(dwErrCode));
-		}
-		// Allocate memory for the pbKeyBlob.
-		if ((pbKeyBlob = new BYTE[dwBlobLen]) == NULL)
-		{
-			throw logic_error(string("Out of memory exporting private key "));
-		}
-
-		// Do the actual exporting into the key BLOB.
-		if (!CryptExportKey(
-			m_hCryptKey,
-			NULL,
-			PRIVATEKEYBLOB,
-			0,
-			pbKeyBlob,
-			&dwBlobLen))
-		{
-			delete pbKeyBlob;
-			dwErrCode = GetLastError();
-			throw logic_error(string("Error exporting private key ") + to_string(dwErrCode));
-		}
-		else
-		{
-			ss << "\t";
-			for (unsigned int i = 0; i < dwBlobLen; i++){
-				if (i != 0){
-					ss << ", ";
-					if (i % 15 == 0){
-						ss << "\\" << endl << "\t";
-					}
+	// Do the actual exporting into the key BLOB.
+	if (!CryptExportKey(m_hCryptKey,
+	NULL, PRIVATEKEYBLOB, 0, pbKeyBlob, &dwBlobLen)) {
+		delete pbKeyBlob;
+		dwErrCode = GetLastError();
+		throw logic_error(
+				string("Error exporting private key ") + to_string(dwErrCode));
+	} else {
+		ss << "\t";
+		for (unsigned int i = 0; i < dwBlobLen; i++) {
+			if (i != 0) {
+				ss << ", ";
+				if (i % 15 == 0) {
+					ss << "\\" << endl << "\t";
 				}
-				ss << to_string(pbKeyBlob[i]);
 			}
-			delete pbKeyBlob;
+			ss << to_string(pbKeyBlob[i]);
 		}
-		return ss.str();
+		delete pbKeyBlob;
+	}
+	return ss.str();
+}
+
+void CryptoHelperWindows::printHash(HCRYPTHASH* hHash) const {
+	BYTE *pbHash;
+	DWORD dwHashLen;
+	DWORD dwHashLenSize = sizeof(DWORD);
+	char* hashStr;
+	int i;
+
+	if (CryptGetHashParam(*hHash, HP_HASHSIZE, (BYTE *) &dwHashLen,
+			&dwHashLenSize, 0)) {
+		pbHash = (BYTE*) malloc(dwHashLen);
+		hashStr = (char*) malloc(dwHashLen * 2 + 1);
+		if (CryptGetHashParam(*hHash, HP_HASHVAL, pbHash, &dwHashLen, 0)) {
+			for (i = 0; i < dwHashLen; i++) {
+				sprintf(&hashStr[i * 2], "%02x", pbHash[i]);
+			}
+			printf("hash To be signed: %s \n", hashStr);
+		}
+		free(pbHash);
+		free(hashStr);
+	}
+}
+
+const string CryptoHelperWindows::signString(const void* privateKey,
+		size_t pklen, const string& license) const {
+	BYTE *pbBuffer = (BYTE *) license.c_str();
+	DWORD dwBufferLen = strlen((char *) pbBuffer);
+	HCRYPTHASH hHash;
+
+	HCRYPTKEY hKey;
+	BYTE *pbKeyBlob;
+	BYTE *pbSignature;
+	DWORD dwSigLen;
+	DWORD dwBlobLen;
+	DWORD strLen;
+
+	//-------------------------------------------------------------------
+	// Acquire a cryptographic provider context handle.
+
+	if (!CryptImportKey(m_hCryptProv, (const BYTE *) privateKey, pklen, 0, 0,
+			&hKey)) {
+		throw logic_error(
+				string("Error in importing the PrivateKey ")
+						+ to_string(GetLastError()));
 	}
 
-	void CryptoHelperWindows::printHash(HCRYPTHASH* hHash) const {
-		BYTE         *pbHash;
-		DWORD        dwHashLen;
-		DWORD        dwHashLenSize = sizeof(DWORD);
-		char* hashStr;
-		int i;
+	//-------------------------------------------------------------------
+	// Create the hash object.
 
-		if (CryptGetHashParam(*hHash, HP_HASHSIZE, (BYTE *)&dwHashLen, &dwHashLenSize, 0))
-		{
-			pbHash = (BYTE*)malloc(dwHashLen);
-			hashStr = (char*)malloc(dwHashLen * 2 + 1);
-			if (CryptGetHashParam(*hHash, HP_HASHVAL, pbHash, &dwHashLen, 0))	{
-				for (i = 0; i < dwHashLen; i++)	{
-					sprintf(&hashStr[i * 2], "%02x", pbHash[i]);
-				}
-				printf("hash To be signed: %s \n", hashStr);
-			}
-			free(pbHash);
-			free(hashStr);
-		}
-	}
-
-	const string CryptoHelperWindows::signString(const void* privateKey, size_t pklen,
-		const string& license) const{
-		BYTE *pbBuffer = (BYTE *)license.c_str();
-		DWORD dwBufferLen = strlen((char *)pbBuffer);
-		HCRYPTHASH hHash;
-
-		HCRYPTKEY hKey;
-		BYTE *pbKeyBlob;
-		BYTE *pbSignature;
-		DWORD dwSigLen;
-		DWORD dwBlobLen;
-		DWORD strLen;
-
-
-		//-------------------------------------------------------------------
-		// Acquire a cryptographic provider context handle.
-
-		if (!CryptImportKey(m_hCryptProv, (const BYTE *) privateKey, pklen, 0, 0, &hKey))
-		{
-			throw logic_error(string("Error in importing the PrivateKey ") + to_string(GetLastError()));
-		}
-
-		//-------------------------------------------------------------------
-		// Create the hash object.
-
-		if (CryptCreateHash(
-			m_hCryptProv,
-			CALG_SHA1,
-			0,
-			0,
-			&hHash))
-		{
-			printf("Hash object created. \n");
-		}
-		else
-		{
-			CryptDestroyKey(hKey);
-			throw logic_error(string("Error during CryptCreateHash."));
-		}
-		//-------------------------------------------------------------------
-		// Compute the cryptographic hash of the buffer.
-
-		if (CryptHashData(hHash,pbBuffer,dwBufferLen,	0))
-		{
-#ifdef _DEBUG
-			printf("Length of data to be hashed: %d \n", dwBufferLen);
-			printHash(&hHash);
-#endif 
-		}
-		else
-		{
-			throw logic_error(string("Error during CryptHashData."));
-		}
-		//-------------------------------------------------------------------
-		// Determine the size of the signature and allocate memory.
-
-		dwSigLen = 0;
-		if (CryptSignHash(
-			hHash,
-			AT_SIGNATURE,
-			NULL,
-			0,
-			NULL,
-			&dwSigLen))
-		{
-			printf("Signature length %d found.\n", dwSigLen);
-		}
-		else
-		{
-			throw logic_error(string("Error during CryptSignHash."));
-		}
-		//-------------------------------------------------------------------
-		// Allocate memory for the signature buffer.
-
-		if (pbSignature = (BYTE *)malloc(dwSigLen))
-		{
-			printf("Memory allocated for the signature.\n");
-		}
-		else
-		{
-			throw logic_error(string("Out of memory."));
-		}
-		//-------------------------------------------------------------------
-		// Sign the hash object.
-
-		if (CryptSignHash(
-			hHash,
-			AT_SIGNATURE,
-			NULL,
-			0,
-			pbSignature,
-			&dwSigLen))
-		{
-			printf("pbSignature is the signature length. %d\n", dwSigLen);
-		}
-		else
-		{
-			throw logic_error(string("Error during CryptSignHash."));
-		}
-		//-------------------------------------------------------------------
-		// Destroy the hash object.
-
-		
-		CryptDestroyHash(hHash);
+	if (CryptCreateHash(m_hCryptProv, CALG_SHA1, 0, 0, &hHash)) {
+		printf("Hash object created. \n");
+	} else {
 		CryptDestroyKey(hKey);
+		throw logic_error(string("Error during CryptCreateHash."));
+	}
+	//-------------------------------------------------------------------
+	// Compute the cryptographic hash of the buffer.
 
-		CryptBinaryToString(pbSignature,dwSigLen,
+	if (CryptHashData(hHash, pbBuffer, dwBufferLen, 0)) {
+#ifdef _DEBUG
+		printf("Length of data to be hashed: %d \n", dwBufferLen);
+		printHash(&hHash);
+#endif 
+	} else {
+		throw logic_error(string("Error during CryptHashData."));
+	}
+	//-------------------------------------------------------------------
+	// Determine the size of the signature and allocate memory.
+
+	dwSigLen = 0;
+	if (CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &dwSigLen)) {
+		printf("Signature length %d found.\n", dwSigLen);
+	} else {
+		throw logic_error(string("Error during CryptSignHash."));
+	}
+	//-------------------------------------------------------------------
+	// Allocate memory for the signature buffer.
+
+	if (pbSignature = (BYTE *) malloc(dwSigLen)) {
+		printf("Memory allocated for the signature.\n");
+	} else {
+		throw logic_error(string("Out of memory."));
+	}
+	//-------------------------------------------------------------------
+	// Sign the hash object.
+
+	if (CryptSignHash(hHash, AT_SIGNATURE,
+	NULL, 0, pbSignature, &dwSigLen)) {
+		printf("pbSignature is the signature length. %d\n", dwSigLen);
+	} else {
+		throw logic_error(string("Error during CryptSignHash."));
+	}
+	//-------------------------------------------------------------------
+	// Destroy the hash object.
+
+	CryptDestroyHash(hHash);
+	CryptDestroyKey(hKey);
+
+	CryptBinaryToString(pbSignature, dwSigLen,
 			CRYPT_STRING_BASE64 | CRYPT_STRING_NOCRLF, NULL, &strLen);
-		vector<char> buffer(strLen);
-		CryptBinaryToString(pbSignature, dwSigLen,
+	vector<char> buffer(strLen);
+	CryptBinaryToString(pbSignature, dwSigLen,
 			CRYPT_STRING_BASE64 | CRYPT_STRING_NOCRLF, &buffer[0], &strLen);
 
-		//-------------------------------------------------------------------
-		// In the second phase, the hash signature is verified.
-		// This would most often be done by a different user in a
-		// separate program. The hash, signature, and the PUBLICKEYBLOB
-		// would be read from a file, an email message, 
-		// or some other source.
+	//-------------------------------------------------------------------
+	// In the second phase, the hash signature is verified.
+	// This would most often be done by a different user in a
+	// separate program. The hash, signature, and the PUBLICKEYBLOB
+	// would be read from a file, an email message,
+	// or some other source.
 
-		// Here, the original pbBuffer, pbSignature, szDescription. 
-		// pbKeyBlob, and their lengths are used.
+	// Here, the original pbBuffer, pbSignature, szDescription.
+	// pbKeyBlob, and their lengths are used.
 
-		// The contents of the pbBuffer must be the same data 
-		// that was originally signed.
+	// The contents of the pbBuffer must be the same data
+	// that was originally signed.
 
-		//-------------------------------------------------------------------
-		// Get the public key of the user who created the digital signature 
-		// and import it into the CSP by using CryptImportKey. This returns
-		// a handle to the public key in hPubKey.
+	//-------------------------------------------------------------------
+	// Get the public key of the user who created the digital signature
+	// and import it into the CSP by using CryptImportKey. This returns
+	// a handle to the public key in hPubKey.
 
-		/*if (CryptImportKey(
-		hProv,
-		pbKeyBlob,
-		dwBlobLen,
-		0,
-		0,
-		&hPubKey))
-		{
-		printf("The key has been imported.\n");
-		}
-		else
-		{
-		MyHandleError("Public key import failed.");
-		}
-		//-------------------------------------------------------------------
-		// Create a new hash object.
+	/*if (CryptImportKey(
+	 hProv,
+	 pbKeyBlob,
+	 dwBlobLen,
+	 0,
+	 0,
+	 &hPubKey))
+	 {
+	 printf("The key has been imported.\n");
+	 }
+	 else
+	 {
+	 MyHandleError("Public key import failed.");
+	 }
+	 //-------------------------------------------------------------------
+	 // Create a new hash object.
 
-		if (CryptCreateHash(
-		hProv,
-		CALG_MD5,
-		0,
-		0,
-		&hHash))
-		{
-		printf("The hash object has been recreated. \n");
-		}
-		else
-		{
-		MyHandleError("Error during CryptCreateHash.");
-		}
-		//-------------------------------------------------------------------
-		// Compute the cryptographic hash of the buffer.
+	 if (CryptCreateHash(
+	 hProv,
+	 CALG_MD5,
+	 0,
+	 0,
+	 &hHash))
+	 {
+	 printf("The hash object has been recreated. \n");
+	 }
+	 else
+	 {
+	 MyHandleError("Error during CryptCreateHash.");
+	 }
+	 //-------------------------------------------------------------------
+	 // Compute the cryptographic hash of the buffer.
 
-		if (CryptHashData(
-		hHash,
-		pbBuffer,
-		dwBufferLen,
-		0))
-		{
-		printf("The new hash has been created.\n");
-		}
-		else
-		{
-		MyHandleError("Error during CryptHashData.");
-		}
-		//-------------------------------------------------------------------
-		// Validate the digital signature.
+	 if (CryptHashData(
+	 hHash,
+	 pbBuffer,
+	 dwBufferLen,
+	 0))
+	 {
+	 printf("The new hash has been created.\n");
+	 }
+	 else
+	 {
+	 MyHandleError("Error during CryptHashData.");
+	 }
+	 //-------------------------------------------------------------------
+	 // Validate the digital signature.
 
-		if (CryptVerifySignature(
-		hHash,
-		pbSignature,
-		dwSigLen,
-		hPubKey,
-		NULL,
-		0))
-		{
-		printf("The signature has been verified.\n");
-		}
-		else
-		{
-		printf("Signature not validated!\n");
-		}
-		//-------------------------------------------------------------------
-		// Free memory to be used to store signature.
+	 if (CryptVerifySignature(
+	 hHash,
+	 pbSignature,
+	 dwSigLen,
+	 hPubKey,
+	 NULL,
+	 0))
+	 {
+	 printf("The signature has been verified.\n");
+	 }
+	 else
+	 {
+	 printf("Signature not validated!\n");
+	 }
+	 //-------------------------------------------------------------------
+	 // Free memory to be used to store signature.
 
 
 
-		//-------------------------------------------------------------------
-		// Destroy the hash object.
+	 //-------------------------------------------------------------------
+	 // Destroy the hash object.
 
 
 
-		//-------------------------------------------------------------------
-		// Release the provider handle.
+	 //-------------------------------------------------------------------
+	 // Release the provider handle.
 
-		/*if (hProv)
-			CryptReleaseContext(hProv, 0);*/
-		if (pbSignature)
-			free(pbSignature);
-		return string(&buffer[0]);
+	 /*if (hProv)
+	 CryptReleaseContext(hProv, 0);*/
+	if (pbSignature) {
+		free(pbSignature);
 	}
+	return string(&buffer[0]);
+}
 } /* namespace license */

--
Gitblit v1.9.1