文档库 最新最全的文档下载
当前位置:文档库 › 《智能IC卡及智能密码钥匙密码应用接口规范(国密封皮)》20100816

《智能IC卡及智能密码钥匙密码应用接口规范(国密封皮)》20100816

《智能IC卡及智能密码钥匙密码应用接口规范(国密封皮)》20100816
《智能IC卡及智能密码钥匙密码应用接口规范(国密封皮)》20100816

智能IC卡及智能密码钥匙密码应用接口规范

Smart Card and Smart Token Cryptography Application Interface Specification

国家密码管理局

2010年4月

目次

前言 ............................................................................. IV

1 范围 (1)

2 规范性引用文件 (1)

3 术语和定义 (1)

4 缩略语 (2)

5 结构模型 (2)

5.1 层次关系 (2)

5.2 设备的应用结构 (3)

6 数据类型定义 (4)

6.1 算法标识 (4)

6.1.1 分组密码算法标识 (4)

6.1.2 非对称密码算法标识 (5)

6.1.3 密码杂凑算法标识 (5)

6.2 基本数据类型 (5)

6.3 常量定义 (6)

6.4 复合数据类型 (6)

6.4.1 版本 (6)

6.4.2 设备信息 (6)

6.4.3 RSA公钥数据结构 (7)

6.4.4 RSA私钥数据结构 (8)

6.4.5 ECC公钥数据结构 (8)

6.4.6 ECC私钥数据结构 (9)

6.4.7 ECC密文数据结构 (9)

6.4.8 ECC签名数据结构 (9)

6.4.9 分组密码参数 (10)

6.4.10 文件属性 (10)

6.4.11 权限类型 (11)

6.4.12 设备状态 (11)

7 接口函数 (11)

7.1 设备管理 (11)

7.1.1 概述 (11)

7.1.2 等待设备插拔事件 (11)

7.1.3 取消等待设备插拔事件 (12)

7.1.4 枚举设备 (12)

7.1.5 连接设备 (12)

7.1.6 断开连接 (12)

7.1.7 获取设备状态 (12)

7.1.8 设置设备标签 (12)

7.1.9 获取设备信息 (13)

7.1.10 锁定设备 (13)

7.1.11 解锁设备 (13)

7.1.12 设备命令传输 (13)

7.2 访问控制 (13)

7.2.1 概述 (13)

I

7.2.2 修改设备认证密钥 (14)

7.2.3 设备认证 (14)

7.2.4 修改PIN (14)

7.2.5 获取PIN信息 (14)

7.2.6 校验PIN (15)

7.2.7 解锁PIN (15)

7.2.8 清除应用安全状态 (15)

7.3 应用管理 (15)

7.3.1 概述 (15)

7.3.2 创建应用 (15)

7.3.3 枚举应用 (16)

7.3.4 删除应用 (16)

7.3.5 打开应用 (16)

7.3.6 关闭应用 (16)

7.4 文件管理 (17)

7.4.1 概述 (17)

7.4.2 创建文件 (17)

7.4.3 删除文件 (17)

7.4.4 枚举文件 (17)

7.4.5 获取文件属性 (18)

7.4.6 读文件 (18)

7.4.7 写文件 (18)

7.5 容器管理 (18)

7.5.1 概述 (18)

7.5.2 创建容器 (19)

7.5.3 删除容器 (19)

7.5.4 打开容器 (19)

7.5.5 关闭容器 (19)

7.5.6 枚举容器 (19)

7.6 密码服务 (20)

7.6.1 概述 (20)

7.6.2 生成随机数 (21)

7.6.3 生成外部RSA密钥对 (21)

7.6.4 生成RSA签名密钥对 (21)

7.6.5 导入RSA加密密钥对 (21)

7.6.6 RSA签名 (22)

7.6.7 RSA验签 (22)

7.6.8 RSA生成并导出会话密钥 (22)

7.6.9 RSA外来公钥运算 (23)

