📄 sadvapi.cpp
字号:
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
if( fRet ) {
*phHash = (HCRYPTHASH) pVNewHash;
return TRUE;
}
if (pVNewHash)
LocalFree(pVNewHash);
__try {
*phHash = 0;
} __except( EXCEPTION_EXECUTE_HANDLER ) {
; // gulp
}
return FALSE;
}
/*
- CryptHashData
-
* Purpose:
* Compute the cryptograghic hash on a stream of data
*
*
* Parameters:
* IN hHash - Handle to hash object
* IN pbData - Pointer to data to be hashed
* IN dwDataLen - Length of the data to be hashed
* IN dwFlags - Flags values
*
*
* Returns:
*/
BOOL
WINAPI SCryptHashData(IN HCRYPTHASH hHash,
IN CONST BYTE *pbData,
IN DWORD dwDataLen,
IN DWORD dwFlags)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPHashData(
pVTable->hProv,
pVHash->hHash,
pbData,
dwDataLen,
dwFlags
);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptHashSessionKey
-
* Purpose:
* Compute the cryptograghic hash on a key object
*
*
* Parameters:
* IN hHash - Handle to hash object
* IN hKey - Handle to a key object
* IN dwFlags - Flags values
*
* Returns:
* CRYPT_FAILED
* CRYPT_SUCCEED
*/
BOOL
WINAPI SCryptHashSessionKey(IN HCRYPTHASH hHash,
IN HCRYPTKEY hKey,
IN DWORD dwFlags)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
PVKeyStruc pVKey = (PVKeyStruc) hKey;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
if (pVKey->pVTable != pVTable)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPHashSessionKey(
pVTable->hProv,
pVHash->hHash,
pVKey->hKey,
dwFlags
);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptDestoyHash
-
* Purpose:
* Destory the hash object
*
*
* Parameters:
* IN hHash - Handle to hash object
*
* Returns:
*/
BOOL
WINAPI SCryptDestroyHash(IN HCRYPTHASH hHash)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPDestroyHash(pVTable->hProv, pVHash->hHash);
} __except(EXCEPTION_EXECUTE_HANDLER) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
LocalFree(pVHash);
return fRet;
}
/*
- CryptSignHashW
-
* Purpose:
* Create a digital signature from a hash
*
*
* Parameters:
* IN hHash - Handle to hash object
* IN dwKeySpec - Key pair that is used to sign with
* algorithm to be used
* IN sDescription - Description of data to be signed
* IN dwFlags - Flags values
* OUT pbSignture - Pointer to signature data
* OUT pdwSigLen - Pointer to the len of the signature data
*
* Returns:
*/
BOOL
WINAPI SCryptSignHashW(IN HCRYPTHASH hHash,
IN DWORD dwKeySpec,
IN LPCWSTR sDescription,
IN DWORD dwFlags,
OUT BYTE *pbSignature,
OUT DWORD *pdwSigLen)
{
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}
BOOL
WINAPI SCryptSignHashA(IN HCRYPTHASH hHash,
IN DWORD dwKeySpec,
IN LPCSTR sDescription,
IN DWORD dwFlags,
OUT BYTE *pbSignature,
OUT DWORD *pdwSigLen)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPSignHash(
pVTable->hProv,
pVHash->hHash,
dwKeySpec,
NULL,
dwFlags,
pbSignature,
pdwSigLen
);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptVerifySignatureW
-
* Purpose:
* Used to verify a signature against a hash object
*
*
* Parameters:
* IN hHash - Handle to hash object
* IN pbSignture - Pointer to signature data
* IN dwSigLen - Length of the signature data
* IN hPubKey - Handle to the public key for verifying
* the signature
* IN sDescription - String describing the signed data
* IN dwFlags - Flags values
*
* Returns:
*/
BOOL
WINAPI SCryptVerifySignatureW(IN HCRYPTHASH hHash,
IN CONST BYTE *pbSignature,
IN DWORD dwSigLen,
IN HCRYPTKEY hPubKey,
IN LPCWSTR sDescription,
IN DWORD dwFlags)
{
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}
BOOL
WINAPI SCryptVerifySignatureA(IN HCRYPTHASH hHash,
IN CONST BYTE *pbSignature,
IN DWORD dwSigLen,
IN HCRYPTKEY hPubKey,
IN LPCSTR sDescription,
IN DWORD dwFlags)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
PVKeyStruc pVPubKey = (PVKeyStruc) hPubKey;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
if (pVPubKey && pVPubKey->pVTable != pVTable)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPVerifySignature(
pVTable->hProv,
pVHash->hHash,
pbSignature,
dwSigLen,
(pVPubKey == NULL ? 0 : pVPubKey->hKey),
NULL,
dwFlags
);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptSetProvParam
-
* Purpose:
* Allows applications to customize various aspects of the
* operations of a provider
*
* Parameters:
* IN hProv - Handle to a provider
* IN dwParam - Parameter number
* IN pbData - Pointer to data
* IN dwFlags - Flags values
*
* Returns:
*/
BOOL
WINAPI SCryptSetProvParam(IN HCRYPTPROV hProv,
IN DWORD dwParam,
IN BYTE *pbData,
IN DWORD dwFlags)
{
PVTableStruc pVTable = (PVTableStruc) hProv;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPSetProvParam(pVTable->hProv, dwParam, pbData, dwFlags);
} __except(EXCEPTION_EXECUTE_HANDLER) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptGetProvParam
-
* Purpose:
* Allows applications to get various aspects of the
* operations of a provider
*
* Parameters:
* IN hProv - Handle to a proivder
* IN dwParam - Parameter number
* IN pbData - Pointer to data
* IN pdwDataLen - Length of parameter data
* IN dwFlags - Flags values
*
* Returns:
*/
BOOL
WINAPI SCryptGetProvParam(IN HCRYPTPROV hProv,
IN DWORD dwParam,
IN BYTE *pbData,
IN DWORD *pdwDataLen,
IN DWORD dwFlags)
{
PVTableStruc pVTable = (PVTableStruc) hProv;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPGetProvParam(
pVTable->hProv,
dwParam,
pbData,
pdwDataLen,
dwFlags
);
} __except(EXCEPTION_EXECUTE_HANDLER) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptSetHashParam
-
* Purpose:
* Allows applications to customize various aspects of the
* operations of a hash
*
* Parameters:
* IN hHash - Handle to a hash
* IN dwParam - Parameter number
* IN pbData - Pointer to data
* IN dwFlags - Flags values
*
* Returns:
*/
BOOL
WINAPI SCryptSetHashParam(IN HCRYPTHASH hHash,
IN DWORD dwParam,
IN BYTE *pbData,
IN DWORD dwFlags)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPSetHashParam(
pVTable->hProv,
pVHash->hHash,
dwParam,
pbData,
dwFlags
);
} __except (EXCEPTION_EXECUTE_HANDLER) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
/*
- CryptGetHashParam
-
* Purpose:
* Allows applications to get various aspects of the
* operations of a hash
*
* Parameters:
* IN hHash - Handle to a hash
* IN dwParam - Parameter number
* IN pbData - Pointer to data
* IN pdwDataLen - Length of parameter data
* IN dwFlags - Flags values
*
* Returns:
*/
BOOL
WINAPI SCryptGetHashParam(IN HCRYPTKEY hHash,
IN DWORD dwParam,
IN BYTE *pbData,
IN DWORD *pdwDataLen,
IN DWORD dwFlags)
{
PVHashStruc pVHash = (PVHashStruc) hHash;
PVTableStruc pVTable;
BOOL fCritSec = FALSE;
BOOL fRet = FALSE;
__try {
pVTable = pVHash->pVTable;
EnterProviderCritSec(pVTable);
fCritSec = TRUE;
fRet = CPGetHashParam(
pVTable->hProv,
pVHash->hHash,
dwParam,
pbData,
pdwDataLen,
dwFlags
);
} __except(EXCEPTION_EXECUTE_HANDLER) {
fRet = FALSE;
ASSERT( fRet );
}
if( fCritSec ) {
LeaveProviderCritSec(pVTable);
}
return fRet;
}
void __inline EnterProviderCritSec(IN PVTableStruc pVTable)
{
InterlockedIncrement(&pVTable->Inuse);
}
LONG __inline LeaveProviderCritSec(IN PVTableStruc pVTable)
{
__try {
return InterlockedDecrement(&pVTable->Inuse);
} __except (EXCEPTION_EXECUTE_HANDLER) {
return -1;
}
}
PVKeyStruc BuildVKey(IN PVTableStruc pVTable)
{
PVKeyStruc pVKey;
pVKey = (PVKeyStruc)LocalAlloc(LMEM_ZEROINIT, sizeof(VKeyStruc));
if( pVKey == NULL )
return NULL;
pVKey->pVTable = pVTable;
return pVKey;
}
PVHashStruc BuildVHash(IN PVTableStruc pVTable)
{
PVHashStruc pVHash;
pVHash = (PVHashStruc)LocalAlloc(LMEM_ZEROINIT, sizeof(VHashStruc));
if( pVHash == NULL )
return NULL;
pVHash->pVTable = pVTable;
return pVHash;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -