open-license-manager
2014-08-11 ab3e91ded7f8fb69c244231e2d6fe80a92070c37
src/bootstrap/win/Main.cpp
@@ -1,13 +1,58 @@
#include <stdio.h>
#include "CryptoHelper.h"
#include <string>
#include <stdlib.h>
#include <iostream>
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");
   int random = rand() % 1000;
   fprintf(fp, "#define SHARED_RANDOM %d;\n", random);
   fprintf(fp, "#endif\n");
   fclose(fp);
}
void write_privkey_file(string private_fname, BYTE *privateKey, DWORD dwPrivateKeySize){
   FILE* fp = fopen(private_fname.c_str(), "w");
   fprintf(fp, "//file generated by bootstrap.cpp, do not edit.\n\n");
   fprintf(fp, "#ifndef PRIVATE_KEY_H_\n#define PRIVATE_KEY_H_\n");
   fprintf(fp, "static BYTE PRIVATE_KEY[] = {");
   for (int i = 0; i < dwPrivateKeySize; i++){
      if (i != 0){
         fprintf(fp, ",");
      }
      if (i % 15 == 0){
         fprintf(fp, "\n        ");
      }
      fprintf(fp, "%d", privateKey[i]);
   }
   fprintf(fp, "\n};\n\n");
   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;
   }
@@ -20,7 +65,11 @@
   if (FAILED(
         hr = cryptoHlpr.ExportPublicKey(&pbPublicKey, dwPublicKeySize))) {
// Call FormatMessage to display the error returned in hr.
      cerr << "error exporting pubkey" << endl;
      return;
   }
   else {
      write_pubkey_file(public_include, pbPublicKey, dwPublicKeySize);
   }
   // Print out the public key to console as a
   // hexadecimal string.
@@ -30,11 +79,17 @@
   }
   wprintf(L"\"\n");
   // Export out the private key blob.
   cryptoHlpr.ExportPrivateKey(&pbPrivateKey, dwPrivateKeySize);
   if (FAILED(cryptoHlpr.ExportPrivateKey(&pbPrivateKey, dwPrivateKeySize))){
      cerr << "Error exporting private key." << endl;
      return;
   }
   else{
      write_privkey_file(private_include, pbPrivateKey, dwPrivateKeySize);
   }
   // 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 +103,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;
}