7.6.10 RSA外来私钥运算 (23)

7.6.11 生成ECC签名密钥对 (23)

7.6.12 导入ECC加密密钥对 (24)

7.6.13 ECC签名 (24)

7.6.14 ECC验签 (24)

7.6.15 ECC生成并导出会话密钥 (24)

7.6.16 ECC外来公钥加密 (25)

II

7.6.17 ECC外来私钥解密 (25)

7.6.18 ECC外来私钥签名 (25)

7.6.19 ECC外来公钥验签 (25)

7.6.20 ECC生成密钥协商参数并输出 (26)

7.6.21 ECC产生协商数据并计算会话密钥 (26)

7.6.22 ECC计算会话密钥 (26)

7.6.23 导出公钥 (27)

7.6.24 导入会话密钥 (27)

7.6.25 明文导入会话密钥 (27)

7.6.26 加密初始化 (28)

7.6.27 单组数据加密 (28)

7.6.28 多组数据加密 (28)

7.6.29 结束加密 (28)

7.6.30 解密初始化 (29)

7.6.31 单组数据解密 (29)

7.6.32 多组数据解密 (29)

7.6.33 结束解密 (30)

7.6.34 密码杂凑初始化 (30)

7.6.35 单组数据密码杂凑 (30)

7.6.36 多组数据密码杂凑 (30)

7.6.37 结束密码杂凑 (31)

7.6.38 消息鉴别码运算初始化 (31)

7.6.39 单组数据消息鉴别码运算 (31)

7.6.40 多组数据消息鉴别码运算 (32)

7.6.41 结束消息鉴别码运算 (32)

7.6.42 关闭密码对象句柄 (32)

8 设备的安全要求 (32)

8.1 设备使用阶段 (32)

8.2 权限管理 (32)

8.2.1 权限分类 (32)

8.2.2 权限使用 (32)

8.2.3 设备认证 (33)

8.2.4 PIN码安全要求 (33)

8.3 密钥安全要求 (33)

8.4 设备抗攻击要求 (33)

附录A (规范性附录)错误代码定义和说明 (34)

III

前言

本规范涉及的密码算法按照国家密码管理部门的要求使用。

本规范的附录A为规范性附录。

本规范由国家密码管理局提出并归口。

本规范起草单位:北京海泰方圆科技有限公司、北京握奇智能科技有限公司、北京大明五洲科技有限公司、恒宝股份有限公司、深圳市明华澳汉科技股份有限公司、武汉天喻信息产业股份有限公司、北京飞天诚信科技有限公司、华翔腾数码科技有限公司。

本规范主要起草人:石玉平、柳增寿、胡俊义、管延军、项莉、雷继业、胡鹏、赵再兴、段晓毅、刘玉峰、刘伟丰、陈吉、何永福、李高锋、黄东杰、王建承、汪雪林、赵李明。

本规范责任专家:刘平、郭宝安。

IV

智能IC卡及智能密码钥匙密码应用接口规范

1范围

本规范规定了基于PKI密码体制的智能IC卡及智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。

本规范适用于智能IC卡及智能密码钥匙产品的研制、使用和检测。

2规范性引用文件

下列文件中的条款通过本规范的引用而成为本规范的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本规范,然而,鼓励根据本规范达成协议的各方研究是否可使用这些的最新版本。凡是不注日期的引用文件,其最新版本适用于本规范。

3术语和定义

以下术语和定义适用于本规范。

3.1

应用 application

包括容器、设备认证密钥和文件的一种结构,具备独立的权限管理。

3.2

容器 container

特指密钥容器,是一个用于存放非对称密钥对和会话密钥的逻辑对象。

3.3

设备 device

智能IC卡及智能密码钥匙的统称。

3.4

设备认证 device authentication

智能IC卡或智能密码钥匙对应用程序的认证。

3.5

设备认证密钥 device authentication key

用于设备认证的密钥。

