GBXX/T ××××-2009
BYTE* pbID, ULONG ulIDLen, BYTE *pbSponsorID, ULONG ulSponsorIDLen, HANDLE *phKeyHandle)
描述: 使用ECC密钥协商算法,产生协商参数并计算会话密钥,输出临时ECC密钥对公钥,
并返回产生的密钥句柄。
参数: hContainer [IN] 容器句柄
ulAlgId [IN] 会话密钥算法标识 pSponsorECCPubKeyBlob [IN] 发起方的ECC公钥 pSponsorTempECCPubKeyBlob [IN] 发起方的临时ECC公钥 pTempECCPubKeyBlob [OUT] 响应方的临时ECC公钥 pbID [IN] 响应方的ID ulIDLen [IN] 响应方ID的长度,不大于32 pbSponsorID [IN] 发起方的ID ulSponsorIDLen [IN] 发起方ID的长度,不大于32 phKeyHandle [OUT] 返回的对称算法密钥句柄
返回值: SAR_OK表示成功,其它表示失败。 备注: 本函数由响应方调用。 7.6.21 ECC计算会话密钥 原型: ULONG DEVAPI SKF_GenerateKeyWithECC (HANDLE hAgreementHandle,
ECCPUBLICKEYBLOB* pECCPubKeyBlob, ECCPUBLICKEYBLOB* pTempECCPubKeyBlob,
BYTE* pbID, ULONG ulIDLen, HANDLE *phKeyHandle)
描述: 使用ECC密钥协商算法,使用自身协商句柄和响应方的协商参数计算会话密钥,同
时返回会话密钥句柄。
参数: hAgreementHandle [IN] 密钥协商句柄
pECCPubKeyBlob [IN] 外部输入的响应方ECC公钥 pTempECCPubKeyBlob [IN] 外部输入的响应方临时ECC公钥 pbID [IN] 响应方的ID ulIDLen [IN] 响应方ID的长度,不大于32 phKeyHandle [OUT] 返回的密钥句柄
返回值: SAR_OK表示成功,其它表示失败。 备注: 协商的发起方获得响应方的协商参数后调用本函数,计算会话密钥。 7.6.22 导出公钥
函数原型 ULONG DEVAPI SKF_ExportPublicKey (HCONTAINER hContainer, BOOL bSignFlag,
BYTE* pbBlob, ULONG* pulBlobLen)
功能描述 导出容器中的签名公钥或者加密公钥 参数 hContainer [IN] 密钥容器句柄
bSignFlag [IN] TRUE表示导出签名公钥,FALSE表示导出加密公钥 pbBlob [OUT] 指向RSA公钥结构(RSAPUBLICKEYBLOB)或者ECC公钥结构
(ECCPUBLICKEYBLOB),如果此参数为NULL时,由pulBlobLen返回pbBlob的长度
pulBlobLen [IN,OUT] 调用时表示pbBlob的长度,返回导出公钥结构的大小
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_MEMORYERR 发生内存错误; SAR_UNKNOWNERR 发生未知错误; SAR_INVALIDHANDLEERR 句柄无效;
35
GBXX/T ××××-2009
SAR_INVALIDPARAMERR 参数无效 ; SAR_TIMEOUTERR 超时。
7.6.23 导入会话密钥
函数原型 ULONG DEVAPI SKF_ImportSessionKey (HCONTAINER hContainer, ULONG
ulAlgId,BYTE *pbWrapedData,ULONG ulWrapedLen,HANDLE *phKey)
功能描述 导入会话密钥。 参数 hContainer [IN] 容器句柄
ulAlgId [IN] 密钥算法标识 pbWrapedData [IN] 要导入的会话密钥 ulWrapedLen [IN] 数据长度 phKey [OUT] 返回会话密钥句柄
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_MEMORYERR 发生内存错误; SAR_UNKNOWNERR 发生未知错误; SAR_INVALIDHANDLEERR 句柄无效; SAR_INVALIDPARAMERR 参数无效 。
备注 权限要求:用户权限。 7.6.24 明文导入会话密钥
函数原型 ULONG DEVAPI SKF_SetSymmKey (DEVHANDLE hDev, BYTE* pbKey, ULONG
ulAlgID, HANDLE* phKey)
功能描述 设置明文对称密钥,返回密钥句柄。 参数 hDev [IN] 设备句柄
pbKey [IN] 指向会话密钥值的缓冲区 ulAlgID [IN] 会话密钥算法标识 phKey [OUT] 返回会话密钥句柄
返回值 SAR_OK: 成功
其他: 错误
7.6.25 加密初始化
函数原型 ULONG DEVAPI SKF_EncryptInit (HANDLE hKey, BLOCKCIPHERPARAM EncryptParam) 功能描述 数据加密初始化。设置数据加密的算法相关参数。 参数 hKey [IN] 加密密钥句柄
EncryptParam [IN] 分组密码算法相关参数:初始向量、初始向量长度、填充方
法、反馈值的位长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效。
7.6.26 单组数据加密
函数原型 ULONG DEVAPI SKF_Encrypt(HANDLE hKey, BYTE * pbData, ULONG ulDataLen, BYTE
*pbEncryptedData, ULONG *pulEncryptedLen)
功能描述 单一分组数据的加密操作。用指定加密密钥对指定数据进行加密,被加密的数据只
包含一个分组,加密后的密文保存到指定的缓冲区中。SKF_Encrypt只对单个分组数据进行加密,在调用SKF_Encrypt之前,必须调用SKF_EncryptInit初始化加密操作。SKF_Encypt等价于先调用SKF_EncryptUpdate再调用SKF_EncryptFinal。 36
GBXX/T ××××-2009
参数
hKey
[IN] 加密密钥句柄
pbData [IN] 待加密数据 ulDataLen [IN] 待加密数据长度
pbEncryptedData [OUT] 加密后的数据缓冲区指针,可以为NULL,用于获得加密
后数据长度。
pulEncryptedLen [IN,OUT] 输入,给出的缓冲区大小;输出,返回加密后的数据
长度。
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效; SAR_BUFFER_TOO_SMALL 缓冲区不足。
7.6.27 多组数据加密
函数原型 ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey, BYTE * pbData, ULONG ulDataLen,
BYTE *pbEncryptedData, ULONG *pulEncryptedLen)
功能描述 多个分组数据的加密操作。用指定加密密钥对指定数据进行加密,被加密的数据包
含多个分组,加密后的密文保存到指定的缓冲区中。SKF_EncryptUpdate对多个分组数据进行加密,在调用SKF_EncryptUpdate之前,必须调用SKF_EncryptInit初始化加密操作;在调用SKF_EncryptUpdate之后,必须调用SKF_EncryptFinal结束加密操作。
参数 hKey [IN] 加密密钥句柄
pbData [IN] 待加密数据 ulDataLen [IN] 待加密数据长度
pbEncryptedData [OUT] 加密后的数据缓冲区指针 pulEncryptedLen [OUT] 返回加密后的数据长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效; SAR_BUFFER_TOO_SMALL 缓冲区不足。
7.6.28 结束加密
函数原型 ULONG DEVAPI SKF_EncryptFinal (HANDLE hKey, BYTE *pbEncryptedData, ULONG
*ulEncryptedDataLen )
功能描述 结束多个分组数据的加密,返回剩余加密结果。先调用SKF_EncryptInit初始化加密
操作,再调用SKF_EncryptUpdate对多个分组数据进行加密,最后调用SKF_EncryptFinal结束多个分组数据的加密。
参数 hKey [IN] 加密密钥句柄
pbEncyptedData [OUT] 加密结果的缓冲区 ulEncyptedDataLen [OUT] 加密结果的长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效。
37
GBXX/T ××××-2009 7.6.29 解密初始化
函数原型 ULONG DEVAPI SKF_DecryptInit (HANDLE hKey, BLOCKCIPHERPARAM DecryptParam) 功能描述 数据解密初始化,设置解密密钥相关参数。调用SKF_DecryptInit之后,可以调用
SKF_Decrypt对单个分组数据进行解密,也可以多次调用SKF_DecryptUpdate之后再调用SKF_DecryptFinal完成对多个分组数据的解密。
参数 hKey [IN] 解密密钥句柄 DecryptParam [IN] 分组密码算法相关参数:初始向量、初始向量长度、填充方法、
反馈值的位长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效。
7.6.30 单组数据解密
函数原型 ULONG DEVAPI SKF_Decrypt(HANDLE hKey, BYTE * pbEncryptedData, ULONG
ulEncryptedLen, BYTE * pbData, ULONG * pulDataLen)
功能描述 单个分组数据的解密操作。用指定解密密钥对指定数据进行解密,被解密的数据只
包含一个分组,解密后的明文保存到指定的缓冲区中。SKF_Decrypt只对单个分组数据进行解密,在调用SKF_Decrypt之前,必须调用SKF_DecryptInit初始化解密操作。SKF_Decypt等价于先调用SKF_DecryptUpdate再调用SKF_DecryptFinal。
参数 hKey [IN] 解密密钥句柄 pbEncryptedData [IN] 待解密数据
ulEncryptedLen [IN] 待解密数据长度 pbData [OUT] 指向解密后的数据缓冲区指针,当为NULL时可获得解密
后的数据长度。
pulDataLen [IN,OUT] 返回解密后的数据长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值:
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效。
7.6.31 多组数据解密
函数原型 ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey, BYTE * pbEncryptedData, ULONG
ulEncryptedLen, BYTE * pbData, ULONG * pulDataLen)
功能描述 多个分组数据的解密操作。用指定解密密钥对指定数据进行解密,被解密的数据包
含多个分组,解密后的明文保存到指定的缓冲区中。SKF_DecryptUpdate对多个分组数据进行解密,在调用SKF_DecryptUpdate之前,必须调用SKF_DecryptInit初始化解密操作;在调用SKF_DecryptUpdate之后,必须调用SKF_DecryptFinal结束解密操作。
参数 hKey [IN] 解密密钥句柄
pbEncryptedData [IN] 待解密数据 ulEncryptedLen [IN] 待解密数据长度 pbData [OUT] 指向解密后的数据缓冲区指针 pulDataLen [IN,OUT] 返回解密后的数据长度
返回值 SAR_OK表示成功,其它表示失败。
可能的错误值: 38
GBXX/T ××××-2009
SAR_UNKNOWNERR发生未知错误; SAR_MEMORYERR发生内存错误; SAR_INVALIDPARAMERR 参数无效; SAR_BUFFER_TOO_SMALL 缓冲区不足。
7.6.32 结束解密
函数原型 ULONG DEVAPI SKF_DecryptFinal (HANDLE hKey, BYTE *pbDecryptedData, ULONG
*pulDecryptedDataLen)
功能描述 结束多个分组数据的解密。 参数 hKey [IN] 解密密钥句柄
pbDecryptedData [OUT] 指向解密结果的缓冲区,如果此参数为NULL时,由
pulDecryptedDataLen返回解密结果的长度
pulDecryptedDataLen [IN,OUT] 输入时表示pbDecryptedData缓冲区的长度,返
回解密结果的长度
返回值 SAR_OK: 成功
其他: 错误
备注 先调用SKF_DecryptInit初始化解密操作,再调用SKF_DecryptUpdate对多个分组数
据进行解密,最后调用SKF_DecryptFinal结束多个分组数据的解密。
7.6.33 杂凑初始化
函数原型 ULONG DEVAPI SKF_DigestInit (DEVHANDLE hDev, ULONG ulAlgID, HANDLE *phHash) 功能描述 初始化消息杂凑计算操作,指定计算消息杂凑的算法。 参数 hDev [IN] 连接设备时返回的设备句柄
ulAlgID [IN] 杂凑算法标识 phHash [OUT] 杂凑对象句柄
返回值 SAR_OK: 成功
其他: 错误
备注 调用SKF_DigestInit之后,可以调用SKF_Digest对单一分组数据计算消息杂凑,
也可以多次调用SKF_DigestUpdate之后再调用SKF_DigestFinal对多个分组数据计算消息杂凑。
7.6.34 单组数据杂凑
函数原型 ULONG DEVAPI SKF_Digest (HANDLE hHash, BYTE *pbData, ULONG ulDataLen, BYTE
*pbHashData, ULONG *pulHashLen)
功能描述 对单一分组的消息进行杂凑计算。 参数 hHash [IN] 杂凑对象句柄
pbData [IN] 指向消息数据的缓冲区 ulDataLen [IN] 消息数据的长度
pbHashData [OUT] 杂凑数据缓冲区指针,当此参数为NULL时,由pulHashLen
返回杂凑结果的长度
pulHashLen [IN,OUT] 调用时表示pbHashData缓冲区的长度,返回杂凑结果的
长度
返回值 SAR_OK: 成功
其他: 错误
备注 调用SKF_Digest之前,必须调用SKF_DigestInit初始化杂凑计算操作。SKF_Digest
等价于多次调用SKF_DigestUpdate之后再调用SKF_DigestFinal。
7.6.35 多组数据杂凑
函数原型 ULONG DEVAPI SKF_DigestUpdate (HANDLE hHash, BYTE *pbData, ULONG
ulDataLen)
39