GM/T 0019-2023 相关标准英文版PDF

标准号码价格美元第2步(购买)交付天数标准名称
GM/T 0019-2023 1935 GM/T 0019-2023 3秒自动 通用密码服务接口规范
GM/T 0019-2012 410 GM/T 0019-2012 3秒自动 通用密码服务接口规范
   
基本信息
标准编号 GM/T 0019-2023 (GM/T0019-2023)
中文名称 通用密码服务接口规范
英文名称 Universal cryptography service interface specification
行业 Chinese Industry Standard (推荐)
中标分类 L80
字数估计 88,860
发布日期 2023-12-04
实施日期 2024-06-01
发布机构 国家密码管理局

GM/T 0019-2023: 通用密码服务接口规范 ICS 35.030 CCSL80 中华人民共和国密码行业标准 代替GM/T 0019-2012 通用密码服务接口规范 2023-12-04发布 2024-06-01实施 国家密码管理局 发 布 目次 前言 Ⅲ 1 范围 1 2 规范性引用文件 1 3 术语和定义 1 4 缩略语 1 5 算法标识和数据结构 2 5.1 算法标识与常量定义 2 5.2 密码服务接口数据结构定义和说明 2 6 密码服务接口 3 6.1 通用密码服务接口在公钥密码基础设施应用技术体系框架中的位置 3 6.2 密码服务接口组成和功能说明 3 7 密码服务接口函数定义 4 7.1 环境类函数 4 7.2 证书类函数 7 7.3 密码运算类函数 16 7.4 消息类函数 42 8 验证方法 53 8.1 验证环境 53 8.2 密码服务环境操作验证 53 8.3 证书类函数功能验证 54 8.4 签名验签验证 56 8.5 摘要计算验证 59 8.6 非对称加解密验证 60 8.7 对称加解密验证 62 8.8 生成密钥对验证 63 8.9 PKCS#7运算验证 64 8.10 SM2消息类运算验证 65 8.11 Base64编码验证 66 附录A(规范性) SM9密码算法应用接口 68 附录B(规范性) 密码服务接口错误代码定义 81 参考文献 83 前言 本文件按照GB/T 1.1-2020《标准化工作导则 第1部分:标准化文件的结构和起草规则》的规定 起草。 本文件代替GM/T 0019-2012《通用密码服务接口规范》,与GM/T 0019-2012相比,除结构调整 和编辑性改动外,主要技术变化如下: a) 删除了“用户证书列表”中的“数据长度(字节)”列(见2012年版的表2)“密钥容器列表”中的 “数据长度(字节)”列(见2012年版的表3); b) 删除了“证书中DN的结构(见表4)”内容(见2012年版的5.2.4); c) 删除了“通用密码服务在公钥密码应用技术体系框架内的位置”图;(见2012年版的图1); d) 增加了“解析PKCS#7格式的签名数据”接口(见7.4.16); e) 增加了“验证方法”(见第8章); f) 增加了“SM9密码算法应用接口”(见附录A); g) 增加了“证书被吊销的原因”错误码 (见表B.1); h) 删除了“SAR_CertRevokedErr”的宏描述、预定义值、说明 (见2012年版的附录A)。 请注意本文件的某些内容可能涉及专利。本文本的发布机构不承担识别专利的责任。 本文件由密码行业标准化技术委员会提出并归口。 本文件起草单位:北京数字认证股份有限公司、格尔软件股份有限公司、北京海泰方圆科技股份有 限公司、无锡江南信息安全工程技术中心、上海数字证书认证中心有限公司、中电科网络安全科技股份 有限公司、山东得安信息技术有限公司、北京国脉信安科技有限公司、中国电子技术标准化研究院。 本文件主要起草人:赵松、王银平、刘平、李述胜、郑强、谭武征、蒋红宇、柳增寿、王玉林、王中武、 马洪富、高志权、孔凡玉、袁峰、上官晓丽、蔡一鸣、黄晶晶。 本文件及其所代替文件的历次版本发布情况为: ---2012年首次发布为GM/T 0019-2012; ---本次为第一次修订。 通用密码服务接口规范 1 范围 本文件规定了通用密码服务接口的数据结构、接口描述、函数定义要求,描述了相应验证方法。 本文件适用于公钥密码应用技术体系下密码应用服务的开发,密码应用支撑平台的研制及检测,密 码设备应用系统的开发。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文 件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于 本文件。 GB/T 25069 信息安全技术 术语 GB/T 41389 信息安全技术 SM9密码算法使用规范 GM/T 0003.1 信息安全技术 SM2椭圆曲线公钥密码算法 第1部分:总则 GM/T 0006 密码应用标识规范 GM/T 0009 SM2密码算法使用规范 GM/T 0010 SM2密码算法加密签名消息语法规范 GM/T 0015 数字证书格式 GM/T 0016 智能密码钥匙应用接口规范 GM/T 0018 密码设备应用接口规范 GM/T 0094 公钥密码应用技术体系框架规范 GM/Z4001 密码术语 3 术语和定义 GB/T 25069、GM/Z4001界定的以及下列术语和定义适用于本文件。 3.1 容器 container 密码设备中用于保存密钥所划分的唯一性存储空间。 4 缩略语 下列缩略语适用于本文件。 CN:通用名(CommonName) DN:可识别名(DistinguishedName) 5 算法标识和数据结构 5.1 算法标识与常量定义 本文件所使用常量定义、各类算法标识和证书解析标识的具体定义应符合GM/T 0006的规定。 5.2 密码服务接口数据结构定义和说明 5.2.1 常量定义 数据常量标识的定义见表1。 表1 常量定义 常量名 取值 描述 SGD_MAX_COUNT 64 枚举出的对象数量最大值 SGD_MAX_NAME_SIZE 256 证书某项信息的字符串长度最大值 5.2.2 用户证书列表 用户证书列表见表2。 表2 用户证书列表 字段名称 含义 certCount 证书总数 Certificate DER编码的数字证书 certificateLen 数字证书的长度 containerName 容器名称 containerNameLen 容器名称的长度 keyUsage 密钥用途 实际数据结构定义: typedefstructSGD_USR_CERT_ENUMLIST_ { unsignedchar*certificate[SGD_MAX_COUNT]; unsignedchar*containerName[SGD_MAX_COUNT]; unsignedintkeyUsage[SGD_MAX_COUNT]; }SGD_USR_CERT_ENUMLIST; 5.2.3 密钥容器信息列表 密钥容器信息列表见表3。 表3 密钥容器信息列表 字段名称 含义 keyPairCount 密钥容器信息总数 containerName 容器名称 containerNameLen 容器名称的长度 keyUsage 密钥用途,1:加密;2:签名;3:密钥交换 keyType 密钥类型,1:SM2;2:RSA1024;3:RSA2048;4:RSA3072;5:RSA4096; 6:SM9(SM9密码算法定义应符合附录A) 实际数据结构定义: typedefstructSGD_ KEYCONTAINERINFO_ENUMLIST_ { unsignedchar*containerName[SGD_MAX_COUNT]; unsignedintkeyUsage[SGD_MAX_COUNT]; unsignedintkeyType[SGD_MAX_COUNT]; }SGD_ KEYCONTAINERINFO_ENUMLIST; 6 密码服务接口 6.1 通用密码服务接口在公钥密码基础设施应用技术体系框架中的位置 通用密码服务通过统一的密码服务接口,向典型密码服务层和应用层提供证书解析、证书认证、信 息的机密性、完整性和不可否认性通用密码服务,将上层应用的密码服务请求转化为具体的基础密码操 作请求,通过统一的密码设备应用接口调用相应的密码设备实现具体的密码运算和密钥操作。 通用密码服务在公钥密码基础设施应用技术体系框架内的位置应符合GM/T 0094的规定。 6.2 密码服务接口组成和功能说明 6.2.1 概述 通用密码服务接口由以下部分组成: a) 环境类函数; b) 证书类函数; c) 密码运算类函数; d) 消息类函数。 本文件中的相关接口,均采用C语言形式定义,使用其他语言开发本文件中的接口均可参考C语 言接口的定义。 6.2.2 环境类函数 环境类函数负责创建和管理程序空间中所需的各种资源、信号,并确保程序空间在应用程序运行期 间不会被非法访问,造成信息泄漏。环境类函数负责完成与密码设备的安全连接,确保后续的操作是在 安全的程序空间中进行。环境类函数还负责在用户与密码设备之间创建和管理应用接口句柄。可创建 两种类型的应用接口句柄,一类是普通用户,该类型的应用接口句柄标识该用户是普通用户,只能访问 密码设备中属于自己的信息和数据;另一类是管理员,该类型的应用接口句柄标识该用户是管理员,可 以管理普通用户的应用接口句柄。 应用程序在使用通用密码服务接口时,首先要调用初始化环境函数(SAF_Initialize)创建和初始化 安全的程序空间,完成与密码设备连接和初始化工作。应用程序在调用任何密码服务函数前应确保运 行环境安全,可以采用白名单机制或对接入设备进行认证的方式,进行任何私钥运算之前应首先调用用 户登录函数(SAF_Login),创建应用接口句柄。当不再调用密码服务函数时,应调用注销登录函数 (SAF_Logout)注销安全访问令牌,防止密码设备被非法访问。在终止应用程序之前,应调用清除环境 函数(SAF_Finalize),中止与密码设备的连接,销毁所创建的安全的程序空间,防止由于内存残留所带 来的安全风险。 6.2.3 证书类函数 证书类函数设置各类数字证书到应用接口会话环境中、验证用户证书和获取数字证书或CRL,提 供包括证书获取、CRL获取、CA根证书设置、用户证书验证和用户证书信息获取一系列具体函数。应 用程序通过调用证书类函数,实现基于数字证书的身份认证,从证书中获取有关信息,实现授权管理、访 问控制安全机制。本文件中涉及的数字证书格式应符合GM/T 0015。 6.2.4 密码运算类函数 密码运算类函数负责具体与密码设备交互实现具体的密码运算,并将密码运算后的结果返回给应 用程序,是应用程序实现数据保密性、完整性和不可抵赖性安全机制的基础。 密码运算类函数提供包括base64编解码、随机数生成、密码杂凑以及各种对称和非对称密码运算。 密码服务函数支持定长数据和不定长数据的密码运算,对于定长数据可以直接调用相关函数进行处理; 对于不定长数据,应先创建相应的密码运算对象,然后调用相应的函数对数据进行持续处理。当数据处 理完时,要调用相应的函数表示数据处理完,最后要调用相应函数销毁相应的密码运算对象。 6.2.5 消息类函数 消息类函数的功能是将数据按照数字信封格式进行封装,实现应用系统互联互通和信息共享,使用 RSA算法时符合PKCS#7,使用国密算法时符合GM/T 0010。 消息类函数提供了数据编解码、签名数据编解码、数字信封编解码功能,数据编解码格式应符合 PKCS#7(RSA算法)或GM/T 0010(SM2算法)、签名数据编解码格式应符合PKCS#7(RSA算法) 或GM/T 0010(SM2算法)和PKCS#7(RSA算法),数字信封编解码格式应符合GM/T 0010(SM2算 法),能够非常方便应用程序实现身份认证、保密性、完整性和不可否认性安全措施。 7 密码服务接口函数定义 7.1 环境类函数 7.1.1 概述 环境类函数负责创建和管理程序空间中所需的各种资源、信号,并确保程序空间在应用程序运行期 间不会被非法访问,造成信息泄漏,包括以下具体函数: a) 初始化环境:SAF_Initialize; b) 清除环境:SAF_Finalize; c) 获取接口版本信息:SAF_GetVersion; d) 用户登录:SAF_Login; e) 修改口令:SAF_ChangePin; f) 注销登录:SAF_Logout。 各函数返回值应符合附录B中的错误代码定义。 7.1.2 初始化环境 原型: intSAF_Initialize(void**phAppHandle,unsignedchar*pucCfgFilePath); 描述: 初始化密码服务程序空间。 参数: phAppHandle[in/out] 输入并返回应用接口句柄 pucCfgFilePath[in] 配置文件全路径名,配置信息自定义,建议包括:密码设备类 型、密码设备动态库名称、设备的配置文件、应用策略 返回值: 0 成功 非0 失败,返回错误代码 7.1.3 清除环境 原型: intSAF_Finalize(void*hAppHandle); 描述: 清除应用程序空间。 参数: hAppHandle[in] 应用接口句柄 返回值: 0 成功 非0 失败,返回错误代码 7.1.4 获取接口版本信息 描述: 取接口对应标准的版本号。 参数: puiVersion[out] 版本号 返回值: 0 成功 非0 失败,返回错误代码 备注: 版本号的格式为0xAABBCCCC,其中AA为主版本号,BB为次版本号,CCCC为修改号。 7.1.5 用户登录 原型: intSAF_Login( void*hAppHandle, unsignedchar*pucPin, unsignedint*puiRemainCount); 描述: 用户登录密码设备,建立安全令牌。 参数: hAppHandle[in] 应用接口句柄 uiUsrType[in] 用户类型,当为0时表示管理员登录 为1时表示用户登录 pucContainerName[in] 容器名(或多个参数的拼接值,多个参数时用###拼 接)或密钥检索号 uiContainerNameLen[in] 容器名或密钥检索号的长度 pucPin[in] 设备口令 uiPinLen[in] 设备口令长度 puiRemainCount[out] 口令剩余重试次数 返回值: 0 成功 非0 失败,返回错误代码 备注: 在服务器端使用加密机或加密卡时,当设备符合GM/T 0016规范时,pucContainerName用 于标识指定的容器名或多个参数的拼接值,当设备遵循GM/T 0018规范时,pucContainer- Name用于标识密码设备内部的密钥位置。 7.1.6 修改口令 原型: intSAF_ChangePin( void*hAppHandle, unsignedchar*pucOldPin, unsignedint*puiRemainCount); 描述: 修改设备口令,本函数仅适用于符合GM/T 0016规范的客户端密码设备。 参数: hAppHandle[in] 应用接口句柄 uiUsrType[in] 用户类型,当为0时表示管理员登录 为1时表示用户登录 pucContainerName[in] 容器名或密钥检索号 uiContainerNameLen[in] 容器名或密钥检索号的长度 pucOldPin[in] 设备当前口令 uiOldPinLen[in] 设备当前口令长度 pucNewPin[in] 设备新口令 uiNewPinLen[in] 设备新口令长度 puiRemainCount[out] 口令剩余重试次数 返回值: 0 成功 非0 失败,返回错误代码 7.1.7 注销登录 原型: intSAF_Logout( void*hAppHandle, 描述: 设备注销登录 参数: hAppHandle[in] 应用接口句柄 uiUsrType[in] 用户类型,当为0时表示管理员登录 为1时表示用户登录 返回值: 0 成功 非0 失败,返回错误代码 7.2 证书类函数 7.2.1 概述 证书类函数设置各类数字证书到应用接口会话环境中、验证用户证书和获取数字证书或CRL,提 供包括证书获取、CRL获取、CA根证书设置、用户证书验证和用户证书信息获取等一系列具体函数,包 括以下具体函数: e) 添加CA证书:SAF_AddCaCertificate; g) 获取CA证书:SAF_GetCaCertificate; h) 删除CA证书:SAF_RemoveCaCertificate; n) 通过LDAP方式获取证书对应的CRL:SAF_GetCrlFromLdap; o) 取证书信息:SAF_GetCertificateInfo; 各函数返回值应符合附录B中的错误代码定义。 7.2.2 添加根CA证书 void*hAppHandle, 描述: 添加信任的CA根证书。 参数: hAppHandle[in] 应用接口句柄 pucCertificate[in] DER编码的证书 uiCertificateLen[in] 证书长度 uiIndex[out] CA根证书索引 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数仅限于管理员使用。 7.2.3 获取根CA证书个数 void*hAppHandle, 描述: 获取信任根CA证书的个数。 参数: hAppHandle[in] 应用接口句柄 puiCount[out] 信任根CA证书个数 返回值: 0 成功 非0 失败,返回错误代码 7.2.4 获取根CA证书 void*hAppHandle, 描述: 获取指定位置CA根证书。 参数: hAppHandle[in] 应用接口句柄 uiIndex[in] 根证书索引 pucCertificate[out] DER编码的证书 puiCertificateLen[in,out] 证书长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.5 删除根CA证书 void*hAppHandle, 描述: 删除指定位置CA根证书。 参数: hAppHandle[in] 应用接口句柄 uiIndex[in] 根证书索引 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数仅限于管理员使用。 7.2.6 添加CA证书 原型: intSAF_AddCaCertificate( unsignedintuiIndex); 描述: 添加CA证书。 参数: hAppHandle[in] 应用接口句柄 pucCertificate[in] DER编码的证书 uiCertificateLen[in] 证书长度 uiIndex[out] CA证书索引 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数仅限于管理员使用。 7.2.7 获取CA证书个数 void*hAppHandle, 描述: 获取信任CA证书的个数。 参数: hAppHandle[in] 应用接口句柄 puiCount[out] 信任CA证书个数 返回值: 0 成功 非0 失败,返回错误代码 7.2.8 获取CA证书 原型: intSAF_GetCaCertificate( unsignedint*puiCertificateLen); 描述: 获取指定位置CA证书。 参数: hAppHandle[in] 应用接口句柄 uiIndex[in] CA证书索引 pucCertificate[out] DER编码的证书 puiCertificateLen[in,out] 证书长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.9 删除CA证书 原型: intSAF_RemoveCaCertificate( 描述: 删除指定位置CA证书。 hAppHandle[in] 应用接口句柄 参数: uiIndex[in] 证书位置索引 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数仅限于管理员使用。 7.2.10 添加CRL 原型: intSAF_AddCrl( void*hAppHandle, 描述: 添加CRL。 参数: hAppHandle[in] 应用接口句柄 pucDerCrl[in] DER编码的CRL uiDerCrlLen[in] DER编码CRL的长度 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数仅限于管理员使用。 7.2.11 验证用户证书 原型: intSAF_VerifyCertificate( 描述: 验证用户证书的有效性,包括验证有效期、证书信任列表、吊销状态。 参数: hAppHandle[in] 应用接口句柄 pucUsrCertificate[in] DER编码的证书 uiUsrCertificateLen[in] 证书长度 返回值: 0 成功 非0 失败,返回错误代码,应符合附录B中的错误代码定义 7.2.12 根据CRL文件获取用户注销状态 void*hAppHandle, unsignedchar*pucRevokeDate); 描述: 根据CRL文件验证用户证书是否被注销。 参数: hAppHandle[in] 应用接口句柄 pucUsrCertificate[in] DER编码的证书 uiUsrCertificateLen[in] 证书长度 pucDerCrl[in] DER编码的CRL uiDerCrlLen[in] CRL长度 pucRevokeDate[out] 若证书有效此参数不返回,若证书被注销,则返回注销日 期,格式为YYYY-MM-DDHH:MM:SS 返回值: 0 成功 非0 失败,返回的错误代码应符合附录B中的错误代码定义 7.2.13 根据OCSP获取证书状态 void*hAppHandle, unsignedchar*pucCACertificate, 描述: 从OCSP获取用户证书的实时状态。 参数: hAppHandle[in] 应用接口句柄 pucOcspHostURL[in] ocsp服务的URL uiOcspHostURLLen[in] URL长度 pucUsrCertificate[in] DER编码证书 uiUsrCertificateLen[in] 证书长度 pucCACertificate[in] DER编码颁发者证书 uiCACertificateLen[in] 颁发者证书长度 pucRevokeDate[out] 若证书有效此参数不返回,若证书被吊销,则返回吊销日 期,格式为YYYY-MM-DDHH:MM:SS 返回值: 0 成功 非0 失败,返回错误代码,应符合附录B中的错误代码定义 7.2.14 通过LDAP方式获取证书 原型: intSAF_GetCertFromLdap( void*hAppHandle, char*pcLdapHostURL, unsignedchar*pucOutCert, 描述: 通过LDAP方式获取证书。 参数: hAppHandle[in] 应用接口句柄 pcLdapHostURL[in] ldap服务器IP地址 uiLdapHostURLLen[in] ldap服务器端口 pucQueryDN[in] 待查找的证书的查询条件 uiQueryDNLen[in] 查询条件长度 pucOutCert[out] 查询到的base64编码的证书,如查询出多证书,则证书 信息中间以“&”分割 puiOutCertLen[in,out] 找到的证书长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.15 通过LDAP方式获取证书对应的CRL 原型: intSAF_GetCrlFromLdap( void*hAppHandle, char*pcLdapHostURL, unsignedchar*pucCrlData, 描述: 通过LDAP方式根据证书获取对应的CRL。 参数: hAppHandle[in] 应用接口句柄 pcLdapHostURL[in] ldap服务URL uiLdapHostURLLen[in] URL长度 pucCertificate[in] DER编码的数字证书 uiCertificateLen[in] 证书长度 pucCrlData[out] 获取的DER编码的CRL文件 puiCrlDataLen[in,out] CRL文件长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.16 取证书信息 原型: intSAF_GetCertificateInfo( unsignedchar*pucInfo, unsignedint*puiInfoLen); 描述: 解析证书,获取证书中的信息。 参数: hAppHandle[in] 应用接口句柄 pucCertificate[in] DER编码的证书 uiCertificateLen[in] 证书长度 uiInfoType[in] 指定的证书解析标识,应符合GM/T 0006 pucInfo[out] 获取的证书信息 puiInfoLen[in,out] 获取的证书信息长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.17 取证书扩展信息 原型: intSAF_GetExtTypeInfo( void*hAppHandle, unsignedchar*pucInfo, unsignedint*puiInfoLen); 描述: 获取证书的扩展信息。 参数: hAppHandle[in] 应用接口句柄 pucDerCert[in] DER格式的数字证书 uiDerCertLen[in] 数字证书长度 uiInfoType[in] 指定的证书扩展项解析标识,应符合GM/T 0006 pucPriOid[in] 扩展项的OID,如果不是私有扩展项类型,该参数无效 uiPriOidLen[in] 扩展项OID长度,如果不是私有扩展项类型,该参数无效 pucInfo[out] 获取的证书信息 puiInfoLen[in,out] 获取的证书信息长度 返回值: 0 成功 非0 失败,返回错误代码 7.2.18 列举用户证书 原型: intSAF_EnumCertificates( SGD_USR_CERT_ENUMLIST*usrCerts); 描述: 列举出插入当前计算机的所有密码设备内的有效证书。 参数: hAppHandle[in] 应用接口句柄 usrCerts[out] 返回的用户证书列表 返回值: 0 成功 非0 失败,返回错误代码 备注: usrCerts结构内的对象数据由本函数分配空间。本函数用于客户端枚举证书。 7.2.19 列举用户的密钥容器信息 void*hAppHandle, SGD_ KEYCONTAINERINFO_ENUMLIST*keyContainerInfo); 描述: 列举插入当前计算机的所有密码设备的容器信息。 参数: hAppHandle[in] 应用接口句柄 keyContainerInfo[out] 返回的密钥容器信息 返回值: SAR_OK 成功 其他 失败 备注: keyContainerInfo结构内的对象数据由本函数分配空间。仅在客户端使用。 7.2.20 释放列举用户证书的内存 void*hAppHandle, SGD_USR_CERT_ENUMLIST*usrCerts); 描述: 释放SAF_EnumCertificates函数中分配的内存。 参数: hAppHandle[in] 应用接口句柄 usrCerts[in] 证书信息 返回值: 0 成功 非0 失败,返回错误代码 7.2.21 释放列举密钥容器信息的内存 void*hAppHandle, SGD_ KEYCONTAINERINFO_ENUMLIST*keyContainerInfo); 参数: hAppHandle[in] 应用接口句柄 keyContainerInfo[in] 密钥容器信息 返回值: 0 成功 非0 失败,返回错误代码 7.3 密码运算类函数 7.3.1 概述 密码运算类函数通过与密码设备交互实现具体的密码运算,并将密码运算后的结果返回给应用程 序,是应用程序实现数据保密性、完整性和不可抵赖性等安全机制的基础,包括以下具体函数: a) 单块base64编码:SAF_Base64_Encode; b) 单块base64解码:SAF_Base64_Decode; c) 创建base64对象:SAF_Base64_CreateBase64Obj; d) 销毁base64对象:SAF_Base64_DestroyBase64Obj; e) 通过base64对象继续编码:SAF_Base64_EncodeUpdate; f) 通过base64对象编码结束:SAF_Base64_EncodeFinal; g) 通过base64对象继续解码:SAF_Base64_DecodeUpdate; h) 通过base64对象解码结束:SAF_Base64_DecodeFinal; i) 生成随机数:SAF_GenRandom; j) HASH运算:SAF_Hash; k) 创建HASH对象:SAF_CreateHashObj; l) 删除HASH对象:SAF_DestroyHashObj; m) 通过对象进行多块HASH运算:SAF_HashUpdate; n) 结束HASH运算:SAF_HashFinal; o) 生成RSA密钥对:SAF_GenRsaKeyPair; p) 获取RSA公钥:SAF_GetRsaPublicKey; q) RSA签名运算:SAF_RsaSign; r) 对文件进行RSA签名运算:SAF_RsaSignFile; s) RSA验证签名运算:SAF_RsaVerifySign; t) 对文件及其签名进行RSA验证:SAF_RsaVerifySignFile; u) 基于证书的RSA公钥验证:SAF_VerifySignByCert; v) 生成SM2密钥对:SAF_GenSm2KeyPair; w) 获取SM2公钥:SAF_GetSm2PublicKey; x) SM2签名:SAF_Sm2Sign; y) SM2验证:SAF_Sm2VerifySign; z) SM2公钥加密:SAF_Sm2PublicKeyEnc; bb) 基于证书的SM2解密:SAF_Sm2DecByCert; cc) 基于证书的SM2公钥验证:SAF_Sm2VerifySignByCert; hh) 计算会话密钥:SAF_GenerateKeyWithSM2; l) 单块加密运算:SAF_SymmEncrypt; mm) 多块加密运算:SAF_SymmEncryptUpdate; pp) 多块解密运算:SAF_SymmDecryptUpdate; ss) 多组数据消息鉴别码运算:SAF_MacUpdate; tt) 结束消息鉴别码运算:SAF_MacFinal。 各函数返回值应符合附录B中的错误代码定义。 7.3.2 单块base64编码 原型: intSAF_Base64_Encode( unsignedchar*pucInData, 描述: 对输入的数据进行base64编码,编码格式符合IETFRFC4648。 pucOutData[out] 编码后的数据 puiOutDataLen[in,out] 编码后的数据长度 返回值: 0 成功 非0 失败,返回错误代码 7.3.3 单块base64解码 原型: intSAF_Base64_Decode( unsignedchar*pucInData, 描述: 对输入的数据进行base64解码,编码格式符合IETFRFC4648。 pucOutData[out] 解码后的数据 puiOutDataLen[in,out] 解码后的数据长度 返回值: 0 成功 非0 失败,返回错误代码 7.3.4 创建base64对象 原型: intSAF_Base64_CreateBase64Obj( void*hAppHandle, void**phBase64Obj); 描述: 为任意长度数据的base64编解码创建base64对象,编码格式符合IETFRFC4648。 参数: hAppHandle[in] 应用句柄 phBase64Obj[out] 指向创建的base64对象句柄的指针 返回值: 0 成功 非0 失败,返回错误代码 备注: 本函数与SAF_Base64_DestroyBase64Obj, SAF_Base64_EncodeUpdate,SGD_Base64_EncodeFinal, SAF_Base64_DecodeUpdate, SAF_Base64_DecodeFinal函数共同使用以支持任意长度数据的base64编解码。 7.3.5 销毁......

相关标准: GA/T 1389  GM/T 0028  GM/T 0010  GM/T 0009