3.6

设备标签 label

设备的别名,可以由用户进行设定并存储于设备内部。

3.7

消息鉴别码 message authentication code (MAC)

消息鉴别算法的输出。

3.8

管理员PIN Administrator PIN

管理员的密码,为ASCII字符串。

3.9

用户PIN User PIN

用户的个人密码,为ASCII字符串。

3.10

智能IC卡 smart card

含CPU的IC卡,这里指能完成密码功能的IC卡。

3.11

1

智能密码钥匙smart token

能完成密码功能和安全存储的终端密码产品,一般采用USB接口。

3.12

SM1算法 SM1 algorithm

一种国家商用密码分组加密算法,分组长度为128比特,密钥长度为128比特。

3.13

SM2算法 SM2 algorithm

一种国家商用密码非对称密码算法,密钥长度为256比特。

3.14

SM3算法 SM3 algorithm

一种国家商用密码密码杂凑算法,输出长度为256比特。

3.15

SMS4算法 SMS4 algorithm

一种国家商用密码分组加密算法,分组长度为128比特,密钥长度为128比特。

3.16

SSF33算法 SSF33 algorithm

一种国家商用密码分组加密算法,分组长度为128比特,密钥长度为128比特。

4缩略语

下列缩略语适用于本规范:

API 应用编程接口(Application Programming Interface)

PKI 公钥基础设施(Public Key Infrastructure)

PKCS#1 公钥密码使用标准系列规范中的第1部分,定义RSA公开密钥算法加密和签名机制(the Public-Key Cryptography Standard Part 1)

PKCS#5 公钥密码使用标准系列规范中的第5部分,描述一种利用从口令派生出来的安全密钥加密字符串的方法(the Public-Key Cryptography Standard Part 5) PIN 个人身份识别码(Personal Identification Number)

MAC 消息鉴别码(Message Authentication Code)

ECC 椭圆曲线密码算法(Elliptic Curve Cryptography)

5结构模型

5.1层次关系

智能IC卡及智能密码钥匙密码应用接口位于智能IC卡及智能密码钥匙应用程序与设备之间,如图1所示。

2

图1接口在应用层次关系中的位置

5.2设备的应用结构

一个设备中存在设备认证密钥和多个应用,应用之间相互独立。设备的逻辑结构如图2所示。

图2 设备逻辑结构

应用由管理员PIN、用户PIN、文件和容器组成,可以存在多个文件和多个容器。

每个应用维护各自的与管理员PIN和用户PIN相关的权限状态。

应用的逻辑结构如图3所示。

3

图3 应用逻辑结构图

容器中存放加密密钥对、签名密钥对和会话密钥。其中加密密钥对用于保护会话密钥,签名密钥对用于数字签名和验证,会话密钥用于数据加解密和MAC运算。其中,签名密钥对由内部产生,加密密钥对由外部产生并安全导入,会话密钥可由内部产生或者由外部产生并安全导入。

6数据类型定义

6.1算法标识

6.1.1分组密码算法标识

分组密码算法标识包含密码算法的类型和加密模式。

分组密码算法标识的编码规则为:从低位到高位,第0位到第7位按位表示分组密码算法工作模式,第8位到第31位按位表示分组密码算法类型,分组密码算法的标识如表1所示。

4

非对称密码算法标识仅定义了密码算法的类型,在使用非对称算法进行数字签名运算时,可将非对称密码算法标识符与密码杂凑算法标识符进行“或”运算后使用,如“RSA with SHA1”可表示为SGD_RSA | SGD_SHA1,即0x00010002,“|”表示“或”运算。

非对称密码算法标识的编码规则为:从低位到高位,第0位到第7位为0,第8位到第15位按位表示非对称密码算法的算法协议,如果所表示的非对称算法没有相应的算法协议则为0,第16位到第31位按位表示非对称密码算法类型,非对称密码算法的标识如表2所示。

