📄 htcspact.h
字号:
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
OUT BYTE *pbRetryNum
);
// 生成RSA公私钥对
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN BOOL fShowUI:是否显示提示的用户界面
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_GenRSA
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN BOOL fShowUI,
OUT BYTE *pbRetryNum
);
// 导入RSA公钥或私钥,在导入RSA私钥时,将同时导入RSA公钥
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN DWORD dwRSAKeyType:RSA公钥或私钥的类型,为HT_RSA_PUB_KEY或HT_RSA_PRI_KEY之一
// IN BYTE *pbRSAKey:RSA公钥或私钥,PKCS#1的DER编码形式
// IN DWORD dwRSAKeyLen:RSA公钥或私钥长度
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_ImportRSA
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN DWORD dwRSAKeyType,
IN BYTE *pbRSAKey,
IN DWORD dwRSAKeyLen,
OUT BYTE *pbRetryNum
);
// 导出RSA公钥
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// OUT BYTE *pbPubKey:返回RSA公钥,PKCS#1的DER编码形式
// IN OUT DWORD *pdwPubKeyLen:输入时,为pbPubKey缓冲区长度;输出时,为RSA公钥的DER长度
// 返回0成功,其它失败
DWORD _stdcall HC_ExportRSAPubKey
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
OUT BYTE *pbPubKey,
IN OUT DWORD *pdwPubKeyLen
);
// RSA公钥加密
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN DWORD dwPadMode:补码模式,为RSA_ZERO_PADDING、RSA_PKCS1_PADDING、RSA_NO_PADDING、RSA_PKCS1_OAEP_PADDING之一
// IN BYTE *pbInData:输入数据
// IN DWORD dwInDataLen:输入数据长度
// OUT BYTE *pbOutData:输出数据
// IN OUT DWORD *pdwOutDataLen:输入时,为pbOutData缓冲区长度;输出时,为输出数据长度
// 返回0成功,其它失败
DWORD _stdcall HC_RSAEncrypt
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN DWORD dwPadMode,
IN BYTE *pbInData,
IN DWORD dwInDataLen,
OUT BYTE *pbOutData,
IN OUT DWORD *pdwOutDataLen
);
// RSA私钥解密
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN DWORD dwPadMode:补码模式,为RSA_ZERO_PADDING、RSA_PKCS1_PADDING、RSA_NO_PADDING、RSA_PKCS1_OAEP_PADDING之一
// IN BYTE *pbInData:输入数据
// IN DWORD dwInDataLen:输入数据长度
// OUT BYTE *pbOutData:输出数据
// IN OUT DWORD *pdwOutDataLen:输入时,为pbOutData缓冲区长度;输出时,为输出数据长度
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_RSADecrypt
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN DWORD dwPadMode,
IN BYTE *pbInData,
IN DWORD dwInDataLen,
OUT BYTE *pbOutData,
IN OUT DWORD *pdwOutDataLen,
OUT BYTE *pbRetryNum
);
// RSA私钥签名
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN DWORD dwPadMode:补码模式,为RSA_ZERO_PADDING、RSA_PKCS1_PADDING、RSA_NO_PADDING之一
// IN BYTE *pbInData:输入数据
// IN DWORD dwInDataLen:输入数据长度
// OUT BYTE *pbOutData:输出数据
// IN OUT DWORD *pdwOutDataLen:输入时,为pbOutData缓冲区长度;输出时,为输出数据长度
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_RSASign
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN DWORD dwPadMode,
IN BYTE *pbInData,
IN DWORD dwInDataLen,
OUT BYTE *pbOutData,
IN OUT DWORD *pdwOutDataLen,
OUT BYTE *pbRetryNum
);
// RSA公钥验证签名
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN DWORD dwPadMode:补码模式,为RSA_ZERO_PADDING、RSA_PKCS1_PADDING、RSA_NO_PADDING之一
// IN BYTE *pbInData:输入数据
// IN DWORD dwInDataLen:输入数据长度
// OUT BYTE *pbOutData:输出数据
// IN OUT DWORD *pdwOutDataLen:输入时,为pbOutData缓冲区长度;输出时,为输出数据长度
// 返回0成功,其它失败
DWORD _stdcall HC_RSAVerify
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN DWORD dwPadMode,
IN BYTE *pbInData,
IN DWORD dwInDataLen,
OUT BYTE *pbOutData,
IN OUT DWORD *pdwOutDataLen
);
// 读证书
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// OUT BYTE *pbCert:返回证书数据,der编码,当pbCert==NULL时,pdwCertLen返回证书数据的长度
// IN OUT DWORD *pdwCertLen:输入时,为pbCert缓冲区的长度;输出时,为证书数据的长度
// 返回0成功,其它失败
DWORD _stdcall HC_ReadCert
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
OUT BYTE *pbCert,
IN OUT DWORD *pdwCertLen
);
// 写证书,写证书前必须已经生成RSA公私钥对,该函数不负责检查证书是否与公私钥对相匹配
// 通过密钥容器名及相关属性能够对应唯一的RSA公私钥对和证书
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字
// IN DWORD dwKeySpec:密钥属性,为AT_KEYEXCHANGE或AT_SIGNATURE之一
// IN BYTE *pbCert:证书数据,der编码
// IN DWORD dwCertLen:证书数据的长度
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_WriteCert
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN DWORD dwKeySpec,
IN BYTE *pbCert,
IN DWORD dwCertLen,
OUT BYTE *pbRetryNum
);
// 利用CSP导入PKCS#12证书,同时将导入公私钥对。在该函数中,如果有根证书,将忽略根证书
// 仅用于windows 2000及其以上版本
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szUserPin:HaiKey的用户口令
// IN LPCTSTR szContainerName:密钥容器名字,如果szContainerName为NULL或长度为0,则在函数内部生成GUID做为密钥容器的名字
// 密钥容器名字的长度最长为MAX_CON_NAME_LEN
// IN BYTE *pbP12Data:PKCS#12证书数据
// IN DWORD dwP12DataLen:PKCS#12证书数据的长度
// IN LPCTSTR szP12PWD:PKCS#12证书的保护口令
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_CSPImportP12Cert
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szUserPin,
IN LPCTSTR szContainerName,
IN BYTE *pbP12Data,
IN DWORD dwP12DataLen,
IN LPCTSTR szP12PWD,
OUT BYTE *pbRetryNum
);
// DES的ECB运算,支持DES、3DES、3DES_112
// IN CONST BYTE *pbKey:DES密钥
// IN DWORD dwKeyLen:DES密钥的长度,可以为8、16或24
// IN DWORD dwMode:加密或解密模式,为ENCRYPT_MODE(加密)或DECRYPT_MODE(解密)
// IN CONST BYTE *pbInData:输入数据
// IN DWORD dwDataLen:数据长度,必须为8的整数倍,输入数据长度与输出数据长度相等
// OUT BYTE *pbOutData:输出数据
// 返回0成功,其它失败
DWORD _stdcall HC_DESEcb
(
IN CONST BYTE *pbKey,
IN DWORD dwKeyLen,
IN DWORD dwMode,
IN CONST BYTE *pbInData,
IN DWORD dwDataLen,
OUT BYTE *pbOutData
);
// DES的CBC运算,支持DES、3DES、3DES_112,采用PKCS#5补码
// IN CONST BYTE *pbKey:DES密钥
// IN DWORD dwKeyLen:DES密钥的长度,可以为8、16或24
// IN BYTE bIV[8]:初始向量,长度必须为8字节
// IN DWORD dwMode:加密或解密模式,为ENCRYPT_MODE(加密)或DECRYPT_MODE(解密)
// IN CONST BYTE *pbInData:输入数据
// IN DWORD dwInDataLen:输入数据长度,解密时,必须是8的整数倍
// OUT BYTE *pbOutData:输出数据
// IN OUT DWORD *pdwOutDataLen:输入时,为pbOutData的缓冲区长度,必须足够大;输出时,为输出数据长度
// 加密时,输出数据长度可能比输入数据长度要长
// 解密时,输出数据长度可能比输入数据长度要短
// 返回0成功,其它失败
DWORD _stdcall HC_DESCbc
(
IN CONST BYTE *pbKey,
IN DWORD dwKeyLen,
IN BYTE bIV[8],
IN DWORD dwMode,
IN CONST BYTE *pbInData,
IN DWORD dwInDataLen,
OUT BYTE *pbOutData,
IN OUT DWORD *pdwOutDataLen
);
// SHA1
// IN CONST BYTE *pbData:输入数据
// IN DWORD dwDataLen:输入数据长度
// OUT BYTE bHash[20]:Hash值
// 返回0成功,其它失败
DWORD _stdcall HC_SHA1
(
IN CONST BYTE *pbData,
IN DWORD dwDataLen,
OUT BYTE bHash[20]
);
// MD5
// IN CONST BYTE *pbData:输入数据
// IN DWORD dwDataLen:输入数据长度
// OUT BYTE bHash[16]:Hash值
// 返回0成功,其它失败
DWORD _stdcall HC_MD5
(
IN CONST BYTE *pbData,
IN DWORD dwDataLen,
OUT BYTE bHash[16]
);
// 写密钥,密钥类型可以是DES、3DES_112(16字节)、SSF33密钥
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN LPCTSTR szSOPin:HaiKey的管理员口令
// IN DWORD dwKeyType:密钥类型,为HT_DES_KEY、HT_3DES_112_KEY、HT_SSF33_KEY之一
// IN DWORD dwUserRight:密钥的使用权限,可以为HT_SO_PIN、HT_USER_PIN或HT_NEEDNT_PIN之一
// IN BYTE *pbKey:密钥值
// IN DWORD dwKeyLen:密钥长度
// OUT BYTE *pbRetryNum:当HaiKey的用户口令错误时,返回用户口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_WriteKey
(
IN LPVOID hContext,
IN LPCTSTR szReader,
IN LPCTSTR szSOPin,
IN DWORD dwKeyType,
IN DWORD dwUserRight,
IN BYTE *pbKey,
IN DWORD dwKeyLen,
OUT BYTE *pbRetryNum
);
// DES硬件ECB加解密
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN DWORD dwPinType:读文件时要使用的口令类型,可以为HT_SO_PIN、HT_USER_PIN或HT_NEEDNT_PIN之一
// IN LPCTSTR szPin:读文件时需要的口令,当dwPinType为HT_NEEDNT_PIN时,忽略该参数
// IN DWORD dwMode:加密或解密模式,为ENCRYPT_MODE(加密)或DECRYPT_MODE(解密)
// IN CONST BYTE *pbInData:输入数据
// IN DWORD dwDataLen:数据长度,必须为8的整数倍,输入数据长度与输出数据长度相等
// OUT BYTE *pbOutData:输出数据
// OUT BYTE *pbRetryNum:当HaiKey的口令错误时,返回口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_HWDESEcb
(
IN LPVOID hContext,
IN LPCSTR szReader,
IN DWORD dwPinType,
IN LPCTSTR szPin,
IN DWORD dwMode,
IN BYTE *pbInData,
IN DWORD dwDataLen,
OUT BYTE *pbOutData,
OUT BYTE *pbRetryNum
);
// 3DES_112硬件ECB加解密
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN DWORD dwPinType:读文件时要使用的口令类型,可以为HT_SO_PIN、HT_USER_PIN或HT_NEEDNT_PIN之一
// IN LPCTSTR szPin:读文件时需要的口令,当dwPinType为HT_NEEDNT_PIN时,忽略该参数
// IN DWORD dwMode:加密或解密模式,为ENCRYPT_MODE(加密)或DECRYPT_MODE(解密)
// IN CONST BYTE *pbInData:输入数据
// IN DWORD dwDataLen:数据长度,必须为8的整数倍,输入数据长度与输出数据长度相等
// OUT BYTE *pbOutData:输出数据
// OUT BYTE *pbRetryNum:当HaiKey的口令错误时,返回口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_HW3DES112Ecb
(
IN LPVOID hContext,
IN LPCSTR szReader,
IN DWORD dwPinType,
IN LPCTSTR szPin,
IN DWORD dwMode,
IN BYTE *pbInData,
IN DWORD dwDataLen,
OUT BYTE *pbOutData,
OUT BYTE *pbRetryNum
);
// SSF33硬件ECB加解密
// IN LPVOID hContext:PC/SC上下文
// IN LPCTSTR szReader:读卡器名字
// IN DWORD dwPinType:读文件时要使用的口令类型,可以为HT_SO_PIN、HT_USER_PIN或HT_NEEDNT_PIN之一
// IN LPCTSTR szPin:读文件时需要的口令,当dwPinType为HT_NEEDNT_PIN时,忽略该参数
// IN DWORD dwMode:加密或解密模式,为ENCRYPT_MODE(加密)或DECRYPT_MODE(解密)
// IN CONST BYTE *pbInData:输入数据
// IN DWORD dwDataLen:数据长度,必须为16的整数倍,输入数据长度与输出数据长度相等
// OUT BYTE *pbOutData:输出数据
// OUT BYTE *pbRetryNum:当HaiKey的口令错误时,返回口令还能重试的次数
// 返回0成功,其它失败
DWORD _stdcall HC_SSF33Ecb
(
IN LPVOID hContext,
IN LPCSTR szReader,
IN DWORD dwPinType,
IN LPCTSTR szPin,
IN DWORD dwMode,
IN BYTE *pbInData,
IN DWORD dwDataLen,
OUT BYTE *pbOutData,
OUT BYTE *pbRetryNum
);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -