gcontini
2020-03-14 79b1b57045e86d9845e352c3f2aa0efbab6111a9
src/library/os/windows/signature_verifier.cpp
@@ -20,11 +20,12 @@
#include <public_key.h>
#include "../../base/logger.h"
#include "../../base/base64.h"
#include "../signature_verifier.h"
#include "../signature_verifier.hpp"
#define RSA_KEY_BITLEN 1024
namespace license {
namespace os {
using namespace std;
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
@@ -43,13 +44,6 @@
} PUBKEY_BLOB, *P_PUBKEY_BLOB;
#pragma pack(pop)
static BCRYPT_ALG_HANDLE openSignatureProvider() {
   DWORD status;
   BCRYPT_ALG_HANDLE hSignAlg = nullptr;
   return hSignAlg;
}
static BCRYPT_ALG_HANDLE openHashProvider() {
   DWORD status;
   BCRYPT_ALG_HANDLE hHashAlg = nullptr;
@@ -61,7 +55,6 @@
static DWORD hashData(BCRYPT_HASH_HANDLE& hHash, const string& data, PBYTE pbHash, DWORD hashDataLenght) {
   DWORD status;
   bool success = false;
   if (NT_SUCCESS(status = BCryptHashData(hHash, (BYTE*)data.c_str(), (ULONG)data.length(), 0))) {
      status = BCryptFinishHash(hHash, pbHash, hashDataLenght, 0);
   }
@@ -143,13 +136,12 @@
   DWORD status;
   FUNCTION_RETURN result = FUNC_RET_ERROR;
   PBYTE pbSignature = nullptr;
   DWORD dwSigLen;
   BYTE* sigBlob = nullptr;
   BCRYPT_ALG_HANDLE hSignAlg = nullptr;
   // FIXME!!
   sigBlob = unbase64(signatureBuffer.c_str(), (int)signatureBuffer.size(), (int*)&dwSigLen);
   vector<uint8_t> signatureBlob = unbase64(signatureBuffer);
   DWORD dwSigLen = (DWORD) signatureBlob.size();
   BYTE* sigBlob = &signatureBlob[0];
   if (NT_SUCCESS(status = BCryptOpenAlgorithmProvider(&hSignAlg, BCRYPT_RSA_ALGORITHM, NULL, 0))) {
      if ((result = readPublicKey(hSignAlg, &phKey)) == FUNC_RET_OK) {
         BCRYPT_PKCS1_PADDING_INFO paddingInfo;
@@ -167,7 +159,8 @@
      } else {
         LOG_DEBUG("Error reading public key");
      }
   } else {
   }
   else {
      result = FUNC_RET_NOT_AVAIL;
#ifdef _DEBUG
      formatError(status, "error opening RSA provider");
@@ -180,9 +173,9 @@
   if (hSignAlg != nullptr) {
      BCryptCloseAlgorithmProvider(hSignAlg, 0);
   }
   if (sigBlob) {
      free(sigBlob);
   }
   //if (sigBlob) {
   //   free(sigBlob);
   //}
   return result;
}
@@ -249,5 +242,5 @@
   }
   return result;
}
}  // namespace os
} /* namespace license */