表 2 非对称密码算法标识表

6.1.3密码杂凑算法标识

密码杂凑算法标识符可以在进行密码杂凑运算或计算MAC时应用,也可以与非对称密码算法标识符进行“或”运算后使用,表示签名运算前对数据进行密码杂凑运算的算法类型。

密码杂凑算法标识的编码规则为:从低位到高位,第0位到第7位表示密码杂凑算法,第8位到第31位为0,密码杂凑算法的标识如表3所示。

表 3 密码杂凑算法标识表

6.2基本数据类型

本规范中的字节数组均为高位字节在前(Big-Endian)方式存储和交换。基本数据类型定义如表4所示:

表 4 基本数据类型

5

6.3常量定义

数据常量标识定义了在规范中用到的常量的取值。

数据常量标识的定义如表5所示。

表 5 常量定义

6.4复合数据类型

6.4.1版本

(1)类型定义

typedef struct Struct_Version{

BYTE major;

BYTE minor;

}VERSION;

(2)数据项描述参见表6:

6.4.2设备信息

(1)类型定义

typedef struct Struct_DEVINFO{

6

VERSION Version;

CHAR Manufacturer[64];

CHAR Issuer[64];

CHAR Label[32];

CHAR SerialNumber[32];

VERSION HWVersion;

VERSION FirmwareVersion;

ULONG AlgSymCap;

ULONG AlgAsymCap;

ULONG AlgHashCap;

ULONG DevAuthAlgId;

ULONG TotalSpace;

ULONG FreeSpace;

BYTE Reserved[64];

}DEVINFO,*PDEVINFO;

(2)数据项描述参见表7:

6.4.3RSA公钥数据结构

(1)类型定义

typedef struct Struct_RSAPUBLICKEYBLOB{

ULONG AlgID;

ULONG BitLen;

BYTE Modulus[MAX_RSA_MODULUS_LEN];

BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];

}RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB;

MAX_RSA_MODULUS_LEN为算法模数的最大长度;

MAX_RSA_EXPONENT_LEN为算法指数的最大长度。

(2)数据项描述参见表8:

7

表 8 RSA公钥数据结构

6.4.4RSA私钥数据结构

(1)类型定义

typedef struct Struct_RSAPRIVATEKEYBLOB{

ULONG AlgID;

ULONG BitLen;

BYTE Modulus[MAX_RSA_MODULUS_LEN];

BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];

BYTE PrivateExponent[MAX_RSA_MODULUS_LEN];

BYTE Prime1[MAX_RSA_MODULUS_LEN/2];

BYTE Prime2[MAX_RSA_MODULUS_LEN/2];

BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2];

BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2];

BYTE Coefficient[MAX_RSA_MODULUS_LEN/2];

}RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;

MAX_RSA_MODULUS_LEN为RSA算法模数的最大长度;

(2)数据项描述参见表9:

表 9 RSA私钥数据结构

6.4.5ECC公钥数据结构

(1)类型定义

typedef struct Struct_ECCPUBLICKEYBLOB{

ULONG AlgID;

ULONG BitLen;

BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];

BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];

}ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;

ECC_MAX_XCOORDINATE_LEN为ECC算法X坐标的最大长度;

8

ECC_MAX_YCOORDINATE_LEN为ECC算法Y坐标的最大长度。

(2)数据项描述参见表10:

表 10 ECC公钥数据结构

6.4.6ECC私钥数据结构

(1)类型定义

typedef struct Struct_ECCPRIVATEKEYBLOB{

ULONG AlgID;

ULONG BitLen;

BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];

}ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;

ECC_MAX_MODULUS_BITS_LEN为ECC算法模数的最大长度。

(2)数据项描述参见表11:

表 11 ECC私钥数据结构

(1)类型定义

typedef struct Struct_ECCCIPHERBLOB{

BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];

BYTE YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];

BYTE Cipher[ECC_MAX_XCOORDINATE_BITS_LEN/8];

