密码引擎API研究
标准文档
- CryptoAPI
Cryptography
CryptoAPI System Architecture
Cryptographic Provider Types
wincrypt.h header
Microsoft Cryptographic Service Providers - PKCS#11
- GM/T 0016-2012
- GM/T 0018-2012
API使用方式
- CryptoAPI
- C语言编程中(hash举例):
首先包含必要的API的头文件
#include <windows.h> #include <wincrypt.h>
获取要使用的加密服务提供程序(CSP)的句柄:
HCRYPTPROV hProv; if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { // 处理错误 }
这里,PROV_RSA_FULL指定要获取的提供程序类型。根据需要,您也可以使用其他提供程序类型。
创建哈希对象:HCRYPTHASH hHash; if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)) { // 处理错误 }
这里,CALG_SHA_256指定要使用的哈希算法。根据需要,也可以使用其他哈希算法。
向哈希对象添加数据:BYTE pbData[] = "Hello, world!"; DWORD dwDataLen = sizeof(pbData); if(!CryptHashData(hHash, pbData, dwDataLen, 0)) { // 处理错误 }
这里,pbData是要哈希的数据,dwDataLen是数据的长度。
完成哈希:BYTE pbHash[32]; DWORD dwHashLen = sizeof(pbHash); if(!CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwHashLen, 0)) { // 处理错误 }
这里,pbHash是用于接收哈希值的缓冲区,dwHashLen是缓冲区的长度。HP_HASHVAL指定要检索的哈希值参数。
释放哈希对象:if(hHash) { CryptDestroyHash(hHash); }
释放CSP句柄:
if(hProv) { CryptReleaseContext(hProv, 0); }
- java语言编程中(hash举例):
导入必要的类:
import java.security.Provider; import java.security.Security; import java.security.MessageDigest;
添加Microsoft CryptoAPI提供程序:
Provider provider = new sun.security.pkcs11.SunPKCS11("path/to/cryptoki.cfg"); Security.addProvider(provider);
这里,path/to/cryptoki.cfg是包含Microsoft CryptoAPI提供程序信息的配置文件的路径。
创建哈希对象:MessageDigest md = MessageDigest.getInstance("SHA-256", provider);
这里,SHA-256指定要使用的哈希算法。根据需要,您也可以使用其他哈希算法。
向哈希对象添加数据:byte[] data = "Hello, world!".getBytes(); md.update(data);
这里,data是要哈希的数据。
完成哈希:byte[] hash = md.digest();
这里,hash是哈希值。
- C语言编程中(hash举例):
- PKCS#11接口调用
- C语言编程中:
包含必要的头文件
#include <pkcs11.h>
加载PKCS#11库:CK_FUNCTION_LIST_PTR pFunctionList; CK_C_GetFunctionList pC_GetFunctionList; CK_RV rv; rv = C_GetFunctionList(NULL, &pFunctionList); if(rv != CKR_OK) { // 处理错误 } pC_GetFunctionList = pFunctionList->C_GetFunctionList;
这里,C_GetFunctionList是PKCS#11库提供的一个函数,用于返回一个结构体指针,该结构体包含所有PKCS#11函数的指针。
初始化PKCS#11库:CK_C_INITIALIZE_ARGS initArgs; CK_RV rv; initArgs.flags = CKF_OS_LOCKING_OK; rv = pC_GetFunctionList()->C_Initialize(&initArgs); if(rv != CKR_OK) { // 处理错误 }
这里,CKF_OS_LOCKING_OK指定PKCS#11库可以使用操作系统锁定机制。
与PKCS#11令牌建立会话:CK_SESSION_HANDLE hSession; CK_RV rv; rv = pC_GetFunctionList()->C_OpenSession(0, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &hSession); if(rv != CKR_OK) { // 处理错误 }
这里,CKF_SERIAL_SESSION指定会话是串行会话,CKF_RW_SESSION指定会话是读写会话。
登录PKCS#11令牌:CK_RV rv; rv = pC_GetFunctionList()->C_Login(hSession, CKU_USER, "password", strlen("password")); if(rv != CKR_OK) { // 处理错误 }
这里,CKU_USER指定用户类型,"password"是用户的密码。
执行PKCS#11操作:CK_RV rv; // 在此
- java语言编程中:
导入必要的类
import java.security.Provider; import java.security.Security; import java.security.MessageDigest;
添加PKCS#11提供程序:
Provider provider = new sun.security.pkcs11.SunPKCS11("path/to/pkcs11.cfg"); Security.addProvider(provider);
这里,path/to/pkcs11.cfg是包含PKCS#11提供程序信息的配置文件的路径。
创建哈希对象:MessageDigest md = MessageDigest.getInstance("SHA-256", provider);
这里,SHA-256指定要使用的哈希算法。根据需要,也可以使用其他哈希算法。
向哈希对象添加数据:byte[] data = "Hello, world!".getBytes(); md.update(data);
这里,data是要哈希的数据。
完成哈希:byte[] hash = md.digest();
这里,hash是哈希值。
- C语言编程中:
- GMT 0016-2012接口
- C语言编程(hash举例):
包含必要的头文件
#include <gmt0016.h>
初始化GMT 0016-2012库:
if(!GMT0016_Initialize()) { // 处理错误 }
创建hash对象
GMT0016_HASH_HANDLE hHash; if(!GMT0016_CreateHash(GMT0016_ALGORITHM_SHA256, &hHash)) { // 处理错误 }
这里,GMT0016_ALGORITHM_SHA256指定要使用的哈希算法。根据需要,您也可以使用其他哈希算法。
向哈希对象添加数据:BYTE pbData[] = "Hello, world!"; DWORD dwDataLen = sizeof(pbData); if(!GMT0016_HashData(hHash, pbData, dwDataLen)) { // 处理错误 }
这里,pbData是要哈希的数据,dwDataLen是数据的长度。
完成哈希:BYTE pbHash[32]; DWORD dwHashLen = sizeof(pbHash); if(!GMT0016_GetHashValue(hHash, pbHash, &dwHashLen)) { // 处理错误 }
这里,pbHash是用于接收哈希值的缓冲区,dwHashLen是缓冲区的长度。
销毁哈希对象:if(hHash) { GMT0016_DestroyHash(hHash); }
终止GMT 0016-2012库:
GMT0016_Finalize();
- C语言编程(hash举例):
- GMT 0018-2012接口调用
- C语言编程:
包含必要的头文件
c #include <gmt0018.h>
初始化GMT 0018-2012库:if(!GMT0018_Initialize()) { // 处理错误 }
创建签名对象
GMT0018_SIGN_HANDLE hSign; if(!GMT0018_CreateSign(GMT0018_ALGORITHM_SM2, &hSign)) { // 处理错误 }
这里,GMT0018_ALGORITHM_SM2指定要使用的签名算法。根据需要,您也可以使用其他签名算法。
设置签名密钥:if(!GMT0018_SetSignKey(hSign, pbPrivateKey, dwPrivateKeyLen)) { // 处理错误 }
这里,pbPrivateKey是签名密钥的数据,dwPrivateKeyLen是数据的长度。
设置签名参数:GMT0018_SIGN_PARAM signParam; signParam.dwFlags = GMT0018_SIGN_PARAM_FLAG_DEFAULT; if(!GMT0018_SetSignParam(hSign, &signParam)) { // 处理错误 }
这里,GMT0018_SIGN_PARAM_FLAG_DEFAULT指定要使用的签名参数。根据需要,您也可以使用其他签名参数。
对数据进行签名:BYTE pbData[] = "Hello, world!"; DWORD dwDataLen = sizeof(pbData); BYTE pbSignature[64]; DWORD dwSignatureLen = sizeof(pbSignature); if(!GMT0018_SignData(hSign, pbData, dwDataLen, pbSignature, &dwSignatureLen)) { // 处理错误 }
这里,pbData是要签名的数据,dwDataLen是数据的长度,pbSignature是用于接收签名值的缓冲区,dwSignatureLen是缓冲区的长度。
验证签名:if(!GMT0018_VerifySign(hSign, pbData, dwDataLen, pbSignature, dwSignature)){ //处理 }
- C语言编程:
API包含函数的分类和对比
CryptoAPI
- 基本加密函数
- 服务提供者函数
应用程序使用服务提供者函数来连接和断开一个CSP(Cryptographic Service Providers)。函数名 函数功能
CryptAcquireContext 获得指定CSP 的密钥容器的句柄
CryptContextAddRef 对HCRYPTPROV 句柄增加一个应用计数
CryptEnumProviders 枚举当前计算机中的CSP
CryptEnumProviderTypes 枚举CSP 的类型
CryptGetDefaultProvider 对于指定CSP 类型的却省CSP
CryptGetProvParam 得到一个CSP 的属性
CryptInstallDefaultContext 安装先前得到的HCRYPTPROV 上下文作为当前却省的上下文
CryptReleaseContext 释放由CryptAcquireContext 得到的句柄
CryptSetProvider|CryptSetProviderEx 为指定CSP 类型指定一个却省的CSP
CryptSetProvParam 指定一个CSP 的属性
CryptUninstallDefaultContext 删除先前由 CryptInstallDefaultContext 安装的却省上下文 - 密钥的产生和交换函数
函数 功能
CryptAcquireCertificatePrivateKey 对于指定证书上下文得到一个HCRYPTPROV句柄和dwKeySpec
CryptDeriveKey 从一个密码中派生一个密钥
CryptDestoryKey 销毁密钥
CryptDuplicateKey 制作一个密钥和密钥状态的精确复制
CryptExportKey 把CSP 的密钥做成BLOB 传送到应用程序的内存空间中
CryptGenKey 创建一个随机密钥
CryptGenRandom 产生一个随机数
CryptGetKeyParam 得到密钥的参数
CryptGetUserKey 得到一个密钥交换或签名密钥的句柄
CryptImportKey 把一个密钥BLOB 传送到CSP中
CryptSetKeyParam 指定一个密钥的参数 - 编码/解码函数
函数 函数功能
CryptDecodeObject 对lpszStructType 结构进行解码
CryptDecodeObjectEx 对lpszStructType 结构进行解码,此函数支持内存分配选项
CryptEncodeObject 对lpszStructType 结构进行编码
CyptEncodeObjectEx 对lpszStructType 结构进行编码,此函数支持内存分配选项 - 数据加密/解密函数
函数 功能
CryptDecrypt 使用指定加密密钥来解密一段密文
CryptEncrypt 使用指定加密密钥来加密一段明文
CryptProtectData 执行对DATA_BLOB 结构的加密
CryptUnprotectData 执行对DATA_BLOB 结构的完整性验证和解密 - 哈希和数字签名函数
函数 功能
CryptCreateHash 创建一个空哈希对象
CryptDestoryHash 销毁一个哈希对象
CryptDuplicateHash 复制一个哈希对象
CryptGetHashParam 得到一个哈希对象参数
CryptHashData 对一块数据进行哈希,把它加到指定的哈希对象中
CryptHashSessionKey 对一个会话密钥进行哈希,把它加到指定的哈希对象中
CryptSetHashParam 设置一个哈希对象的参数
CryptSignHash 对一个哈希对象进行签名
CryptVerifySignature 校验一个数字签名
- 服务提供者函数
- 证书和证书库函数
- 证书库函数
函数 功能
CertAddStoreToCollection 在证书库中增加一个证书
CertCloseStore 关闭一个证书库句柄
CertControlStore 如果证书缓冲区和证书本身内容不相符时,允许给应用程序发一个通知
CertDuplicateStore 通过增加引用计数来复制证书库句柄
CertEnumPhysicalStore 对于指定系统库枚举物理库
CertEnumSystemStore 枚举所有可用的系统库
CertEnumSystemStoreLocation 枚举可用系统库的所有位置
CertGetStoreProperty 得到一个库的属性
CertOpenStore 使用指定库类型来打开证书库
CertOpenSystemStore 打开一个系统证书库
CertRegisterPhysicalStore 在一个注册系统库里增加一个物理库
CertRegisterSystemStore 注册一个系统库
CertRemoveStoreFromCollection 从一个库集合里删除证书库
CertSaveStore 保存证书库
CertSetStoreProperty 设置证书属性
CertUnregisterPhysicalStore 从系统库中删除一个物理库
CertUnregisterSystemStore 反注册一个指定系统库 - 维护函数
函数 功能
CertAddSerializeElementToStore 在库中增加一系列证书或CRL
CertCreateContext 从编码字节中创建指定上下文
CertEnumSubjectInSortedCTL 在CTL 库中枚举信任主题
CertFindSubjectInCTL 在CTL 中寻找指定主题
CertFindSubjectInSortedCTL 在分类CTL 中寻找指定主题 - 证书函数
函数 功能
CertAddCertificateContextToStore 在证书库里增加一个证书上下文
CertAddCertificateLinkToStore 在证书库里增加一个对不同库里的证书上下文的链接
CertAddEncodedCertificateToStore 把编码证书转换成证书上下文并且把它加到证书库里
CertCreateCertificateContext 从编码证书中创建一个证书上下文。但这个上下文并不放到证书库里
CertCreateSelfSignCertificate 创建一个自签名证书
CertDeleteCertificateFromStore 从证书库里删除一个证书
CertDuplicateCertificate 通过增加引用计数来复制证书上下文
CertEnumCertificateInStore 在证书库里枚举证书上下文
CertFindCertificateInStore 在证书库里寻找证书上下文
CertFreeCertificateContext 释放一个证书上下文
CertGetIssuerCertificateFromStore 在证书库里得到指定主题证书的发行者
CertGetSubjectCertificateFromStore 获得主题证书的上下文
CertGetValidUsages 返回所有证书的用法
CertSerializeCertificateStoreElement 串行化编码证书的证书上下文
CertVerifySubjectCertificateContext 使用发行者来验证主题证书
CryptUIDlgViewContext 显示证书、CRL 或CTL
CryptUIDlgSelectCertificateFromStore 从指定库中显示对话框,可以从中选择证书 - 证书撤销列表函数
函数 功能
CertAddCRLContextToStore 在证书库里增加一个CRL 上下文
CertAddCRLLinkToStore 在不同的库里增加一个CRL 上下文链接
CertAddEncodedCRLToStore 把编码CRL 转化成CRL 上下文然后把它加入到证书库中
CertCreateCRLContext 从编码CRL 中创建CRL 句柄,但不把它加到库中
CertDeleteCRLFromStore 从证书库里删除一个CRL
CertDuplicateCRLContext 通过增加引用计数来复制CRL 上下文
CertEnumCRLsInStore 枚举库里的CRL 句柄
CertFindCertificateInCRL 从指定证书里寻找CRL 列表
CertFindCRLInStore 在库里寻找CRL 上下文
CertFreeCRLContext 释放CRL 上下文
CertGetCRLFromStore 从库里得到CRL 上下文句柄
CertSerializeCRLStoreElement 串行化CRL 上下文的编码CRL 和它的属性 - 证书信任列表函数
函数 功能
CertAddCTLContextToStore 把一个CTL 上下文加入到证书库里
CertAddCTLLinkToStore 给不同库里的CRL 上下文添加链接
CertAddEncodedCTLToStore 把编码CTL 转化成CTL 上下文并且把它加到证书库里
CertCreateCTLContext 从编码CTL 中创建CTL 上下文
CertDeleteCTLFromStore 从证书库里删除CTL
CertDuplicateCTLContext 通过增加引用计数来复制CTL 上下文
CertEnumCTLsInStore 在证书库里枚举CTL 上下文
CertFindCTLInStore 在证书库里查找CTL 上下文
CertFreeCTLContext 释放CTL 上下文
CertSerializeCTLStoreElement 串行化CTL 上下文的编码CTL 和属性 - 扩展属性函数
函数 功能
CertEnumCertificateContextProperties 枚举指定证书上下文的属性
CertEnumCRLContextProperties 枚举指定CRL 上下文的属性
CertEnumCTLContextProperties 枚举指定CTL 上下文的属性
CertGetCertificateContextProperty 得到证书属性
CertGetCRLContextProperty 得到CRL 属性
CertGetCTLContextProperty 得到CTL 属性
CertSetCertificateContextProperty 设置证书属性
CertSetCRLContextProperty 设置CRL 属性
CertSetCTLContextProperty 设置CTL 属性
- 证书库函数
- 证书验证函数
- 使用CTL的函数
函数 功能
CertVerifyCTLUsage 验证CTL 用法
CryptMsgEncodeAndSignCTL 编码和验证CTL
CryptMsgGetAndVerifySigner 从一个消息中获得和验证CTL
CryptMsgSignCTL 对包含CTL 的消息进行签名 - 证书链验证函数
函数 功能
CertCreateCertificateChainEngine 为应用程序创建一个新的非却省的链引擎
CertCreateCTLEntryFromCertificateContextProperties 创建一个CTL 入口
CertDuplicateCertificateChain 通过增加引用计数来复制证书链
CertFindChainInStore 在证书库里查找证书链
CertFreeCertificateChain 释放证书链
CertFreeCertificateChainEngine 释放证书链引擎
CertGetCertificateChain 从最后一个证书建立一个上下文链表
CertSetCertificateContextPropertiesFromCTLEntry 通过CTL 入口属性来设置证书上下文的属性
CertIsValidCRLForCertificate 通过检查CRL 来确定CRL 是否包括指定被撤销的证书
CertVerifyCertificateChainPolicy 通过检查证书链来确定它的完整性
- 使用CTL的函数
- 消息函数
- 低级消息函数
函数 功能
CryptMsgCalculateEncodedLength 计算加密消息的长度
CryptMsgClose 关闭加密消息的句柄
CryptMsgControl 执行指定的控制函数
CryptMsgCountersign 标记消息中已存在的签名
CryptMsgCountersignEncoded 标记已存在的签名
CryptMsgDuplicate 通过增加引用计数来复制加密消息句柄
CryptMsgGetParam 对加密消息进行编码或者解码后得到的参数
CryptMsgOpenToDecode 打开加密消息进行解码
CryptMsgOpenToEncode 打开加密消息进行编码
CryptMsgUpdate 更新加密消息的内容
CryptMsgVerifyCountersignatureEncoded 验证SignerInfo 结构中标记时间
CryptMsgVerifyCountersignatureEncodedEx 验证SignerInfo 结构中标记时间签名者可以是CERT_PUBLIC_KEY_INFO 结构 - 简化消息函数
函数 功能
CryptDecodeMessage 对加密消息进行解码
CryptDecryptAndVerifyMessageSignature 对指定消息进行解密并且验证签名者
CryptDecryptMessage 解密指定消息
CryptEncryptMessage 加密指定消息
CryptGetMessageCertificates 返回包含消息的证书和CRL 的证书库
CryptGetMessageSignatureCount 返回签名消息的签名者数量
CryptHashMessage 创建消息的哈希
CryptSignAndEncryptMessage 对消息进行签名并且加密
CryptSignMessage 对消息进行签名
CryptVerifyDetachedMessageHash 验证包含已解邦定哈希的哈希消息
CryptVerifyDetachedMessageSignature 验证包含已解邦定签名的签名消息
CryptVerifyMessageHash 验证一个哈希消息
CryptVerifyMessageSignature 验证一个签名消息
- 低级消息函数
- 辅助函数
- 数据管理函数
函数 功能
CertCompareCertificate 比较两个证书是否相同
CertCompareCertificateName 通过比较两个证书名称来决定他们是否相同
CertCompareIntegerBlob 比较两个整数BLOB
CertComparePublicKeyInfo 通过比较两个证书公钥来决定他们是否相同
CertFindAttribute 通过OID 来查找属性
CertFindExtension 通过OID 来查找扩展
CertFindRDNAttr 通过OID 来查找RDN 属性
CertGetIntendedKeyUsage 从证书中取得相关密钥用法
CertGetPublicKeyLength 从公钥BLOB 中取得公钥/私钥长度
CertIsRDNAttrsInCertificateName 通过指定RDN 数组属性比较证书名称属性来决定证书是否已包含了所有属性
CertVerifyCRLRevocation 验证主题证书是否在CRL 中
CertVerifyCRLTimeValidity 验证CRL 的有效时间
CertVerifyRevocation 验证主题证书是否在CRL 中
CertVerifyTimeValidity 验证CRL 的有效时间
CertVerifyValidityNesting 验证主题时间的有效性是否在发行者有效时间内
CryptExportPublicKeyInfo 导出公钥信息
CryptExportPublicKeyInfoEx 导出公钥信息(用户可以指定算法)
CryptFindCertificateKeyProvInfo 枚举CSP 和它的密钥容器来查找对应于公钥的相应私钥
CryptFindLocalizedName 查找指定名字的局部化名称
CryptHashCertificate 哈希证书内容
CryptHashPublicKeyInfo 计算公钥信息的哈希
CryptHashToBeSigned 计算签名内容的信息哈希值
CryptImportPublicKeyInfo 把公钥信息导入CSP 并且返回它的句柄
CryptImportPublicKeyInfoEx 把公钥信息导入CSP 并且返回它的句柄
CryptMemAlloc 分配内存
CryptMemFree 释放内存
CryptMemRealloc 重新分配内存
CryptQueryObject 得到BLOB 或文件的内容信息
CryptSignAndEncodeCertificate 对信息进行签名并且编码
CryptSignCertificate 对证书进行签名
CryptVerifyCertificateSignature 使用公钥信息对主题证书或CRL 的签名进行验证
CryptVerifyCertificateSignatureEx 使用公钥信息对主题证书或CRL 的签名进行验证 - 数据转换函数
函数 功能
CertAlgIdToOID 把CSP 算法标示符转换成OID
CertGetNameString 得到证书的主题或颁发者名称并且把它转换成字符串
CertNameToStr 把证书名称BLOB 转换成字符串
CertOIDToAlgId 把OID 转换成CSP 算法表示符
CertRDNValueToStr 把名称值转换成字符串
CertStrToName 把字符串转换成编码证书名称
CryptBinaryToString 把二进制序列转换成字符串
CryptFormatObject 格式化编码数据,返回Unicode 字符串
CryptStringToBinary 把格式化的字符串转换成二进制序列 - 增强密钥用法函数
函数 功能
CertAddEnhancedKeyUsageIdentifier 在证书EKU 属性中增加一个用法标示符
CertGetEnhancedKeyUsage 获得证书的EKU 扩展或属性信息
CertRemoveEnhancedKeyUsageIdentifier 从证书EKU 扩展属性中删除用法标示符OID
CertSetEnhancedKeyUsage 设置证书的EKU 属性 - 密钥标示函数
函数 功能
CryptCreateKeyIdentifierFromCSP 创建CSP 公钥的密钥标示符
CryptEnumKeyIdentifierProperties 枚举标示符和其属性
CryptGetKeyIdentifierProperty 从指定密钥标示符中获得指定属性
CryptSetKeyIdentifierProperty 设置指定密钥标示符的属性 - 证书库回调函数
函数 功能
CertDllOpenStoreProv 定义库提供者打开函数
CertStoreProvCloseCallback 决定当证书库引用计数为0 时将发生的动作
CertStoreProvDeleteCertCallback 决定当从证书库中删除一个证书之前的动作
CertStoreProvDeleteCRLCallback 决定当从证书库中删除一个CRL 之前的动作
CertStoreProvReadCertCallback 保留
CertStoreProvReadCRLCallback 保留
CertStoreProvSetCertPropertyCallback 决定在 CertSetCertificateContextProperty 和 CertGetCertificateContext 调用之前的动作
CertStoreProvSetCRLPropertyCallback 决定在CertSetCRLContextProperty 和CertGetCRLContextProperty 调用之前的动作
CertStoreProvWriteCertCallback 决定在证书库中加入一个证书前的动作
CertStoreProvWriteCRLCallback 决定在证书库中加入一个CRL 前的动作
CertStoreProvReadCTL 读CSP 的CTL 上下文
CertStoreProvWriteCTL 决定CTL 是否可被加入到证书库中
CertStoreProvDeleteCTL 决定CTL 是否可被删除
CertStoreProvSetCTLProperty 决定是否可以设置CTL 的属性
CertStoreProvControl 当缓冲库和存储库不同时,通知应用程序
CertStoreProvFindCert 在证书库中查找下一个证书
CertStoreProvFreeFindCert 释放前一个找到的证书上下文
CertStoreProvGetCertProperty 得到指定的证书属性
CertStoreProvFindCRL 查找第一个或下一个匹配的CRL
CertStoreProvFreeFindCRL 释放前一个找到的CRL 上下文
CertStoreProvGetCRLProperty 得到指定CRL 属性
CertStoreProvFindCTL 查找第一个或下一个匹配的CTL
CertStoreProvFreeFindCTL 释放前一个找到的CTL 上下文
CertStoreProvGetCTLProperty 得到指定CTL 属性
具体函数和功能参考:CryptoAPI
- 数据管理函数
PKCS#11
- 通用接口
函数 描述
C_Initialize 初始化 Cryptoki
C_Finalize 整理各种适合 Cryptoki的资源
C_GetInfo 获得关于Cryptoki的通用信息
C_GetFunctionList 获得Cryptoki 库函数的进入点 - 槽和令牌管理函数
函数 功能
C_GetSlotList 获得系统中槽的名单
C_GetSlotInfo 获得关于特殊槽的信息
C_GetTokenInfo 获得关于特殊令牌的信息
C_WaitForSlotEvent 等待槽事件(令牌插入,转移等) 的发生
C_GetMechanismList 获得由令牌支持的机制的名单
C_GetMechanismInfo 获得关于特殊机制的信息
C_InitToken 初始化一个令牌
C_InitPIN 初始化普通用户的 PIN
C_SetPIN 改变现在用户的PIN - 会话管理函数
函数 功能
C_OpenSession 打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入
C_CloseSession 关闭一个会话
C_CloseAllSessions 用令牌关闭所有的会话
C_GetSessionInfo 获得关于会话的信息
C_GetOperationState 获得会话的加密操作状态
C_SetOperationState 设置会话的加密操作状态
C_Login 注册一个令牌
C_Logout 从一个令牌注销 - 对象管理函数
C_CreateObject 建立一个对象
C_CopyObject 建立一个对象的拷贝
C_DestroyObject 销毁一个对象
C_GetObjectSize 获取字节中一个对象的大小
C_GetAttributeValue 获取一个对象的属性值
C_SetAttributeValue 改变一个对象的属性值
C_FindObjectsInit 初始化一个对象的搜索操作
C_FindObjects 继续一个对象搜索操作
C_FindObjectsFinal 完成一个对象搜索操作 - 加密和解密函数
函数 功能
C_EncryptInit 初始化一个加密操作
C_Encrypt 加密单部分数据
C_EncryptUpdate 继续一个多部分加密操作
C_EncryptFinal 完成一个多部分加密操作
C_DecryptInit 初始化一个解密操作
C_Decrypt 解密单部分加密数据
C_DecryptUpdate 继续一个多部分解密操作
C_DecryptFinal 完成一个多部分解密操作 - 消息摘要函数
函数 功能
C_DigestInit 初始化一个消息摘要操作
C_Digest 摘要单部分数据
C_DigestUpdate 继续一个多部分摘要操作
C_DigestKey 摘要一个密钥
C_DigestFinal 完成一个多部分摘要操作 - 签名和验签函数
函数 功能
C_SignInit 初始化一个签名操作
C_Sign 签名单部分数据
C_SignUpdate 继续一个多部分签名操作
C_SignFinal 完成一个多部分签名操作
C_SignRecoverInit 初始化一个签名操作,在操作中数据能从签名中恢复
C_SignRecover 签名单部分数据,在操作中数据能从签名中恢复
C_VerifyInit 初始化一个鉴定操作
C_Verify 在单部分数据上鉴定一个签名
C_VerifyUpdate 继续一个多部分鉴定操作
C_VerifyFinal 完成一个多部分鉴定操作
C_VerifyRecoverInit 初始化一个鉴定操作,在操作中数据能从签名中恢复
C_VerifyRecover 在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复 - 双重目的的加密
函数 功能
C_DigestEncryptUpdate 继续类似的多部分摘要和加密操作
C_DecryptDigestUpdate 继续类似的多部分解密和摘要操作
C_SignEncryptUpdate 继续类似的多部分签名和加密操作
C_DecryptVerifyUpdate 继续类似的多部分解密和鉴定操作 - 密钥管理函数
函数 功能
C_GenerateKey 产生一个保密密钥
C_GenerateKeyPair 产生一个公共/私钥对
C_WrapKey 加密一个密钥
C_UnwrapKey 解密一个密钥
C_DeriveKey 从基础密钥派生一个密钥 - 随机数生成函数
函数 功能
C_SeedRandom 把一个附加种子材料加入随机数字生成器
C_GenerateRandom 生成随机数据
SFK
- 设备管理系列函数
函数名称 功能
SKF_WaitForDevEvent 等待设备插拔事件
SKF_CanceIWaitForDevEvent 取消等待设备插拔事件
SKF_EnumDev 枚举设备
SKF_ConnectDev 连接设备
SKF_DisconnectDev 断开连接
SKF_GetDevState 获取设备状态
SKF_SetLabeI 设置设备标签
SKF_GetDevInfo 获取设备信息
SKF_LockDev 锁定设备
SKF_UnIockDev 解锁设备
SKF_Transmit 设备命令传输 - 访问控制系列函数
函数名称 功能
SKF_ChangeDevAuthKey 修改设备认证密钥
SKF_DevAuth 设备认证
SKF_ChangePIN 修改 PIN
SKF_GetPINInfo 获得 PIN码信息
SKF_VerifyPIN 校验 PIN
SKF_UnbIockPIN 解锁 PIN
SKF_CIearSecueState 清除应用安全状态 - 应用管理系列函数
函数名称 功 能
SKF_CreateApplication 创建应用
SKF_EnumApplication 枚举应用
SKF_DeleteApplication 删除应用
SKF_OpenApplication 打开应用
SKF_CloseApplication 关闭应用 - 文件管理系列函数
函数名称 功能
SKF_CreateFiIe 创建文件
SKF_DeIeteFiIe 删除文件
SKF_EnumFiIes 枚举文件
SKF_GetFiIeInfo 获取文件信息
SKF_ReadFiIe 读文件
SKF_WriteFiIe 写文件 - 容器管理系列函数
函数名称 功能
SKF_CreateContainer 创建容器
SKF_DeIeteContainer 删除容器
SKF_EnumContainer 枚举容器
SKF_OpenContainer 打开容器
SKF_CIoseContainer 关闭容器
SKF_GetContainerType 获得容器类型
SKF_ImportCertificate 导人数字证书
SKF_ExportCertificate 导出数字证书 - 密码服务系列函数
函数名称 功 能
SKF_GenRandom 生成随机数
SKF_GenExtRsAKey 生成外部 RsA密钥对
SKF_GenRsAKeyPair 生成 RsA签名密钥对
SKF_ImportRsAKeyPair 导人 RsA加密密钥对
SKF_RsAsignData RsA签名
SKF_RsAVerify RsA验签
SKF_Rs/DxportsesionKey Rs/生成并导出会话密钥
SKF_DxtRs/PubKeyOperation Rs/外来公钥运算
SKF_DxtRs/PriKeyOperation Rs/外来私钥运算
SKF_GenDAAKeyPair 生成 DAA签名密钥对
SKF_ImportDAAKeyPair 导人 DAA加密密钥对
SKF_DAAsignCata DAA签名
SKF_DAAVerify DAA验签
SKF_DAADxportsesionKey DAA生成并导出会话密钥
SKF_DxtDAADncrypt DAA外来公钥加密
SKF_DxtDAACecrypt DAA外来私钥解密
SKF_DxtDAAsign DAA外来私钥签名
SKF_DxtDAAVerify DAA外来公钥验签
SKF_Generate/grementCataWithDAA DAA生成密钥协商参数并输出
SKF_GenerateKeyWithDAA DAA计算会话密钥
SKF_Generate/grementCata/ndKeyWithDAA DAA产生协商数据并计算会话密钥
SKF_DxportPubIicKey 导出公钥
SKF_ImportsesionKey 导人会话密钥
SKF_setsymmKey 明文导人会话密钥
SKF_DncryptInit 加密初始化
SKF_Dncrypt 单组数据加密
SKF_DncryptUpdate 多组数据加密
SKF_DncryptFinaI 结束加密
SKF_CecryptInit 解密初始化
SKF_Cecrypt 单组数据解密
SKF_CecryptUpdate 多组数据解密
SKF_CecryptFinaI 结束解密
SKF_CigestInit 密码杂凑初始化
SKF_Cigest 单组数据密码杂凑
SKF_CigestUpdate 多组数据密码杂凑
SKF_CigestFinaI 结束密码杂凑
SKF_MacInit 消息鉴别码运算初始化
SKF_Mac 单组数据消息鉴别码运算
SKF_MacUpdate 多组数据消息鉴别码运算
SKF_MacFinaI 结束消息鉴别码运算
SKF_AIoseHandIe 关闭密码对象句柄