From 425c196d0762424675120d92f9e4105d13af0f1a Mon Sep 17 00:00:00 2001
From: open-license-manager <rillf@maildrop.cc>
Date: 周三, 06 8月 2014 16:00:06 +0800
Subject: [PATCH] 

---
 src/bootstrap/win/Main.cpp |   52 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/bootstrap/win/Main.cpp b/src/bootstrap/win/Main.cpp
index 5e24ca7..26006c5 100644
--- a/src/bootstrap/win/Main.cpp
+++ b/src/bootstrap/win/Main.cpp
@@ -1,13 +1,36 @@
 #include <stdio.h>
 #include "CryptoHelper.h"
+#include <string>
 
-void main() {
+using namespace std;
+
+void write_pubkey_file(string public_fname, BYTE *pbPublicKey, DWORD dwPublicKeySize){
+	FILE* fp = fopen(public_fname.c_str(), "w");
+	fprintf(fp, "//file generated by bootstrap.cpp, do not edit.\n\n");
+	fprintf(fp, "#ifndef PUBLIC_KEY_H_\n#define PUBLIC_KEY_H_\n");
+	fprintf(fp, "static BYTE PUBLIC_KEY[] = {");
+	for (int i = 0; i < dwPublicKeySize; i++){
+		if (i != 0){
+			fprintf(fp, ",");
+		}
+		if (i % 15 == 0){
+			fprintf(fp, "\n        ");
+		}
+		fprintf(fp, "%d", pbPublicKey[i]);
+	}
+	fprintf(fp, "\n};\n\n");
+	fprintf(fp, "#define SHARED_RANDOM %d;\n", 12345);
+	fprintf(fp, "#endif\n");
+	fclose(fp);
+}
+
+void generatePk(string private_include, string public_include) {
 	CryptoHelper cryptoHlpr;
 	BYTE *pbPublicKey = NULL, *pbPrivateKey = NULL;
 	DWORD dwPublicKeySize = 0, dwPrivateKeySize = 0;
 	HRESULT hr = S_OK;
 	// Get the key container context.
-	if (FAILED(hr = cryptoHlpr.AcquireContext((L"TestContainer")))) {
+	if (FAILED(hr = cryptoHlpr.AcquireContext(_T("TestContainer")))) {
 // Call FormatMessage to display the error returned in hr.
 		return;
 	}
@@ -22,6 +45,9 @@
 // Call FormatMessage to display the error returned in hr.
 		return;
 	}
+	else {
+		write_pubkey_file(public_include, pbPublicKey, dwPublicKeySize);
+	}
 	// Print out the public key to console as a
 	// hexadecimal string.
 	wprintf(L"\n\nPublicKey = \"");
@@ -34,7 +60,7 @@
 	// Print out the private key to console as a
 	// hexadecimal string.
 	wprintf(L"\n\nPrivateKey = \"");
-	for (i = 0; i < dwPrivateKeySize; i++) {
+	for (DWORD i = 0; i < dwPrivateKeySize; i++) {
 		wprintf(L"%02x", pbPrivateKey[i]);
 	}
 	wprintf(L"\"\n");
@@ -48,3 +74,23 @@
 		delete[] pbPrivateKey;
 	return;
 }
+
+
+int main(int argc, char** argv) {
+
+	if (argc != 3) {
+		//print_usage();
+		exit(2);
+	}
+	else {
+		printf("********************************************\n");
+		printf("*  Bootstrap!!!                            *\n");
+		printf("********************************************\n");
+
+	}
+	string private_fname = string(argv[1]);
+	string public_fname(argv[2]);
+
+	generatePk(private_fname, public_fname);
+	return 0;
+}

--
Gitblit v1.9.1