BYTE Mac[ECC_MAX_XCOORDINATE_BITS_LEN/8];

} ECCCIPHERBLOB, *PECCCIPHERBLOB;

(2)数据项描述参见表12:

表 12 ECC密文数据结构

6.4.8ECC签名数据结构

(1)类型定义

typedef struct Struct_ECCSIGNATUREBLOB{

9

BYTE r[ECC_MAX_XCOORDINATE_BITS_LEN/8];

BYTE s[ECC_MAX_XCOORDINATE_BITS_LEN/8];

} ECCSIGNATUREBLOB, *PECCSIGNATUREBLOB;

ECC_MAX_MODULUS_BITS_LEN为ECC算法模数的最大长度;(2)数据项描述参见表13:

表 13 ECC签名数据结构

6.4.9分组密码参数

(1)类型定义

typedef struct Struct_BLOCKCIPHERPARAM{

BYTE IV[MAX_IV_LEN];

ULONG IVLen;

ULONG PaddingType;

ULONG FeedBitLen;

} BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;

(2)数据项描述参见表14:

表 14 分组密码参数

6.4.10文件属性

(1)类型定义

typedef struct Struct_FILEATTRIBUTE{

CHAR FileName[32];

ULONG FileSize;

ULONG ReadRights;

ULONG WriteRights;

} FILEATTRIBUTE, *PFILEATTRIBUTE;

(2)数据项描述参见表15:

表 15 文件属性

10

6.4.11权限类型

权限类型的定义参见表16:

表 16 权限类型

6.4.12设备状态

设备状态的定义参见表17:

表 17 设备状态

7接口函数

7.1设备管理

7.1.1概述

设备管理主要完成设备的插拔事件处理、枚举设备、连接设备、断开连接、获取设备状态、设置设备标签、获取设备信息、锁定设备、解锁设备和设备命令传输等操作。设备管理系列函数如表18所示:

表 18 设备管理系列函数

7.1.2等待设备插拔事件

函数原型ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName,ULONG *pulDevNameLen, ULONG *pulEvent)

功能描述该函数等待设备插入或者拔除事件。szDevName返回发生事件的设备名称。

参数szDevName [OUT] 发生事件的设备名称。

pulDevNameLen [IN/OUT] 输入/输出参数,当输入时表示缓冲区长度,输出时表

示设备名称的有效长度,长度包含字符串结束符。

pulEvent [OUT]事件类型。1表示插入,2表示拔出。

11

返回值SAR_OK:成功。

其他:错误码。

7.1.3取消等待设备插拔事件

函数原型ULONG DEVAPI SKF_CancelWaitForDevEvent()

功能描述该函数取消等待设备插入或者拔除事件。

参数

返回值SAR_OK:成功。

其他:错误码。

备注使本进程正在执行的SKF_WaitForDevEvent函数立即返回。

7.1.4枚举设备

函数原型ULONG DEVAPI SKF_EnumDev(BOOL bPresent, LPSTR szNameList, ULONG *pulSize) 功能描述获得当前系统中的设备列表。

参数bPresent [IN] 为TRUE表示取当前设备状态为存在的设备列表。为FALSE

表示取当前驱动支持的设备列表。

szNameList [OUT] 设备名称列表。如果该参数为NULL,将由pulSize返回所

需要的内存空间大小。每个设备的名称以单个‘\0’结束,以双

‘\0’表示列表的结束。

pulSize [IN,OUT] 输入时表示设备名称列表的缓冲区长度,输出时表示

szNameList所占用的空间大小。

返回值SAR_OK:成功。

其他:错误码。

7.1.5连接设备

函数原型ULONG DEVAPI SKF_ConnectDev (LPSTR szName, DEVHANDLE *phDev)

功能描述通过设备名称连接设备,返回设备的句柄。

参数szName [IN] 设备名称。

phDev [OUT] 返回设备操作句柄。

