一、通用密码服务接口规范(GIWT 0019)
GM/T 0019-2012《通用密码服务接口规范》
本规范规定了统一的通用密码服务接口,适用于公开密钥应用技术体系下密码应用服务的开发,密码应用支撑平台的研制及检测,也可用于指导直接使用密码设备的应用系统的开发。
本规范对算法标识和数据结构、密码服务接口和密码服务接口函数进行了定义。算法标识和数据结构主要内容包括算法标识与常量定义、用户证书列表、密钥容器信息列表和证书中DN的结构;密码服务接口的主要内容包括环境类函数、证书类函数、密码运算类函数和消息类函数。
本规范中密码服务接口函数定义主要分为以下四类函数。
1.环境类函数
(1) 初始化环境:SAF_Initialize
(2) 清除环境:SAF_Finalize
(3) 获取接口版本信息:SAF_GetVersion
(4) 用户登录:SAF_Login
(5) 修改PIN: SAF_ChangePin
(6) 注销登录:SAF_Logout
2.证书类函数
(1) 添加根CA证书:SAF_AddPrustedRootCaCertificate
(2) 获取根CA证书个数:SAF-GetRootCaCertificateCount
(3) 获取根CA证书:SAF GetRootCaCertificate
(4) 删除根CA证书:SAF_RemoveRootCaCertificate
(5) 添加CA证书:SAF_AddCaCertificate
(6) 获取CA证书个数:SAF GetCaCertificateCount
(7) 获取CA证书:SAF_GetCaCertificate
(8) 删除CA证书:SAF_RemoveCaCertificate
(9) 添加CRL:SAF_AddCrl
(10) 验证用户证书:SAF_VerifyCertificate
(11) 根据CRL文件获取用户证书注销状态:SAF_VerifyCertificateByCrl
(12) 根据OCSP获取证书状态:SAF_GetCertificateStateByOCSP
(13) 通过LDAP方式获取证书:SAF_GetCertificateFromLdap
(14) 通过LDAP方式获取证书对应的CRL: SAF_GetCrIFromLdap
(15) 获取证书信息:SAF_GetCertificateInfo
(16) 获取证书扩展信息:SAF_GetExtTypeInfo
(17) 列举用户证书:SAF_EnumCertificate
(18) 列举用户的密钥容器信息:SA F_EnumKeyContainerlnfo
(19) 释放列举用户证书的内存:SAF_EnumCertificateFree
(20) 释放列举密钥容器信息的内存:SAF_EnumkeyContainerlnfoFree
3.密码运算类函数
(1) 单块Base64编码:SAF Base64_Encode
(2) 单块Base64解码:SAF Base64_Decode
(3) 创建Base64对象:SAF_Base64_CreateBase64Obj
(4) 销毁Base64对象:SAF_Base64_DestroyBase64Obj
(5) 通过Base64对象继续编码:SAF_Base64_EncodeUpdate
(6) 通过Base64对象编码结束:SAF_Base64_EncodeFinal
(7) 通过Base64对象继续解码:SAF_Base64_DecodeUpdate
(8) 通过Base64对象解码结束:SAF_Base64_DecodeFinal
(9) 生成随机数:SAF_GenRandom
(10) HASH运算:SAF_Hash
(11) 创建HASH对象:SAF_CreateHashObj
(12) 删除HASH对象:SAF_DestroyHashObj
(13) 通过对象多块HASH运算:SAF_HashUpdate
(14) 结束HASH运算:SAF_HashFinal
(15) 生成RSA密钥对:SAF_GenRsaKeyPair
(16) 获取RSA公钥:SAF_GetPublicKey
(17) RSA签名运算:SAF_RsaSign
(18) 对文件进行RSA签名运算:SAF_RsaSignFile
(19) RSA验证签名运算:SAF_RsaVerifySign
(20) 对文件及其签名进行RSA验证:SAF_RsaVerifySignFile
(21) 基于证书的RSA公钥验证:SAF_VerifySignByCert
(22) 生成ECC密钥对:SAF_GenEccKeyPair
(23) 获取ECC公钥:SAF_GetEccPublicKey
(24) ECC签名:SAF_EccSign
(25) ECC验证:SAF_EccVerifySign
(26) ECC公钥加密:SAF_EccPublicKeyEnc
(27) 基于证书的ECC公钥加密:SAF_EccPublicKeyEncByCert
(28) 基于证书的ECC公钥验证:SAF_EccVerifySignByCert
(29) 创建对称算法对象:SAF_CreateSymmAlgoObj
(30) 生成会话密钥并用外部公钥加密输出:SAF_GenerateKeyWithEPKu
(31) 导入加密的会话密钥:SAF_lmportEncedKey
(32) 生成密钥协商参数并输出:SAF_GenerateAgreementDataWithECC
(33) 计算会话密钥:SAF_GenerateKcvWithECC
(34) 产生协商数据并计算会话密钥:SAF_GenerateAgreementDataAndKey WithECC
(35) 销毁对称算法对象:SAF_DestroySymmAlgoObj
(36) 销毁会话密钥句柄:SAF_DestroyKeyHandle
(37) 单块加密运算:SAF_SymmEncrypt
(38) 多块加密运算:SAF_SymmEncryptUpdate
(39) 结束加密运算:SAF_SynmEncryptrinal
(40) 单块解密运算:SAF_SynunDccrypt
(41) 多块解密运算:SAF_SynuuDecryptUpdate
(42) 结束解密运算:SAF_SymmDecryptFinal
(43) 单组数据消息鉴别码运算:SAF—Mac
(44) 多组数据消息鉴别码运算:SAF_Mac Update
(45) 结束消息鉴别码运算:SAF_M acF.nal
4.消息类函数
(1) 编码PKCS#7格式的带签名的数字信封数据:SAF_Pkcs7_EncodeData
(2) 解码PKCS#7格式的带签名的数字信封数据:SAF_Pkcs7~DecodeData
(3) 编码PKCS#7格式的签名数据:SAF_Pkcs7_EncodeSignedData
(4) 解码PKCS#7格式的签名数据:SAF_Pkcs7_DecodeSignedData
(5) 编码PKCS#7格式的数字信封数据:SAF_Pkcs7_EncodeEnvelopedData
(6) 解码PKCS#7格式的数字信封数据:SAF_Pkcs7_DecodeEnvelopedData
(7) 编码PKCS#7格式的摘要数据:SAF_Pkcs7_EncodeDigestedData
(8) 解码PKCS#7格式的摘要数据:SAF—Pkcs7_DecodeDigestedData
(9) 编码基于SM2算法的带签名的数字信封数据:SAF_SM2_ EncodeSignAnd EnvelopedData
(10) 编码基于SM2算法的带签名的数字信封数据:SAF_SM2_DecodeSignAnd EnvelopedData
(11) 编码基于SM2算法的签名数据:SA F_SM2_EncodeSignedData
(12) 解码基于SM2算法的签名数据:SAF_SM2_DecodeSignedData
(13) 编码基于SM2算法的数字信封:SAF_SM2_EncodeEnvelopedData
(14) 解码基于SM2算法的数字信封:SAF_SM2_DecodeEnvelopedData
在附录中给出了上述接口函数返回值错误代码的定义。
二、证书应用综合服务接口规范(GM/T 0020)
GM/T 0020-2012《证书应用综合服务接口规范》
本规范规定了而向证书应用的统一服务接口,适用于公钥密码应用技术体系下密码应用服务产品的开发,密码应用支撑平台的研制及检测,也可用于指导直接使用密码设备和密码服务应用系统的集成和开发。
证书应用综合服务接口位于应用系统和典型密码服务接口之间,向应用层直接提供证书信息解析、基于数字证书身份认证和信息的机密性、完整性、不可否认性等高级密码服务。该接口直接供应用系统调用,将应用系统的密码服务请求转向通用密码服务接口,通过通用密码服务接口调用相应的密码设备实现具体的密码运算和密钥操作。通用密码服务接口应遵循GM/T 0019。
本规范所定义的证书应用综合服务接口包括客户端服务接口和服务器端服务接口两类,其中服务器端服务接口采用COM组件形式和Java形式描述。
客户端服务接口采用客户端控件方式,客户端控件适用于客户端程序调用,接口的形态包括DLL动态库、ActiveX控件、Applet插件等,接口应支持Windows XP、Windows 2000、Windows 2003、Vista、Windows 7等终端用户使用的主流操作系统。客户端控件接口的主要函数功能应包括:配置管理、证书解析、签名与验证、加密与解密、数字信封、XML数据的签名与验证等。在定义客户端服务接口时,本规范以ActiveX控件为例进行描述,其中BSTR代表函数返回值或参数类型为OLECHAR字符串类型,不同的开发语言应采取对应的类型定义,如char*、CString、java.lang.String等。
服务器端服务接口适用于服务器端程序调用,接几的形念包括COM组件、JAR包、WebService等形态,接口应支持Windows、Linux、UniX、AIX、Solaris等服务器使用的主流操作系统。服务器端服务接口的函数功能与客户端控件接口相对应,主要包括:配置管理、数字证书解析、签名与验证、加密与解密、数据信封、XML数据的签名与验证、时间戳等。
本规范在附录中给出了证书应用综合服务接口的错误代码返回值、典型部署模型和集成示例。