open-license-manager
2014-04-16 af928739ea648f8f3a5d64771d236fe7498eaf26
src/library/os/linux/os-linux.cpp
@@ -13,7 +13,8 @@
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <iostream>
namespace license {
using namespace std;
@@ -63,21 +64,22 @@
}
bool OsFunctions::verifySignature(const char* stringToVerify,
      const char* signature) {
      const char* signatureB64) {
   EVP_MD_CTX *mdctx = NULL;
   char *pubKey = PUBLIC_KEY
   ;
   BIO* bio = BIO_new_mem_buf((void*) (pubKey), strlen(pubKey));
   RSA *rsa = PEM_read_bio_RSAPublicKey(bio, NULL,NULL,NULL);
   RSA *rsa = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL);
   BIO_free(bio);
   if (rsa == NULL) {
      cout<<"cippa!"<<endl;
      throw new logic_error("Error reading public key");
   }
   EVP_PKEY *pkey = EVP_PKEY_new();
   EVP_PKEY_assign_RSA(pkey, rsa);
   cout << "test:" <<EVP_PKEY_assign_RSA(pkey, rsa)<<endl;
   /*BIO* bo = BIO_new(BIO_s_mem());
    BIO_write(bo, pubKey, strlen(pubKey));
@@ -87,6 +89,18 @@
   //RSA* rsa = EVP_PKEY_get1_RSA( key );
   //RSA * pubKey = d2i_RSA_PUBKEY(NULL, <der encoded byte stream pointer>, <num bytes>);
   unsigned char buffer[129];
   BIO* b64 = BIO_new(BIO_f_base64());
   BIO* encoded_signature = BIO_new_mem_buf((void *) signatureB64,
         strlen(signatureB64));
   BIO* biosig = BIO_push(b64, encoded_signature);
   BIO_set_flags(biosig, BIO_FLAGS_BASE64_NO_NL); //Do not use newlines to flush buffer
   unsigned int len = BIO_read(biosig, (void *) buffer, strlen(signatureB64));
   //Can test here if len == decodeLen - if not, then return an error
   buffer[len] = 0;
   BIO_free_all(biosig);
   /* Create the Message Digest Context */
   if (!(mdctx = EVP_MD_CTX_create())) {
      throw new logic_error("Error creating context");
@@ -94,19 +108,35 @@
   if (1 != EVP_DigestVerifyInit(mdctx, NULL, EVP_sha256(), NULL, pkey)) {
      throw new logic_error("Error initializing digest");
   }
   int en=strlen(stringToVerify);
   if (1
         != EVP_DigestVerifyUpdate(mdctx, stringToVerify,
               strlen(stringToVerify))) {
               en)) {
      throw new logic_error("Error initializing digest");
   }
   if (1
         == EVP_DigestVerifyFinal(mdctx, (unsigned char *) signature,
               (unsigned long int) strlen(signature))) {
      return true;
   bool result;
   int res= EVP_DigestVerifyFinal(mdctx, buffer, len);
   if (1 == res) {
      result = true;
   } else {
      result = false;
   }
   if (pkey) {
      EVP_PKEY_free(pkey);
   }
   if (mdctx) {
      EVP_MD_CTX_destroy(mdctx);
   }
   return result;
}
      return false;
void OsFunctions::initialize() {
   static bool initialized = false;
   if (!initialized) {
      initialized = true;
      ERR_load_ERR_strings();
      ERR_load_crypto_strings();
      OpenSSL_add_all_algorithms();
   }
}
@@ -115,20 +145,20 @@
   //
   bool rc = true;
   /*__asm__ (
         "push   %edx\n"
         "push   %ecx\n"
         "push   %ebx\n"
         "mov    %eax, 'VMXh'\n"
         "mov    %ebx, 0\n" // any value but not the MAGIC VALUE
         "mov    %ecx, 10\n"// get VMWare version
         "mov    %edx, 'VX'\n"// port number
         "in     %eax, dx\n"// read port on return EAX returns the VERSION
         "cmp    %ebx, 'VMXh'\n"// is it a reply from VMWare?
         "setz   [rc] \n"// set return value
         "pop    %ebx \n"
         "pop    %ecx \n"
         "pop    %edx \n"
   );*/
    "push   %edx\n"
    "push   %ecx\n"
    "push   %ebx\n"
    "mov    %eax, 'VMXh'\n"
    "mov    %ebx, 0\n" // any value but not the MAGIC VALUE
    "mov    %ecx, 10\n"// get VMWare version
    "mov    %edx, 'VX'\n"// port number
    "in     %eax, dx\n"// read port on return EAX returns the VERSION
    "cmp    %ebx, 'VMXh'\n"// is it a reply from VMWare?
    "setz   [rc] \n"// set return value
    "pop    %ebx \n"
    "pop    %ecx \n"
    "pop    %edx \n"
    );*/
   return NONE;
}