返回值SAR_OK:成功。

其他:错误码。

7.1.6断开连接

函数原型ULONG DEVAPI SKF_DisConnectDev (DEVHANDLE hDev)

功能描述断开一个已经连接的设备,并释放句柄。

参数hDev [IN] 连接设备时返回的设备句柄。

返回值SAR_OK:成功。

其他:错误码。

备注如果该设备已被锁定,函数应首先解锁该设备。断开连接操作并不影响设备的权限状态。

7.1.7获取设备状态

函数原型ULONG DEVAPI SKF_GetDevState(LPSTR szDevName, ULONG *pulDevState)

功能描述获取设备是否存在的状态。

参数szDevName[IN] 设备名称。

pulDevState [OUT] 返回设备状态。

返回值SAR_OK:成功。

其他:错误码。

7.1.8设置设备标签

函数原型ULONG DEVAPI SKF_SetLabel (DEVHANDLE hDev, LPSTR szLabel)

功能描述设置设备标签。

12

参数hDev [IN] 连接设备时返回的设备句柄。

szLabel [IN] 设备标签字符串。该字符串应小于32字节。

返回值SAR_OK:成功。

其他:错误码。

7.1.9获取设备信息

函数原型ULONG DEVAPI SKF_GetDevInfo (DEVHANDLE hDev, DEVINFO *pDevInfo)

功能描述获取设备的一些特征信息,包括设备标签、厂商信息、支持的算法等。

参数hDev [IN] 连接设备时返回的设备句柄。

pDevInfo [OUT] 返回设备信息。

返回值SAR_OK:成功。

其他:错误码。

7.1.10锁定设备

函数原型ULONG DEVAPI SKF_LockDev (DEVHANDLE hDev, ULONG ulTimeOut)

功能描述获得设备的独占使用权。

参数hDev [IN] 连接设备时返回的设备句柄。

ulTimeOut [IN] 超时时间,单位为毫秒。如果为0xFFFFFFFF表示无限等待。

返回值SAR_OK:成功。

其他:错误码。

7.1.11解锁设备

函数原型ULONG DEVAPI SKF_UnlockDev (DEVHANDLE hDev)

功能描述释放对设备的独占使用权。

参数hDev [IN] 连接设备时返回的设备句柄。

返回值SAR_OK:成功。

其他:错误码。

7.1.12设备命令传输

函数原型ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev, BYTE* pbCommand, ULONG ulCommandLen,BYTE* pbData, ULONG* pulDataLen)

功能描述将命令直接发送给设备,并返回结果。

参数hDev [IN] 设备句柄。

pbCommand [IN] 设备命令。

ulCommandLen [IN] 命令长度。

pbData [OUT] 返回结果数据。

pulDataLen [IN,OUT] 输入时表示结果数据缓冲区长度,输出时表示结果数据

实际长度。

返回值SAR_OK:成功。

其他:错误码。

7.2访问控制

7.2.1概述

访问控制主要完成设备认证、PIN码管理和安全状态管理等操作。访问控制系列函数如表19所示:

表 19 访问控制系列函数

13

函数原型ULONG DEVAPI SKF_ChangeDevAuthKey (DEVHANDLE hDev, BYTE *pbKeyValue, ULONG ulKeyLen)

功能描述更改设备认证密钥。

参数hDev [IN] 连接时返回的设备句柄。

pbKeyValue [IN] 密钥值。

ulKeyLen [IN] 密钥长度。

返回值SAR_OK:成功。

其他:错误码。

备注权限要求:设备认证成功后才能使用。

7.2.3设备认证

函数原型ULONG DEVAPI SKF_DevAuth (DEVHANDLE hDev, BYTE *pbAuthData,ULONG ulLen) 功能描述设备认证是设备对应用程序的认证。认证过程参见8.2.3。

参数hDev [IN] 连接时返回的设备句柄。

pbAuthData [IN] 认证数据。

