7.6 密碼服務
7.6 密碼服務
7.6.1 概述
密碼服務函數提供對稱算法運算、非對稱算法運算、密碼雜湊運算、密鑰管理、消息鑒別碼計算等功能。密碼服務系列函數如表21所示:
表21 密碼服務系列函數
函數名稱 功能
SKF_GenRandom 生成隨機數
SKF_GenExtRSAKey 生成外部RSA密鑰對
SKF_GenRSAKeyPair 生成RSA簽名密鑰對
SKF_ImportRSAKeyPair 導入RSA加密密鑰對
SKF_RSASignData RSA簽名
SKF_RSAVerify RSA驗簽
SKF_RSAExportSessionKey RSA生成并導出會話密鑰
SKF_ExtRSAPubKeyOperation RSA外來公鑰運算
SKF_ExtRSAPriKeyOperation RSA外來私鑰運算
SKF_GenECCKeyPair 生成ECC簽名密鑰對
SKF_ImportECCKeyPair 導入ECC加密密鑰對
SKF_ECCSignData ECC簽名
SKF_ECCVerify ECC驗簽
SKF_ECCExportSessionKey ECC生成并導出會話密鑰
SKF_ExtECCEncrypt ECC外來公鑰加密
SKF_ExtECCDecrypt ECC外來私鑰解密
SKF_ExtECCSign ECC外來私鑰簽名
SKF_ExtECCVerify ECC外來公鑰驗簽
SKF_GenerateAgreementDataWithECC ECC生成密鑰協商參數并輸出
SKF_GenerateKeyWithECC ECC計算會話密鑰
SKF_GenerateAgreementDataAndKeyWithECC ECC產生協商數據并計算會話密鑰
SKF_GenerateKeywithIKE 計算IKE工作密鑰
SKF_GenerateKeywithEPK_IKE 計算IKE工作密鑰并用外部公鑰加密導出
SKF_GenerateKeywithIPSEC 計算IPSEC會話密鑰
SKF_GenerateKeywithEPK_IPSEC 計算IPSEC會話密鑰并用外部公鑰加密導出
SKF_GenerateKeywithSSL 計算SSL工作密鑰
SKF_GenerateKeywithEPK_SSL 計算SSL工作密鑰并用外部公鑰加密導出
SKF_ExportPublicKey 導出公鑰
SKF_ImportSessionKey 導入會話密鑰
SKF_SetSymmKey 明文導入會話密鑰
SKF_EncryptInit 加密初始化
SKF_Encrypt 單組數據加密
SKF_EncryptUpdate 多組數據加密
SKF_EncryptFinal 結束加密
SKF_DecryptInit 解密初始化
SKF_Decrypt 單組數據解密
SKF_DecryptUpdate 多組數據解密
SKF_DecryptFinal 結束解密
SKF_DigestInit 密碼雜湊初始化
SKF_Digest 單組數據密碼雜湊
SKF_DigestUpdate 多組數據密碼雜湊
SKF_DigestFinal 結束密碼雜湊
SKF_MacInit 消息鑒別碼運算初始化
SKF_Mac 單組數據消息鑒別碼運算
SKF_MacUpdate 多組數據消息鑒別碼運算
SKF_MacFinal 結束消息鑒別碼運算
7.6.2 生成隨機數
原型 ULONG DEVAPI SKF_GenRandom (DEVHANDLE hDev, BYTE *pbRandom,
ULONG ulRandomLen)
功能描述 產生指定長度的隨機數。
參數 hDev [IN] 設備句柄。
pbRandom [OUT]返回的隨機數。
ulRandomLen [IN] 隨機數長度。
返回值 SAR_OK: 成功。
7.6.3 生成外部RSA密鑰對
原型 ULONG DEVAPI SKF_GenExtRSAKey (DEVHANDLE hDev, ULONG ulBitsLen, RSAPRIVATEKEYBLOB *pBlob)
功能描述 由設備生成RSA密鑰對并明文輸出。
參數 hDev [IN]設備句柄。
ulBitsLen [IN] 密鑰模長。
pBlob [OUT] 返回的私鑰數據結構。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.4 生成RSA簽名密鑰對
原型 ULONG DEVAPI SKF_GenRSAKeyPair (HCONTAINER hContainer, ULONG ulBitsLen
, RSAPUBLICKEYBLOB *pBlob)
功能描述 生成RSA簽名密鑰對并輸出簽名公鑰。
參數 hContainer [IN] 容器句柄。
ulBitsLen [IN] 密鑰模長。
pBlob [OUT] 返回的RSA公鑰數據結構。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.5 導入RSA加密密鑰對
原型 ULONG DEVAPI SKF_ImportRSAKeyPair (
HCONTAINER hContainer, ULONG ulSymAlgId,
BYTE *pbWrappedKey, ULONG ulWrappedKeyLen,
BYTE *pbEncryptedData, ULONG ulEncryptedDataLen)
功能描述 導入RSA加密公私鑰對。
參數 hContainer [IN] 容器句柄。
ulSymAlgId [IN] 對稱算法密鑰標識。
pbWrappedKey [IN] 使用該容器內簽名公鑰保護的對稱算法密鑰。
ulWrappedKeyLen [IN] 保護的對稱算法密鑰長度。
pbEncryptedData [IN] 對稱算法密鑰保護的RSA加密私鑰。私鑰的格式遵循PKCS #1 v2.1: RSA Cryptography Standard中的私鑰格式定義。
ulEncryptedDataLen [IN] 對稱算法密鑰保護的RSA加密公私鑰對長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.6 RSA簽名
原型 ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer, BYTE *pbData, ULONG ulDataLen, BYTE *pbSignature, ULONG *pulSignLen)
功能描述 使用hContainer指定容器的簽名私鑰,對指定數據pbData進行數字簽名。簽名后的結果存放到pbSignature緩沖區,設置pulSignLen為簽名的長度。
參數 hContainer [IN] 用來簽名的私鑰所在容器句柄。
pbData [IN] 被簽名的數據。
ulDataLen [IN] 簽名數據長度,應不大于RSA密鑰模長-11。
pbSignature [OUT] 存放簽名結果的緩沖區指針,如果值為NULL,用于取得簽名結果長度。
pulSignLen [IN,OUT] 輸入時表示簽名結果緩沖區大小,輸出時表示簽名結果長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.7 RSA驗簽
原型 ULONG DEVAPI SKF_RSAVerify (DEVHANDLE hDev, RSAPUBLICKEYBLOB* pRSAPubKeyBlob, BYTE *pbData, ULONG ulDataLen, BYTE *pbSignature, ULONG ulSignLen)
功能描述 驗證RSA簽名。用pRSAPubKeyBlob內的公鑰值對待驗簽數據進行驗簽。
參數 hDev [IN] 設備句柄。
pRSAPubKeyBlob [IN] RSA公鑰數據結構。
pbData [IN] 待驗證簽名的數據。
ulDataLen [IN] 數據長度,應不大于公鑰模長-11。
pbSignature [IN] 待驗證的簽名值。
ulSignLen [IN] 簽名值長度,必須為公鑰模長。
返回值 SAR_OK: 成功。
7.6.8 RSA生成并導出會話密鑰
原型 ULONG DEVAPI SKF_RSAExportSessionKey (HCONTAINER hContainer, ULONG ulAlgId, RSAPUBLICKEYBLOB *pPubKey, BYTE *pbData, ULONG *pulDataLen, HANDLE *phSessionKey)
功能描述 生成會話密鑰并用外部RSA公鑰加密輸出。
參數 hContainer [IN] 容器句柄。
ulAlgId [IN] 會話密鑰算法標識。
pPubKey [IN] 加密會話密鑰的RSA公鑰數據結構。
pbData [OUT] 導出的加密會話密鑰密文,按照PKCS#1v1.5要求封裝。
pulDataLen [IN,OUT] 輸入時表示會話密鑰密文數據緩沖區長度,輸出時表示會話密鑰密文的實際長度。
phSessionKey [OUT] 導出的密鑰句柄。
返回值 SAR_OK: 成功。
7.6.9 RSA外來公鑰運算
原型 ULONG DEVAPI SKF_ExtRSAPubKeyOperation (DEVHANDLE hDev, RSAPUBLICKEYBLOB* pRSAPubKeyBlob,BYTE* pbInput, ULONG ulInputLen, BYTE* pbOutput, ULONG* pulOutputLen)
功能描述 使用外部傳入的RSA公鑰對輸入數據做公鑰運算并輸出結果。
參數 hDev [IN] 設備句柄。
pRSAPubKeyBlob [IN] RSA公鑰數據結構。
pbInput [IN] 指向待運算的原始數據緩沖區。
ulInputLen [IN] 待運算原始數據的長度,必須為公鑰模長。
pbOutput [OUT] 指向RSA公鑰運算結果緩沖區,如果該參數為NULL,則由pulOutputLen返回運算結果的實際長度。
pulOutputLen [IN,OUT] 輸入時表示pbOutput緩沖區的長度,輸出時表示RSA公鑰運算結果的實際長度。
返回值 SAR_OK: 成功。
7.6.10 RSA外來私鑰運算
原型 ULONG DEVAPI SKF_ExtRSAPriKeyOperation (DEVHANDLE hDev, RSAPRIVATEKEYBLOB* pRSAPriKeyBlob,BYTE* pbInput, ULONG ulInputLen, BYTE* pbOutput, ULONG* pulOutputLen)
功能描述 直接使用外部傳入的RSA私鑰對輸入數據做私鑰運算并輸出結果。
參數 hDev [IN] 設備句柄。
pRSAPriKeyBlob [IN] RSA私鑰數據結構。
pbInput [IN] 指向待運算數據緩沖區。
ulInputLen [IN] 待運算數據的長度,必須為公鑰模長。
pbOutput [OUT] RSA私鑰運算結果,如果該參數為NULL,則由pulOutputLen返回運算結果的實際長度。
pulOutputLen [IN,OUT] 輸入時表示pbOutput緩沖區的長度,輸出時表示RSA私鑰運算結果的實際長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.11 生成ECC簽名密鑰對
原型 ULONG DEVAPI SKF_GenECCKeyPair (HCONTAINER hContainer, ULONG ulAlgId, ECCPUBLICKEYBLOB *pBlob)
功能描述 生成ECC簽名密鑰對并輸出簽名公鑰。
參數 hContainer [IN] 密鑰容器句柄。
ulAlgId [IN]算法標識,只支持SGD_SM2_1算法。
pBlob [OUT] 返回ECC公鑰數據結構。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.12 導入ECC加密密鑰對
原型 ULONG DEVAPI SKF_ImportECCKeyPair (
HCONTAINER hContainer, PENVELOPEDKEYBLOB pEnvelopedKeyBlob)
功能描述 導入ECC公私鑰對。
參數 hContainer [IN]密鑰容器句柄。
pEnvelopedKeyBlob [IN] 受保護的加密密鑰對。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.13 ECC簽名
原型 ULONG DEVAPI SKF_ECCSignData (HCONTAINER hContainer, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)
功能描述 ECC數字簽名。采用ECC算法和指定私鑰hKey,對指定數據pbData進行數字簽名。簽名后的結果存放到pSignature中。
參數 hContainer [IN] 密鑰容器句柄。
pbData [IN] 待簽名的數據。
ulDataLen [IN] 待簽名數據長度,必須小于密鑰模長。
pSignature [OUT] 簽名值。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
備注 權限要求:需要用戶權限。
7.6.14 ECC驗簽
原型 ULONG DEVAPI SKF_ECCVerify (DEVHANDLE hDev, ECCPUBLICKEYBLOB* pECCPubKeyBlob, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)
功能描述 用ECC公鑰對數據進行驗簽。
參數 hDev [IN] 設備句柄。
pECCPubKeyBlob [IN] ECC公鑰數據結構。
pbData [IN] 待驗證簽名的數據。
ulDataLen [IN] 數據長度。
pSignature [IN] 待驗證簽名值。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.15 ECC生成并導出會話密鑰
原型 ULONG DEVAPI SKF_ECCExportSessionKey (HCONTAINER hContainer, ULONG ulAlgId, ECCPUBLICKEYBLOB *pPubKey, PECCCIPHERBLOB pData, HANDLE *phSessionKey)
功能描述 生成會話密鑰并用外部公鑰加密導出。
參數 hContainer [IN] 容器句柄。
ulAlgId [IN] 會話密鑰算法標識。
pPubKey [IN] 外部輸入的公鑰結構。
pData [OUT]會話密鑰密文。
phSessionKey [OUT] 會話密鑰句柄。
返回值 SAR_OK: 成功。
7.6.16 ECC外來公鑰加密
原型 ULONG DEVAPI SKF_ExtECCEncrypt (DEVHANDLE hDev, ECCPUBLICKEYBLOB* pECCPubKeyBlob,BYTE* pbPlainText, ULONG ulPlainTextLen, PECCCIPHERBLOB pCipherText)
功能描述 使用外部傳入的ECC公鑰對輸入數據做加密運算并輸出結果。
參數 hDev [IN] 設備句柄。
pECCPubKeyBlob [IN] ECC公鑰數據結構。
pbPlainText [IN] 待加密的明文數據。
ulPlainTextLen [IN] 待加密明文數據的長度。
pCipherText [OUT] 密文數據。
返回值 SAR_OK: 成功。
7.6.17 ECC外來私鑰解密
原型 ULONG DEVAPI SKF_ExtECCDecrypt (DEVHANDLE hDev, ECCPRIVATEKEYBLOB* pECCPriKeyBlob, PECCCIPHERBLOB pCipherText, BYTE* pbPlainText, ULONG* pulPlainTextLen)
功能描述 使用外部傳入的ECC私鑰對輸入數據做解密運算并輸出結果。
參數 hDev [IN] 設備句柄。
pECCPriKeyBlob [IN] ECC私鑰數據結構。
pCipherText [IN] 待解密的密文數據。
pbPlainText [OUT] 返回明文數據,如果該參數為NULL,則由pulPlainTextLen返回明文數據的實際長度。
pulPlainTextLen [IN,OUT] 輸入時表示pbPlainText緩沖區的長度,輸出時表示明文數據的實際長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.18 ECC外來私鑰簽名
原型 ULONG DEVAPI SKF_ExtECCSign (DEVHANDLE hDev, ECCPRIVATEKEYBLOB* pECCPriKeyBlob, BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)
功能描述 使用外部傳入的ECC私鑰對輸入數據做簽名運算并輸出結果。
參數 hDev [IN] 設備句柄。
pECCPriKeyBlob [IN] ECC私鑰數據結構。
pbData [IN] 待簽名數據。
ulDataLen [IN] 待簽名數據的長度。
pSignature [OUT]簽名值。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
備注: 輸入數據為待簽數據的雜湊值。當使用SM2算法時,該輸入數據為待簽數據經過SM2簽名預處理的結果,預處理過程遵循GB/T AAAA。
7.6.19 ECC外來公鑰驗簽
原型 ULONG DEVAPI SKF_ExtECCVerify (DEVHANDLE hDev, ECCPUBLICKEYBLOB* pECCPubKeyBlob,BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)
功能描述 外部使用傳入的ECC公鑰做簽名驗證。
參數 hDev [IN] 設備句柄。
pECCPubKeyBlob [IN] ECC公鑰數據結構。
pbData [IN] 待驗證數據。
ulDataLen [IN] 待驗證數據的長度。
pSignature [IN] 簽名值。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.20 ECC生成密鑰協商參數并輸出
原型 ULONG DEVAPI SKF_GenerateAgreementDataWithECC (HCONTAINER hContainer, ULONG ulAlgId,ECCPUBLICKEYBLOB* pTempECCPubKeyBlob,BYTE* pbID, ULONG ulIDLen,HANDLE *phAgreementHandle)
功能描述 使用ECC密鑰協商算法,為計算會話密鑰而產生協商參數,返回臨時ECC密鑰對的公鑰及協商句柄。
參數 hContainer [IN] 容器句柄。
ulAlgId [IN] 會話密鑰算法標識。
pTempECCPubKeyBlob [OUT] 發起方臨時ECC公鑰。
pbID [IN] 發起方的ID。
ulIDLen [IN] 發起方ID的長度,不大于32。
phAgreementHandle [OUT] 返回的密鑰協商句柄。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.21 ECC產生協商數據并計算會話密鑰
原型: ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
HANDLE hContainer, ULONG ulAlgId,
ECCPUBLICKEYBLOB* pSponsorECCPubKeyBlob,
ECCPUBLICKEYBLOB* pSponsorTempECCPubKeyBlob,
ECCPUBLICKEYBLOB* pTempECCPubKeyBlob,
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.22 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.23 計算IKE工作密鑰
原型: int SKF_GenerateKeywithIKE (
HANDLE hSessionHandle,
BYTE *pucSponsorNonce,
UINT uiSponsorNonceLength,
BYTE *pucResponseNonce,
UINT uiResponseNonceLength,
BYTE *pucSponsorCookie,
UINT uiSponsorCookieLength,
BYTE *pucResponseCookie,
UINT uiResponseCookieLength,
UINT uiPrfAlgID,
UINT uiKeyBitsD,
HANDLE phKeyHandleD,
UINT uiKeyBitsA,
HANDLE phKeyHandleA,
UINT uiKeyBitsE,
功能描述: 使用IKE一階段(主模式)交換得到的密鑰計算參數計算IKE工作密鑰,同時返回工作密鑰句柄。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucSponsorNonce[in] 發起方nonce載荷主體
uiSponsorNonceLength[in] 發起方nonce載荷主體長度
pucResponseNonce[in] 響應方nonce載荷主體
uiResponseNonceLength[in] 響應方nonce載荷主體長度
pucSponsorCookie[in] 發起方cookie
uiSponsorCookieLength[in] 發起方cookie長度
pucResponseCookie[in] 響應方cookie
uiResponseCookieLength[in] 響應方cookie長度
uiPrfAlgID[in] PRF算法標識
uiKeyBitsD[in] 返回的SKEYID_d密鑰長度
phKeyHandleD[out] 返回的SKEYID_d密鑰句柄
uiKeyBitsA[in] 返回的SKEYID_a密鑰長度
phKeyHandleA[out] 返回的SKEYID_a密鑰句柄
uiKeyBitsE[in] 返回的SKEYID_e密鑰長度
phKeyHandleE[out] 返回的SKEYID_e密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.24 計算IKE工作密鑰并用外部ECC公鑰加密輸出
原型: int SKF_GenerateKeywithEPK_IKE (
HANDLE hSessionHandle,
BYTE pucSponsorNonce,
UINT uiSponsorNonceLength,
BYTE *pucResponseNonce,
UINT uiResponseNonceLength,
BYTE *pucSponsorCookie,
UINT uiSponsorCookieLength,
BYTE *pucResponseCookie,
UINT uiResponseCookieLength,
UINT uiPrfAlgID,
UINT uiEccAlgID,
pucPublicKey,
UINT uiKeyBitsD,
ECCCipher *pucKeyD,
HANDLE phKeyHandleD,
UINT uiKeyBitsA,
ECCCipher *pucKeyA,
HANDLE phKeyHandleA,
UINT uiKeyBitsE,
ECCCipher *pucKeyE,
描述: 使用IKE一階段(主模式)交換得到的密鑰計算參數計算IKE工作密鑰,并用外部ECC公鑰加密輸出,同時返回工作密鑰句柄。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucSponsorNonce[in] 發起方nonce載荷主體
uiSponsorNonceLength[in] 發起方nonce載荷主體長度
pucResponseNonce[in] 響應方nonce載荷主體
uiResponseNonceLength[in] 響應方nonce載荷主體長度
pucSponsorCookie[in] 發起方cookie
uiSponsorCookieLength[in] 發起方cookie長度
pucResponseCookie[in] 響應方cookie
uiResponseCookieLength[in] 響應方cookie長度
uiPrfAlgID [in] PRF算法標識
uiEccAlgID[in] 外部ECC公鑰的算法標識
pucPublicKey[in] 輸入的外部ECC公鑰結構
uiKeyBitsD [in] 返回的SKEYID_d密鑰長度
pucKeyD[out] 緩沖區指針,用于存放返回的SKEYID_d密鑰密文
phKeyHandleD [out] 返回的SKEYID_d密鑰句柄
uiKeyBitsA [in] 返回的SKEYID_a密鑰長度
pucKeyA[out] 緩沖區指針,用于存放返回的SKEYID_A密鑰密文
phKeyHandleA [out] 返回的SKEYID_a密鑰句柄
uiKeyBitsE [in] 返回的SKEYID_e密鑰長度
pucKeyE[out] 緩沖區指針,用于存放返回的SKEYID_E密鑰密文
phKeyHandleE [out] 返回的SKEYID_e密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.25 計算IPSEC會話密鑰
原型: int SKF_GenerateKeywithIPSEC (
HANDLE hSessionHandle,
BYTE *pucProtocolID,
UINT uiProtocolIDLength,
BYTE *pucSpi,
UINT uiSpiLength,
BYTE *pucSponsorNonce,
UINT uiSponsorNonceLength,
BYTE *pucResponseNonce,
UINT uiResponseNonceLength,
HANDLE phKeyHandle,
UINT uiPrfAlgID,
UINT uiKeyBitsEnc,
HANDLE phKeyHandleEnc,
UINT uiKeyBitsMac,
HANDLE phKeyHandleMac);
描述: 使用IKE二階段(快速模式)交換得到的密鑰計算參數計算IPSEC會話密鑰,同時返回會話密鑰句柄。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucProtocolID[in] 協議ID
uiProtocolIDLength[in] 協議ID長度
pucSpi [in] 安全參數索引SPI
uiSpiLength [in] 安全參數索引SPI長度
pucSponsorNonce[in] 發起方nonce載荷主體
uiSponsorNonceLength[in] 發起方nonce載荷主體長度
pucResponseNonce[in] 響應方nonce載荷主體
uiResponseNonceLength[in] 響應方nonce載荷主體長度
hKeyHandle[in] 輸入的SKEYID_d密鑰句柄
uiPrfAlgID [in] PRF算法標識
uiKeyBitsEnc [in] 返回的加密密鑰長度
phKeyHandleEnc[out] 返回的加密密鑰句柄
uiKeyBitsMac [in] 返回的雜湊密鑰長度
phKeyHandleMac[out] 返回的雜湊密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.26 計算IPSEC會話密鑰并用外部ECC公鑰加密輸出
原型: int SKF_GenerateKeywithEPK_IPSEC (
HANDLE hSessionHandle,
BYTE pucProtocolID,
UINT uiProtocolIDLength,
BYTE *pucSpi,
UINT uiSpiLength,
BYTE *pucSponsorNonce,
UINT uiSponsorNonceLength,
BYTE *pucResponseNonce,
UINT uiResponseNonceLength,
Void *phKeyHandle,
UINT uiPrfAlgID,
UINT uiEccAlgID,
pucPublicKey,
UINT uiKeyBitsEnc,
ECCCipher *pucKeyEnc
HANDLE phKeyHandleEnc,
UINT uiKeyBitsMac,
ECCCipher *pucKeyMac
HANDLE *phKeyHandleMac);
描述: 使用IKE二階段(快速模式)交換得到的密鑰計算參數計算IPSEC會話密鑰,并用外部ECC公鑰加密輸出,同時返回會話密鑰句柄。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucProtocolID[in] 協議ID
uiProtocolIDLength[in] 協議ID長度
pucSpi [in] 安全參數索引SPI
uiSpiLength [in] 安全參數索引SPI長度
pucSponsorNonce[in] 發起方nonce載荷主體
uiSponsorNonceLength[in] 發起方nonce載荷主體長度
pucResponseNonce[in] 響應方nonce載荷主體
uiResponseNonceLength[in] 響應方nonce載荷主體長度
hKeyHandle[in] 輸入的SKEYID_d密鑰句柄
uiPrfAlgID [in] PRF算法標識
uiEccAlgID[in] 外部ECC公鑰的算法標識
pucPublicKey[in] 輸入的外部ECC公鑰結構
uiKeyBitsEnc [in] 返回的加密密鑰長度
pucKeyEnc [out] 緩沖區指針,用于存放返回的加密密鑰密文
phKeyHandleEnc[out] 返回的加密密鑰句柄
uiKeyBitsMac [in] 返回的雜湊密鑰長度
pucKeyMac [out] 緩沖區指針,用于存放返回的雜湊密鑰密文
phKeyHandleMac[out] 返回的雜湊密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.27 計算SSL工作密鑰
原型: int SKF_GenerateKeywithSSL (
HANDLE hSessionHandle,
BYTE *pucKeyPreMaster,
UINT uiKeyPreMasterLength,
BYTE *pucClientRandom,
UINT uiClientRandomLength,
BYTE *pucServerRandom,
UINT uiServerRandomLength,
UINT uiPrfAlgID,
UINT uiKeyBitsClientMac,
HANDLE *phKeyHandleClientMac,
UINT uiKeyBitsServerMac,
HANDLE *phKeyHandleServerMac,
UINT uiKeyBitsClientEnc,
HANDLE *phKeyHandleClientEnc,
UINT uiKeyBitsServerEnc,
HANDLE *phKeyHandleServerEnc);
描述: 使用SSL握手協議得到的預主密鑰等參數計算SSL工作密鑰,同時返回工作密鑰句柄。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucKeyPreMaster[in] 預主密鑰pre_master_secret
uiKeyPreMasterLength[in] 預主密鑰長度
pucClientRandom[in] 客戶端隨機數
uiClientRandomLength[in] 客戶端隨機數長度
pucServerRandom[in] 服務端隨機數
uiServerRandomLength[in] 服務端隨機數長度
uiPrfAlgID [in] PRF算法標識
uiKeyBitsClientMac[in] 客戶端雜湊密鑰長度
phKeyHandleClientMac[out] 客戶端雜湊密鑰句柄
uiKeyBitsServerMac[in] 服務端雜湊密鑰長度
phKeyHandleServerMac[out] 服務端雜湊密鑰句柄
uiKeyBitsClientEnc[in] 客戶端加密密鑰長度
phKeyHandleClientEnc[out] 客戶端加密密鑰句柄
uiKeyBitsServerEnc[in] 服務端加密密鑰長度
phKeyHandleServerEnc[out] 服務端加密密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.28 計算SSL工作密鑰并用外部ECC公鑰加密輸出
原型: int SKF_GenerateKeywithEPK_SSL (
HANDLE hSessionHandle,
BYTE *pucKeyPreMaster,
UINT uiKeyPreMasterLength,
BYTE *pucClientRandom,
UINT uiClientRandomLength,
BYTE *pucServerRandom,
UINT uiServerRandomLength,
UINT uiPrfAlgID,
UINT uiEccAlgID,
ECCrefPublicKey *pucPublicKey,
UINT uiKeyBitsClientMac,
ECCCipher *pucKeyClientMac,
HANDLE *phKeyHandleClientMac,
UINT uiKeyBitsServerMac,
ECCCipher *pucKeyServerMac,
HANDLE *phKeyHandleServerMac,
UINT uiKeyBitsClientEnc,
ECCCipher *pucKeyClientEnc,
HANDLE *phKeyHandleClientEnc,
UINT uiKeyBitsServerEnc,
ECCCipher *pucKeyServerEnc,
HANDLE *phKeyHandleServerEnc);
描述: 使用SSL握手協議得到的密鑰計算參數計算SSL工作密鑰,并用外部ECC公鑰加密輸出。
參數: hSessionHandle[in] 與設備建立的會話句柄
pucKeyPreMaster[in] 預主密鑰pre_master_secret
uiKeyPreMasterLength[in] 預主密鑰長度
pucClientRandom[in] 客戶端隨機數
uiClientRandomLength[in] 客戶端隨機數長度
pucServerRandom[in] 服務端隨機數
uiServerRandomLength[in] 服務端隨機數長度
uiPrfAlgID [in] PRF算法標識
uiEccAlgID [in] 外部ECC公鑰的算法標識
pucPublicKey[in] 輸入的外部ECC公鑰結構
uiKeyBitsClientMac[in] 客戶端雜湊密鑰長度
pucKeyClientMac[out] 客戶端雜湊密鑰
phKeyHandleClientMac[out] 客戶端雜湊密鑰句柄
uiKeyBitsServerMac[in] 服務端雜湊密鑰長度
pucKeyServerMac[out] 服務端雜湊密鑰
phKeyHandleServerMac[out] 服務端雜湊密鑰句柄
uiKeyBitsClientEnc[in] 客戶端加密密鑰長度
pucKeyClientEnc[out] 客戶端加密密鑰
phKeyHandleClientEnc[out] 客戶端加密密鑰句柄
uiKeyBitsServerEnc[in] 服務端加密密鑰長度
pucKeyServerEnc[out] 服務端加密密鑰
phKeyHandleServerEnc[out] 服務端加密密鑰句柄
返回值: 0 成功
非0 失敗,返回錯誤代碼
7.6.29 導出公鑰
原型 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: 成功。
7.6.30 導入會話密鑰
原型 ULONG DEVAPI SKF_ImportSessionKey (HCONTAINER hContainer,ULONG ulAlgId,BYTE *pbWrapedData,ULONG ulWrapedLen,HANDLE *phKey)
功能描述 導入會話密鑰密文,使用容器中的加密私鑰解密得到會話密鑰。
參數 hContainer [IN] 容器句柄。
ulAlgId [IN] 會話密鑰算法標識。
pbWrapedData [IN] 要導入的會話密鑰密文。當容器為ECC類型時,此參數為ECCCIPHERBLOB密文數據,當容器為RSA類型時,此參數為RSA公鑰加密后的數據。
ulWrapedLen [IN] 會話密鑰密文長度。
phKey [OUT] 返回會話密鑰句柄。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.31 明文導入會話密鑰
原型 ULONG DEVAPI SKF_SetSymmKey (DEVHANDLE hDev, BYTE* pbKey, ULONG ulAlgID, HANDLE* phKey)
功能描述 設置明文對稱密鑰,返回密鑰句柄。
參數 hDev [IN] 設備句柄。
pbKey [IN] 指向會話密鑰值的緩沖區。
ulAlgID [IN] 會話密鑰算法標識。
phKey [OUT] 返回會話密鑰句柄。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.32 加密初始化
原型 ULONG DEVAPI SKF_EncryptInit (HANDLE hKey, BLOCKCIPHERPARAM EncryptParam)
功能描述 數據加密初始化。設置數據加密的算法相關參數。
參數 hKey [IN] 加密密鑰句柄。
EncryptParam [IN] 分組密碼算法相關參數:初始向量、初始向量長度、填充方法、反饋值的位長度。
返回值 SAR_OK: 成功。
7.6.33 單組數據加密
原型 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。
參數 hKey [IN] 加密密鑰句柄。
pbData [IN] 待加密數據。
ulDataLen [IN] 待加密數據長度。
pbEncryptedData [OUT] 加密后的數據緩沖區指針,可以為NULL,用于獲得加密后數據長度。
pulEncryptedLen [IN,OUT] 輸入時表示結果數據緩沖區長度,輸出時表示結果數據實際長度。
返回值 SAR_OK: 成功。
7.6.34 多組數據加密
原型 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: 成功。
7.6.35 結束加密
原型 ULONG DEVAPI SKF_EncryptFinal (HANDLE hKey, BYTE *pbEncryptedData, ULONG *ulEncryptedDataLen )
功能描述 結束多個分組數據的加密,返回剩余加密結果。先調用SKF_EncryptInit初始化加密操作,再調用SKF_EncryptUpdate對多個分組數據進行加密,最后調用SKF_EncryptFinal結束多個分組數據的加密。
參數 hKey [IN] 加密密鑰句柄。
pbEncyptedData [OUT] 加密結果的緩沖區。
ulEncyptedDataLen [OUT] 加密結果的長度。
返回值 SAR_OK: 成功。
7.6.36 解密初始化
原型 ULONG DEVAPI SKF_DecryptInit (HANDLE hKey, BLOCKCIPHERPARAM DecryptParam)
功能描述 數據解密初始化,設置解密密鑰相關參數。調用SKF_DecryptInit之后,可以調用SKF_Decrypt對單個分組數據進行解密,也可以多次調用SKF_DecryptUpdate之后再調用SKF_DecryptFinal完成對多個分組數據的解密。
參數 hKey [IN] 解密密鑰句柄。
DecryptParam [IN] 分組密碼算法相關參數:初始向量、初始向量長度、填充方法、反饋值的位長度。
返回值 SAR_OK: 成功。
7.6.37 單組數據解密
原型 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: 成功。
7.6.38 多組數據解密
原型 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: 成功。
7.6.39 結束解密
原型 ULONG DEVAPI SKF_DecryptFinal (HANDLE hKey, BYTE *pbDecryptedData, ULONG *pulDecryptedDataLen)
功能描述 結束多個分組數據的解密。先調用SKF_DecryptInit初始化解密操作,再調用SKF_DecryptUpdate對多個分組數據進行解密,最后調用SKF_DecryptFinal結束多個分組數據的解密。
參數 hKey [IN] 解密密鑰句柄。
pbDecryptedData [OUT] 指向解密結果的緩沖區,如果此參數為NULL時,由pulDecryptedDataLen返回解密結果的長度。
pulDecryptedDataLen [IN,OUT] 輸入時表示pbDecryptedData緩沖區的長度,輸出時表示解密結果的長度。
返回值 SAR_OK: 成功。
7.6.40 密碼雜湊初始化
原型 ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev, ULONG ulAlgID, ECCPUBLICKEYBLOB *pPubKey,BYTE *pucID, ULONG ulIDLen, HANDLE *phHash)
功能描述 初始化密碼雜湊計算操作,指定計算密碼雜湊的算法。
參數 hDev [IN] 連接設備時返回的設備句柄。
ulAlgID [IN] 密碼雜湊算法標識。
pPubKey [IN] 簽名者公鑰。當ulAlgID為SGD_SM3時有效。
pucID [IN] 簽名者的ID值,當ulAlgID為SGD_SM3時有效。
ulIDLen [IN] 簽名者ID的長度,當ulAlgID為SGD_SM3時有效。
phHash [OUT] 密碼雜湊對象句柄。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.41 單組數據密碼雜湊
原型 ULONG DEVAPI SKF_Digest (HANDLE hHash, BYTE *pbData, ULONG ulDataLen, BYTE *pbHashData, ULONG *pulHashLen)
功能描述 對單一分組的消息進行密碼雜湊計算。調用SKF_Digest之前,必須調用SKF_DigestInit初始化密碼雜湊計算操作。SKF_Digest等價于多次調用SKF_DigestUpdate之后再調用SKF_DigestFinal。
參數 hHash [IN] 密碼雜湊對象句柄。
pbData [IN] 指向消息數據的緩沖區。
ulDataLen [IN] 消息數據的長度。
pbHashData [OUT] 密碼雜湊數據緩沖區指針,當此參數為NULL時,由pulHashLen返回密碼雜湊結果的長度。
pulHashLen [IN,OUT] 輸入時表示結果數據緩沖區長度,輸出時表示結果數據實際長度。
返回值 SAR_OK: 成功。
7.6.42 多組數據密碼雜湊
原型 ULONG DEVAPI SKF_DigestUpdate (HANDLE hHash, BYTE *pbData, ULONG ulDataLen)
功能描述 對多個分組的消息進行密碼雜湊計算。調用SKF_DigestUpdate之前,必須調用SKF_DigestInit初始化密碼雜湊計算操作;調用SKF_DigestUpdate之后,必須調用SKF_DigestFinal結束密碼雜湊計算操作。
參數 hHash [IN] 密碼雜湊對象句柄。
pbData [IN] 指向消息數據的緩沖區。
ulDataLen [IN] 消息數據的長度。
返回值 SAR_OK: 成功。
7.6.43 結束密碼雜湊
原型 ULONG DEVAPI SKF_DigestFinal (HANDLE hHash, BYTE *pHashData, ULONG *pulHashLen)
功能描述 結束多個分組消息的密碼雜湊計算操作,將密碼雜湊結果保存到指定的緩沖區。
參數 hHash [IN] 密碼雜湊對象句柄。
pHashData [OUT] 返回的密碼雜湊結果緩沖區指針,如果此參數NULL時,由pulHashLen返回雜湊結果的長度。
pulHashLen [IN,OUT] 輸入時表示雜湊結果緩沖區的長度,輸出時表示密碼雜湊結果的長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.44 消息鑒別碼運算初始化
原型 ULONG DEVAPI SKF_MacInit (HANDLE hKey, BLOCKCIPHERPARAM* pMacParam, HANDLE *phMac)
功能描述 初始化消息鑒別碼計算操作,設置計算消息鑒別碼的所需參數,并返回消息鑒別碼句柄。
參數 hKey [IN] 計算消息鑒別碼的密鑰句柄。
pMacParam [IN] 消息認證計算相關參數,包括初始向量、初始向量長度、填充方法等。
phMac [OUT] 消息鑒別碼對象句柄。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.45 單組數據消息鑒別碼運算
原型 ULONG DEVAPI SKF_Mac(HANDLE hMac, BYTE* pbData, ULONG ulDataLen, BYTE *pbMacData, ULONG *pulMacLen)
功能描述 SKF_Mac計算單一分組數據的消息鑒別碼。
參數 hMac [IN] 消息鑒別碼句柄。
pbData [IN] 指向待計算數據的緩沖區。
ulDataLen [IN] 待計算數據的長度。
pbMacData [OUT] 指向計算后的Mac結果,如果此參數為NULL時,由pulMacLen返回計算后Mac結果的長度。
pulMacLen [IN,OUT] 輸入時表示pbMacData緩沖區的長度,輸出時表示Mac結果的長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.46 多組數據消息鑒別碼運算
原型 ULONG DEVAPI SKF_MacUpdate(HANDLE hMac, BYTE * pbData, ULONG ulDataLen)
功能描述 計算多個分組數據的消息鑒別碼。
參數 hMac [IN] 消息鑒別碼句柄。
pbData [IN] 指向待計算數據的緩沖區。
plDataLen [IN] 待計算數據的長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.47 結束消息鑒別碼運算
原型 ULONG DEVAPI SKF_MacFinal (HANDLE hMac, BYTE *pbMacData, ULONG *pulMacDataLen)
功能描述 結束多個分組數據的消息鑒別碼計算操作。
參數 hMac [IN] 消息鑒別碼句柄。
pbMacData [OUT] 指向消息鑒別碼的緩沖區,當此參數為NULL時,由pulMacDataLen返回消息鑒別碼返回的長度。
pulMacDataLen [OUT] 調用時表示消息鑒別碼緩沖區的最大長度,返回消息鑒別碼的長度。
返回值 SAR_OK: 成功。
其他: 錯誤碼。
7.6.48 關閉密碼對象句柄
原型 ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle)
功能描述 關閉會話密鑰、密碼雜湊對象、消息鑒別碼對象、ECC密鑰協商等句柄。
參數 hHandle [IN] 要關閉的對象句柄。
返回值 SAR_OK: 成功。
GB/T 35291-2017 信息安全技術 智能密碼鑰匙應用接口規范
推薦文章: