密码卡API手册V1.3
一、概述
该密码卡支持高速国产标准密码算法,支持真随机数产生。具有安全有效的密钥管理功能和设备管理功能,具有安全有效的保护措施。其API接口支持《GM/T 0018-2012 密码设备应用接口规范》。
适用范围
此手册适用于派科信安的如下PCIe密码卡:
适用于派科信安的如下Mini PCIe密码卡:
适用于派科信安的如下USB密码卡:
二、接口使用说明
2.1 定义
2.1.1 设备信息定义
字段名称 |
数据长度(字节) |
含义 |
IssuerName |
40 |
设备生产厂商名称 |
DeviceName |
16 |
设备型号 |
DeviceSerial |
16 |
设备编号,包含:日期(8字符)、批次号(3字符)、流水号(5字符) |
DeviceVersion |
4 |
密码设备内部软件的版本号 |
StandardVersion |
4 |
密码设备支持的接口规范版本号 |
AsymAlgAbility |
8 |
前4字节表示支持的算法,表示方法为非对称算法标识按位或的结果;后4字节表示算法的最大模长,表示方法为支持的模长按位或的结果 |
SymAlgAbility |
4 |
所有支持的对称算法,表示方法为对称算法标识按位或运算结果 |
HashAlgAbility |
4 |
所有支持的杂凑算法,表示方法为杂凑算法标识按位或运算结果 |
BufferSize |
4 |
支持的最大文件存储空间(单位字节) |
实际数据结构定义:
typedef struct DeviceInfo_st{
unsigned char IssuerName[40];
unsigned char DeviceName[16];
unsigned char DeviceSerial[16]
unsigned int DeviceVersion;
unsigned int StandardVersion;
unsigned int AsymAlgAbility[2];
unsigned int SymAlgAbility;
unsigned int HashAlgAbility;
unsigned int BufferSize;
}DEVICEINFO;
2.1.2 算法标识定义
对称算法标识:
宏描述 |
预定义值 |
说明 |
#define SGD_SM1_ECB |
0x00000101 |
SM1算法ECB加密模式 |
#define SGD_SM1_CBC |
0x00000102 |
SM1算法CBC加密模式 |
#define SGD_SM1_CFB |
0x00000104 |
SM1算法CFB加密模式 |
#define SGD_SM1_OFB |
0x00000108 |
SM1算法OFB加密模式 |
#define SGD_SM1_MAC |
0x00000110 |
SM1算法MAC加密模式 |
#define SGD_SSF33_ECB |
0x00000201 |
SSF33算法ECB加密模式 |
#define SGD_SSF33_CBC |
0x00000202 |
SSF33算法CBC加密模式 |
#define SGD_SSF33_CFB |
0x00000204 |
SSF33算法CFB加密模式 |
#define SGD_SSF33_OFB |
0x00000208 |
SSF33算法OFB加密模式 |
#define SGD_SSF33_MAC |
0x00000210 |
SSF33算法MAC加密模式 |
#define SGD_SM4_ECB |
0x00000401 |
SM4算法ECB加密模式 |
#define SGD_SM4_CBC |
0x00000402 |
SM4算法CBC加密模式 |
#define SGD_SM4_CFB |
0x00000404 |
SM4算法CFB加密模式 |
#define SGD_SM4_OFB |
0x00000408 |
SM4算法OFB加密模式 |
#define SGD_SM7_ECB |
0x00000801 |
SM7算法ECB加密模式 |
#define SGD_SM7_CBC |
0x00000802 |
SM7算法CBC加密模式 |
#define SGD_SM7_CFB |
0x00000804 |
SM7算法CFB加密模式 |
#define SGD_SM7_OFB |
0x00000808 |
SM7算法OFB加密模式 |
#define SGD_SM7_MAC |
0x00000810 |
SM7算法MAC加密模式 |
|
|
|
0x00001000—0x00080000 |
|
为其它算法预留,包括国际标准算法或自实现算法 |
非对称算法标识:
宏描述 |
预定义值 |
说明 |
#define SGD_RSA |
0x00010000 |
RSA算法 |
#define SGD_SM2_1 |
0x00020100 |
椭圆曲线签名算法 |
#define SGD_SM2_2 |
0x00020200 |
椭圆曲线密钥交换协议 |
#define SGD_SM2_3 |
0x00020400 |
椭圆曲线加密算法 |
#define SGD_SM9 |
0x00040100 |
SM9算法 |
#define SGD_SM9_1 |
0x00040200 |
SM9签名算法 |
#define SGD_SM9_2 |
0x00040400 |
SM9密钥交换协议 |
#define SGD_SM9_3 |
0x00040800 |
SM9密钥封装和加密 |
#define SGD_SM9_3_ECB |
0x00040801 |
SM9加密ECB加密模式 |
#define SGD_SM9_3_CBC |
0x00040802 |
SM9加密CBC加密模式 |
杂凑算法标识:
宏描述 |
预定义值 |
说明 |
#define SGD_SM3 |
0x00000001 |
SM3杂凑算法 |
2.1.3 密钥分类及存储定义
密钥存储区,用于非对称密钥对的存放,索引号从0开始检索,每个索引号对应一个签名密钥对和一个加密密钥对。其中,索引号为0表示设备密钥。索引号1开始表示用户密钥。
设备密钥只能在设备初始化时生成或安装,用户密钥通过密码设备管理工具生成或安装。
密钥对索引号 |
公钥 |
私钥 |
0x00 |
设备签名公钥 |
设备签名私钥 |
设备加密公钥 |
设备加密私钥 |
|
0x01 |
用户签名公钥 |
用户签名私钥 |
用户加密公钥 |
用户加密私钥 |
|
…… |
…… |
…… |
…… |
…… |
|
密钥加密密钥通过密码设备管理工具生成或安装,存储区可存储密钥长度为128位的密钥加密密钥,使用索引号从1开始。
密钥索引号 |
密钥加密密钥 |
0x01 |
密钥加密密钥001 |
…… |
…… |
【扩展】密钥加密密钥可按用户需求用作对称工作密钥,用户自行管理同一密钥位置的密钥加密密钥和对称工作密钥职能划分。
会话密钥长度为128位,使用设备接口函数生成或导入,会话密钥使用句柄检索。
2.1.4 密码设备权限
密码设备分为三种权限,超级管理员权限、管理员权限和操作员权限,三种模式拥有不同的权限,可以对密码设备的各类密钥进行不同的操作。
对应权限密码卡配有超级管理员权限一名,管理员一名,操作员0~2名,管理员拥有管理员权限,所有的操作员拥有相同的操作员权限,详见各函数备注和《用户手册》。
应用模式定义
宏描述 |
预定义值 |
说明 |
#define SUPPER_ADMIN |
0x00000001 |
超级管理员权限 |
#define ADMIN |
0x00000002 |
管理员权限 |
#define ASSISTANT1 |
0x00000003 |
操作员1 |
#define ASSISTANT2 |
0x00000004 |
操作员2 |
2.1.5 密码设备状态
出厂的密码设备分为三种状态,出厂状态、初始化状态、就绪状态。
宏描述 |
预定义值 |
说明 |
#define ST_FAC |
0x00000001 |
出厂状态 |
#define ST_INT |
0x00000002 |
初始化状态 |
#define ST_READY |
0x00000003 |
就绪状态 |
2.1.6 密码卡配置
密码卡内部存储密钥数量是有限的、固定的,可通过密码卡内存储的配置信息获得具体数量。
密码卡配置信息结构定义如下
typedef struct DeviceCfg_st {
unsigned int VKPNum; // 私钥权限码数量
unsigned int SKNum; // 会话密钥数量
unsigned int KEKNum; // KEK数量
unsigned int SM2KeyPairsNum; // SM2密钥对数量
unsigned int RSAKeyPairsNum; // RSA密钥对数量
unsigned int SM9MastKeyPairsNum; // SM9主密钥对数量
unsigned int SM9UserKeyPairsNum; // SM9用户密钥对数量
} DEVICECONFIG;
2.1.7 密码卡各类数据结构定义
RSA结构定义
公钥数据结构定义 |
|
|
字段名称 |
数据长度(字节) |
含义 |
bits |
4 |
模长 |
M |
256 |
模N |
E |
256 |
公钥指数 |
私钥数据结构定义 |
|
|
字段名称 |
字段名称 |
字段名称 |
bits |
4 |
模长 |
M |
256 |
模N |
E |
256 |
公钥指数 |
D |
256 |
私钥指数 |
prime[2] |
128×2 |
素数p和q |
pexp[2] |
128×2 |
Dp和Dq |
Coef |
128 |
系数i |
#define RSAref_MAX_BITS 2048
#define RSAref_MAX_LEN ((RSAref_MAX_BITS +7)/8)
#define RSAref_MAX_PBITS ((RSAref_MAX_BITS +1)/2)
#define RSAref_MAX_PLEN ((RSAref_MAX_PBITS +7)/8)
typedef struct RSArefPublicKey_st
{
unsigned int bits;
unsigned char m[RSAref_MAX_LEN];
unsigned char e[RSAref_MAX_LEN];
} RSArefPublicKey;
typedef struct RSArefPrivateKey_st
{
unsigned int bits;
unsigned char m[RSAref_MAX_LEN];
unsigned char e[RSAref_MAX_LEN];
unsigned char d[RSAref_MAX_LEN];
unsigned char prime[2][RSAref_MAX_PLEN];
unsigned char pexp[2][RSAref_MAX_PLEN];
unsigned char coef[RSAref_MAX_PLEN];
} RSArefPrivateKey;
ECC结构定义
公钥数据结构定义 |
|
|
字段名称 |
数据长度(字节) |
含义 |
bits |
4 |
密钥长度 |
x |
ECCref_MAX_LEN |
公钥x坐标 |
y |
ECCref_MAX_LEN |
公钥y坐标 |
私钥数据结构定义 |
|
|
字段名称 |
字段名称 |
字段名称 |
bits |
4 |
密钥长度 |
K |
ECCref_MAX_LEN |
私钥 |
#define ECCref_MAX_BITS 512
#define ECCref_MAX_LEN ((ECCref_MAX_BITS+7)/8)
typedef struct ECCrefPublicKey_st
{
unsigned int bits;
unsigned char x[ECCref_MAX_LEN];
unsigned char y[ECCref_MAX_LEN];
}ECCrefPublicKey;
typedef struct ECCrefPrivateKey_st
{
unsigned int bits;
unsigned char K[ECCref_MAX_LEN];
}ECCrefPrivateKey;
ECC加密数据结构定义
公钥数据结构定义 |
|
|
字段名称 |
数据长度(字节) |
含义 |
x |
ECCref_MAX_LEN |
X分量 |
y |
ECCref_MAX_LEN |
Y分量 |
M |
32 |
明文杂凑 |
L |
4 |
明文数据长度 |
C |
L |
密文值 |
typedef struct ECCCipher_st
{
unsigned char x[ECCref_MAX_LEN];
unsigned char y[ECCref_MAX_LEN];
unsigned char M[32];
unsigned int L;
unsigned char C[1];
}ECCCipher;
ECC签名数据结构定义
签名数据结构定义 |
|
|
字段名称 |
数据长度(字节) |
含义 |
r |
ECCref_MAX_LEN |
签名的r部分 |
s |
ECCref_MAX_LEN |
签名的s部分 |
typedef struct ECCSignature_st
{
unsigned char r[ECCref_MAX_LEN];
unsigned char s[ECCref_MAX_LEN];
}ECCSignature;
ECC加密密钥对保护结构
数据项 |
类型 |
意义 |
备注 |
ulAsymmAlgID |
unsigned long |
保护对称密钥的非对称算法标识 |
|
ulSymmAlgID |
unsigned long |
对称算法标识 |
必须为ECB模式 |
ECCCipherBlob |
ECCCIPHERBLOB |
对称密钥密文 |
|
PubKey |
ECCPUBLICKEYBLOB |
加密密钥对的公钥 |
|
cbEncryptedPrivKey |
无符号数组 |
加密密钥对的私钥密文,其有效值为原文的(ulBits+7)/8 |
私钥原文为ECCPRIVATEKEYBLOB结构中的PrivateKey |
typedef struct SDF_ENVELOPEDKEYBLOB
{
unsigned long ulAsymmAlgID;
unsigned long ulSymmAlgID;
ECCCipher ECCCipherBlob;
ECCrefPublicKey PubKey;
Unsigned char cbEncryptedPriKey[64];
}ENVELOPEDKEYBLOB,*PENVELOPEDKEYBLOB;
RSA加密密钥对保护结构
数据项 |
类型 |
意义 |
备注 |
ulAsymmAlgID |
unsigned long |
保护对称密钥的非对称算法标识 |
|
ulSymmAlgID |
unsigned long |
对称算法标识 |
必须为ECB模式 |
RSACipherBlob |
无符号数组 |
对称密钥密文 |
|
PubKey |
RSAPUBLICKEYBLOB |
加密密钥对的公钥 |
|
cbEncryptedPrivKey |
无符号数组 |
加密密钥对的私钥密文,其有效值为原文的(ulBits+7)/8 |
私钥原文为ECCPRIVATEKEYBLOB结构中的PrivateKey |
typedef struct SDF_RSAENVELOPEDKEYBLOB
{
unsigned long ulAsymmAlgID;
unsigned long ulSymmAlgID;
unsigned char RSACipherBlob[256];
RSArefPublicKey PubKey;
Unsigned char cbEncryptedPriKey[896];
}RSAENVELOPEDKEYBLOB,*PRSAENVELOPEDKEYBLOB;
SM9签名主私钥数据结构
Sm9签名主私钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
bits |
4 |
模数的实际位长度 |
s |
SM9ref_MAX_LEN |
私有签名主密钥 |
typedef struct SM9refSignMastPrivateKey_st
{
unsigned int bits;
unsigned char s[SM9ref_MAX_LEN];
} SM9SignMastPrivateKey;
SM9签名主公钥数据结构
Sm9签名主公钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
compressType |
4 |
压缩模式,只支持4模式 |
bits |
4 |
模数的实际位长度 |
xa |
SM9ref_MAX_LEN |
曲线上点X坐标低维 |
xb |
SM9ref_MAX_LEN |
曲线上点X坐标高维 |
ya |
SM9ref_MAX_LEN |
曲线上点Y坐标高维 |
yb |
SM9ref_MAX_LEN |
曲线上点Y坐标高维 |
typedef struct SM9refSignMastPublicKey_st
{
unsigned int compressType;
unsigned int bits;
unsigned char xa[SM9ref_MAX_LEN];
unsigned char xb[SM9ref_MAX_LEN];
unsigned char ya[SM9ref_MAX_LEN];
unsigned char yb[SM9ref_MAX_LEN];
} SM9SignMastPublicKey;
SM9加密主私钥数据结构
Sm9加密主私钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
bits |
4 |
模数的实际位长度 |
s |
SM9ref_MAX_LEN |
私有加密主密钥 |
typedef struct SM9refEncMastPrivateKey_st
{
unsigned int bits;
unsigned char s[SM9ref_MAX_LEN];
} SM9EncMastPrvateKey;
SM9加密主公钥数据结构
Sm9加密主公钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
bits |
4 |
模数的实际位长度 |
x |
SM9ref_MAX_LEN |
曲线上点X坐标低维 |
y |
SM9ref_MAX_LEN |
曲线上点Y坐标高维 |
typedef struct SM9refEncMastPublicKey_st
{
unsigned int bits;
unsigned char x [SM9ref_MAX_LEN];
unsigned char y[SM9ref_MAX_LEN];
} SM9EncMastPublicKey;
SM9用户签名私钥数据结构
Sm9用户签名私钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
bits |
4 |
模数的实际位长度 |
x |
SM9ref_MAX_LEN |
曲线上点的X坐标 |
y |
SM9ref_MAX_LEN |
曲线上点的Y坐标 |
typedef struct SM9refUserSignPrivateKey_st
{
unsigned int bits;
unsigned char x[SM9ref_MAX_LEN];
unsigned char y[SM9ref_MAX_LEN];
} SM9UserSignPrivateKey;
SM9用户加密私钥数据结构
Sm9用户加密私钥数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
compressType |
4 |
压缩模式,只支持4模式 |
bits |
4 |
模数的实际位长度 |
xa |
SM9ref_MAX_LEN |
曲线上点X坐标低维 |
xb |
SM9ref_MAX_LEN |
曲线上点X坐标高维 |
ya |
SM9ref_MAX_LEN |
曲线上点Y坐标高维 |
yb |
SM9ref_MAX_LEN |
曲线上点Y坐标高维 |
typedef struct SM9refUserEncPrivateKey_st
{
unsigned int compressType;
unsigned int bits;
unsigned char xa[SM9ref_MAX_LEN];
unsigned char xb[SM9ref_MAX_LEN];
unsigned char ya[SM9ref_MAX_LEN];
unsigned char yb[SM9ref_MAX_LEN];
} SM9UserEncPrivateKey;
SM9加密数据结构
Sm9加密数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
enType |
1 |
加密方式 |
x |
SM9ref_MAX_LEN |
与y组成椭圆曲线上点 |
y |
SM9ref_MAX_LEN |
与x组成椭圆曲线上点 |
h |
SM9ref_MAX_LEN |
明文的杂凑值 |
L |
4 |
密文数据长度 |
C |
L |
密文数据 |
typedef struct SM9refCipher_st
{
unsigned char enType;
unsigned char x[SM9ref_MAX_LEN];
unsigned char y[SM9ref_MAX_LEN];
unsigned char h[SM9ref_MAX_LEN];
unsigned int L;
unsigned char C[1];
} SM9Cipher;
SM9签名数据结构
Sm9签名数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
h |
SM9ref_MAX_LEN |
签名结果的H部分 |
x |
SM9ref_MAX_LEN |
曲线上点的X坐标 |
y |
SM9ref_MAX_LEN |
曲线上点的Y坐标 |
typedef struct SM9refSignature_st
{
unsigned char h[SM9ref_MAX_LEN];
unsigned char x[SM9ref_MAX_LEN];
unsigned char y[SM9ref_MAX_LEN];
} SM9Signature;
SM9密钥封装数据结构
Sm9密钥封装数据结构定义 |
|
|
字段名称 |
数据长度 |
含义 |
k |
SM9ref_MAX_LEN |
生成的对称密钥 |
x |
SM9ref_MAX_LEN |
封装的交换密文,曲线上点(X,Y)的X |
y |
SM9ref_MAX_LEN |
封装的交换密文,曲线上点(X,Y) 的Y |
typedef struct SM9refKeyPackage_st
{
unsigned char k[SM9ref_MAX_LEN];
unsigned char x[SM9ref_MAX_LEN];
unsigned char y[SM9ref_MAX_LEN];
} SM9KeyPackage;
2.2 设备接口描述
以SDF开头的API为《GM/T 0018-2012 密码设备应用接口规范》定义的API和各厂家通用的API。
以SPII开头的API为自定义API。
API分为基础API和扩展API,扩展API在接口描述中有【扩展API】字样。当密码边界为密码卡时,用户应仅使用基础API,以保证密钥安全。当密码边界为安装密码卡的设备,密钥安全由设备保证时,用户可以使用扩展API,方便管理密码卡内密钥。
2.2.1 设备管理类函数
打开设备 SDF_OpenDevice
int SDF_OpenDevice(void **phDeviceHandle);
参数 |
|
phDeviceHandle[out] |
返回设备句柄 |
备注 |
1、 phDeviceHandle由函数初始化并填写内容 |
2、不受状态和权限限制 |
关闭设备SDF_CloseDevice
int SDF_CloseDevice(void *hDeviceHandle);
参数 |
|
phDeviceHandle[in] |
已打开的设备句柄 |
创建会话 SDF_OpenSession
int SDF_OpenSession(void *hDeviceHandle, void **phSessionHandle);
参数 |
|
phDeviceHandle[in] |
已打开的设备句柄 |
phSessionHandle[out] |
返回与密码设备建立的新会话句柄 |
关闭会话 SDF_CloseSession
int SDF_CloseSession(void *hSessionHandle);
参数 |
|
ulDeviceHandle[in] |
与密码设备已建立的会话句柄 |
获取设备信息 SDF_GetDeviceInfo
int SDF_GetDeviceInfo(void *hSessionHandle, DEVICEINFO *pstDeviceInfo);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pstDeviceInfo [out] |
设备能力描述信息,内容及格式见设备信息定义 |
获取设备配置信息SPII_GetConfig
int SPII_GetConfig(void *phDeviceHandle, DEVICECONFIG *cfg);
参数 |
|
phDeviceHandle[in] |
与设备建立的会话句柄 |
cfg[out] |
设备配置信息,内容及格式见设备配置信息结构 |
产生随机数 SDF_GenerateRandom
int SDF_GenerateRandom(
void *hSessionHandle,
unsigned int uiLength,
unsigned char *pucRandom);
参数: |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiLength[in] |
欲获取的随机数长度 |
pucRandom[out] |
缓冲区指针,用于存放获取的随机数 |
备注 |
1 、获取随机数的长度不限 |
2 、在就绪状态,不限权限可以使用 |
获取私钥使用权限 SDF_GetPrivateKeyAccessRight
int SDF_GetPrivateKeyAccessRight(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *pucPassword,
unsigned int uiPwdLength);
描述 |
获取密码设备内部存储的指定索引私钥的使用授权 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
pucPassword[in] |
使用私钥权限标识码 |
uiPwdLength[in] |
私钥权限标识码长度,不少于8字节 |
备注 |
1、密码设备存储的密钥对索引值的起始索引值为0,最大为配置信息VKPNum-1 |
2、0号密钥在初始化、就绪状态,此函数不限权限可以调用,密钥实际使用还需登录管理员权限 |
3、其他密钥在就绪状态,此函数不限权限可以调用,密钥实际使用还需登录管理员或操作员权限 |
释放私钥使用权限 SDF_ReleasePrivateKeyAccessRight
int SDF_ReleasePrivateKeyAccessRight(
void *hSessionHandle,
unsigned int uiKeyIndex
);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
备注 |
1、密码设备存储的密钥对索引值的起始索引值为0,最大为配置信息VKPNum-1 |
2、0号密钥在初始化、就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,不限权限可以调用 |
2.2.2 密钥管理类函数
导出RSA签名公钥SDF_ExportSignPublicKey_RSA
int SDF_ExportSignPublicKey_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey);
描述 |
导出密码设备内部存储的指定索引位置的签名公钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
pucPublicKey[out] |
RSA公钥结构 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
导出RSA加密公钥SDF_ExportEncPublicKey_RSA
int SDF_ExportEncPublicKey_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey);
描述 |
导出密码设备内部存储的指定索引位置的加密公钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
pucPublicKey[out] |
RSA公钥结构 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
产生RSA密钥对并输出SDF_GenerateKeyPair_RSA
int SDF_GenerateKeyPair_RSA(
void *hSessionHandle,
unsigned int uiKeyBits,
RSArefPublicKey *pucPublicKey,
RSArefPrivateKey *pucPrivateKey);
描述 |
导出密码设备内部存储的指定索引位置的加密公钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyBits[in] |
指定密钥模长 |
pucPublicKey[out] |
RSA公钥结构 |
pucPrivateKey[out] |
RSA私钥结构 |
备注 |
1、uiKeyBits支持1024、2048 |
2、在就绪状态,不限权限可以使用 |
生成会话密钥并用内部RSA公钥加密输出SDF_GenerateKeyWithIPK_RSA
int SDF_GenerateKeyWithIPK_RSA(
void *hSessionHandle,
unsigned int uiIPKIndex,
unsigned int uiKeyBits,
unsigned char *pucKey,
unsigned int *puiKeyLength,
void **phKeyHandle);
描述 |
生成会话密钥并用指定索引的内部加密公钥加密输出,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiIPKIndex[in] |
密码设备内部存储公钥的索引值 |
uiKeyBits[in] |
指定产生的会话密钥长度 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、uiKeyBits仅支持128bit即16字节 |
2、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
3、0号密钥在就绪状态,管理员权限下可以调用 |
4、其他密钥在就绪状态,管理员或操作员权限可以调用 |
5、公钥加密数据时填充方式按照 PKCS#1 v1.5的要求进行 |
生成会话密钥并用外部RSA公钥加密输出SDF_GenerateKeyWithEPK_RSA
int SDF_GenerateKeyWithEPK_RSA(
void *hSessionHandle,
unsigned int uiKeyBits,
RSArefPublicKey *pucPublicKey,
unsigned char *pucKey,
unsigned int *puiKeyLength,
void **phKeyHandle);
描述 |
生成会话密钥并用外部公钥加密输出,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyBits[in] |
指定产生的会话密钥长度 |
pucPublicKey[in] |
输入的外部RSA公钥结构 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、uiKeyBits仅支持128bit即16字节 |
2、在就绪状态,不限权限可以调用 |
3、公钥加密数据时填充方式按照 PKCS#1 v1.5的要求进行 |
导入会话密钥并用内部RSA私钥解密SDF_ImportKeyWithISK_RSA
int SDF_ImportKeyWithISK_RSA(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned char *pucKey,
unsigned int puiKeyLength,
void **phKeyHandle);
描述 |
导入会话密钥并用内部私钥解密,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiIPKIndex[in] |
密码设备内部存储公钥的索引值 |
uiKeyBits[in] |
指定产生的会话密钥长度 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、uiKeyBits仅支持128bit即16字节 |
2、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
3、0号密钥在就绪状态,管理员权限下可以调用 |
4、其他密钥在就绪状态,管理员或操作员权限可以调用 |
5、填充方式与公钥加密时相同 |
基于RSA算法的数字信封转换SDF_ExchangeDigitEnvelopeBaseOnRSA
int SDF_ExchangeDigitEnvelopeBaseOnRSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey,
unsigned char *pucDEInput,
unsigned int uiDELength,
unsigned char *pucDEOutput,
unsigned int *puiDELength);
描述 |
将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密,可用于数字信封转换 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储的内部RSA密钥对索引值 |
pucPublicKey[in] |
外部RSA公钥结构 |
pucDEInput[in] |
缓冲区指针,用于存放输入的会话密钥密文 |
uiDELength[in] |
输入的会话密钥密文长度 |
pucDEOutput[out] |
缓冲区指针,用于存放输出的会话密钥密文 |
puiDELength[out] |
输出的会话密钥密文长度 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
导出ECC签名公钥SDF_ExportSignPublicKey_ECC
int SDF_ExportSignPublicKey_ECC(
void *hSessionHandle,
unsigned int uiKeyIndex,
ECCrefPublicKey *pucPublicKey);
描述 |
导出密码设备内部存储的指定索引位置的签名公钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
pucPublicKey[out] |
ECC公钥结构 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
导出ECC加密公钥SDF_ExportEncPublicKey_ECC
int SDF_ExportEncPublicKey_ECC(
void *hSessionHandle,
unsigned int uiKeyIndex,
ECCrefPublicKey *pucPublicKey);
描述 |
导出密码设备内部存储的指定索引位置的加密公钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备存储私钥索引值 |
pucPublicKey[out] |
ECC公钥结构 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
产生ECC密钥对并输出SDF_GenerateKeyPair_ECC
int SDF_GenerateKeyPair_ECC(
void *hSessionHandle,
unsigned int uiAlgID,
unsigned int uiKeyBits,
ECCrefPublicKey *pucPublicKey,
ECCrefPrivateKey *pucPrivateKey);
描述 |
请求密码设备产生指定类型和模长的非对称密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
指定算法标识 |
uiKeyBits [in] |
指定密钥比特长度 |
pucPublicKey[out] |
ECC公钥结构 |
pucPrivateKey[out] |
ECC私钥结构 |
生成会话密钥用内部ECC公钥加密输出SDF_GenerateKeyWithIPK_ECC
int SDF_GenerateKeyWithIPK_ECC(
void *hSessionHandle,
unsigned int uiIPKIndex,
unsigned int uiKeyBits,
ECCCipher *pucKey,
void **phKeyHandle);
描述 |
生成会话密钥并用指定索引的内部加密公钥加密输出,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiIPKIndex[in] |
密码设备内部存储公钥的索引值 |
uiKeyBits[in] |
产生会话密钥的bit长度 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
3、0号公钥在就绪状态,管理员权限下可以调用 |
4、其他公钥在就绪状态,管理员或操作员权限可以调用 |
生成会话密钥用外部ECC公钥加密输出SDF_GenerateKeyWithEPK_ECC
int SDF_GenerateKeyWithEPK_ECC(
void *hSessionHandle,
unsigned int uiKeyBits,
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
ECCCipher *pucKey,
void **phKeyHandle);
描述 |
生成会话密钥并用内部公钥加密输出,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyBits[in] |
产生会话密钥的bit长度 |
uiAlgID[in] |
外部 ECC 公钥的算法标识 |
pucPublicKey[in] |
输入的外部ECC公钥结构 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
2、在就绪状态,不限权限可以调用 |
3、uiAlgID支持SGD_SM2_3 |
导入会话密钥并用内部ECC私钥解密SDF_ImportKeyWithISK_ECC
int SDF_ImportKeyWithISK_ECC(
void *hSessionHandle,
unsigned int uiISKIndex,
ECCCipher *pucKey,
void **phKeyHandle);
描述 |
导入会话密钥并用内部私钥解密,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex[in] |
密码设备内部存储加密私钥的索引值,对应于加密时的公钥 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥密文 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
3、0号私钥在就绪状态,管理员权限下可以调用 |
4、其他私钥在就绪状态,管理员或操作员权限可以调用 |
生成密钥协商参数并输出 SDF_GenerateAgreementDataWithECC
int SDF_GenerateAgreementDataWithECC(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned int uiKeyBits,
unsigned char *pucSponsorID,
unsigned int uiSponsorIDLength,
ECCrefPublicKey *pucSponsorPublicKey,
ECCrefPublicKey *pucSponsorTmpPublicKey,
void ** phAgreementHandle);
描述 |
密钥协商第一步,密钥协商的发起方首先调用本函数。如果在具体的应用中,协商双方没有统一分配的ID,可以将ID设定为常量。 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex [in] |
密码设备内部存储加密私钥的索引值,该私钥用于参与密钥协商 |
uiKeyBits[in] |
要求协商的密钥长度 |
pucSponsorID[in] |
参与密钥协商的发起方ID值 |
uiSponsorIDLength[in] |
发起方ID长度 |
pucSponsorPublicKey[out] |
返回的发起方ECC公钥结构 |
pucSponsorTmpPublicKey[out] |
返回的发起方临时ECC公钥结构 |
phAgreementHandle[out] |
返回的协商句柄,用于计算协商密钥 |
备注 |
1、 uiKeyBits为128bit。如果发起方或者响应方ID长度为零,则函数使用默认ID,为32字节0xff |
2、 密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
3、 uiISKIndex=0时,在就绪状态管理员权限下可以使用 |
4、 uiISKIndex不等于0时,在就绪状态下,管理员或操作员权限可以使用 |
计算会话密钥SDF_GenerateKeyWithECC
int SDF_GenerateKeyWithECC (
void *hSessionHandle,
unsigned char *pucResponseID,
unsigned int uiResponseIDLength,
ECCrefPublicKey *pucResponsePublicKey,
ECCrefPublicKey *pucResponseTmpPublicKey,
void *hAgreementHandle,
void **phKeyHandle);
描述 |
密钥协商第三步,密钥协商的发起方调用本函数。如果在具体的应用中,协商双方没有统一分配的ID,可以将ID设定为常量。 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucResponseID[in] |
响应方ID值 |
uiResponseIDLength[in] |
响应方ID长度 |
pucResponsePublicKey[in] |
响应方ECC公钥结构 |
pucResponseTmpPublicKey[in] |
响应方临时ECC公钥结构 |
hAgreementHandle[in] |
协商句柄,用于计算协商密钥 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、 uiKeyBits为128bit。如果发起方或者响应方ID长度为零,则函数使用默认ID,为32字节0xff |
2、在就绪状态下,管理员或操作员权限可以使用 |
3、密钥协商第三步若失败,应销毁密钥协商参数句柄,从第一步开始重新执行。 |
产生协商参数并计算会话密钥SDF_GenerateAgreementDataAndKeyWithECC
int SDF_GenerateAgreementDataAndKeyWithECC(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned int uiKeyBits,
unsigned char *pucResponseID,
unsigned int uiResponseIDLength,
unsigned char *pucSponsorID,
unsigned int uiSponsorIDLength,
ECCrefPublicKey *pucSponsorPublicKey,
ECCrefPublicKey *pucSponsorTmpPublicKey,
ECCrefPublicKey *pucResponsePublicKey,
ECCrefPublicKey *pucResponseTmpPublicKey,
void **phKeyHandle);
描述 |
密钥协商第二步,密钥协商的响应方调用本函数。如果在具体的应用中,协商双方没有统一分配的ID,可以将ID设定为常量。 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex [in] |
密码设备内部存储加密私钥的索引值,该私钥用于参与密钥协商 |
uiKeyBits[in] |
要求协商的密钥长度 |
pucResponseID[in] |
响应方ID值 |
uiSponsorIDLength[in] |
响应方ID长度 |
pucSponsorID[in] |
参与密钥协商的发起方ID值 |
uiSponsorIDLength[in] |
发起方ID长度 |
pucSponsorPublicKey[in] |
输入的发起方ECC公钥结构 |
pucSponsorTmpPublicKey[in] |
输入的发起方临时ECC公钥结构 |
pucResponsePublicKey[out] |
返回的响应方ECC公钥结构 |
pucResponseTmpPublicKey[out] |
返回的响应方ECC临时公钥结构 |
phKeyHandle [out] |
返回的密钥句柄 |
备注 |
1、uiKeyBits为128bit。如果发起方或者响应方ID长度为零,则函数使用默认ID,为32字节0xff |
2、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
3、uiISKIndex=0时,在就绪状态管理员权限下可以使用 |
4、uiISKIndex不等于0时,在就绪状态下,管理员或操作员权限可以使用 |
销毁密钥协商参数句柄SPII_DestroyAgreementHandle
int SPII_DestroyAgreementHandle (
void *hSessionHandle,
void *hAgreementHandle);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hAgreementHandle[in] |
协商句柄,用于计算协商密钥 |
备注 |
1、在就绪状态下,管理员或操作员权限可以使用 |
2、在密钥协商第三步计算会话密钥后不论是否成功都应销毁密钥协商参数 |
基于ECC算法的数字信封转换SDF_ExchangeDigitEnvelopeBaseOnECC
int SDF_ExchangeDigitEnvelopeBaseOnECC(
IN HANDLE hSessionHandle,
IN unsigned int uiKeyIndex,
IN unsigned int uiAlgID,
IN ECCrefPublicKey *pucPublicKey,
IN ECCCipher *pucEncDataIn,
OUT ECCCipher *pucEncDataOut
);
描述 |
将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密,可用于数字信封转换 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex [in] |
密码设备存储的ECC 密钥对索引值 |
uiAlgID[in] |
外部ECC公钥的算法标识 |
pucPublicKey[in] |
外部ECC公钥结构 |
pucEncDataIn[in] |
缓冲区指针,用于存放输入的会话密钥密文 |
pucEncDataOut[out] |
缓冲区指针,用于存放输出的会话密钥密文 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、uiISKIndex=0时,在就绪状态管理员权限下可以使用 |
3、uiISKIndex不等于0时,在就绪状态下,管理员或操作员权限可以使用 |
生成会话密钥并用密钥加密密钥加密输出SDF_GenerateKeyWithKEK
int SDF_GenerateKeyWithKEK (
void *hSessionHandle,
unsigned int uiKeyBits,
unsigned int uiAlgID,
unsigned int uiKEKIndex,
unsigned char *pucKey,
unsigned int *puiKeyLength,
void **phKeyHandle);
描述 |
生成会话密钥并用密钥加密密钥加密输出,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyBits[in] |
指定产生的会话密钥长度 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
uiKEKIndex[in] |
密码设备内部存储密钥加密密钥的索引值 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文字节长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、加密模式默认使用ECB模式 |
2、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
3、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
4、在就绪状态下,管理员或操作员权限可以使用 |
导入会话密钥并用密钥加密密钥解密SDF_ImportKeyWithKEK
int SDF_ImportKeyWithKEK (
void *hSessionHandle,
unsigned int uiAlgID,
unsigned int uiKEKIndex,
unsigned char *pucKey,
unsigned int *puiKeyLength,
void **phKeyHandle);
描述 |
导入会话密钥并用密钥加密密钥解密,同时返回密钥句柄 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
uiKEKIndex[in] |
密码设备内部存储密钥加密密钥的索引值 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥密文 |
puiKeyLength[in] |
输入的密钥密文字节长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、加密模式默认使用ECB模式 |
2、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
3、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
4、在就绪状态下,管理员或操作员权限可以使用 |
导入明文会话密钥SDF_ImportKey
int SDF_ImportKey (
void *hSessionHandle,
unsigned char *pucKey,
unsigned int uiKeyLength,
void **phKeyHandle);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥明文 |
puiKeyLength[in] |
输入的密钥明文字节长度 |
phKeyHandle[out] |
返回的密钥句柄 |
备注 |
1、会话密钥的实际长度为16字节,会话密钥用于对称加解密,见函数SDF_Encrypt和SDF_Decrypt |
2、在就绪状态下,不限权限可以使用 |
销毁会话密钥SDF_DestroyKey
int SDF_DestroyKey (
void *hSessionHandle,
void *hKeyHandle);
描述 |
销毁密钥句柄,并释放为密钥句柄分配的内存等资源。 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
输入的密钥句柄 |
备注 |
1、在运算完成后应调用本函数销毁密钥句柄 |
2、在就绪状态下,不限权限可以使用 |
会话密钥用内部RSA公钥加密输出SDF_ExportKeyWithIPK_RSA
int SDF_ExportKeyWithIPK_RSA(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiIPKIndex,
unsigned char *pucKey,
unsigned int *puiKeyLength);
描述 |
【扩展API】会话密钥用指定索引的内部加密公钥加密输出,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
uiIPKIndex[in] |
密码设备内部存储公钥的索引值 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文长度 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
4、公钥加密数据时填充方式按照 PKCS#1 v1.5的要求进行 |
会话密钥用外部RSA公钥加密输出SDF_ExportKeyWithEPK_RSA
int SDF_ExportKeyWithEPK_RSA(
void *hSessionHandle,
void *hKeyHandle,
RSArefPublicKey *pucPublicKey,
unsigned char *pucKey,
unsigned int *puiKeyLength);
描述 |
【扩展API】会话密钥用外部公钥加密输出,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
pucPublicKey[in] |
输入的外部RSA公钥结构 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文长度 |
备注 |
1、uiKeyBits仅支持128bit即16字节 |
2、在就绪状态,不限权限可以调用 |
会话密钥用内部ECC公钥加密输出SDF_ExportKeyWithIPK_ECC
int SDF_ExportKeyWithIPK_ECC(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiIPKIndex,
ECCCipher *pucKey);
描述 |
【扩展API】会话密钥用指定索引的内部加密公钥加密输出,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
uiIPKIndex[in] |
密码设备内部存储公钥的索引值 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
备注 |
1、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
2、0号公钥在就绪状态,管理员权限下可以调用 |
3、其他公钥在就绪状态,管理员或操作员权限可以调用 |
会话密钥用外部ECC公钥加密输出SDF_ExportKeyWithEPK_ECC
int SDF_ExportKeyWithEPK_ECC(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
ECCCipher *pucKey);
描述 |
【扩展API】会话密钥用内部公钥加密输出,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
uiAlgID[in] |
外部 ECC 公钥的算法标识 |
pucPublicKey[in] |
输入的外部ECC公钥结构 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
备注 |
1、在就绪状态,不限权限可以调用 |
2、uiAlgID支持SGD_SM2_3 |
会话密钥用密钥加密密钥加密输出SDF_ExportKeyWithKEK
int SDF_ExportKeyWithKEK(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiAlgID,
unsigned int uiKEKIndex,
unsigned char *pucKey,
unsigned int *puiKeyLength);
描述 |
【扩展API】会话密钥用密钥加密密钥加密输出,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
uiKEKIndex[in] |
密码设备内部存储密钥加密密钥的索引值 |
pucKey[out] |
缓冲区指针,用于存放返回的密钥密文 |
puiKeyLength[out] |
返回的密钥密文字节长度 |
备注 |
1、加密模式默认使用ECB模式 |
2、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
3、在就绪状态下,管理员或操作员权限可以使用 |
2.2.3 非对称算法运算类函数
外部公钥RSA运算SDF_ExternalPublicKeyOperation_RSA
int SDF_ExternalPublicKeyOperation_RSA(
void *hSessionHandle,
RSArefPublicKey *pucPublicKey,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucPublicKey[in] |
外部RSA公钥结构 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
备注 |
1、运算输入的数据应外部填充 |
2、在就绪状态下,不限权限可以使用 |
外部私钥RSA运算SDF_ExternalPrivateKeyOperation_RSA
int SDF_ExternalPrivateKeyOperation_RSA(
void *hSessionHandle,
RSArefPrivateKey *pucPrivateKey,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucPrivateKey[in] |
外部RSA私钥结构 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
内部公钥RSA运算SDF_InternalPublicKeyOperation_RSA
int SDF_InternalPublicKeyOperation_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备内部存储公钥的索引值 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
备注 |
1、运算输入的数据应外部填充 |
2、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1,该接口访问密码设备存储的RSA签名公钥。 |
3、0号密钥在就绪状态,管理员权限下可以调用 |
4、其他密钥在就绪状态,管理员或操作员权限可以调用 |
内部私钥RSA运算SDF_InternalPrivateKeyOperation_RSA
int SDF_InternalPrivateKeyOperation_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备内部存储私钥的索引值 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1,该接口访问密码设备存储的RSA签名私钥。 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
内部公钥RSA加密运算SDF_InternalEncrypt_RSA
int SDF_InternalEncrypt_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
描述 |
【扩展API】使用内部指定索引的加密公钥对数据进行运算,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备内部存储公钥的索引值 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
备注 |
1、运算输入的数据应外部填充 |
2、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1。 |
3、0号密钥在就绪状态,管理员权限下可以调用 |
4、其他密钥在就绪状态,管理员或操作员权限可以调用 |
内部私钥RSA解密运算SDF_InternalPrivateKeyOperation_RSA
int SDF_InternalDecrypt_RSA(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *pucDataInput,
unsigned int uiInputLength,
unsigned char *pucDataOutput,
unsigned int *puiOutputLength);
描述 |
【扩展API】使用内部指定索引的加密私钥对数据进行运算,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密码设备内部存储私钥的索引值 |
pucDataInput[in] |
缓冲区指针,用于存放输入的数据 |
uiInputLength[in] |
输入的数据长度 |
pucDataOutput[out] |
缓冲区指针,用于存放输出的数据 |
puiOutputLength[out] |
输出的数据长度 |
备注 |
1、密码设备存储的RSA密钥对索引值的起始索引值为0,最大为配置信息RSAKeyPairsNum-1。 |
2、0号密钥在就绪状态,管理员权限下可以调用 |
3、其他密钥在就绪状态,管理员或操作员权限可以调用 |
外部密钥ECC签名SDF_ExternalSign_ECC
int SDF_ExternalSign_ECC(
void * hSessionHandle,
unsigned int uiAlgID,
ECCrefPrivateKey *pucPrivateKey,
unsigned char *pucData,
unsigned int uiDataLength,
ECCSignature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID [in] |
算法标记,支持SGD_SM2_1 |
pucPrivateKey[in] |
私钥结构指针 |
pucData [in] |
签名数据 |
uiDataLength [in] |
签名数据长度 |
pucSignature[out] |
签名值结构 |
备注 |
1、ECC默认长度为256bit |
2、签名数据长度固定为32byte,对原文的杂凑运算,在函数外部完成。 |
3、在就绪状态下,不限权限可以使用 |
外部密钥ECC验证SDF_ExternalVerify_ECC
int SDF_ExternalVerify_ECC(
void *hSessionHandle,
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
unsigned char *pucDataInput,
unsigned int uiInputLength,
ECCSignature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,指定使用的ECC算法,支持SGD_SM2_1 |
pucPublicKey[in] |
外部ECC公钥结构 |
pucData[in] |
缓冲区指针,用于存放外部输入的数据 |
uiDataLength[in] |
输入的数据字节长度 |
pucSignature[in] |
缓冲区指针,用于存放输入的签名值数据 |
备注 |
1、对原文的杂凑运算,在函数外部完成。 |
2、就绪状态下,不限权限可以使用 |
内部密钥ECC签名SDF_InternalSign_ECC
int SDF_InternalSign_ECC(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned char *pucData,
unsigned int uiDataLength,
ECCSignature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex [in] |
密码设备内部存储的ECC签名私钥的索引值 |
pucData[in] |
缓冲区指针,用于存放外部输入的数据 |
uiDataLength[in] |
输入的数据字节长度 |
pucSignature [out] |
缓冲区指针,用于存放输出的签名值数据 |
备注 |
1、对原文的杂凑运算,在函数外部完成。 |
2、 uiISKIndex<=KEYPAIR_MAX_INDEX |
3、 uiISKIndex =0时,就绪状态下,管理员权限可以使用 |
4、 uiISKIndex >0时,就绪状态下,管理员或操作员权限可以使用 |
内部密钥ECC验证SDF_InternalVerify_ECC
int SDF_InternalVerify_ECC(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned char *pucData,
unsigned int uiDataLength,
ECCSignature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex [in] |
密码设备内部存储的ECC签名公钥的索引值 |
pucData[in] |
缓冲区指针,用于存放外部输入的数据 |
uiDataLength[in] |
输入的数据字节长度 |
pucSignature[in] |
缓冲区指针,用于存放输入的签名值数据 |
备注 |
1、对原文的杂凑运算,在函数外部完成。 |
2、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
3、uiISKIndex =0时,就绪状态下,管理员权限可以使用 |
4、uiISKIndex >0时,就绪状态下,管理员或操作员权限可以使用 |
外部密钥ECC加密SDF_ExternalEncrypt_ECC
int SDF_ExternalEncrypt_ECC(
void *hSessionHandle,
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
unsigned char *pucData,
unsigned int uiDataLength,
ECCCipher *pucEncData);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,指定使用的ECC算法,支持SGD_SM2_3 |
pucPublicKey[in] |
外部ECC公钥结构 |
pucData[in] |
缓冲区指针,用于存放外部输入的数据 |
uiDataLength[in] |
输入的数据长度 |
pucEncData[out] |
缓冲区指针,用于存放输出的数据密文 |
备注 |
1、输入的数据长度uiDataLength<=MAX_DATALEN。 |
2、在就绪状态下,不限权限可以使用 |
外部密钥ECC解密SDF_ExternalDecrypt_ECC
SDF_ExternalDecrypt_ECC(
void * hSessionHandle,
unsigned int uiAlgID,
ECCrefPrivateKey *pucPrivateKey,
ECCCipher *pucEncData,
unsigned char *pucData,
unsigned int *puiDataLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID [in] |
算法标记,支持SGD_SM2_3 |
pucPrivateKey[in] |
私钥结构指针 |
pucEncData[in] |
密文结构指针 |
pucData[out] |
明文指针 |
puiDataLength[out] |
明文指针长度 |
内部密钥ECC加密SDF_InternalEncrypt_ECC
int SDF_InternalEncrypt_ECC(
void *hSessionHandle,
unsigned int uiIPKIndex,
unsigned int uiAlgID,
unsigned char *pucData,
unsigned int uiDataLength,
ECCCipher *pucEncData);;
描述 |
【扩展API】使用内部ECC公钥对数据进行加密运算,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiIPKIndex[in] |
密码设备内部存储的ECC加密公钥的索引值 |
uiAlgID[in] |
算法标识,指定使用的ECC算法,支持SGD_SM2_3 |
pucData[in] |
缓冲区指针,用于存放外部输入的数据 |
uiDataLength[in] |
输入的数据长度 |
pucEncData[out] |
缓冲区指针,用于存放输出的数据密文 |
备注 |
1、输入的数据长度uiDataLength<=MAX_DATALEN。 |
2、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
3、在就绪状态下,管理员或操作员权限可以使用 |
内部密钥ECC解密SDF_InternalDecrypt_ECC
int SDF_InternalDecrypt_ECC(
void *hSessionHandle,
unsigned int uiISKIndex,
unsigned int uiAlgID,
ECCCipher *pucEncData,
unsigned char *pucData,
unsigned int *puiDataLength);
描述 |
【扩展API】内部ECC私钥解密,非国密标准接口 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiISKIndex[in] |
密码设备内部存储的EC加密公钥的索引值 |
uiAlgID [in] |
算法标记,支持SGD_SM2_3 |
pucEncData[in] |
密文结构指针 |
pucData[out] |
明文指针 |
puiDataLength[out] |
明文指针长度 |
备注 |
1、在就绪状态下,不限权限可以使用 |
2、密码设备存储的SM2密钥对索引值的起始索引值为0,最大为配置SM2KeyPairsNum-1 |
3、uiISKIndex =0时,就绪状态下,管理员权限可以使用 |
4、uiISKIndex >0时,就绪状态下,管理员或操作员权限可以使用 |
2.2.4 对称算法运算类函数
对称加密SDF_Encrypt
int SDF_Encrypt(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiAlgID,
unsigned char *pucIV,
unsigned char *pucData,
unsigned int uiDataLength,
unsigned char *pucEncData,
unsigned int *puiEncDataLength);
描述 |
使用指定的密钥句柄和IV对数据进行对称加密运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
指定的密钥句柄 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
pucIV[in|out] |
缓冲区指针,用于存放输入和返回的IV数据 |
pucData[in] |
缓冲区指针,用于存放输入的数据明文 |
uiDataLength[in] |
输入的数据明文的字节长度 |
pucEncData[out] |
缓冲区指针,用于存放输出的数据密文 |
puiEncDataLength[out] |
输出的数据密文字节长度 |
备注 |
1、此函数不对数据进行填充处理,ECB、CBC模式输入的数据必须是指定算法分组长度的整数倍。 |
2、此函数对数据进行分包处理,输入数据最大长度不限 |
3、在就绪状态下,不限权限可以使用 |
对称解密SDF_Decrypt
int SDF_Decrypt (
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiAlgID,
unsigned char *pucIV,
unsigned char *pucEncData,
unsigned int uiEncDataLength,
unsigned char *pucData,
unsigned int *puiDataLength);
描述 |
使用指定的密钥句柄和IV对数据进行对称解密运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
指定的密钥句柄 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
pucIV[in|out] |
缓冲区指针,用于存放输入和返回的IV数据 |
pucEncData[in] |
缓冲区指针,用于存放输入的数据密文 |
uiEncDataLength[in] |
输入的数据密文字节长度 |
pucData[out] |
缓冲区指针,用于存放输出的数据明文 |
puiDataLength[out] |
输出的数据明文字节长度 |
备注 |
1、此函数不对数据进行填充处理,ECB、CBC模式输入的数据必须是指定算法分组长度的整数倍。 |
2、此函数对数据进行分包处理,输入数据最大长度不限 |
3、在就绪状态下,不限权限可以使用 |
计算MAC SDF_CalculateMAC
int SDF_CalculateMAC(
void *hSessionHandle,
void *hKeyHandle,
unsigned int uiAlgID,
unsigned char *pucIV,
unsigned char *pucData,
unsigned int uiDataLength,
unsigned char *pucMAC,
unsigned int *puiMACLength);
描述 |
使用指定的密钥句柄和IV对数据进行MAC运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
指定的密钥句柄 |
uiAlgID[in] |
算法标识,指定MAC加密算法 |
pucIV[in|out] |
缓冲区指针,用于存放输入和返回的IV数据 |
pucData[in] |
缓冲区指针,用于存放输出的数据明文 |
uiDataLength[in] |
输出的数据明文字节长度 |
pucMAC[out] |
缓冲区指针,用于存放输出的MAC值 |
puiMACLength[out] |
输出的MAC值字节长度 |
备注 |
1、此函数不对数据进行填充处理,输入的数据必须是指定算法分组长度(16字节)的整数倍。 |
2、此函数对数据进行分包处理,输入数据最大长度不限。 |
3、在就绪状态下,不限权限可以使用 |
外部密钥对称加密SPII_EncryptEx
int SPII_EncryptEx(
HANDLE hSessionHandle,
unsigned char *data,
int len,
unsigned char *keybuf,
int keylen,
unsigned char *IV,
int IVLen,
int uiAlgID,
unsigned char *endata,
int *enlen);
描述 |
使用指定的外部密钥和IV对数据进行对称加密运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
data[in] |
缓冲区指针,用于存放输入的数据明文 |
len[in] |
输入的数据明文的字节长度 |
keybuf[in] |
缓冲区指针,用于存放输入的密钥数据 |
keylen[in] |
输入的密钥的字节长度 |
IV[in|out] |
缓冲区指针,用于存放输入和返回的IV数据 |
IVLen[in] |
输入的IV的字节长度 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
endata[out] |
缓冲区指针,用于存放输出的数据密文 |
enlen[out] |
输出的数据密文字节长度 |
备注 |
1、此函数不对数据进行填充处理,ECB、CBC模式输入的数据必须是指定算法分组长度的整数倍。 |
2、此函数对数据进行分包处理,输入数据最大长度不限 |
3、在就绪状态下,不限权限可以使用 |
外部密钥对称解密SPII_DecryptEx
int SPII_DecryptEx(
HANDLE hSessionHandle,
unsigned char *endata,
int enlen,
unsigned char *keybuf,
int keylen,
unsigned char *IV,
int IVLen,
int uiAlgID,
unsigned char *data,
int *len);
描述 |
使用指定的外部密钥和IV对数据进行对称解密运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
endata[in] |
缓冲区指针,用于存放输入的数据密文 |
enlen[in] |
输入的数据密文的字节长度 |
keybuf[in] |
缓冲区指针,用于存放输入的密钥数据 |
keylen[in] |
输入的密钥的字节长度 |
IV[in|out] |
缓冲区指针,用于存放输入和返回的IV数据 |
IVLen[in] |
输入的IV的字节长度 |
uiAlgID[in] |
算法标识,指定对称加密算法 |
data[out] |
缓冲区指针,用于存放输出的数据明文 |
len[out] |
输出的数据明文字节长度 |
备注 |
1、此函数不对数据进行填充处理,ECB、CBC模式输入的数据必须是指定算法分组长度的整数倍。 |
2、此函数对数据进行分包处理,输入数据最大长度不限 |
3、在就绪状态下,不限权限可以使用 |
2.2.5 杂凑运算类函数
杂凑运算初始化SDF_HashInit
int SDF_HashInit(
void *hSessionHandle,
unsigned int uiAlgID
ECCrefPublicKey *pucPublicKey,
unsigned char *pucID,
unsigned int uiIDLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
指定杂凑算法标识 |
pucPublicKey[in] |
签名者公钥,当uiAlgID为SGD_SM3时有效 |
pucID[in] |
签名者的ID值,当uiAlgID为SGD_SM3时有效 |
uiIDLength[in] |
签名者的ID长度,当uiAlgID为SGD_SM3时有效 |
备注 |
1、当pucPublicKey或者pucID为NULL或者uiIDLength为0时,且uiAlgID为SGD_SM3时,算法为SM3的无ID杂凑运算 |
2、uiIDLength非零且uiAlgID为SGD_SM3时,函数执行SM2的预处理1操作 |
3、在就绪状态下,不限权限可以使用 |
多包杂凑运算SDF_HashUpdate
int SDF_HashUpdate(
void *hSessionHandle,
unsigned char *pucData,
unsigned int uiDataLength);
描述 |
三步式数据杂凑运算第二步,对输入的明文进行杂凑运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucData[in] |
缓冲区指针,用于存放输入的数据明文 |
uiDataLength[in] |
输入的数据明文长度 |
杂凑运算结束SDF_HashFinal
int SDF_HashFinal(
void *hSessionHandle,
unsigned char *pucHash,
unsigned int *puiHashLength);
描述 |
三步式数据杂凑运算第三步,杂凑运算结束返回杂凑数据并清除中间数据 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucHash[out] |
缓冲区指针,用于存放输出的杂凑数据 |
puiHashLength[out] |
返回的杂凑数据长度 |
2.2.6 用户文件操作类函数
创建文件SDF_CreateFile
int SDF_CreateFile(
void *hSessionHandle,
unsigned char *pucFileName,
unsigned int uiNameLen,
unsigned int uiFileSize);
描述 |
在密码设备内部创建用于存储用户数据的文件,目前支持最大25个文件 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucFileName[in] |
缓冲区指针,用于存放输入的文件名,最大长度128字节 |
uiNameLen[in] |
文件名字节长度 |
uiFileSize[in] |
文件所占存储空间的长度 |
读取文件SDF_ReadFile
int SDF_ReadFile(
void *hSessionHandle,
unsigned char *pucFileName,
unsigned int uiNameLen,
unsigned int uiOffset,
unsigned int *puiFileLength,
unsigned char *pucBuffer);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucFileName[in] |
缓冲区指针,用于存放输入的文件名,最大长度128字节 |
uiNameLen[in] |
文件名长度 |
uiOffset[in] |
指定读取文件时的偏移值 |
puiFileLength[in|out] |
入参时指定读取文件内容的字节长度;出参时返回实际读取文件内容的字节长度 |
pucBuffer[out] |
缓冲区指针,用于存放读取的文件数据 |
写文件SDF_WriteFile
int SDF_WriteFile(
void *hSessionHandle,
unsigned char *pucFileName,
unsigned int uiNameLen,
unsigned int uiOffset,
unsigned int uiFileLength,
unsigned char *pucBuffer);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucFileName[in] |
缓冲区指针,用于存放输入的文件名,最大长度128字节 |
uiNameLen[in] |
文件名字节长度 |
uiOffset[in] |
指定写入文件时的偏移值 |
uiFileLength[in] |
指定写入文件内容的字节长度 |
pucBuffer[in] |
缓冲区指针,用于存放输入的写文件数据 |
删除文件SDF_DeleteFile
int SDF_DeleteFile(
void *hSessionHandle,
unsigned char *pucFileName,
unsigned int uiNameLen);
描述 |
删除指定文件名的密码设备内部存储用户数据的文件 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucFileName[in] |
缓冲区指针,用于存放输入的文件名,最大长度128字节 |
uiNameLen[in] |
文件名字节长度 |
2.2.7 密码卡SM9算法函数
SM9算法没有定义国标接口,以下接口为SM9算法基本运算接口。
SM9生成签名主密钥对SPII_GenerateSignMastKey_SM9
int SPII_GenerateSignMastKey_SM9(
void *hSessionHandle,
SM9SignMastPublicKey *pucSignMastPublicKey,
SM9SignMastPrivateKey *pucSignMastPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucSignMastPublicKey[out] |
输出SM9签名主公钥 |
pucSignMastPrivateKey[out] |
输出SM9签名主私钥 |
SM9生成加密主密钥SPII_GenerateEncMastKey_SM9
int SPII_GenerateEncMastKey_SM9(
void *hSessionHandle,
SM9EncMastPublicKey *pucEncMastPublicKey,
SM9EncMastPrivateKey *pucEncMastPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucEncMastPublicKey[out] |
输出SM9加密主公钥 |
pucEncMastPrivateKey[out] |
输出SM9加密主私钥 |
SM9生成用户签名私钥SPII_GenerateUserSignPrivateKey_SM9
int SPII_GenerateUserSignPrivateKey_SM9(
void *hSessionHandle,
SM9SignMastPrivateKey *pucSignMastPrivateKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
SM9UserSignPrivateKey *pucUserSignPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucSignMastPrivateKey[in] |
SM9签名主私钥结构 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucUserSignPrivateKey[out] |
输出SM9用户签名私钥 |
SM9生成用户加密私钥SPII_GenerateUserEncPrivateKey_SM9
int SPII_GenerateUserEncPrivateKey_SM9(
void *hSessionHandle,
SM9EncMastPrivateKey *pucEncMastPrivateKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
SM9UserEncPrivateKey *pucUserEncPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucEncMastPrivateKey[in] |
SM9加密主私钥结构 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucUserEncPrivateKey[out] |
输出SM9用户加密私钥 |
SM9签名SPII_Sign_SM9
int SPII_Sign_SM9(
void *hSessionHandle,
unsigned int uiAlgID,
SM9SignMastPublicKey *pucSignMastPublicKey,
SM9UserSignPrivateKey *pucUserSignPrivateKey,
unsigned char *pucData,
unsigned int uiDataLength,
SM9Signature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,支持SGD_SM9_1 |
pucSignMastPublicKey[in] |
SM9签名主公钥 |
pucUserSignPrivateKey[in] |
SM9用户签名私钥 |
pucData[in] |
待签名数据 |
uiDataLength[in] |
待签名数据长度 |
pucSignature[out] |
输出签名结构 |
SM9验证SPII_Verify_SM9
int SPII_Verify_SM9(
void *hSessionHandle,
unsigned int uiAlgID,
SM9SignMastPublicKey *pucSignMastPublicKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
unsigned char *pucData,
unsigned int uiDataLength,
SM9Signature *pucSignature);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,支持SGD_SM9_1 |
pucSignMastPublicKey[in] |
SM9签名主公钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucData[in] |
待验证签名数据 |
uiDataLength[in] |
待验证签名数据长度 |
pucSignature[in] |
待验证签名结构 |
SM9加密SPII_Encrypt_SM9
int SPII_Encrypt_SM9(
void *hSessionHandle,
unsigned int uiAlgID,
SM9EncMastPublicKey *pucEncMastPubKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
unsigned char *pucIV,
unsigned char *pucData,
unsigned int uiDataLength,
SM9Cipher *pucEncData);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识 |
pucEncMastPubKey[in] |
SM9加密主公钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucIV[in] |
IV向量 |
pucData[in] |
待加密数据 |
uiDataLength[in] |
待加密数据长度 |
pucEncData[out] |
输出加密数据结构 |
SM9解密SPII_Decrypt_SM9
int SPII_Decrypt_SM9(
void *hSessionHandle,
SM9UserEncPrivateKey *pucUserEncPrivateKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
SM9Cipher *pucEncData,
unsigned char *pucData,
unsigned int *puiDataLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucUserEncPrivateKey[in] |
SM9用户解密私钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucEncData[in] |
待解密加密数据结构 |
pucData[out] |
输出加密后数据 |
uiDataLength[out] |
输出加密后数据长度 |
SM9密钥封装SPII_KeyEncapsulePack_SM9
int SPII_KeyEncapsulePack_SM9(
void *hSessionHandle,
unsigned int uiAlgID,
SM9EncMastPublicKey *pucEncMastPublicKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
unsigned int uiSKeyLen,
SM9KeyPackage *pucEncapCipher,
unsigned char *pucKey);
描述 |
SM9密钥封装运算,得到密钥封装结构和密钥明文 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,支持SGD_SM9_3 |
pucEncMastPubKey[in] |
SM9加密主公钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
uiSKeyLen[in] |
待生成的密钥长度 |
pucEncapCipher[out] |
输出密钥封装结构 |
pucKey[out] |
输出密钥明文 |
SM9密钥解封装SPII_KeyEncapsuleUnpack_SM9
int SPII_KeyEncapsuleUnpack_SM9(
void *hSessionHandle,
unsigned int uiAlgID,
SM9UserEncPrivateKey *pucUserEncPrivateKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
unsigned int uiSKeyLen,
SM9KeyPackage *pucEncapCipher,
unsigned char *pucKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiAlgID[in] |
算法标识,支持SGD_SM9_3 |
pucUserEncPrivateKey[in] |
SM9用户加密私钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
uiSKeyLen[in] |
待生成的密钥长度 |
pucEncapCipher[in] |
密钥封装结构 |
pucKey[out] |
输出密钥明文 |
SM9生成密钥协商用户加密私钥SPII_GenUserAgreementPrivateKey_SM9
int SPII_GenUserAgreementPrivateKey_SM9(
void *hSessionHandle,
SM9EncMastPrivateKey *pucEncMastPrivateKey,
unsigned char *pucUserID,
unsigned int uiUserIDLen,
SM9UserEncPrivateKey *pucUserEncPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucEncMastPrivateKey[in] |
SM9加密主公钥 |
pucUserID[in] |
用户ID |
uiUserIDLen[in] |
用户ID长度 |
pucUserEncPrivateKey[out] |
输出SM9用户加密私钥 |
SM9生成密钥协商临时主密钥对SPII_GenerateAgreementDataWithPAIR_SM9
int SPII_GenerateAgreementDataWithPAIR_SM9(
void *hSessionHandle,
SM9EncMastPublicKey *pucSelfEncMastPublicKey,
unsigned char *pucOtherUserID,
unsigned int uiOtherUserIDLen,
SM9EncMastPublicKey *pucSelfTempEncMastPublicKey,
SM9EncMastPrivateKey *pucSelfTempEncMastPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucSelfEncMastPublicKey[in] |
己方SM9加密主公钥 |
pucOtherUserID[in] |
对方用户ID |
uiOtherUserIDLen[in] |
对方用户ID长度 |
pucSelfTempEncMastPublicKey[out] |
输出己方SM9临时加密主公钥 |
pucSelfTempEncMastPrivateKey[out] |
输出己方SM9临时加密主私钥 |
SM9生成密钥协商密钥SPII_GenerateAgreementDataAndKey_SM9
int SPII_GenerateAgreementDataAndKey_SM9(
void *hSessionHandle,
unsigned char *pucOtherUserID,
unsigned int uiOtherUserIDLen,
unsigned char *pucSelfUserID,
unsigned int uiSelfUserIDLen,
SM9EncMastPublicKey *pucSelfEncMastPublicKey,
SM9EncMastPublicKey *pucSelfTempEncMastPublicKey,
SM9EncMastPublicKey *pucOtherTempEncMastPublicKey,
SM9UserEncPrivateKey *pucUserEncPrivateKey,
SM9EncMastPrivateKey *pucSelfTempEncMastPrivateKey,
unsigned int uiRole,
unsigned int uiAgreeKeyLen,
unsigned char *puiAgreeKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucOtherUser[in] |
对方用户ID |
uiOtherUserIDLen[in] |
对方用户ID长度 |
pucSelfUserID[in] |
己方用户ID |
uiSelfUserIDLen[in] |
己方用户ID长度 |
pucSelfEncMastPublicKey[in] |
己方加密主公钥 |
pucSelfTempEncMastPublicKey[in] |
己方临时加密主公钥 |
pucOtherTempEncMastPublicKey[in] |
对方临时加密主公钥 |
pucUserEncPrivateKey[in] |
己方协商时的用户加密私钥 |
pucSelfTempEncMastPrivateKey[in] |
己方临时加密主私钥 |
uiRole[in] |
调用角色:1为发起方,0为响应方 |
uiAgreeKeyLen[in] |
协商密钥长度 |
puiAgreeKey[out] |
输出协商密钥 |
2.2.8 密码卡SM3 HMAC算法函数
SM3算法外部密钥单步HMAC运算SPII_SM3Hmac
int SPII_SM3Hmac(
void *hSessionHandle,
unsigned char *pucKey,
unsigned int uiKeyLength,
unsigned char *pucData,
unsigned int uiDataLength,
unsigned char *pucHash,
unsigned int *puiHashLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥明文 |
puiKeyLength[in] |
输入的密钥明文字节长度 |
pucData[in] |
缓冲区指针,用于存放输入的数据明文 |
uiDataLength[in] |
输入的数据明文长度 |
pucHash[out] |
缓冲区指针,用于存放输出的HMAC数据 |
puiHashLength[out] |
返回的HMAC数据长度 |
SM3算法外部密钥HMAC初始化SPII_SM3HmacInit
int SPII_SM3HmacInit(
void *hSessionHandle,
unsigned char *pucKey,
unsigned int uiKeyLength);
描述 |
三步式SM3 HMAC运算第一步,使用外部密钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥明文 |
puiKeyLength[in] |
输入的密钥明文字节长度 |
SM3算法使用会话密钥HMAC初始化SPII_SM3HmacInitWithSK
int SPII_SM3HmacInitWithSK(
void *hSessionHandle,
void *hKeyHandle);
描述 |
【扩展API】三步式SM3 HMAC运算第一步,使用会话密钥 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
hKeyHandle[in] |
密钥句柄 |
SM3算法HMAC多包运算SPII_SM3HmacUpdate
int SPII_SM3HmacUpdate(
void *hSessionHandle,
unsigned char *pucData,
unsigned int uiDataLength);
描述 |
三步式SM3 HMAC运算第二步,对输入的明文进行HMAC运算 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucData[in] |
缓冲区指针,用于存放输入的数据明文 |
uiDataLength[in] |
输入的数据明文长度 |
SM3算法HMAC运算结束SPII_SM3HmacFinal
int SPII_SM3HmacFinal(
void *hSessionHandle,
unsigned char *pucHash,
unsigned int *puiHashLength);
描述 |
三步式SM3 HMAC运算第三步,运算结束返回杂凑数据并清除中间数据 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucHash[out] |
缓冲区指针,用于存放输出的HMAC数据 |
puiHashLength[out] |
返回的HMAC数据长度 |
2.2.9 密码卡工作密钥函数
对称工作密钥导入会话密钥SPII_GetSymmKeyHandle
int SPII_GetSymmKeyHandle(
void *hSessionHandle,
unsigned int uiKeyIndex,
void **phKeyHandle);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
要导出的工作密钥索引 |
phKeyHandle[out] |
返回的会话密钥句柄 |
会话密钥导入对称工作密钥SPII_SetSymmKeyWithSK
int SPII_SetSymmKeyWithSK(
void *hSessionHandle,
unsigned int uiKeyIndex,
void *hKeyHandle);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
要导入的工作密钥索引 |
phKeyHandle[in] |
会话密钥句柄 |
2.2.10 密码卡密钥管理函数
更改私钥使用权限SPII_ChangePrivateKeyAccessRight
int SPII_ChangePrivateKeyAccessRight(
void * hSessionHandle,
unsigned int uiKeyIndex,
unsigned char *oldpucPassword,
unsigned int uioldPwdlength,
unsigned char *newpucPassword,
unsigned int uiPwdLength);
参数 |
|
hSessionHandle [in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
密钥索引号 |
oldpucPassword[in] |
原有口令指针 |
uioldPwdlength[in] |
原有口令指针长度 |
newpucPassword [in] |
更新口令指针 |
uiPwdLength [in] |
更新口令指针长度 |
内部产生加密RSA密钥对SPII_GenerateEncKeyPair_RSA
int SPII_GenerateEncKeyPair_RSA (
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned int keybits);
描述 |
请求密码设备产生指定类型和模长的非对称密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
keybits[in] |
密钥模长 |
备注 |
1、RSA内部密钥模长仅支持2048bit |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
3、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
内部产生签名RSA密钥对SPII_GenerateSignKeyPair_RSA
int SPII_GenerateSignKeyPair_RSA (
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned int keybits);
描述 |
请求密码设备产生指定类型和模长的非对称密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
keybits[in] |
密钥模长 |
备注 |
1、RSA内部密钥模长仅支持2048bit |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
3、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
内部产生加密ECC密钥对SPII_GenerateEncKeyPair_ECC
int SPII_GenerateEncKeyPair_ECC (
void *hSessionHandle,
unsigned int uiKeyIndex);
描述 |
请求密码设备产生指定类型和模长的非对称密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、ECC默认长度为256bit |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
3、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
内部产生签名ECC密钥对SPII_GenerateSignKeyPair_ECC
int SPII_GenerateSignKeyPair_ECC (
void *hSessionHandle,
unsigned int uiKeyIndex);
描述 |
请求密码设备产生指定类型和模长的非对称密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、ECC默认长度为256bit |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
3、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
内部产生密钥加密密钥KEK SPII_GenerateKEK
int SPII_GenerateKEK (
void *hSessionHandle,
unsigned int uiKeyIndex
unsigned int byteslen);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
byteslen[in] |
密钥字节长度 |
备注 |
1、密钥bit长度支持128bit即16Bytes |
2、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
3、在就绪状态、管理员权限下可以调用 |
第三方密钥管理机构导入ECC加密密钥对SPII_NVELOPEDKEY
int SPII_NVELOPEDKEY(
void *hSessionHandle,
unsigned int uiKeyIndex,
unsigned int ulAsymmAlgID,
unsigned int ulSymmAlgID,
ECCCipher *ECCCipherBlob,
ECCrefPublicKey *PubKey,
unsigned char *cbEncryptedPriKey,
unsigned int cbEncryptedPriKeylen);
描述 |
使用卡内的签名私钥,解密并导入第三方密钥管理机构生成的SM2加密密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
加密密钥索引号 |
ulAsymmAlgID [in] |
非对称密钥包算法标识 |
ulSymmAlgID[in] |
对称密钥包算法标识 |
ECCCipherBlob [in] |
非对称加密包指针 |
PubKey[in] |
加密公钥结构指针 |
cbEncryptedPriKey[in] |
加密私钥密文指针 |
cbEncryptedPriKeylen[in] |
加密私钥密文指针长度 |
备注 |
1、ECCCipherBlob内存储对称密钥密文,该对称密钥用于解密加密私钥 |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
3、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
第三方密钥管理机构导入RSA加密密钥对SPII_NVELOPEDKEY_RSA
int SPII_NVELOPEDKEY_RSA(
void *pSessionHandle,
unsigned int uiKeyIndex,
unsigned int ulAsymmAlgID,
unsigned int ulSymmAlgID,
unsigned char *CipherBlob,
unsigned int CipherBloblength,
RSArefPublicKey *PubKey,
unsigned char *cbEncryptedPriKey,
unsigned int cbEncryptedPriKeylen);
描述 |
使用卡内的签名私钥,解密并导入第三方密钥管理机构生成的RSA加密密钥对 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex[in] |
加密密钥索引号 |
ulAsymmAlgID [in] |
非对称密钥包算法标识 |
ulSymmAlgID[in] |
对称密钥包算法标识 |
CipherBlob[in] |
非对称加密包指针 |
CipherBloblength[in] |
非对称加密包长度 |
PubKey[in] |
加密公钥结构指针 |
cbEncryptedPriKey[in] |
加密私钥密文指针 |
cbEncryptedPriKeylen[in] |
加密私钥密文指针长度 |
备注 |
1、CipherBlob内存储对称密钥密文,该对称密钥用于解密加密私钥 |
2、对称密钥加密前需加密填充,接口内部解填充 |
3、cbEncryptedPriKey仅包含RSA私钥结构的{d,prime[2],pexp[2],coef} |
4、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
5、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
明文安装ECC密钥对SPII_ImportKeyPair_ECC
int SPII_ImportKeyPair_ECC(
void *hSessionHandle,
unsigned int ulAlgorithm,
unsigned int uiKeyIndex,
ECCrefPublicKey *pucPublicKey,
ECCrefPrivateKey *pucPrivateKey);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
ulAlgorithm[in] |
非对称密钥包算法标识,为SGD_SM2_1时导入签名密钥对,为SGD_SM2_3时导入加密密钥对 |
uiKeyIndex [in] |
密钥索引号 |
pucPublicKey [in] |
ECC公钥结构 |
pucPrivateKey [in] |
ECC私钥结构 |
备注 |
1、ECC默认长度为256bit |
2、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
明文安装KEK密钥SPII_ImportKey_KEK
int SPII_ImportKey_KEK(
void *hSessionHandle,
unsigned int uiKEKIndex,
void *unsigned char *pucKey,
unsigned int uiKeyLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKEKIndex[in] |
密钥索引号 |
pucKey[in] |
缓冲区指针,用于存放输入的密钥数据 |
uiKeyLength[in] |
密钥数据长度 |
备注 |
1、密钥bit长度支持128bit即16Bytes |
2、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
3、在就绪状态、管理员权限下可以调用 |
删除加密RSA密钥对SPII_DeleteEncKeyPair_RSA
int SPII_DeleteEncKeyPair_RSA (
void *hSessionHandle,
unsigned int uiKeyIndex);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
2、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
删除签名RSA密钥对SPII_DeleteSignKeyPair_RSA
int SPII_DeleteSignKeyPair_RSA (
void *hSessionHandle,
unsigned int uiKeyIndex);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
2、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
删除加密ECC密钥对SPII_DeleteEncKeyPair_ECC
int SPII_DeleteEncKeyPair_ECC (
void *hSessionHandle,
unsigned int uiKeyIndex);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
2、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
删除签名ECC密钥对SPII_DeleteSignKeyPair_ECC
int SPII_DeleteSignKeyPair_ECC (
void *hSessionHandle,
unsigned int uiKeyIndex);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、在就绪状态、密钥索引号非0、管理员权限下可以调用 |
2、在初始化状态、密钥索引号为0、管理员权限下可以调用 |
删除密钥加密密钥KEK SPII_GenerateKEK
int SPII_DeleteKEK (
void *hSessionHandle,
unsigned int uiKeyIndex);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
备注 |
1、密码设备存储的KEK密钥索引值的起始索引值为0,最大为配置KEKNum-1 |
2、在就绪状态、管理员权限下可以调用 |
备份保护密钥SPII_BackUpBK
int SPII_BackUpBK (
void * pSessionHandle,
unsigned int Ukeyflag,
unsigned char *Password,
unsigned int PasswordLen,
unsigned int UkeyNun,
ECCrefPublicKey *pk,
ECCCipher *Enbk);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Ukeyflag[in] |
表示Ukey是否在线 |
Password[in] |
Ukey的Pin口令指针 |
PasswordLen[in] |
Ukey的Pin口令指针长度 |
UkeyNun[in] |
表示分量组号 |
Pk[in] |
加密保护分量的公钥 |
Enbk [out] |
公钥加密的保护密钥分量 |
备注 |
1、Ukeyflag 为0时,表示Ukey直接与密码卡相连,非0时表示Ukey与系统相连,密码卡需要与Ukey建立安全通道才能通过Ukey进行管理。 |
2、Ukeyflag为0时,Password与PasswordLength有效,非0时,pk,Enbk有效。 |
3、在初始化状态和就绪状态、管理员权限下可以调用 |
备份加密RSA密钥对SPII_BackUpEncRSAKeyPair
int SPII_BackUpEncRSAKeyPair(
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncRSAKeyPair,
unsigned int *EncRSAKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncRSAKeyPair[out] |
加密后的密钥文件指针 |
EncRSAKeyPairLength[out] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
备份签名RSA密钥对SPII_BackUpSignRSAKeyPair
int SPII_BackUpSignRSAKeyPair(
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncRSAKeyPair,
unsigned int *EncRSAKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncRSAKeyPair[out] |
加密后的密钥文件指针 |
EncRSAKeyPairLength[out] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
备份加密ECC密钥对SPII_BackUpECCEnc
int SPII_BackUpECCEnc(
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncECCKeyPair,
unsigned int *EncECCKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncECCKeyPair[out] |
加密后的密钥文件指针 |
EncECCKeyPairLength[out] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
备份签名ECC密钥对SPII_BackUpECCSign
int SPII_BackUpECCSign(
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncECCKeyPair,
unsigned int *EncECCKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncECCKeyPair[out] |
加密后的密钥文件指针 |
EncECCKeyPairLength[out] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
备份KEK密钥SPII_BackUpKEK
int SPII_BackUpKEK(
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncKEK,
unsigned int *EncKEKLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncKEK [out] |
加密后的密钥文件指针 |
EncKEKLength [out] |
加密后的密钥文件指针长度 |
生成临时ECC密钥对SPII_GenerateTmpPK
int SPII_GenerateTmpPK(
void * pSessionHandle,
ECCrefPublicKey *pucPublicKey);
描述 |
生成密钥恢复过程中临时传输保护密钥对的生成,需在恢复保护密钥之前执行 |
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pucPublicKey [out] |
导出的临时密钥 |
备注 |
1、ECC默认长度为256bit |
2、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复保护密钥SPII_RestoreBK
int SPII_RestoreBK(
void * pSessionHandle,
unsigned int Ukeyflag,
unsigned char *Password,
unsigned int PasswordLen,
ECCCipher *Enbk);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Ukeyflag[in] |
表示Ukey是否在线 |
Password[in] |
Ukey的Pin口令指针 |
PasswordLen[in] |
Ukey的Pin口令指针长度 |
Enbk [in] |
临时密钥加密的保护密钥分量 |
备注 |
1、Ukeyflag 为0时,表示Ukey直接与密码卡相连,非0时表示Ukey与系统相连,密码卡需要与Ukey建立安全通道才能通过Ukey进行管理。 |
2、Ukeyflag为0时,Password与PasswordLength有效,非0时,Enbk有效。 |
3、执行该函数前需执行SPII_GenerateTmpPK。 |
4、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复加RSA密钥对SPII_RestoreEncRSAKeyPair
int SPII_ SPII_RestoreEncRSAKeyPair (
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncRSAKeyPair,
unsigned int EncRSAKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncRSAKeyPair[in] |
加密后的密钥文件指针 |
EncRSAKeyPairLength[in] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复签名RSA密钥对SPII_RestoreSignRSAKeyPair
int SPII_RestoreSignRSAKeyPair (
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncRSAKeyPair,
unsigned int EncRSAKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncRSAKeyPair[in] |
加密后的密钥文件指针 |
EncRSAKeyPairLength[in] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复加密ECC密钥对SPII_RestoreECCEnc
int SPII_ RestoreECCEnc (
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncECCKeyPair,
unsigned int EncECCKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncECCKeyPair[in] |
加密后的密钥文件指针 |
EncECCKeyPairLength[in] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复签名ECC密钥对SPII_RestoreECCSign
int SPII_RestoreECCSign (
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncECCKeyPair,
unsigned int EncECCKeyPairLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncECCKeyPair[in] |
加密后的密钥文件指针 |
EncECCKeyPairLength[in] |
加密后的密钥文件指针长度 |
备注 |
1、在初始化状态和就绪状态、管理员权限下可以调用 |
恢复KEK密钥SPII_RestoreKEK
int SPII_ RestoreKEK (
void * hSessionHandle,
unsigned int keyIndex,
unsigned char *EncKEK,
unsigned int EncKEKLength);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
uiKeyIndex [in] |
密钥索引号 |
EncKEK [in] |
加密后的密钥文件指针 |
EncKEKLength [in] |
加密后的密钥文件指针长度 |
2.2.11 密码卡用户管理函数
获取加密卡登录状态SPII_GetDeviceStatus
int SPII_GetDeviceStatus(
void * phDeviceHandle,
unsigned short *CardStatus,
unsigned short *PermissionStatus);
参数 |
|
hdeviceHandle [in] |
与设备句柄 |
CardStatus[out] |
状态标记 |
PermissionStatus[out] |
权限标记 |
身份注册函数SPII_Regsvr
int SPII_Regsvr(
void * pSessionHandle,
unsigned int Ukeyflag,
unsigned char *Password,
unsigned int PasswordLength,
ECCrefPublicKey *enpk,
ECCrefPublicKey *signpk,
unsigned int UserID);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Ukeyflag [in] |
表示Ukey是否在线 |
Password[in] |
Ukey口令/用户口令 |
PasswordLength[in] |
Ukey口令长度/用户口令长度 |
Enpk[in] |
加密公钥结构指针 |
Signpk[in] |
签名公钥结构指针 |
UserID[in] |
注册身份ID |
备注 |
1、 Ukeyflag 为0时,表示Ukey直接与密码卡相连,1时表示Ukey与系统相连,密码卡需要与Ukey建立安全通道才能通过Ukey进行管理 |
2、 Ukeyflag为0时,Password与PasswordLength有效,1时,Enpk与Signpk有效,为Ukey的加密、签名公钥。 |
3、 Ukeyflag为2时,使用口令方式注册用户,Password与PasswordLength有效。 |
4、 UserID 为1时表示注册的是超级管理员,2时表示注册是管理员,3时表示注册的是操作员1,4时表示注册的是操作员2。 |
身份登录步骤1函数SPII_LoadinStepF
int SPII_LoadinStepF(
void * pSessionHandle,
unsigned int Ukeyflag,
unsigned char *Password,
unsigned int PasswordLength,
ECCrefPublicKey *enpk,
ECCrefPublicKey *entpk,
ECCCipher *enR,
ECCCipher *enmk);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Ukeyflag [in] |
表示Ukey是否在线 |
Password[in] |
Ukey口令 |
PasswordLength[in] |
Ukey口令长度 |
Enpk[in] |
注册时的加密公钥结构指针 |
entpk [out] |
密码卡生成的临时公钥 |
enR [out] |
用Enpk加密的随机数R值 |
Enmk[out] |
用Enpk加密的管理密钥 |
备注 |
1、 Ukeyflag 为0时,表示Ukey直接与密码卡相连,1时表示Ukey与系统相连,密码卡需要与Ukey建立安全通道才能通过Ukey进行管理 |
2、 Ukeyflag为0时,Password与PasswordLength有效,1时,Enpk、entpk、enR、Enmk有效。 |
身份登录步骤2函数SPII_LoadinStepS
int SPII_LoadinStepS(
void * pSessionHandle,
unsigned int Ukeyflag,
unsigned char *Password,
unsigned int PasswordLength,
ECCSignature *signR,
ECCCipher *enmk);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Ukeyflag [in] |
表示Ukey是否在线 |
Password[in] |
Ukey口令 |
PasswordLength[in] |
Ukey口令长度 |
signR [in] |
注册时的签名公钥对应的私钥结构签名指针 |
enmk [in] |
密码卡临时公钥加密的管理密钥 |
备注 |
1、 Ukeyflag 为0时,表示Ukey直接与密码卡相连,1时表示Ukey与系统相连,密码卡需要与Ukey建立安全通道才能通过Ukey进行管理 |
2、 Ukeyflag为0时,Password与PasswordLength有效,1时,signR、enmk有效。 |
口令方式身份登录函数SPII_LoadinWithPassword
int SPII_LoadinWithPassword(
void * pSessionHandle,
unsigned char *Password,
unsigned int PasswordLength,
unsigned int UserID);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
Password[in] |
口令(Password/Pin) |
PasswordLength[in] |
口令长度 |
UserID[in] |
登录身份ID |
备注 |
1、 使用该函数前需用PiicoToolWP工具注册用户 |
2、 UserID 为1时表示登录超级管理员,2时表示登录管理员,3时表示登录操作员1,4时表示登录操作员2。 |
修改身份登录口令函数SPII_ModifyPin
int SPII_ModifyPin(
HANDLE pSessionHandle,
unsigned char *pOldPin,
unsigned int nOldPinLen,
unsigned char *pNewPin,
unsigned int nNewPinLen);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
pOldPin[in] |
旧口令(Password/Pin) |
nOldPinLen[in] |
旧口令长度 |
pNewPin[in] |
新口令(Password/Pin) |
nNewPinLen[in] |
新口令长度 |
UserID[in] |
登录身份ID |
备注 |
1、 使用该函数前需用PiicoToolWP工具注册用户 |
2、 UserID 为1时表示修改超级管理员口令,2时表示修改管理员口令,3时表示修改操作员1口令,4时表示修改操作员2口令。 |
修改UKey登录口令函数SPII_ChangeUkeyPin
int SPII_ChangeUkeyPin(
void * pSessionHandle,
unsigned char* OldPassword,
unsigned int OldPasswordLen,
unsigned char *NewPassword,
unsigned int NewPasswordLen);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
OldPassword[in] |
旧口令(Password/Pin) |
OldPasswordLen[in] |
旧口令长度 |
NewPassword[in] |
新口令(Password/Pin) |
NewPasswordLen[in] |
新口令长度 |
备注 |
1、 用于修改连接到密码卡USB口的身份UKey和备份Ukey的登录口令 |
身份登出函数SPII_LogOut
int SPII_LogOut(
void * pSessionHandle);
参数 |
|
hSessionHandle[in] |
与设备建立的会话句柄 |
2.2.12 密码卡初始化相关函数
初始化加密卡SPII_Init_Device
int SPII_Init_Device (
void * hdeviceHandle
);
参数 |
|
hdeviceHandle [in] |
与设备建立的会话句柄 |
初始化密钥容器空间SPII_Init_KeyContainerWithPrivateKeyAccessRight
int SPII_Init_KeyContainerWithPrivateKeyAccessRight (
void * hdeviceHandle,
unsigned int keyIndex,
unsigned char *pucPassword,
unsigned int uiPwdLength
);
参数 |
|
hdeviceHandle [in] |
与设备句柄 |
uiKeyIndex [in] |
密钥索引号 |
pucPassword[in] |
私钥权限码 |
uiPwdLength[in] |
私钥权限码长度 |
初始化文件系统SPII_Init_FileSystem
int SPII_Init_FileSystem (
void * hsessionHandle
);
参数 |
|
hsessionHandle [in] |
与设备建立的会话句柄 |
备注 |
1、在密码卡出厂状态并超级管理员权限才能调用 |
2.2.13 密码卡杂类函数
获取API版本SPII_GetAPIVersion
int SPII_GetAPIVersion(
int *major,
int *minor);
参数 |
|
major [out] |
大版本号输出 |
minor[in] |
小版本号输出 |
三、常见错误及解决方法
|
现象 |
原因 |
常用解决方法 |
1 |
找不到密码卡 |
可能密码卡金手指有污渍 |
使用橡皮檫拭密码卡金手指,去除污渍后再正确插入卡槽 |
2 |
OpenDevice返回0x80000001 |
未曾创建设备节点 |
创建设备节点 |
3 |
S_GetErrorInfo返回0x00002019 |
权限错误 |
获取相关使用权限 |
4 |
S_GetErrorInfo返回0x00002006 |
卡内存储的密钥校验失败 |
1、获取管理权限2、重新恢复相关密钥 |
5 |
S_GetErrorInfo返回0x00002053 |
目前状态不支持此操作 |
切换相关状态 |
6 |
S_GetErrorInfo返回0x00001009 |
无此通信协议 |
切换密码卡状态 |
7 |
S_GetErrorInfo返回0x80000002 |
送入参数错误 |
修正送入参数 |
8 |
S_GetErrorInfo返回0x0000000C |
ECC参数验证失败 |
修正送入ECC相关参数 |
9 |
S_GetErrorInfo返回0x00002050 |
密钥不存在或未获得权限 |
取得管理权限后再试;若已取得管理权限,表明密钥不存在可生成密钥后再使用。 |
10 |
S_GetErrorInfo返回0x00001017 |
密钥协商参数产生后未释放 |
发起方产生协商参数后(SDF_GenerateAgreementDataWithECC),正常情况下回执行密钥协商第三步(SDF_GenerateKeyWithECC)自动释放协商参数,若第三步没执行或执行失败,需执行销毁协商参数句柄(SPII_DestroyAgreementHandle)手动释放协商参数。返回0x00001017后需复位密码卡。 |
11 |
S_GetErrorInfo返回0x00001004 |
会话密钥已分配完 |
会话密钥用完需销毁(SDF_DestroyKey)。正常使用时,返回0x00001004后可以重试。测试时若未正常销毁使会话密钥没法释放,返回0x00001004后需复位密码卡。 |
附录A (规范性附录)错误代码定义
详见头文件piico_error.h:
#define SR_SUCCESSFULLY 0 //函数返回成功
#define SR_CANNOT_OPEN_DEVICE 0x80000001 //无法打开设备
#define SR_INVALID_PARAMETER 0x80000002 //参数错误
#define SR_WRITE_TO_DEVICE 0x80000003 //写往内核错误
#define SR_CANNOT_RESETCARD 0x80000004 //卡不能复位
#define SR_CANNOT_CLEAN_MODULE 0x80000005 //模块不能卸载
#define SR_WRITE_TIMEOUT 0x80000006 //写超时错误
#define SR_READ_TIMEOUT 0x80000007 //读超时错误
#define SR_RETURN_ERROR 0x80000008 //从卡中返回数据有误
#define SR_GENERAL_ERROR 0x80000009 //未知的错误
#define SR_VERIFY_FAILURE 0x8000000a //未通过验证
#define SR_FUNCTION_NOT_SUPPLIED 0x8000000b //此函数暂不提供
#define SR_PARAMETER_LENGTH_ERROR 0x8000000c //参数长度错误
#define SR_HOST_MEMORY 0x8000000d //内存错误
#define SR_ID_OUTRANGE 0x8000000e //ID超出范围
#define SR_RSA_KEYLEN_ERROR 0x8000000f //RSA密钥长度错误
#define SR_SMALL_BUFFER 0x80000010 //缓冲区不足
#define SR_INVALID_PINLEN 0x80000011 //无效的PIN口令长度
#define SR_INVALID_FLAG 0x80000012 //无效的FLAG标识
#define SR_INVALID_KEYLEN 0x80000013 //密钥长度有误
#define SR_BLOCK_ENCRY_DATALENGTH 0x80000014 //分组加密数据长度错误
#define SR_BLOCK_DECRY_DATALENGTH 0x80000015 //分组解密数据长度错误
#define SR_SESSION_OUTRANGE 0x80000016 //SKID超出范围
#define SR_DATALEN_OUTRANGE 0x80000017 //数据超出范围
#define SR_INVALID_DATALEN 0x80000018 //无效的数据长度
#define SR_INVALID_HOST 0x80000019 //无效的主机
#define SR_INVALID_MKID 0x8000001a //无效的MKID
#define SR_DEVICE_BUSYING 0x8000001b //设备忙
#define SR_TOO_MANY_COMUCATION_DEVICE 0x8000001c //同时通信的设备太多,产生的SK大于1024
#define SR_INSUFFICIENT_MEMORY 0x8000001d //内存不足
#define SR_RSA_OUT_DATA 0x8000001e //RSA算法中数据长度超过128Bytes
#define SR_READ_FROM_DEVICE 0x8000001f //从内核读出错误
#define SR_INVALID_RSA_VK 0x80000020 //表示私钥未曾注入,或者注入的私钥错误
#define SR_RSA_KEY_ERROR 0x80000021 //其它操作加密的程序未释放某些资源而出错
#define SR_TIME_OUT 0x80000022 //超时错误
#define SR_NOT_SUPPORT_OSVERSOIN 0x80000023 //不支持此版本的操作系统
#define SR_COMMAND_IC_ERROR 0x80000024 //IC卡命令字错误
#define SR_CANNOT_OPEN_IC 0x80000025 //不能打开IC卡
#define SR_SESSION_KEY_LEN_ERR 0x80000026
#define SR_ECC_DATA_LEN_ERR 0x80000027
#define SR_KEY_INDEX_ERR 0x80000028
#define SR_RSA_ERASEPADDING_ERR 0x80000029
#define SR_RSA_PADDING_ERR 0x8000002a
#define SR_ECC_DECRYPT_ERR 0x8000002b
#define SR_NOT_SUPPORT_ALGORITHM 0x8000002c
#define SR_RETURN_LENGTH_ERR 0x8000002d
#define SR_NOT_SUPPORT_TYPE 0x8000002e
/* 卡内返回 */
/////////////////////////////////////////////////////////////////////////////////////
#define CCR_SUCCESS 0x00000000
#define CCR_LENGTH_WRONG 0x00000001 //格式长度错误
#define CCR_UNKNOWN_ALG 0x00000005 //未知算法
#define CCR_UNKNOWN_MODE 0x00000006 //未知算法模式
#define CCR_FLASH_OVER 0x00000002 //FLASH溢出 (offset+inlen)>=0x1000
#define CCR_FLASH_FAN_ERROR 0x00000003 //使用了不可用的扇区
#define CCR_FLASH_OFFSET_ERROR 0x00000004
#define CCR_NO_ICCARD 0x00000007 //无IC卡
#define CCR_IC_ERROR 0x00000008 //IC返回数据错
#define CCR_ECC_FAIL 0x00000009 //ECC操作失败
#define CCR_ECC_VERIFY_FAIL 0x0000000A //ECC验证失败
#define CCR_ECC_PARA_ERR 0x0000000B //ECC参数错
#define CCR_ECC_ENCRYPT_FAIL 0x0000000C
#define CCR_ECC_DECRYPT_FAIL 0x0000000D
#define CCR_ECC_KEYAGREEMENT_FAIL 0x0000000E
#define CCR_HASH_INIT_FAIL 0x0000000F
#define CCR_HASH_FAIL 0x00000010
#define CCR_FLASH_WRITE_ERR 0x00000012 //
#define CCR_ERASEPADDING_FAIL 0x00000013 //
#define CCR_FLASH_CHECK_FAIL 0x00000014
#define CCR_FLASH_READ_ERR 0x00000015
#define CCR_UKEY_FAIL 0x00000201
#define CCR_UKEY_UNKOWNERR 0x00000202
#define CCR_UKEY_NOTSUPPORTYETERR 0x00000203
#define CCR_UKEY_FILEERR 0x00000204
#define CCR_UKEY_INVALIDHANDLEERR 0x00000205
#define CCR_UKEY_INVALIDPARAMERR 0x00000206
#define CCR_UKEY_READFILEERR 0x00000207
#define CCR_UKEY_WRITEFILEERR 0x00000208
#define CCR_UKEY_NAMELENERR 0x00000209
#define CCR_UKEY_KEYUSAGEERR 0x0000020A
#define CCR_UKEY_MODULUSLENERR 0x0000020B
#define CCR_UKEY_NOTINITIALIZEERR 0x0000020C
#define CCR_UKEY_OBJERR 0x0000020D
#define CCR_UKEY_MEMORYERR 0x0000020E
#define CCR_UKEY_TIMEOUTERR 0x0000020F
#define CCR_UKEY_INDATALENERR 0x00000210
#define CCR_UKEY_INDATAERR 0x00000211
#define CCR_UKEY_GENRANDERR 0x00000212
#define CCR_UKEY_HASHOBJERR 0x00000213
#define CCR_UKEY_HASHERR 0x00000214
#define CCR_UKEY_GENRSAKEYERR 0x00000215
#define CCR_UKEY_RSAMODULUSLENERR 0x00000216
#define CCR_UKEY_CSPIMPRTPUBKEYERR 0x00000217
#define CCR_UKEY_RSAENCERR 0x00000218
#define CCR_UKEY_RSADECERR 0x00000219
#define CCR_UKEY_HASHNOTEQUALERR 0x0000021A
#define CCR_UKEY_KEYNOTFOUNTERR 0x0000021B
#define CCR_UKEY_CERTNOTFOUNTERR 0x0000021C
#define CCR_UKEY_NOTEXPORTERR 0x0000021D
#define CCR_UKEY_DECRYPTPADERR 0x0000021E
#define CCR_UKEY_MACLENERR 0x0000021F
#define CCR_UKEY_BUFFER_TOO_SMALL 0x00000220
#define CCR_UKEY_KEYINFOTYPEERR 0x00000221
#define CCR_UKEY_NOT_EVENTERR 0x00000222
#define CCR_UKEY_DEVICE_REMOVED 0x00000223
#define CCR_UKEY_PIN_INCORRECT 0x00000224
#define CCR_UKEY_PIN_LOCKED 0x00000225
#define CCR_UKEY_PIN_INVALID 0x00000226
#define CCR_UKEY_PIN_LEN_RANGE 0x00000227
#define CCR_UKEY_USER_ALREADY_LOGGED_IN 0x00000228
#define CCR_UKEY_USER_PIN_NOT_INITIALIZED 0x00000229
#define CCR_UKEY_USER_TYPE_INVALID 0x0000022A
#define CCR_UKEY_APPLICATION_NAME_INVALID 0x0000022B
#define CCR_UKEY_APPLICATION_EXISTS 0x0000022C
#define CCR_UKEY_USER_NOT_LOGGED_IN 0x0000022D
#define CCR_UKEY_APPLICATION_NOT_EXISTS 0x0000022E
#define CCR_UKEY_FILE_ALREADY_EXIST 0x0000022F
#define CCR_UKEY_NO_ROOM 0x00000230
#define CCR_UKEY_FILE_NOT_EXIST 0x00000231
#define CCR_UKEY_REACH_MAX_CONTAINER_COUNT 0x00000232
#define CCR_INDEX_OUT_OF_RANGE 0x00001001 //数值超出范围
#define CCR_PIN_CHECK_ERR 0x00001002 //PIN码校验失败
#define CCR_RSA_DATALEN_ERR 0x00001003 //数据长度错误
#define CCR_CMD_FAIL 0x00000001 //失败返回
#define CCR_SESSION_KEY_EMPTY 0x00001004 //会话密钥句柄已经分配完毕
#define CCR_SECTOR_OUT_OF_RANGE 0x00001006 //扇区编号越界(0~23)
#define CCR_SESSION_KEY_OUT_OF_RANGE 0x00001007 //SESSION KEY编号越界(0~1023)
#define CCR_SESSION_KEY_IS_EMPTY 0x00001008 //SESSION KEY 为空
#define CCR_CMD_ERR 0x00001009 //无效的命令字
#define CCR_PRIVATE_KEY_ACCESSRIGHT_VERIFY_ERR 0x00001010 //私钥权限校验失败
#define CCR_RSA_PRIVATE_KEY_FLAG_ERR 0x00001011 //无效的RSA私钥类型。
#define CCR_KEY_IS_EMPTY 0x00001012 //密钥为空。
#define CCR_AUTHORITY_ERR 0x00001013 //权限验证错误
#define CCR_PARAMETER_ERR 0x00001016
#define CCR_WEAK_PIN_CHECK_ERR 0x00002001 //PIN码校验错误
#define CCR_CHECK_DATA_ERR 0x00002006 //数据校验失败
#define CCR_GEN_SM2_KEYPAIR_FAIL 0x00002007 //ECC获取密钥对
#define CCR_NO_ADMIN_PERMITION 0x00002008 //未获得管员权限
#define CCR_SM2_KEY_INDEX_ERR 0x0000200C
#define CCR_BAKUP_UKEY_ERR 0x0000200E //备份卡的类型错误
#define CCR_KEK_INDEX_ERR 0x0000200F //
#define CCR_RESTORE_PROTECTKEY_NOT_EXIST 0x00002010 //没有恢复PPK
#define CCR_DEVICEKEY_NOT_PREPARED 0x00002015 //未初始化
#define CCR_BAKUP_PROTECTKEY_NOT_EXIST 0x00002016 //PPK未产生
#define CCR_PERMISSION_FAIL 0x00002019 //权限错误
#define CCR_UKEY_CHECK_ERR 0x000020A1 //UKEY校验错误
#define CCR_KEY_PAIRE_EMPTY 0x00002050 //密钥对不存在
#define CCR_USER_NOT_READY 0x00002051
#define CCR_CARD_STATUS_ERR 0x00002053
#define CCR_UKEY_REPEAT 0x00002054
#define CCR_CMD_CANNOT_EXEC_AT_CURRUNT_STATUS 0x00002063
///////////////////////国密标准错误返回////////////////////////////////////
#define SDR_OK 0x0
#define SDR_UNKNOWERR 0x01000001
#define SDR_NOTSUPPORT 0x01000002
#define SDR_COMMFAIL 0x01000003
#define SDR_HARDFAIL 0x01000004
#define SDR_OPENDEVICE 0x01000005
#define SDR_OPENSESSION 0x01000006
#define SDR_PARDENY 0x01000007
#define SDR_KEYNOTEXIST 0x01000008
#define SDR_ALGNOTSUPPORT 0x01000009
#define SDR_ALGMODNOTSUPPORT 0x01000010
#define SDR_PKOPERR 0x01000011
#define SDR_SKOPERR 0x01000012
#define SDR_SIGNERR 0x01000013
#define SDR_VERIFYERR 0x01000014
#define SDR_SYMOPERR 0x01000015
#define SDR_STEPERR 0x01000016
#define SDR_FILESIZEERR 0x01000017
#define SDR_FILENOEXIST 0x01000018
#define SDR_FILEOFSERR 0x01000019
#define SDR_KEYTYPEERR 0x01000020
#define SDR_KEYERR 0x01000021
#define SDR_FILENOROOM 0x01000022
#define SDR_FILEEXIST 0x01000023
#define SDR_POPEDOMERR 0x01000024
#define SDR_KEYISEMPTYERR 0x01000025
#define SDR_INITCardERR 0x01000026