# crypt 库模块帮助文档

[关于 CSP](https://learn.microsoft.com/en-us/windows/win32/seccertenroll/cryptoapi-cryptographic-service-providers)

## crypt 成员列表 <a id="crypt" href="#crypt">&#x23;</a>

### crypt() <a id="crypt()" href="#crypt()">&#x23;</a>
[返回对象:cryptObject](#cryptObject)

### crypt(provider,provType,container,flags) <a id="crypt(provider,provType,container,flags)" href="#crypt(provider,provType,container,flags)">&#x23;</a>
获取密钥容器，所有参数可选。  
- 可选参数 @provider 使用 _PROV_前缀常量指定 CSP（Cryptographic Service Provider） 名称。  
- 可选参数 @provType 指定 CSP 类型，默认值为 `1/*_PROV_RSA_FULL*/`。  
- 可选参数 @container 指定密钥容器名称，默认值为 null。  
- 可选参数 @flags 指定选项（数值）。  
如果指定了 container 则 @flags 默认为 `8/*_CRYPT_NEWKEYSET*/`，  
否则 @flags 默认为 `0xF0000000/*_CRYPT_VERIFYCONTEXT*/`。  
全部参数用法请参考系统 API 函数 CryptAcquireContext 的文档。  

返回对象传入原生 API 参数时会自动转换为密钥容器句柄（CSP handle）。

### crypt.decodeBin(字符串,长度,选项) <a id="crypt.decodeBin" href="#crypt.decodeBin">&#x23;</a>
解码 Base64 , Hex , PEM 等格式的输入字符串。  
可选参数 @3 使用 _CRYPT_STRING_ 前缀常量指定选项  
参数@3默认为_CRYPT_STRING_ANY  

相关库： string.base32,base64 。  
base64 支持库则提供了更快的 Base64 编解码功能。

### crypt.decodeUrlBase64(字符串,长度) <a id="crypt.decodeUrlBase64" href="#crypt.decodeUrlBase64">&#x23;</a>
Base64URL 解码。  
参数 @1 可以指定字符串、buffer 或指针。  
如果参数 @1 是指针则应同时指定长度参数，否则长度参数可省略。

### crypt.encodeBin(字符串,长度,选项) <a id="crypt.encodeBin" href="#crypt.encodeBin">&#x23;</a>
将字符串转换为 Base64 或 Hex 编码。  
可选参数 @3 使用 _CRYPT_STRING_ 前缀常量指定选项，  
参数 @3 默认为 `0x40000001/*_CRYPT_STRING_BASE64*/`。  

相关库： string.base32,base64 。  
base64 支持库提供了更快的 Base64 编解码功能。

### crypt.encodeUrlBase64(字符串,长度,允许补等号) <a id="crypt.encodeUrlBase64" href="#crypt.encodeUrlBase64">&#x23;</a>
Base64URL 编码。  
参数 @1 可以指定字符串、buffer 或指针。  
如果参数 @1 是指针则应同时指定长度参数，否则长度参数可省略。  

返回字符串不包含用于尾部对齐的等号,  
并且 `+` 替换为`-`,`/`替换为`_`，  
以保证作为 URL参数安全传输。

### crypt.md2(字符串,是否大写,返回字符数) <a id="crypt.md2" href="#crypt.md2">&#x23;</a>
计算哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符。  
默认返回32个字符

### crypt.md4(字符串,是否大写,返回字符数) <a id="crypt.md4" href="#crypt.md4">&#x23;</a>
计算哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符。  
默认返回32个字符

### crypt.md5(字符串,是否大写,返回字符数) <a id="crypt.md5" href="#crypt.md5">&#x23;</a>
计算哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符。  
默认返回32个字符

### crypt.pem(字符串,标题) <a id="crypt.pem" href="#crypt.pem">&#x23;</a>
PEM 编码字符串,  
如果参数 @1 是空值时不操作直接返回 null

### crypt.sha1(字符串,是否大写,返回字符数) <a id="crypt.sha1" href="#crypt.sha1">&#x23;</a>
计算sha1哈希值,  
参数2可选,默认大写

### crypt.sha256(字符串,是否大写,返回位数) <a id="crypt.sha256" href="#crypt.sha256">&#x23;</a>
计算sha256哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符

### crypt.sha384(字符串,是否大写,返回位数) <a id="crypt.sha384" href="#crypt.sha384">&#x23;</a>
计算sha384哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符

### crypt.sha512(字符串,是否大写,返回位数) <a id="crypt.sha512" href="#crypt.sha512">&#x23;</a>
计算sha512哈希值。  
参数 @2 为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串（默认大写）。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符

## cryptObject 成员列表 <a id="cryptObject" href="#cryptObject">&#x23;</a>

### cryptObject.allocBuffer <a id="cryptObject.allocBuffer" href="#cryptObject.allocBuffer">&#x23;</a>
分配加解密需要用到的 buffer。

### cryptObject.allocBuffer(大小,块大小) <a id="cryptObject.allocBuffer" href="#cryptObject.allocBuffer">&#x23;</a>
分配加解密需要用到的 buffer。  
如果不手动分配，程序将会自动按需分配 buffer。  
参数 @2 可选，可用对象的blockSize属性指定默认块大小。

### cryptObject.blockSize <a id="cryptObject.blockSize" href="#cryptObject.blockSize">&#x23;</a>
加密填充的块大小，默认为 8

### cryptObject.buffer <a id="cryptObject.buffer" href="#cryptObject.buffer">&#x23;</a>
加解密时暂存输入输出数据的缓冲区。  
只能通过调用 allocBuffer 函数分配此缓冲区。  
或者由加解密函数自动分配此缓冲区。  

如果未分配缓冲区，或缓冲区大小不够。  
加解密时会重新调用 allocBuffer 函数分配到合适大小。   

一般不应直接访问此属性。

### cryptObject.createHash() <a id="cryptObject.createHash" href="#cryptObject.createHash">&#x23;</a>
[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashByHmac() <a id="cryptObject.createHashByHmac" href="#cryptObject.createHashByHmac">&#x23;</a>
[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashByHmac(哈希数据,哈希算法) <a id="cryptObject.createHashByHmac" href="#cryptObject.createHashByHmac">&#x23;</a>
所有参数可选,  
哈希算法默认为_CALG_SHA1

### cryptObject.createHashByKey() <a id="cryptObject.createHashByKey" href="#cryptObject.createHashByKey">&#x23;</a>
[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashByKey(算法ID) <a id="cryptObject.createHashByKey" href="#cryptObject.createHashByKey">&#x23;</a>
使用当前密钥创建哈希

### cryptObject.createHashByMd2() <a id="cryptObject.createHashByMd2" href="#cryptObject.createHashByMd2">&#x23;</a>
创建 MD2 算法哈希对象  
可选使用一个字符串参数指定哈希数据  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashByMd4() <a id="cryptObject.createHashByMd4" href="#cryptObject.createHashByMd4">&#x23;</a>
创建 MD4 算法哈希对象  
可选使用一个字符串参数指定哈希数据  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashByMd5() <a id="cryptObject.createHashByMd5" href="#cryptObject.createHashByMd5">&#x23;</a>
创建 MD5 算法哈希对象  
可选使用一个字符串参数指定哈希数据  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashBySha1() <a id="cryptObject.createHashBySha1" href="#cryptObject.createHashBySha1">&#x23;</a>
创建 Sha1 算法哈希对象  
可选使用一个字符串参数指定哈希数据  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashBySha256() <a id="cryptObject.createHashBySha256" href="#cryptObject.createHashBySha256">&#x23;</a>
创建 Sha256 算法哈希对象,  
可选使用一个字符串参数指定哈希数据,  
创建 crypt 对象时参数@2 请指定 CSP 类型为_PROV_RSA_AES  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashBySha384() <a id="cryptObject.createHashBySha384" href="#cryptObject.createHashBySha384">&#x23;</a>
创建 Sha384 算法哈希对象,  
可选使用一个字符串参数指定哈希数据,  
创建 crypt 对象时参数@2 请指定 CSP 类型为_PROV_RSA_AES  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.createHashBySha512() <a id="cryptObject.createHashBySha512" href="#cryptObject.createHashBySha512">&#x23;</a>
创建 Sha512 算法哈希对象,  
可选使用一个字符串参数指定哈希数据,  
创建 crypt 对象时参数@2 请指定 CSP 类型为_PROV_RSA_AES  

[返回对象:cryptHashObject](#cryptHashObject)

### cryptObject.decodeObject(encoded,encodingType,structType) <a id="cryptObject.decodeObject" href="#cryptObject.decodeObject">&#x23;</a>
解码对象,  
参数@1为buffer或字符串,返回值为buffer类型,  
用法参考 crypt.rsa中相关函数

### cryptObject.decrypt <a id="cryptObject.decrypt" href="#cryptObject.decrypt">&#x23;</a>
解密数据

### cryptObject.decrypt(输入数据,是否已输入全部数据,哈希对象,选项) <a id="cryptObject.decrypt" href="#cryptObject.decrypt">&#x23;</a>
参数 @1 指定字符串或 buffer。  
除第一个参数以外，其他参数都是可选参数。  
分块解密时，参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。  
成功返回解密文本,失败返回空,  
可使用..lasterr()函数获取错误信息

### cryptObject.decrypt(输入缓冲区,输入数据大小,哈希对象,选项) <a id="cryptObject.decrypt" href="#cryptObject.decrypt">&#x23;</a>
参数 @1 指定 buffer 或字符串。  
如果参数 @2 指定的数值小于缓冲区据总长度，解密结束。  
可使用 -1 表示解密结束，且输入数据大小等于缓冲区大小。  
其他参数可忽略不用管。  

成功返回存放解密结果的缓冲区，返回值 2 为解密长度。  
需要分块解密的算法，例如 RSA 算法返回的解密结果为字符串。  
失败返回 null, 错误信息,错误代码。  

用法可参考 decryptFile 函数源码。

### cryptObject.decryptFile <a id="cryptObject.decryptFile" href="#cryptObject.decryptFile">&#x23;</a>
解密文件

### cryptObject.decryptFile(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) <a id="cryptObject.decryptFile" href="#cryptObject.decryptFile">&#x23;</a>
参数 @1 指定要解密的文件。参数 @2 指定要保存解密结果的文件。  
文件参数都可以指定文件路径、文件对象（兼容 io.file,fsys.file,fsys.stream）。  
可选用参数 @3 指定分块加密的字节长度，默认为 1MB。  
指定字节长度时会自动调整到对齐块大小，参数不需要考虑对齐。  
可选指定进度回调函数，回调参数 @1,@2 分别为输入文件总长度、已读取长度。  
其他调用参数（哈希对象，选项）一般不必指定。  

函数执行成功返回 true，失败返回 null,错误信息。

### cryptObject.delete() <a id="cryptObject.delete" href="#cryptObject.delete">&#x23;</a>
释放并且删除密钥容器。  
谨慎调用此函数，一般不应当调用此函数。  
大多时候应当仅调用 release 方法释放密钥容器而不是删除它。  
除非在创建此对象时最后一个构造参数 @flags 指定了`8/*_CRYPT_NEWKEYSET*/`。  
创建对象时使用构造参数 @container 指定容器名时也会默认将 @flags 指定为 `8/*_CRYPT_NEWKEYSET*/`。  

此函数等价于先调用 release 方法释放自身，然后以相同的参数重新调用构造函数并将 @flags 参数指定为 `0x10/*_CRYPT_DELETEKEYSET*/`

### cryptObject.duplicateKey() <a id="cryptObject.duplicateKey" href="#cryptObject.duplicateKey">&#x23;</a>
获取并复制当前使用的密钥,  
该密钥必须调用 destroy 成员函数手动销毁  

[返回对象:cryptKeyObject](#cryptKeyObject)

### cryptObject.encodeObject(structInfo,encodingType,structType) <a id="cryptObject.encodeObject" href="#cryptObject.encodeObject">&#x23;</a>
编码对象,  
参数@1为buffer或字符串,返回值为buffer类型,  
用法参考 crypt.rsa中相关函数

### cryptObject.encrypt <a id="cryptObject.encrypt" href="#cryptObject.encrypt">&#x23;</a>
加密数据

### cryptObject.encrypt(输入数据,是否已输入全部数据,哈希对象,选项) <a id="cryptObject.encrypt" href="#cryptObject.encrypt">&#x23;</a>
参数 @1 指定字符串或 buffer。  
除第一个参数以外，其他参数都是可选参数。  
分块加密时，参数 @2 必须为 flase 且参数 @1 的长度必须是块大小的倍数。  
成功返回加密文本,失败返回空,  
可使用..lasterr()函数获取错误信息

### cryptObject.encrypt(输入缓冲区,输入数据大小,哈希对象,选项) <a id="cryptObject.encrypt" href="#cryptObject.encrypt">&#x23;</a>
参数 @1 指定 buffer 或字符串。  
如果参数 @2 指定的数值小于缓冲区据总长度，加密结束。  
可使用 -1 表示解密结束，且输入数据大小等于缓冲区大小。  
其他参数可忽略不用管。  

成功返回存放加密结果的缓冲区，返回值 2 为解密长度。  
需要分块解密的算法，例如 RSA 算法返回的解密结果为字符串。  
失败返回 null, 错误信息,错误代码。  

用法可参考 encryptFile 函数源码。

### cryptObject.encryptFile <a id="cryptObject.encryptFile" href="#cryptObject.encryptFile">&#x23;</a>
加密文件

### cryptObject.encryptFile(输入文件,输出文件,缓冲区大小,进度回调函数,哈希对象,选项) <a id="cryptObject.encryptFile" href="#cryptObject.encryptFile">&#x23;</a>
参数 @1 指定要加密的文件。参数 @2 指定要保存加密结果的文件。  
文件参数都可以指定文件路径、文件对象（兼容 io.file,fsys.file,fsys.stream）。  
可选用参数 @3 指定分块加密的字节长度，默认为 1MB。  
指定字节长度时会自动调整到对齐块大小，参数不需要考虑对齐。  
可选指定进度回调函数，回调参数 @1,@2 分别为输入文件总长度、已读取长度。  
其他调用参数（哈希对象，选项）一般不必指定。  

函数执行成功返回 true，失败返回 null,错误信息。

### cryptObject.exportKey(导出密钥类型,选项,加密密钥句柄) <a id="cryptObject.exportKey" href="#cryptObject.exportKey">&#x23;</a>
导出密钥,除参数一以外其他参数可选  
参数1为密钥类型,参数三为导出密钥可为空

### cryptObject.exportPkcs8(keySpec,objId) <a id="cryptObject.exportPkcs8" href="#cryptObject.exportPkcs8">&#x23;</a>
导出PKCS#8格式私钥,返回值为buffer类型,  
用法参考 crypt.rsa中相关函数

### cryptObject.exportPlainTextKey(选项,加密密钥句柄) <a id="cryptObject.exportPlainTextKey" href="#cryptObject.exportPlainTextKey">&#x23;</a>
导出文本密钥,参数可选

### cryptObject.exportPlainTextKeyBlob() <a id="cryptObject.exportPlainTextKeyBlob" href="#cryptObject.exportPlainTextKeyBlob">&#x23;</a>
[返回对象:plaintextkeyblobObject](#plaintextkeyblobObject)

### cryptObject.exportPlainTextKeyBlob(flags,hExpKey) <a id="cryptObject.exportPlainTextKeyBlob" href="#cryptObject.exportPlainTextKeyBlob">&#x23;</a>
导出密钥为PLAINTEXTKEYBLOB结构体,所有参数可选,  
注意创建或导入密钥时指定了 _CRYPT_EXPORTABLE 才能导出密钥

### cryptObject.exportPrivateKey(选项,加密密钥句柄) <a id="cryptObject.exportPrivateKey" href="#cryptObject.exportPrivateKey">&#x23;</a>
导出私钥,参数可选

### cryptObject.exportPublicKey(选项,加密密钥句柄) <a id="cryptObject.exportPublicKey" href="#cryptObject.exportPublicKey">&#x23;</a>
导出公钥,参数可选

### cryptObject.exportPublicKeyInfo(keySpec,encodingType) <a id="cryptObject.exportPublicKeyInfo" href="#cryptObject.exportPublicKeyInfo">&#x23;</a>
导出公钥信息(CERT_PUBLIC_KEY_INFO),返回值为buffer类型,  
用法参考 crypt.rsa中相关函数

### cryptObject.genKey(algid,flags,size) <a id="cryptObject.genKey" href="#cryptObject.genKey">&#x23;</a>
产生一个随机的会话密钥或者公/私钥对,  
所有参数可选,algid指定算法,flags指定选项,size指定密钥长度

### cryptObject.genSignatureKey(size,flags) <a id="cryptObject.genSignatureKey" href="#cryptObject.genSignatureKey">&#x23;</a>
创建用于签名算法的公/私钥对,  
@size 指定密钥长度,以二进制位为单位,省略此参数则默认为 2048,  
@flags 指定选项,一般不必指定

### cryptObject.getKeyAlgId() <a id="cryptObject.getKeyAlgId" href="#cryptObject.getKeyAlgId">&#x23;</a>
返回当前密钥算法 ID

### cryptObject.getKeyBlockLen() <a id="cryptObject.getKeyBlockLen" href="#cryptObject.getKeyBlockLen">&#x23;</a>
获取密钥块长度

### cryptObject.getKeyParam(类型,数据值) <a id="cryptObject.getKeyParam" href="#cryptObject.getKeyParam">&#x23;</a>
获取密钥参数  
数据值应当指定一个结构体  
不指定数据值则自动分配buffer对象存储返回值  
失败返回null

### cryptObject.getKeyParamNumber(类型) <a id="cryptObject.getKeyParamNumber" href="#cryptObject.getKeyParamNumber">&#x23;</a>
获取数值类型密钥参数

### cryptObject.getUserKey(keySpec) <a id="cryptObject.getUserKey" href="#cryptObject.getUserKey">&#x23;</a>
获取密钥,并设置为默认密钥  
参数指定密钥类型，例如 _AT_SIGNATURE  
成功返回true

### cryptObject.hasKey() <a id="cryptObject.hasKey" href="#cryptObject.hasKey">&#x23;</a>
检测是否已设置密钥

### cryptObject.hash(字符串,是否大写,返回字符个数,算法) <a id="cryptObject.hash" href="#cryptObject.hash">&#x23;</a>
计算哈希值。  
除参数 @1 以外,其他参数可选。  
参数 @2 如果为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串。  
可选用参数 @3 指定返回字符个数，  
正值自左侧截取，负值自右侧截取，设为 true 自中间截取16个字符。  
参数 @4 为可选参数，默认使用MD5算法

### cryptObject.hashFile(文件路径,是否大写,算法) <a id="cryptObject.hashFile" href="#cryptObject.hashFile">&#x23;</a>
计算哈希值。  
除参数 @1 以外,其他参数可选。  
参数 @2 如果为字符串 "raw" 则返回二进制字符串，否则返回 16 进制编码字符串。  
参数 @3 省略时默认使用 MD5 算法。  

此函数执行失败会返回2个值，分别为：null,错误信息,  
创建 crypt 对象时参数@2 请指定为 _PROV_RSA_AES 才能支持 SHA-256（SHA-2）算法,  
也可以改用 crypt.aes 或 crypt.rsa 创建 crypt 对象

### cryptObject.importKey(密钥,选项,公钥句柄) <a id="cryptObject.importKey" href="#cryptObject.importKey">&#x23;</a>
导入密钥并设为默认密钥。  
如果需要删除导入的密钥请调用 setKey 并传 null 参数。  

密钥可以是结构体或字符串格式,  
参数2可选,参数3可选  
成功返回true,失败返回null,错误信息

### cryptObject.importPrivateKeyInfo(certPrivateKeyInfo,encodingType,structType) <a id="cryptObject.importPrivateKeyInfo" href="#cryptObject.importPrivateKeyInfo">&#x23;</a>
导入私钥信息(CRYPT_PRIVATE_KEY_INFO),参数@1为buffer或字符串,  
用法参考 crypt.rsa中相关函数,  
成功返回true

### cryptObject.importPublicKeyInfo(certPublicKeyiNFO,encodingType) <a id="cryptObject.importPublicKeyInfo" href="#cryptObject.importPublicKeyInfo">&#x23;</a>
导入公钥信息(CERT_PUBLIC_KEY_INFO),参数@1为buffer或字符串,  
用法参考 crypt.rsa中相关函数,  
成功返回true

### cryptObject.lastHash <a id="cryptObject.lastHash" href="#cryptObject.lastHash">&#x23;</a>
最后一次调用createHashXXX() 系列函数创建的哈希对象

### cryptObject.release() <a id="cryptObject.release" href="#cryptObject.release">&#x23;</a>
释放密钥容器（CSP）。  
此函数可在对象析构时自动调用

### cryptObject.setHashPassword("字符串参数",HASH算法ID,加密算法ID,选项) <a id="cryptObject.setHashPassword" href="#cryptObject.setHashPassword">&#x23;</a>
设置会话密钥  
成功返回密码容器对象,失败返回null,  
默认哈希算法为_CALG_MD5,加密算法为 _CALG_RC4

### cryptObject.setHashPassword() <a id="cryptObject.setHashPassword" href="#cryptObject.setHashPassword">&#x23;</a>
[返回对象:cryptObject](#cryptObject)

### cryptObject.setInitVector(字符串向量,选项) <a id="cryptObject.setInitVector" href="#cryptObject.setInitVector">&#x23;</a>
设置初始化向量,成功返回true,  
参数2可选

### cryptObject.setKey(密钥句柄) <a id="cryptObject.setKey" href="#cryptObject.setKey">&#x23;</a>
设置新的默认密钥句柄。  
该密钥将由密钥容器管理，不需要释放该密钥  
参数为 null 则删除默认密钥

### cryptObject.setKeyParam(类型,数据值,选项) <a id="cryptObject.setKeyParam" href="#cryptObject.setKeyParam">&#x23;</a>
设置加密参数  
数据值可以是结构体,字符串，或 buffer 对象,  
如果数据值一个数值参数,则转换为表示32位整型数值地址的结构体指针  
成功返回true,失败请使用 ..lasterr()获取错误信息

### cryptObject.setKeyParamMode(_CRYPT_MODE) <a id="cryptObject.setKeyParamMode" href="#cryptObject.setKeyParamMode">&#x23;</a>
设置加密模式（在设置密钥后才能修改加密模式）。  
成功返回 true,失败请使用 `..lasterr()` 获取错误信息

### cryptObject.setKeyParamPadding(_PKCS5) <a id="cryptObject.setKeyParamPadding" href="#cryptObject.setKeyParamPadding">&#x23;</a>
设置加密填充方式  
成功返回true,失败请使用 ..lasterr()获取错误信息

### cryptObject.setPlainPassword() <a id="cryptObject.setPlainPassword" href="#cryptObject.setPlainPassword">&#x23;</a>
[返回对象:cryptObject](#cryptObject)

### cryptObject.setPlainPassword(明文密码,算法ID,选项) <a id="cryptObject.setPlainPassword" href="#cryptObject.setPlainPassword">&#x23;</a>
参数@1使用字符串或buffer指定密码,  
其他参数可选,算法ID默认为_CALG_RC4  
成功返回密码容器对象,失败返回null,错误信息

### cryptObject.sign(keySpec,flags) <a id="cryptObject.sign" href="#cryptObject.sign">&#x23;</a>
返回签名  
可选用 @keySpec 参数中指定密钥类型,  
@flags 不必指定

### cryptObject.signToBase64(keySpec,flags) <a id="cryptObject.signToBase64" href="#cryptObject.signToBase64">&#x23;</a>
签名并反转字节序（通用格式），进行 Base64 编码后返回,  
可选用 @keySpec 参数中指定密钥类型,  
@flags 参数不必指定

### cryptObject.signToUrlBase64(keySpec,flags) <a id="cryptObject.signToUrlBase64" href="#cryptObject.signToUrlBase64">&#x23;</a>
签名并反转字节序（通用格式），进行 UrlBase64 编码后返回。  
可选用 @keySpec 参数中指定密钥类型,  
@flags 参数不必指定

### cryptObject.verifyFromBase64(signBase64,flags) <a id="cryptObject.verifyFromBase64" href="#cryptObject.verifyFromBase64">&#x23;</a>
验证签名。  
对参数 @signBase64 指定的签名进行 Base64 解码并反转字节序（为了兼容通用格式）。  
@flags 参数不必指定,  
验证签名以前必须首先导入公钥,并创建哈希对象

### cryptObject.verifyFromUrlBase64(signBase64,flags) <a id="cryptObject.verifyFromUrlBase64" href="#cryptObject.verifyFromUrlBase64">&#x23;</a>
验证签名。  
对参数 @signBase64 指定的签名进行 UrlBase64 编码并反转字节序（为了兼容通用格式）。  
@flags 参数不必指定,  
验证签名以前必须首先导入公钥,并创建哈希对象

### cryptObject.verifySignature(sign,flags) <a id="cryptObject.verifySignature" href="#cryptObject.verifySignature">&#x23;</a>
验证签名,  
参数@1为签名字符串,其他参数可选  
验证签名以前必须首先导入公钥,并创建哈希对象

## 全局对象 成员列表 <a id="global" href="#global">&#x23;</a>

### _EXPO_OFFLOAD_FUNC_NAME <a id="_EXPO_OFFLOAD_FUNC_NAME" href="#_EXPO_OFFLOAD_FUNC_NAME">&#x23;</a>

```aardio
"OffloadModExpo"
```

### _EXPO_OFFLOAD_REG_VALUE <a id="_EXPO_OFFLOAD_REG_VALUE" href="#_EXPO_OFFLOAD_REG_VALUE">&#x23;</a>

```aardio
"ExpoOffload"
```

### _MS_DEF_DH_SCHANNEL_PROV <a id="_MS_DEF_DH_SCHANNEL_PROV" href="#_MS_DEF_DH_SCHANNEL_PROV">&#x23;</a>

```aardio
"Microsoft DH SChannel Cryptographic Provider"
```

### _MS_DEF_DSS_DH_PROV <a id="_MS_DEF_DSS_DH_PROV" href="#_MS_DEF_DSS_DH_PROV">&#x23;</a>

```aardio
"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
```

### _MS_DEF_DSS_PROV <a id="_MS_DEF_DSS_PROV" href="#_MS_DEF_DSS_PROV">&#x23;</a>

```aardio
"Microsoft Base DSS Cryptographic Provider"
```

### _MS_DEF_PROV <a id="_MS_DEF_PROV" href="#_MS_DEF_PROV">&#x23;</a>

```aardio
"Microsoft Base Cryptographic Provider v1.0"
```

### _MS_DEF_RSA_SCHANNEL_PROV <a id="_MS_DEF_RSA_SCHANNEL_PROV" href="#_MS_DEF_RSA_SCHANNEL_PROV">&#x23;</a>

```aardio
"Microsoft RSA SChannel Cryptographic Provider"
```

### _MS_DEF_RSA_SIG_PROV <a id="_MS_DEF_RSA_SIG_PROV" href="#_MS_DEF_RSA_SIG_PROV">&#x23;</a>

```aardio
"Microsoft RSA Signature Cryptographic Provider"
```

### _MS_ENHANCED_PROV <a id="_MS_ENHANCED_PROV" href="#_MS_ENHANCED_PROV">&#x23;</a>

```aardio
"Microsoft Enhanced Cryptographic Provider v1.0"
```

### _MS_ENH_DSS_DH_PROV <a id="_MS_ENH_DSS_DH_PROV" href="#_MS_ENH_DSS_DH_PROV">&#x23;</a>

```aardio
"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
```

### _MS_ENH_RSA_AES_PROV <a id="_MS_ENH_RSA_AES_PROV" href="#_MS_ENH_RSA_AES_PROV">&#x23;</a>

```aardio
"Microsoft Enhanced RSA and AES Cryptographic Provider"
```

### _MS_SCARD_PROV <a id="_MS_SCARD_PROV" href="#_MS_SCARD_PROV">&#x23;</a>

```aardio
"Microsoft Base Smart Card Crypto Provider"
```

### _MS_STRONG_PROV <a id="_MS_STRONG_PROV" href="#_MS_STRONG_PROV">&#x23;</a>

```aardio
"Microsoft Strong Cryptographic Provider"
```

### _szFORCE_KEY_PROTECTION <a id="_szFORCE_KEY_PROTECTION" href="#_szFORCE_KEY_PROTECTION">&#x23;</a>

```aardio
"ForceKeyProtection"
```

### _szKEY_CACHE_ENABLED <a id="_szKEY_CACHE_ENABLED" href="#_szKEY_CACHE_ENABLED">&#x23;</a>

```aardio
"CachePrivateKeys"
```

### _szKEY_CACHE_SECONDS <a id="_szKEY_CACHE_SECONDS" href="#_szKEY_CACHE_SECONDS">&#x23;</a>

```aardio
"PrivateKeyLifetimeSeconds"
```

### _szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS <a id="_szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS" href="#_szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS">&#x23;</a>

```aardio
"Software\\Policies\\Microsoft\\Cryptography"
```

### _szPRIV_KEY_CACHE_MAX_ITEMS <a id="_szPRIV_KEY_CACHE_MAX_ITEMS" href="#_szPRIV_KEY_CACHE_MAX_ITEMS">&#x23;</a>

```aardio
"PrivKeyCacheMaxItems"
```

### _szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS <a id="_szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS" href="#_szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS">&#x23;</a>

```aardio
"PrivKeyCachePurgeIntervalSeconds"
```

## cryptKeyObject 成员列表 <a id="cryptKeyObject" href="#cryptKeyObject">&#x23;</a>

### cryptKeyObject.destroy() <a id="cryptKeyObject.destroy" href="#cryptKeyObject.destroy">&#x23;</a>
删除密钥

### cryptKeyObject.duplicate() <a id="cryptKeyObject.duplicate" href="#cryptKeyObject.duplicate">&#x23;</a>
复制密钥  

[返回对象:cryptKeyObject](#cryptKeyObject)

## plaintextkeyblobObject 成员列表 <a id="plaintextkeyblobObject" href="#plaintextkeyblobObject">&#x23;</a>

### plaintextkeyblobObject.hdr.aiKeyAlg <a id="plaintextkeyblobObject.hdr.aiKeyAlg" href="#plaintextkeyblobObject.hdr.aiKeyAlg">&#x23;</a>
密钥使用的算法ID

### plaintextkeyblobObject.rgbKeyData <a id="plaintextkeyblobObject.rgbKeyData" href="#plaintextkeyblobObject.rgbKeyData">&#x23;</a>
密钥,buffer类型数据

### 全局常量

### _EXPO_OFFLOAD_FUNC_NAME <a id="_EXPO_OFFLOAD_FUNC_NAME" href="#_EXPO_OFFLOAD_FUNC_NAME">&#x23;</a>
```aardio
"OffloadModExpo"
```

### _EXPO_OFFLOAD_REG_VALUE <a id="_EXPO_OFFLOAD_REG_VALUE" href="#_EXPO_OFFLOAD_REG_VALUE">&#x23;</a>
```aardio
"ExpoOffload"
```

### _MS_DEF_DH_SCHANNEL_PROV <a id="_MS_DEF_DH_SCHANNEL_PROV" href="#_MS_DEF_DH_SCHANNEL_PROV">&#x23;</a>
```aardio
"Microsoft DH SChannel Cryptographic Provider"
```

### _MS_DEF_DSS_DH_PROV <a id="_MS_DEF_DSS_DH_PROV" href="#_MS_DEF_DSS_DH_PROV">&#x23;</a>
```aardio
"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
```

### _MS_DEF_DSS_PROV <a id="_MS_DEF_DSS_PROV" href="#_MS_DEF_DSS_PROV">&#x23;</a>
```aardio
"Microsoft Base DSS Cryptographic Provider"
```

### _MS_DEF_PROV <a id="_MS_DEF_PROV" href="#_MS_DEF_PROV">&#x23;</a>
```aardio
"Microsoft Base Cryptographic Provider v1.0"
```

### _MS_DEF_RSA_SCHANNEL_PROV <a id="_MS_DEF_RSA_SCHANNEL_PROV" href="#_MS_DEF_RSA_SCHANNEL_PROV">&#x23;</a>
```aardio
"Microsoft RSA SChannel Cryptographic Provider"
```

### _MS_DEF_RSA_SIG_PROV <a id="_MS_DEF_RSA_SIG_PROV" href="#_MS_DEF_RSA_SIG_PROV">&#x23;</a>
```aardio
"Microsoft RSA Signature Cryptographic Provider"
```

### _MS_ENHANCED_PROV <a id="_MS_ENHANCED_PROV" href="#_MS_ENHANCED_PROV">&#x23;</a>
```aardio
"Microsoft Enhanced Cryptographic Provider v1.0"
```

### _MS_ENH_DSS_DH_PROV <a id="_MS_ENH_DSS_DH_PROV" href="#_MS_ENH_DSS_DH_PROV">&#x23;</a>
```aardio
"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
```

### _MS_ENH_RSA_AES_PROV <a id="_MS_ENH_RSA_AES_PROV" href="#_MS_ENH_RSA_AES_PROV">&#x23;</a>
```aardio
"Microsoft Enhanced RSA and AES Cryptographic Provider"
```

### _MS_SCARD_PROV <a id="_MS_SCARD_PROV" href="#_MS_SCARD_PROV">&#x23;</a>
```aardio
"Microsoft Base Smart Card Crypto Provider"
```

### _MS_STRONG_PROV <a id="_MS_STRONG_PROV" href="#_MS_STRONG_PROV">&#x23;</a>
```aardio
"Microsoft Strong Cryptographic Provider"
```

### 自动完成常量
_ALG_CLASS_ALL=0xE000  
_ALG_CLASS_ANY=0  
_ALG_CLASS_DATA_ENCRYPT=0x6000  
_ALG_CLASS_HASH=0x8000  
_ALG_CLASS_KEY_EXCHANGE=0xA000  
_ALG_CLASS_MSG_ENCRYPT=0x4000  
_ALG_CLASS_SIGNATURE=0x2000  
_ALG_SID_3DES=3  
_ALG_SID_3DES_112=9  
_ALG_SID_AES=0x11  
_ALG_SID_AES_128=0xE  
_ALG_SID_AES_192=0xF  
_ALG_SID_AES_256=0x10  
_ALG_SID_AGREED_KEY_ANY=3  
_ALG_SID_ANY=0  
_ALG_SID_CAST=6  
_ALG_SID_CYLINK_MEK=0xC  
_ALG_SID_DES=1  
_ALG_SID_DESX=4  
_ALG_SID_DH_EPHEM=2  
_ALG_SID_DH_SANDF=1  
_ALG_SID_DSS_ANY=0  
_ALG_SID_DSS_DMS=2  
_ALG_SID_DSS_PKCS=1  
_ALG_SID_ECDH=5  
_ALG_SID_ECDSA=3  
_ALG_SID_ECMQV=1  
_ALG_SID_EXAMPLE=0x50  
_ALG_SID_HASH_REPLACE_OWF=0xB  
_ALG_SID_HMAC=9  
_ALG_SID_IDEA=5  
_ALG_SID_KEA=4  
_ALG_SID_MAC=5  
_ALG_SID_MD2=1  
_ALG_SID_MD4=2  
_ALG_SID_MD5=3  
_ALG_SID_PCT1_MASTER=4  
_ALG_SID_RC2=2  
_ALG_SID_RC4=1  
_ALG_SID_RC5=0xD  
_ALG_SID_RIPEMD=6  
_ALG_SID_RIPEMD160=7  
_ALG_SID_RSA_ANY=0  
_ALG_SID_RSA_ENTRUST=3  
_ALG_SID_RSA_MSATWORK=2  
_ALG_SID_RSA_PGP=4  
_ALG_SID_RSA_PKCS=1  
_ALG_SID_SAFERSK128=8  
_ALG_SID_SAFERSK64=7  
_ALG_SID_SCHANNEL_ENC_KEY=7  
_ALG_SID_SCHANNEL_MAC_KEY=3  
_ALG_SID_SCHANNEL_MASTER_HASH=2  
_ALG_SID_SEAL=2  
_ALG_SID_SHA=4  
_ALG_SID_SHA1=4  
_ALG_SID_SHA_256=0xC  
_ALG_SID_SHA_384=0xD  
_ALG_SID_SHA_512=0xE  
_ALG_SID_SKIPJACK=0xA  
_ALG_SID_SSL2_MASTER=5  
_ALG_SID_SSL3SHAMD5=8  
_ALG_SID_SSL3_MASTER=1  
_ALG_SID_TEK=0xB  
_ALG_SID_TLS1PRF=0xA  
_ALG_SID_TLS1_MASTER=6  
_ALG_TYPE_ANY=0  
_ALG_TYPE_BLOCK=0x600  
_ALG_TYPE_DH=0xA00  
_ALG_TYPE_DSS=0x200  
_ALG_TYPE_RSA=0x400  
_ALG_TYPE_SECURECHANNEL=0xC00  
_ALG_TYPE_STREAM=0x800  
_AT_KEYEXCHANGE=1  
_AT_SIGNATURE=2  
_CALG_3DES=0x6603  
_CALG_3DES_112=0x6609  
_CALG_AES=0x6611  
_CALG_AES_128=0x660E  
_CALG_AES_192=0x660F  
_CALG_AES_256=0x6610  
_CALG_AGREEDKEY_ANY=0xAA03  
_CALG_CYLINK_MEK=0x660C  
_CALG_DES=0x6601  
_CALG_DESX=0x6604  
_CALG_DH_EPHEM=0xAA02  
_CALG_DH_SF=0xAA01  
_CALG_DSS_SIGN=0x2200  
_CALG_ECDH=0xAA05  
_CALG_ECDSA=0x2203  
_CALG_ECMQV=0xA001  
_CALG_HASH_REPLACE_OWF=0x800B  
_CALG_HMAC=0x8009  
_CALG_HUGHES_MD5=0xA003  
_CALG_KEA_KEYX=0xAA04  
_CALG_MAC=0x8005  
_CALG_MD2=0x8001  
_CALG_MD4=0x8002  
_CALG_MD5=0x8003  
_CALG_NO_SIGN=0x2000  
_CALG_PCT1_MASTER=0x4C04  
_CALG_RC2=0x6602  
_CALG_RC4=0x6801  
_CALG_RC5=0x660D  
_CALG_RSA_KEYX=0xA400  
_CALG_RSA_SIGN=0x2400  
_CALG_SCHANNEL_ENC_KEY=0x4C07  
_CALG_SCHANNEL_MAC_KEY=0x4C03  
_CALG_SCHANNEL_MASTER_HASH=0x4C02  
_CALG_SEAL=0x6802  
_CALG_SHA=0x8004  
_CALG_SHA1=0x8004  
_CALG_SHA_256=0x800C  
_CALG_SHA_384=0x800D  
_CALG_SHA_512=0x800E  
_CALG_SKIPJACK=0x660A  
_CALG_SSL2_MASTER=0x4C05  
_CALG_SSL3_MASTER=0x4C01  
_CALG_SSL3_SHAMD5=0x8008  
_CALG_TEK=0x660B  
_CALG_TLS1PRF=0x800A  
_CALG_TLS1_MASTER=0x4C06  
_CRYPT_ARCHIVABLE=0x4000  
_CRYPT_ARCHIVE=0x100  
_CRYPT_BLOB_VER3=0x80  
_CRYPT_CREATE_IV=0x200  
_CRYPT_CREATE_SALT=4  
_CRYPT_DATA_KEY=0x800  
_CRYPT_DECRYPT=2  
_CRYPT_DECRYPT_RSA_NO_PADDING_CHECK=0x20  
_CRYPT_DEFAULT_CONTAINER_OPTIONAL=0x80  
_CRYPT_DELETEKEYSET=0x10  
_CRYPT_DELETE_DEFAULT=4  
_CRYPT_DESTROYKEY=4  
_CRYPT_ENCRYPT=1  
_CRYPT_EXPORT=4  
_CRYPT_EXPORTABLE=1  
_CRYPT_EXPORT_KEY=0x40  
_CRYPT_FAILED=0  
_CRYPT_FASTSGC=2  
_CRYPT_FIRST=1  
_CRYPT_FLAG_IPSEC=0x10  
_CRYPT_FLAG_PCT1=1  
_CRYPT_FLAG_SIGNING=0x20  
_CRYPT_FLAG_SSL2=2  
_CRYPT_FLAG_SSL3=4  
_CRYPT_FLAG_TLS1=8  
_CRYPT_FORCE_KEY_PROTECTION_HIGH=0x8000  
_CRYPT_IMPL_HARDWARE=1  
_CRYPT_IMPL_MIXED=3  
_CRYPT_IMPL_REMOVABLE=8  
_CRYPT_IMPL_SOFTWARE=2  
_CRYPT_IMPL_UNKNOWN=4  
_CRYPT_IMPORT_KEY=0x80  
_CRYPT_INITIATOR=0x40  
_CRYPT_IPSEC_HMAC_KEY=0x100  
_CRYPT_KEK=0x400  
_CRYPT_LITTLE_ENDIAN=1  
_CRYPT_MAC=0x20  
_CRYPT_MACHINE_DEFAULT=1  
_CRYPT_MACHINE_KEYSET=0x20  
_CRYPT_MODE_CBC=1  
_CRYPT_MODE_CFB=4  
_CRYPT_MODE_CTS=5  
_CRYPT_MODE_ECB=2  
_CRYPT_MODE_OFB=3  
_CRYPT_NEWKEYSET=8  
_CRYPT_NEXT=2  
_CRYPT_NOHASHOID=1  
_CRYPT_NO_SALT=0x10  
_CRYPT_ONLINE=0x80  
_CRYPT_OWF_REPL_LM_HASH=1  
_CRYPT_PREGEN=0x40  
_CRYPT_PSTORE=2  
_CRYPT_READ=8  
_CRYPT_RECIPIENT=0x10  
_CRYPT_SECRETDIGEST=1  
_CRYPT_SEC_DESCR=1  
_CRYPT_SERVER=0x400  
_CRYPT_SF=0x100  
_CRYPT_SGC=1  
_CRYPT_SGCKEY=0x2000  
_CRYPT_SGC_ENUM=4  
_CRYPT_SILENT=0x40  
_CRYPT_SSL2_FALLBACK=2  
_CRYPT_STRING_ANY=7  
_CRYPT_STRING_BASE64=1  
_CRYPT_STRING_BASE64HEADER=0  
_CRYPT_STRING_BASE64REQUESTHEADER=3  
_CRYPT_STRING_BASE64X509CRLHEADER=9  
_CRYPT_STRING_BASE64_ANY=6  
_CRYPT_STRING_BINARY=2  
_CRYPT_STRING_HASHDATA=0x10000000  
_CRYPT_STRING_HEX=4  
_CRYPT_STRING_HEXADDR=0xA  
_CRYPT_STRING_HEXASCII=5  
_CRYPT_STRING_HEXASCIIADDR=0xB  
_CRYPT_STRING_HEXRAW=0xC  
_CRYPT_STRING_HEX_ANY=8  
_CRYPT_STRING_NOCR=0x80000000  
_CRYPT_STRING_NOCRLF=0x40000000  
_CRYPT_STRING_STRICT=0x20000000  
_CRYPT_SUCCEED=1  
_CRYPT_TYPE2_FORMAT=2  
_CRYPT_UI_PROMPT=4  
_CRYPT_UPDATE_KEY=8  
_CRYPT_USERDATA=1  
_CRYPT_USER_DEFAULT=2  
_CRYPT_USER_PROTECTED=2  
_CRYPT_VERIFYCONTEXT=0xF0000000  
_CRYPT_VOLATILE=0x1000  
_CRYPT_WRITE=0x10  
_CRYPT_X931_FORMAT=4  
_CRYPT_Y_ONLY=1  
_HP_ALGID=1  
_HP_HASHSIZE=4  
_HP_HASHVAL=2  
_HP_HMAC_INFO=5  
_HP_TLS1PRF_LABEL=6  
_HP_TLS1PRF_SEED=7  
_KEYSTATEBLOB=0xC  
_KEY_LENGTH_MASK=0xFFFF0000  
_KP_ADMIN_PIN=0x1F  
_KP_CMS_DH_KEY_INFO=0x26  
_KP_CMS_KEY_INFO=0x25  
_KP_KEYEXCHANGE_PIN=0x20  
_KP_KEYLEN=9  
_KP_KEYVAL=0x1E  
_KP_PIN_ID=0x2B  
_KP_PIN_INFO=0x2C  
_KP_PRECOMP_MD5=0x18  
_KP_PRECOMP_SHA=0x19  
_KP_PREHASH=0x22  
_KP_PUB_EX_LEN=0x1C  
_KP_PUB_EX_VAL=0x1D  
_KP_ROUNDS=0x23  
_KP_RP=0x17  
_KP_SIGNATURE_PIN=0x21  
_MAXUIDLEN=0x40  
_OPAQUEKEYBLOB=9  
_PKCS5_PADDING=1  
_PLAINTEXTKEYBLOB=8  
_PP_ADMIN_PIN=0x1F  
_PP_APPLI_CERT=0x12  
_PP_CHANGE_PASSWORD=7  
_PP_CLIENT_HWND=1  
_PP_CONTAINER=6  
_PP_CONTEXT_INFO=0xB  
_PP_CRYPT_COUNT_KEY_USE=0x29  
_PP_DELETEKEY=0x18  
_PP_ENUMALGS=1  
_PP_ENUMALGS_EX=0x16  
_PP_ENUMCONTAINERS=2  
_PP_ENUMELECTROOTS=0x1A  
_PP_ENUMEX_SIGNING_PROT=0x28  
_PP_ENUMMANDROOTS=0x19  
_PP_IMPTYPE=3  
_PP_KEYEXCHANGE_ALG=0xE  
_PP_KEYEXCHANGE_KEYSIZE=0xC  
_PP_KEYEXCHANGE_PIN=0x20  
_PP_KEYSET_TYPE=0x1B  
_PP_KEYSPEC=0x27  
_PP_KEYSTORAGE=0x11  
_PP_KEYX_KEYSIZE_INC=0x23  
_PP_KEY_TYPE_SUBTYPE=0xA  
_PP_NAME=4  
_PP_PIN_PROMPT_STRING=0x2C  
_PP_PROVTYPE=0x10  
_PP_ROOT_CERTSTORE=0x2E  
_PP_SECURE_KEYEXCHANGE_PIN=0x2F  
_PP_SECURE_SIGNATURE_PIN=0x30  
_PP_SESSION_KEYSIZE=0x14  
_PP_SGC_INFO=0x25  
_PP_SIGNATURE_ALG=0xF  
_PP_SIGNATURE_KEYSIZE=0xD  
_PP_SIGNATURE_PIN=0x21  
_PP_SIG_KEYSIZE_INC=0x22  
_PP_SMARTCARD_GUID=0x2D  
_PP_SMARTCARD_READER=0x2B  
_PP_SYM_KEYSIZE=0x13  
_PP_UI_PROMPT=0x15  
_PP_UNIQUE_CONTAINER=0x24  
_PP_USER_CERTSTORE=0x2A  
_PP_USE_HARDWARE_RNG=0x26  
_PP_VERSION=5  
_PRIVATEKEYBLOB=7  
_PROV_DH_SCHANNEL=0x12  
_PROV_DSS=3  
_PROV_DSS_DH=0xD  
_PROV_EC_ECDSA_FULL=0x10  
_PROV_EC_ECDSA_SIG=0xE  
_PROV_EC_ECNRA_FULL=0x11  
_PROV_EC_ECNRA_SIG=0xF  
_PROV_FORTEZZA=4  
_PROV_INTEL_SEC=0x16  
_PROV_MS_EXCHANGE=5  
_PROV_REPLACE_OWF=0x17  
_PROV_RNG=0x15  
_PROV_RSA_AES=0x18  
_PROV_RSA_FULL=1  
_PROV_RSA_SCHANNEL=0xC  
_PROV_RSA_SIG=2  
_PROV_SPYRUS_LYNKS=0x14  
_PROV_SSL=6  
_PROV_STT_ACQ=8  
_PROV_STT_BRND=9  
_PROV_STT_ISS=0xB  
_PROV_STT_MER=7  
_PROV_STT_ROOT=0xA  
_PUBLICKEYBLOB=6  
_PUBLICKEYBLOBEX=0xA  
_RANDOM_PADDING=2  
_RSA1024BIT_KEY=0x4000000  
_SIGNATURE_RESOURCE_NUMBER=0x29A  
_SIMPLEBLOB=1  
_SYMMETRICWRAPKEYBLOB=0xB  
_X509_PKCS_7_ASN_ENCODING=0x10001  
_ZERO_PADDING=3  
