please dont rip this site Prev Next

CryptGetHashParam info  Overview  Group

The CryptGetHashParam function lets applications retrieve data that governs of the operations of a hash object. The actual hash value can also be retrieved using this function.



    DWORD dwParam,

    BYTE *pbData,

    DWORD *pdwDataLen,

    DWORD dwFlags



[in] A handle to the hash object on which to query parameters.
[in] The parameter number. See the “Remarks” section for a list of valid parameters.
[out] The parameter data buffer. The function copies the specified parameter data to this buffer. The form of this data will vary, depending on the parameter number.

This parameter can be NULL if all you are doing is determining the number of bytes required for the returned parameter data.

[in/out] The address of the parameter data length. Before calling this function, the caller should set this parameter to the length, in bytes, of the pbData buffer. Upon return, this address will contain the number of bytes of parameter data copied to the buffer.

If the buffer specified by pbData is not large enough to hold the data, the function returns the ERROR_MORE_DATA error code (through GetLastError), and stores the required buffer size, in bytes, in the variable pointed to by pdwDataLen.

If pbData is NULL, then no error is returned and the function stores the size of the data, in bytes, in the variable pointed to by pdwDataLen.

[in] The flag values. This parameter is reserved for future use and should always be zero.


The dwParam value can be set to one of the following hash parameter types:

The hash algorithm. The pbData buffer will contain a ALG_ID value indicating the algorithm that was specified when the hash object was created. See the CryptCreateHash function for a list of hash algorithms.
The hash value size. The pbData buffer will contain a DWORD value indicating the number of bytes in the hash value. This value will usually be 16 or 20, depending on the hash algorithm.

Applications should retrieve this parameter just before the HP_HASHVAL parameter so the correct amount of memory can be allocated.

The hash value. The pbData buffer will contain the hash value or message digest for the hash object specified by hHash. This value is generated based on the data supplied earlier to the hash object through the CryptHashData and CryptHashSessionKey functions.

Once this parameter has been retrieved, the hash object is marked “finished” and no more data can be added to it.

Note that some CSPs may add additional parameters that can be queried through this function.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function.

The following table lists the error codes most commonly returned by the GetLastError function. The error codes tat prefaced by “NTE” are generated by the particular CSP you are using.




One of the parameters specifies an invalid handle.


One of the parameters contains an invalid value. This is most often an illegal pointer.


The dwFlags parameter is nonzero.


The hash object specified by the hHash parameter is invalid.


The dwParam parameter specifies an unknown parameter number.


The CSP context that was specified when the hash was created cannot be found.


#include <wincrypt.h>



BYTE *pbHash = NULL;

DWORD dwHashLen;

#define BUFFER_SIZE 256


DWORD dwCount;


// Get handle to the default provider.

if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {

    printf("Error %x during CryptAcquireContext!\n", GetLastError());

    goto done;


// Create hash object.

if(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) {

    printf("Error %x during CryptBeginHash!\n", GetLastError());

    goto done;


// Fill buffer with test data.

for(i = 0 ; i < BUFFER_SIZE ; i++) {

    pbBuffer[i] = (BYTE)i;


// Hash in buffer.

if(!CryptHashData(hHash, pbBuffer, BUFFER_SIZE, 0)) {

    printf("Error %x during CryptHashData!\n", GetLastError());

    goto done;


// Read hash value size and allocate memory.

dwCount = sizeof(DWORD);

if(!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&dwHashLen, 

                      &dwCount, 0)) {

    printf("Error %x during reading hash size!\n", GetLastError());

    goto done;


if((pbHash = malloc(dwHashLen)) == NULL) {

    printf("Out of memory!\n");

    goto done;


// Read hash value.

if(!CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwHashLen, 0)) {

    printf("Error %x during reading hash value!\n", GetLastError());

    goto done;


// Print hash value.

for(i = 0 ; i < dwHashLen ; i++) {

    printf("%2.2x ",pbHash[i]);




// Free memory.

if(pbHash !=NULL) free(pbHash);

// Destroy hash object.

if(hHash) CryptDestroyHash(hHash);

// Release CSP handle.

if(hProv) CryptReleaseContext(hProv,0);


See Also

CryptCreateHash, CryptGetKeyParam, CryptHashData, CryptHashSessionKey, CryptSetHashParam 

See also:

file: /Techref/os/win/api/win32/func/src/f12_7.htm, 9KB, , updated: 2000/4/7 12:19, local time: 2022/5/21 14:05,

 ©2022 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF=""> CryptGetHashParam Release 2]</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.

Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

  PICList 2022 contributors:
o List host: MIT, Site host, Top posters @20220521
* Page Editors: James Newton, David Cary, and YOU!
* Roman Black of Black Robotics donates from sales of Linistep stepper controller kits.
* Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters.
* Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated!
* Contributors: Richard Seriani, Sr.

Welcome to!