ulLen [IN] 认证数据的长度。

返回值SAR_OK:成功。

其他:错误码。

7.2.4修改PIN

函数原型ULONG DEVAPI SKF_ChangePIN (HAPPLICATION hApplication, ULONG ulPINType, LPSTR szOldPin, LPSTR szNewPin, ULONG *pulRetryCount)

功能描述调用该函数可以修改Administrator PIN和User PIN的值。

如果原PIN码错误导致验证失败,该函数会返回相应PIN码的剩余重试次数,当剩

余次数为0时,表示PIN已经被锁死。

参数hApplication [IN] 应用句柄。

ulPINType [IN] PIN类型,可为ADMIN_TYPE或USER_TYPE。

szOldPin [IN] 原PIN值。

szNewPin [IN] 新PIN值。

pulRetryCount [OUT] 出错后重试次数。

返回值SAR_OK:成功。

其他:错误码。

7.2.5获取PIN信息

函数原型ULONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication, ULONG ulPINType, ULONG *pulMaxRetryCount, ULONG *pulRemainRetryCount, BOOL *pbDefaultPin) 功能描述获取PIN码信息,包括最大重试次数、当前剩余重试次数,以及当前PIN码是否为出厂默认PIN码。

参数hApplication [IN] 应用句柄。

ulPINType [IN] PIN类型。

pulMaxRetryCount [OUT] 最大重试次数。

pulRemainRetryCount [OUT] 当前剩余重试次数,当为0时表示已锁死。

pbDefaultPin [OUT] 是否为出厂默认PIN码。

返回值SAR_OK:成功。

其他:错误码。

14

7.2.6校验PIN

函数原型ULONG DEVAPI SKF_VerifyPIN (HAPPLICATION hApplication, ULONG ulPINType, LPSTR szPIN, ULONG *pulRetryCount)

功能描述校验PIN码。校验成功后,会获得相应的权限,如果PIN码错误,会返回PIN码的重试次数,当重试次数为0时表示PIN码已经锁死。

参数hApplication [IN] 应用句柄。

ulPINType [IN] PIN类型。

szPIN [IN] PIN值。

pulRetryCount [OUT] 出错后返回的重试次数。

返回值SAR_OK:成功。

其他:错误码。

7.2.7解锁PIN

函数原型ULONG DEVAPI SKF_UnblockPIN (HAPPLICATION hApplication, LPSTR szAdminPIN, LPSTR szNewUserPIN, ULONG *pulRetryCount)

功能描述当用户的PIN码锁死后,通过调用该函数来解锁用户PIN码。

解锁后,用户PIN码被设置成新值,用户PIN码的重试次数也恢复到原值。

参数hApplication [IN] 应用句柄。

szAdminPIN [IN] 管理员PIN码。

szNewUserPIN [IN] 新的用户PIN码。

pulRetryCount [OUT] 管理员PIN码错误时,返回剩余重试次数。

返回值SAR_OK:成功。

其他:错误码。

备注验证完管理员PIN才能够解锁用户PIN码,如果输入的Administrator PIN不正确或者已经锁死,会调用失败,并返回Administrator PIN的重试次数。

7.2.8清除应用安全状态

函数原型ULONG DEVAPI SKF_ClearSecureState (HAPPLICATION hApplication)

功能描述清除应用当前的安全状态。

参数hApplication [IN] 应用句柄。

返回值SAR_OK:成功。

其他:错误码。

7.3应用管理

7.3.1概述

应用管理主要完成应用的创建、枚举、删除、打开、关闭等操作。应用管理系列函数如表20所示:

表 20 应用管理系列函数

7.3.2创建应用

函数原型ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev, LPSTR szAppName, LPSTR szAdminPin, DWORD dwAdminPinRetryCount,LPSTR szUserPin, DWORD

dwUserPinRetryCount,DWORD dwCreateFileRights, HAPPLICATION *phApplication)

15

相关文档