Announcement

Collapse
No announcement yet.

Another API call failing....

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Another API call failing....

    CryptAcquireCertificatePrivateKey is failing even thought the cert context is valid.

    This entire crypto TLS thing is quite confusing!



    Code:
    #COMPILE EXE
    #DIM ALL
    
    #INCLUDE "win32api.inc"
    '------------------------------------------------------------------------------
    FUNCTION GetErrorMessage (BYVAL errorCode AS DWORD) AS STRING
    
    LOCAL errorBuffer AS STRINGZ * 1024
    LOCAL numChars AS DWORD
    
    numChars = FormatMessage(%FORMAT_MESSAGE_FROM_SYSTEM OR %FORMAT_MESSAGE_IGNORE_INSERTS, BYVAL %NULL, errorCode, %LANG_USER_DEFAULT, errorBuffer, SIZEOF(errorBuffer), BYVAL %NULL)
    
    IF numChars THEN
    FUNCTION = LEFT$(errorBuffer, numChars)
    ELSE
    FUNCTION = "Error " & STR$(errorCode)
    END IF
    
    END FUNCTION
    '------------------------------------------------------------------------------
    '------------------------------------------------------------------------------
    FUNCTION PBMAIN () AS LONG
    
    LOCAL result AS DWORD
    LOCAL errorMessage AS STRING * 1024
    LOCAL hFileStoreHandle AS DWORD
    LOCAL Cert_File_Name AS STRINGZ * 255
    LOCAL pCertContext AS CERT_CONTEXT PTR
    LOCAL pvFindPara AS STRINGZ *255
    LOCAL szName AS ASCIIZ * 256
    LOCAL hProv AS DWORD 'ptr
    LOCAL dwKeySpec AS DWORD
    LOCAL pfCallerFreeProv AS DWORD
    
    
    Cert_File_Name = "comm.crt"
    hFileStoreHandle = CertOpenStore(BYVAL %CERT_STORE_PROV_FILENAME_A, 0, 0, 0, Cert_File_Name)
    errorMessage = GetErrorMessage(GetLasterror)
    
    pCertContext = CertFindCertificateInStore(hFileStoreHandle, %X509_ASN_ENCODING OR %PKCS_7_ASN_ENCODING, 0, 0, pvFindPara, 0)
    
    'Next line is to prove we have the "asp-emu" Cert - you can look at the szName
    result = CertGetNameString(pCertContext, %CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, BYVAL %NULL, szName, SIZEOF(szName))
    
    result = CryptAcquireCertificatePrivateKey(pCertContext, %CRYPT_ACQUIRE_SILENT_FLAG OR %CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG, %NULL, hProv, dwKeySpec, pfCallerFreeProv)
    
    errorMessage = GetErrorMessage(GetLasterror)
    
    END FUNCTION​

  • #2

    Look at my answer to this question at
    CryptAcquireCertificatePrivateKey

    Comment


    • #3
      Thanks Pierre:
      I looked but didn't find solution.

      Comment

      Working...
      X