Fix the dwDataLen parameter of CryptImportKey(). master
authorFlorian Forster <octo@google.com>
Tue, 28 Jan 2014 21:10:30 +0000 (22:10 +0100)
committerFlorian Forster <octo@google.com>
Tue, 28 Jan 2014 21:12:43 +0000 (22:12 +0100)
According to the documentation (or rather, the example code) this parameter
should specify the size of the entire structure, including the key material.
sizeof(data) (4 or 8 bytes, depending on the architecture) is incorrect in any
case however.

create_hmac/create_hmac.c

index e966bca..e35c782 100644 (file)
@@ -1,5 +1,5 @@
 /**\r
- * Copyright (c) 2010 Florian Forster\r
+ * Copyright (c) 2010-2014 Florian Forster\r
  *\r
  * Permission is hereby granted, free of charge, to any person obtaining a copy\r
  * of this software and associated documentation files (the "Software"), to deal\r
@@ -75,10 +75,12 @@ static HCRYPTKEY create_hmac_key_exact (HCRYPTPROV hProv,
         * The "CRYPT_IPSEC_HMAC_KEY" is required to allow RC2 keys longer than\r
         * 16 byte. Again, this is documented on the "CryptImportKey" page as a\r
         * side note. */\r
-       status = CryptImportKey (hProv, (BYTE *) data, sizeof (data),\r
-               /* public key = */ 0,\r
-               /* flags = */ CRYPT_IPSEC_HMAC_KEY,\r
-               &ret_key);\r
+       status = CryptImportKey (hProv,\r
+                       /* pbData    = */ (void *) data,\r
+                       /* dwDataLen = */ data_size,\r
+                       /* hPubKey   = */ 0,\r
+                       /* dwFlags   = */ CRYPT_IPSEC_HMAC_KEY,\r
+                       /* phKey     = */ &ret_key);\r
        if (!status)\r
        {\r
                free (data);\r