# V5014. OWASP. Cryptographic function is deprecated. Its use can lead to security issues. Consider switching to an equivalent newer function.

The analyzer has detected a call to a deprecated cryptographic function. The use of this function can cause security issues.

Let's look at the following example:

    BOOL ImportKey(HCRYPTPROV hProv, LPBYTE pbKeyBlob, DWORD dwBlobLen)
    {
      HCRYPTKEY hPubKey;
      if (!CryptImportKey(hProv, pbKeyBlob, dwBlobLen, 0, 0, &hPubKey))
      {
        return FALSE;
      }
      if (!CryptDestroyKey(hPubKey))
      {
        return FALSE;
      }
      return TRUE;
    }

According to the Microsoft documentation, the 'CryptoImportKey' and 'CryptoDestroyKey' functions are deprecated. They should be replaced with secure analogs from Cryptography Next Generation ('BCryptoImportKey' and 'BCryptoDestroyKey'):

    BOOL ImportKey(BCRYPT_ALG_HANDLE  hAlgorithm,
                   BCRYPT_ALG_HANDLE  hImportKey,
                   BCRYPT_KEY_HANDLE* phKey,
                   PUCHAR             pbInput,
                   ULONG              cbInput,
                   ULONG              dwFlags)
    {
      if (!BCryptImportKey(
             hAlgorithm,
             hImportKey,
             BCRYPT_AES_WRAP_KEY_BLOB,
             phKey,
             NULL,
             0,
             pbInput,
             cbInput,
             dwFlags))
      {
        return FALSE;
      }

      if (!BCryptDestroyKey(phKey))
      {
        return FALSE;
      }
      return TRUE;
    }

This diagnostic rule applies to deprecated cryptographic functions of the Windows API, Linux Kernel Crypto API, and GnuPG Made Easy.

If you need to mark up unwanted functions yourself, use the function annotation mechanism and the V2016 diagnostic rule.

This diagnostic is classified as:

CWE-327 OWASP-6.2.2