init: v1.0.0
This commit is contained in:
@@ -0,0 +1,350 @@
|
||||
package sdf
|
||||
|
||||
import (
|
||||
"xdx.jelly/xgcl/rsa"
|
||||
"xdx.jelly/xgcl/sm/sm2"
|
||||
)
|
||||
|
||||
// Sdfable is the golang style of SDF interface(GB/T 36322-2018). The interface is
|
||||
// to minimum the upper applications' burden to use.
|
||||
//
|
||||
// The implement itself should be a sessionhandle.
|
||||
// So there are no need of sessionhandle in function params.
|
||||
// When New a impl. instants, it should include the device infos - IP,
|
||||
// port, connection timeout e.t.
|
||||
//
|
||||
// Its the impl's responsible to check connections to hardware
|
||||
// crypto-services.
|
||||
//
|
||||
// The params' name are keep the same with 0018/36322 for reference, though
|
||||
// the "puc" are not means "pointer to unsigned char".
|
||||
type Sdfable interface {
|
||||
StdSdfable // 标准0018接口
|
||||
ExtSdfable // 扩展接口
|
||||
SdfManager // 管理接口
|
||||
}
|
||||
|
||||
// 标准sdf接口
|
||||
type StdSdfable interface {
|
||||
// 实际上应该是OpenDevice返回一个Sdfable接口对象。实现时可以以包函数的方式实现。
|
||||
// SDF_OpenDevice() error
|
||||
// SDF_CloseDevice() error
|
||||
|
||||
// 一个Sdfable接口对象即是一个session
|
||||
SDF_OpenSession() error
|
||||
SDF_CloseSession() error
|
||||
|
||||
SDF_GetDeviceInfo() (*DeviceInfo, error)
|
||||
SDF_GetPrivateKeyAccessRight(keyIndex uint32, password []byte) error
|
||||
SDF_ReleasePrivateKeyAccessRight(keyIndex uint32) error
|
||||
|
||||
// 以随机数填充buffer。返回实际获取字节和错误。
|
||||
SDF_GenerateRandom(buffer []byte) (n uint32, err error)
|
||||
|
||||
// 6.3.1 导出RSA签名公钥
|
||||
// 描述: 导出密码设备内部存储的指定索引位置的签名公钥。
|
||||
// 备注:返回公钥只可读。不可进行更改。
|
||||
SDF_ExportSignPublicKey_RSA(uiKeyIndex uint32) (*rsa.PublicKey, error)
|
||||
|
||||
// 6.3.2 导出RSA加密公钥
|
||||
// 描述: 导出密码设备内部存储的指定索引位置的加密公钥。
|
||||
// 备注:返回公钥只可读。不可进行更改。
|
||||
SDF_ExportEncPublicKey_RSA(uiKeyIndex uint32) (*rsa.PublicKey, error)
|
||||
|
||||
// 6.3.3 产生RSA密钥对并输出
|
||||
SDF_GenerateKeyPair_RSA(uiKeyBits uint32) (*rsa.PublicKey, *rsa.PrivateKey, error)
|
||||
|
||||
// 6.3.4 生成会话密钥并用内部RSA公钥加密输出
|
||||
// 描述: 生成会话密钥并用指定索引的内部加密公钥加密输出, 同时返回密钥句柄。
|
||||
// 备注: 公钥加密数据时填充方式按照PKCS#1 v1.5的要求进行。
|
||||
SDF_GenerateKeyWithIPK_RSA(uiIPKIndex uint32, uiKeyBits uint32) (pucKey []byte, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.5 生成会话密钥并用外部RSA公钥加密输出
|
||||
// 描述: 生成会话密钥并用外部公钥加密输出, 同时返回密钥句柄。
|
||||
// 备注: 公钥加密数据时填充方式按照PKCS#1 v1.5的要求进行。
|
||||
SDF_GenerateKeyWithEPK_RSA(uiKeyBits uint32, pucPublicKey *rsa.PublicKey) (Key []byte, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.6 导入会话密钥并用内部RSA私钥解密
|
||||
// 描述: 导入会话密钥并用内部私钥解密, 同时返回密钥句柄。
|
||||
// 注:填充方式与公钥加密时相同。
|
||||
SDF_ImportKeyWithISK_RSA(uiISKIndex uint32, pucKey []byte) (phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.7 基于RSA算法的数字信封转换
|
||||
// 描述: 将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密, 可用于数字信封转换。
|
||||
SDF_ExchangeDigitEnvelopeBaseOnRSA(uiKeyIndex uint32, pucPublicKey *rsa.PublicKey, pucDEInput []byte) (pucDEOutput []byte, err error)
|
||||
|
||||
// 6.3.8 导出ECC签名公钥
|
||||
SDF_ExportSignPublicKey_ECC(uiKeyIndex uint32) (*sm2.PublicKey, error)
|
||||
|
||||
// 6.3.9 导出ECC加密公钥
|
||||
// 描述: 导出密码设备内部存储的指定索引位置的加密公钥。
|
||||
SDF_ExportEncPublicKey_ECC(uiKeyIndex uint32) (*sm2.PublicKey, error)
|
||||
|
||||
// 6.3.10 产生ECC密钥对并输出
|
||||
// 描述: 请求密码设备产生指定类型和模长的ECC密钥对。
|
||||
SDF_GenerateKeyPair_ECC(uiAlgID uint32, uiKeyBits uint32) (*sm2.PublicKey, *sm2.PrivateKey, error)
|
||||
|
||||
// 6.3.11 生成会话密钥并用内部ECC公钥加密输出
|
||||
// 描述: 生成会话密钥并用指定索引的内部ECC加密公钥加密输出, 同时返回密钥句柄。
|
||||
SDF_GenerateKeyWithIPK_ECC(uiIPKIndex uint32, uiKeyBits uint32) (pucKey *sm2.Cipher, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.12 生成会话密钥并用外部ECC公钥加密输出
|
||||
// 描述: 生成会话密钥并用外部ECC公钥加密输出, 同时返回密钥句柄。
|
||||
SDF_GenerateKeyWithEPK_ECC(uiKeyBits uint32, uiAlgID uint32, pucPublicKey *sm2.PublicKey) (pucKey *sm2.Cipher, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.13 导入会话密钥并用内部ECC私钥解密
|
||||
// 描述: 导入会话密钥并用内部ECC加密私钥解密, 同时返回密钥句柄。
|
||||
SDF_ImportKeyWithISK_ECC(uiISKIndex uint32, pucKey *sm2.Cipher) (phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.14 生成密钥协商参数并输出
|
||||
// 描述: 使用ECC密钥协商算法, 为计算会话密钥而产生协商参数, 同时返回指定索引位置的ECC公钥、临时ECC密钥对的公钥及协商句柄。
|
||||
SDF_GenerateAgreementDataWithECC(uiISKIndex uint32, uiKeyBits uint32, pucSponsorID []byte) (pucSponsorPublicKey *sm2.PublicKey, pucSponsorTmpPublicKey *sm2.PublicKey, phAgreementHandle interface{}, err error)
|
||||
|
||||
// 6.3.15 计算会话密钥
|
||||
// 描述: 使用ECC密钥协商算法, 使用自身协商句柄和响应方的协商参数计算会话密钥, 同时返回会话密钥句柄。
|
||||
// 备注: 协商的发起方获得响应方的协商参数后调用本函数, 计算会话密钥。使用SM2算法计算会话密钥的过程见GM/T 0009。
|
||||
SDF_GenerateKeyWithECC(pucResponseID []byte, pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, hAgreementHandle interface{}) (phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.16 产生协商数据并计算会话密钥
|
||||
// 描述: 使用ECC密钥协商算法, 产生协商参数并计算会话密钥, 同时返回产生的协商参数和密钥句柄。
|
||||
SDF_GenerateAgreementDataAndKeyWithECC(uiISKIndex uint32, uiKeyBits uint32, pucResponseID []byte, pucSponsorID []byte, pucSponsorPublicKey, pucSponsorTmpPublicKey *sm2.PublicKey) (pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.17 基于ECC算法的数字信封转换
|
||||
// 描述: 将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密, 可用于数字信封转换。
|
||||
SDF_ExchangeDigitEnvelopeBaseOnECC(uiKeyIndex uint32, uiAlgID uint32, pucPublicKey *sm2.PublicKey,
|
||||
pucEncDataIn *sm2.Cipher) (pucEncDataOut *sm2.Cipher, err error)
|
||||
|
||||
// 6.3.18 生成会话密钥并用密钥加密密钥加密输出
|
||||
// 描述: 生成会话密钥并用密钥加密密钥加密输出, 同时返回密钥句柄。
|
||||
// 备注: 加密模式使用ECB模式。
|
||||
SDF_GenerateKeyWithKEK(uiKeyBits uint32, uiAlgID uint32, uiKEKIndex uint32) (pucKey []byte, phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.19 导入会话密钥并用密钥加密密钥解密
|
||||
// 描述: 导入会话密钥并用密钥加密密钥解密, 同时返回会话密钥句柄。
|
||||
// 备注: 加密模式使用ECB模式。
|
||||
SDF_ImportKeyWithKEK(uiAlgID uint32, uiKEKIndex uint32, pucKey []byte) (phKeyHandle interface{}, err error)
|
||||
|
||||
// 6.3.20 计算IKE工作密钥
|
||||
// 描述: 使用IKE一阶段(主模式)交换得到的密钥计算参数计算IKE会话密钥, 同时返回会话密钥句柄。
|
||||
// 备注: IKE一阶段(主模式)消息3和消息4交互完成后, 参与通信的双方调用本函数,
|
||||
// 计算后续会话密钥SKEYID_d, SKEYID_a, SKEYID_e。IKE一阶段(主模式)计算IKE会话密钥的过程见GM/T 0022。
|
||||
// 输入的密钥参数按顺序为Ni_b, Nr_b, CKY_I, CKY_R,返回的密钥句柄按顺序为SKEYID_d,SKEYID_a,SKEYID_e
|
||||
SDF_GenerateKeywithIKE(pucSponsorNonce []byte, pucResponseNonce []byte, pucSponsorCookie []byte, pucResponseCookie []byte, uiPrfAlgID uint32, uiKeyBitsD, uiKeyBitsA, uiKeyBitsE uint32) (phKeyHandleD interface{}, phKeyHandleA interface{}, phKeyHandleE interface{}, err error)
|
||||
|
||||
// 6.3.22 计算IKE工作密钥并用外部ECC公钥加密输出
|
||||
// 描述: 使用IKE一阶段(主模式)交换得到的密钥计算参数计算IKE工作密钥,并用外部
|
||||
// ECC公钥加密输出,同时返回工作密钥句柄。
|
||||
// 备注: IKE一阶段(主模式)消息3和消息4交互完成后, 参与通信的双方调用本函数,
|
||||
// 计算后续会话密钥SKEYID_d, SKEYID_a, SKEYID_e。IKE一阶段(主模式)计算IKE会话密钥的过程见GM/T 0022。
|
||||
// 输入的密钥参数按顺序为Ni_b, Nr_b, CKY_I, CKY_R,返回的密钥句柄按顺序为SKEYID_d,SKEYID_a,SKEYID_e
|
||||
SDF_GenerateKeywithEPK_IKE(pucSponsorNonce []byte, pucResponseNonce []byte, pucSponsorCookie []byte, pucResponseCookie []byte, uiPrfAlgID, uiEccAlgID uint32, pucPublicKey sm2.PublicKey, uiKeyBitsD, uiKeyBitsA, uiKeyBitsE uint32) (pucKeyD *sm2.Cipher, phKeyHandleD interface{}, pucKeyA *sm2.Cipher, phKeyHandleA interface{}, pucKeyE *sm2.Cipher, phKeyHandleE interface{}, err error)
|
||||
|
||||
// 6.3.23 计算IPSEC会话密钥
|
||||
// 描述: 使用IKE二阶段(快速模式)交换得到的密钥计算参数计算IPSEC会话密钥, 同时返回会话密钥句柄。
|
||||
// 备注: IKE二阶段(快速模式)消息交互完成后, 参与通信的双方调用本函数, 计算IPSEC会话密钥, 包括用于加密的会话密钥和用于完整性校验的会话密钥。IKE二阶段(快速模式)计算IPSEC会话密钥的过程见GM/T 0022。本函数需在6.3.20计算IKE会话密钥函数调用之后调用, 并将该函数返回的密钥句柄之一(SKEYID_d)作为输入。
|
||||
SDF_GenerateKeywithIPSEC(
|
||||
pucProtocolID []byte,
|
||||
pucSpi []byte,
|
||||
pucSponsorNonce []byte,
|
||||
pucResponseNonce []byte,
|
||||
hKeyHandle interface{},
|
||||
uiPrfAlgID uint32,
|
||||
uiKeyBitsEnc, uiKeyBitsMac uint32,
|
||||
) (phKeyHandleEnc interface{}, phKeyHandleMac interface{}, err error)
|
||||
|
||||
// 6.3.24 计算IPSEC会话密钥并用外部ECC公钥加密输出
|
||||
// 注:IKE 二阶段(快速模式)消息交互完成后,本函数由参与通信的双方各自调用,计算IPSEC 会话密钥,包括用于
|
||||
// 加密的会话密钥和用于完整性校验的会话密钥。IKE 二阶段(快速模式)计算IPSEC 会话密钥的过程参见
|
||||
// GM/T0022,输入的密钥参数按顺序为protocol、SPI、Ni_b、Nr_b,返回的密钥密文和密钥句柄按顺序为加密密
|
||||
// 钥和杂凑密钥(用于完整性校验)。本函数在6.3.21计算IKE 工作密钥函数调用之后调用,该函数返回的密钥
|
||||
// 句柄之一(SKEYID_d)作为本函数输入。
|
||||
SDF_GenerateKeywithEPK_IPSEC(
|
||||
pucProtocolID []byte,
|
||||
pucSpi []byte,
|
||||
pucSponsorNonce []byte,
|
||||
pucResponseNonce []byte,
|
||||
hKeyHandle interface{},
|
||||
uiPrfAlgID uint32,
|
||||
uiEccAlgID uint32,
|
||||
pucPublicKey *sm2.PublicKey,
|
||||
uiKeyBitsEnc, uiKeyBitsMac uint32,
|
||||
) (pucKeyEnc *sm2.Cipher, phKeyHandleEnc interface{}, pucKeyMac *sm2.Cipher, phKeyHandleMac interface{}, err error)
|
||||
|
||||
// 6.3.25 计算SSL工作密钥
|
||||
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL会话密钥, 同时返回会话密钥句柄。
|
||||
// 备注:
|
||||
// SSL握手协议消息交互完成后, 参与通信的双方调用本函数, 计算SSL记录层协议的会话密钥client_write_MAC_secret, server_write_MAC_secret, client_write_ key, server_write_key。SSL计算会话密钥的过程见GM/T 0024。
|
||||
// 备注:与标准有不同,这里增加了返回pucClientIV, pucServerIV
|
||||
SDF_GenerateKeywithSSL(
|
||||
pucKeyPremaster, pucClientRandom, pucServerRandom []byte,
|
||||
uiPrfAlgID uint32,
|
||||
uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32,
|
||||
) (phKeyHandleClientMac, phKeyHandleServerMac, phKeyHandleClientEnc, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
|
||||
|
||||
// 6.3.26 计算SSL工作密钥并用外部ECC公钥加密输出
|
||||
SDF_GenerateKeywithEPK_SSL(pucKeyPremaster, pucClientRandom, pucServerRandom []byte, uiPrfAlgID uint32, uiEccAlgID uint32, pucPublicKey *sm2.PublicKey, uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32) (pucKeyClientMac *sm2.Cipher, phKeyHandleClientMac interface{}, pucKeyServerMac *sm2.Cipher, phKeyHandleServerMac interface{}, pucKeyClientEnc *sm2.Cipher, phKeyHandleClientEnc interface{}, pucKeyServerEnc *sm2.Cipher, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
|
||||
|
||||
// 6.3.27 计算SSL工作密钥(ECDHE)
|
||||
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL工作密钥,同时返回工作密钥句柄。
|
||||
// 备注:这里的预主密钥为SM2密钥交换得到的密钥句柄。
|
||||
SDF_GenerateKeywithECDHE_SSL(
|
||||
phKeyHandlePremaster interface{},
|
||||
pucClientRandom, pucServerRandom []byte,
|
||||
uiPrfAlgID uint32,
|
||||
uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32,
|
||||
) (phKeyHandleClientMac, phKeyHandleServerMac, phKeyHandleClientEnc, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
|
||||
|
||||
// 6.3.28 计算SSL工作密钥并用外部ECC公钥加密输出
|
||||
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL工作密钥,同时返回工作密钥句柄。
|
||||
// 备注:这里的预主密钥为SM2密钥交换得到的密钥句柄。
|
||||
SDF_GenerateKeywithEPK_ECDHE_SSL(phKeyHandlePremaster interface{}, pucClientRandom, pucServerRandom []byte, uiPrfAlgID uint32, uiEccAlgID uint32, pucPublicKey *sm2.PublicKey, uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32) (pucKeyClientMac *sm2.Cipher, phKeyHandleClientMac interface{}, pucKeyServerMac *sm2.Cipher, phKeyHandleServerMac interface{}, pucKeyClientEnc *sm2.Cipher, phKeyHandleClientEnc interface{}, pucKeyServerEnc *sm2.Cipher, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
|
||||
|
||||
// 6.3.29 销毁会话密钥
|
||||
// 描述: 销毁会话密钥, 并释放为密钥句柄分配的内存等资源。
|
||||
// 备注: 在对称算法运算完成后, 应调用本函数销毁会话密钥。
|
||||
SDF_DestroyKey(hKeyHandle interface{}) error
|
||||
|
||||
// 6.4 非对称算法运算类函数
|
||||
// 6.4.2 外部公钥RSA运算
|
||||
// 描述: 指定使用外部公钥对数据进行运算。
|
||||
// 备注1: 数据格式由应用层封装。
|
||||
// 备注2:一般非对称运算加密密钥,因此输出为内部分配内存。
|
||||
SDF_ExternalPublicKeyOperation_RSA(pucPublicKey *rsa.PublicKey, pucDataInput []byte) (pucDataOutput []byte, err error)
|
||||
|
||||
// 6.4.3 内部公钥RSA运算
|
||||
// 描述: 使用内部指定索引的公钥对数据进行运算。
|
||||
// 备注: 索引范围仅限于内部签名密钥对, 数据格式由应用层封装。
|
||||
SDF_DecryptPublicKeyOperation_RSA(uiKeyIndex uint32, pucDataInput []byte) (pucDataOutput []byte, err error)
|
||||
|
||||
// 6.4.4 内部私钥RSA运算
|
||||
// 描述: 使用内部指定索引的私钥对数据进行运算。
|
||||
// 备注: 索引范围仅限于内部签名密钥对, 数据格式由应用层封装。
|
||||
SDF_InternalPrivateKeyOperation_RSA(
|
||||
uiKeyIndex uint32,
|
||||
pucDataInput []byte) (pucDataOutput []byte, err error)
|
||||
|
||||
// 6.4.5 外部密钥ECC验证
|
||||
// 描述: 使用外部ECC公钥对ECC签名值进行验证运算。
|
||||
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
|
||||
SDF_ExternalVerify_ECC(
|
||||
uiAlgID uint32,
|
||||
pucPublicKey *sm2.PublicKey,
|
||||
pucDataInput []byte,
|
||||
pucSignature *sm2.Signature) (err error)
|
||||
|
||||
// GMT 0018-2012 有,但36322没有
|
||||
SDF_ExternalSign_ECC(uiAlgID uint32, pucPrivateKey *sm2.PrivateKey, pucData []byte) (*sm2.Signature, error)
|
||||
|
||||
// 6.4.6 内部密钥ECC签名
|
||||
// 描述: 使用内部ECC私钥对数据进行签名运算。
|
||||
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
|
||||
SDF_InternalSign_ECC(uiISKIndex uint32, pucData []byte) (pucSignature *sm2.Signature, err error)
|
||||
|
||||
// 6.4.7 内部密钥ECC验证
|
||||
// 描述: 使用内部ECC公钥对ECC签名值进行验证运算。
|
||||
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
|
||||
SDF_InternalVerify_ECC(
|
||||
uiISKIndex uint32,
|
||||
pucData []byte,
|
||||
pucSignature *sm2.Signature) (err error)
|
||||
|
||||
// 6.4.8 外部密钥ECC公钥加密
|
||||
// 描述: 使用外部ECC公钥对数据进行加密运算。
|
||||
SDF_ExternalEncrypt_ECC(
|
||||
uiAlgID uint32,
|
||||
pucPublicKey *sm2.PublicKey,
|
||||
pucData []byte) (pucEncData *sm2.Cipher, err error)
|
||||
|
||||
// 外部ECC私钥解密,GMT0018有,36322没有。
|
||||
SDF_ExternalDecrypt_ECC(uiAlgID uint32, pucPrivateKey *sm2.PrivateKey, pucEncData *sm2.Cipher) (pucData []byte, err error)
|
||||
|
||||
// 6.5 对称算法运算类函数
|
||||
// 对称算法运算类函数包括以下具体函数, 各函数返回值见附录A函数返回代码定义:
|
||||
// a) 对称加密:Encrypt
|
||||
// b) 对称解密:Decrypt
|
||||
// c) 计算MAC:CalculateMAC
|
||||
|
||||
// 6.5.1 对称加密
|
||||
// 描述: 使用指定的密钥句柄和IV对数据进行对称加密运算
|
||||
// 备注1: 此函数不对数据进行填充处理, 输入的数据必须是指定算法分组长度的整数倍。
|
||||
// 备注2: 为避免内存分配,pucEncData提前分配好足够的空间。pucEncData如果空间不够,会重分配内存
|
||||
// 备注3: pucIV-输入输出
|
||||
SDF_Encrypt(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucData []byte, pucEncData *[]byte) (err error)
|
||||
|
||||
// 6.5.2 对称解密
|
||||
// 描述: 使用指定句柄和IV对数据进行对称解密运算。
|
||||
// 备注1: 此函数不对数据进行填充处理, 输入的数据必须是指定算法分组长度的整数倍。
|
||||
// 备注2: pucIV和pucData同对称加密
|
||||
SDF_Decrypt(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucEncData []byte, pucData *[]byte) (err error)
|
||||
|
||||
// 6.5.3 计算MAC
|
||||
// 描述: 使用指定的密钥句柄和IV对数据进行MAC运算。
|
||||
// uiAlgID的取值为:
|
||||
// - identifier.SGD_SM3, 计算HMAC_SM3, 忽略pucIV
|
||||
// - identifier.SGD_SM1_MAC, 计算SM1_CBCMAC
|
||||
// - identifier.SGD_SM4_MAC, 计算SM4_CBCMAC
|
||||
// 备注:CBCMac不对数据进行分包处理, 多包数据MAC运算由IV控制最后的MAC值。
|
||||
SDF_CalculateMAC(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucData []byte) (pucMAC []byte, err error)
|
||||
|
||||
// 6.6 杂凑运算类函数
|
||||
// 备注:0018中杂凑运算与hSessionHandle相关联。
|
||||
// 6.6.2 杂凑运算初始化
|
||||
// 描述: 三步式数据杂凑运算第一步。
|
||||
// 备注: uiIDLength非零且uiAlgID为SGD_SM3时, 函数执行SM2的预处理操作。计算过程见GM/T 0009。
|
||||
SDF_HashInit(uiAlgID uint32, pucPublicKey *sm2.PublicKey, pucID []byte) (err error)
|
||||
|
||||
// 6.6.3 多包杂凑运算
|
||||
// 描述: 三步式运算第二步, 对输入的明文进行杂凑运算。
|
||||
SDF_HashUpdate(pucData []byte) (err error)
|
||||
|
||||
// 6.6.4 杂凑运算结束
|
||||
SDF_HashFinal() (pucHash []byte, err error)
|
||||
|
||||
// 6.7 用户文件操作类函数
|
||||
// 用户文件操作类函数包括以下具体函数, 各函数返回值见附录A函数返回代码定义:
|
||||
// a) 创建文件 CreateFile
|
||||
// b) 读取文件:ReadFile
|
||||
// c) 写文件:WriteFile
|
||||
// d) 删除文件:DeleteFile
|
||||
|
||||
// 6.7.2 创建文件
|
||||
// 描述: 在密码设备内部创建用于存储用户数据的文件。
|
||||
SDF_CreateFile(pucFileName string, uiFileSize uint32) error
|
||||
|
||||
// 6.7.3 读取文件
|
||||
// 描述: 读取在密码设备内部存储用户数据的文件的内容。
|
||||
// 备注: 读取文件内容至pucBuffer,返回读取字节数。
|
||||
// 当err != nil时,有可能n>0. 例如err = io.EOF时,仍可能读取到一定字节数。
|
||||
SDF_ReadFile(pucFileName string, uiOffset uint32, pucBuffer []byte) (n uint32, err error)
|
||||
|
||||
// 6.7.3 写文件
|
||||
// 描述: 向密码设备内部存储用户数据的文件中写入内容。
|
||||
SDF_WriteFile(pucFileName string, uiOffset uint32, pucBuffer []byte) error
|
||||
|
||||
// 6.7.4 删除文件
|
||||
// 描述: 删除指定文件名的密码设备内部存储用户数据的文件。
|
||||
SDF_DeleteFile(pucFileName string) error
|
||||
}
|
||||
|
||||
// sdf 的扩展接口
|
||||
type ExtSdfable interface {
|
||||
|
||||
// 内部sm2私钥解密
|
||||
SDFEXT_InternalDecryptECC(uiKeyIndex uint32, pucEncData *sm2.Cipher) (pucData []byte, err error)
|
||||
|
||||
// 6.3.14 生成密钥协商参数并输出-这个与标准接口一致
|
||||
// 描述: 使用ECC密钥协商算法, 为计算会话密钥而产生协商参数, 同时返回指定索引位置的ECC公钥、临时ECC密钥对的公钥及协商句柄。
|
||||
SDFEXT_GenerateAgreementDataWithECC(uiISKIndex uint32, uiKeyBits uint32, pucSponsorID []byte) (pucSponsorPublicKey *sm2.PublicKey, pucSponsorTmpPublicKey *sm2.PublicKey, phAgreementHandle interface{}, err error)
|
||||
|
||||
// 6.3.15 计算会话密钥变体
|
||||
// 描述: 使用ECC密钥协商算法, 使用自身协商句柄和响应方的协商参数计算会话密钥, 同时返回会话密钥。
|
||||
// 备注: 协商的发起方获得响应方的协商参数后调用本函数, 计算会话密钥。使用SM2算法计算会话密钥的过程见GM/T 0009。
|
||||
SDFEXT_GenerateKeyWithECC(pucResponseID []byte, pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, hAgreementHandle interface{}) (agreementKey []byte, err error)
|
||||
|
||||
// 6.3.16 产生协商数据并计算会话密钥
|
||||
// 描述: 使用ECC密钥协商算法, 产生协商参数并计算会话密钥, 同时返回产生的协商参数和密钥。
|
||||
SDFEXT_GenerateAgreementDataAndKeyWithECC(uiISKIndex uint32, uiKeyBits uint32, pucResponseID []byte, pucSponsorID []byte, pucSponsorPublicKey, pucSponsorTmpPublicKey *sm2.PublicKey) (pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, agreementKey []byte, err error)
|
||||
}
|
||||
|
||||
type SdfManager interface {
|
||||
}
|
||||
Reference in New Issue
Block a user