diff --git a/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md b/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md index 53a600bb5912c84c42300dc7cf4c7587c96e5f69..5689f51f42b6eff47d583430da83dc53ddc650ff 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md +++ b/zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md @@ -23,7 +23,7 @@ import cryptoFramework from "@ohos.security.cryptoFramework" | INVALID_PARAMS | 401 | 非法入参。 | | NOT_SUPPORT | 801 | 操作不支持。 | | ERR_OUT_OF_MEMORY | 17620001 | 内存错误。 | -| ERR_EXTERNAL_ERROR | 17620002 | 运行时外部错误。 | +| ERR_RUNTIME_ERROR | 17620002 | 运行时外部错误。 | | ERR_CRYPTO_OPERATION | 17630001 | 调用三方算法库API出错。 | | ERR_CERT_SIGNATURE_FAILURE | 17630002 | 证书签名验证错误。 | | ERR_CERT_NOT_YET_VALID | 17630003 | 证书尚未生效。 | @@ -916,7 +916,7 @@ promiseGenerateRand.then(randData => { | ------- | ------ | ---- | ---- | ---------------------- | | iv | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数iv,长度为12字节| | aad | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数aad,长度为8字节| -| authTag | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数authTag,长度为16字节。
采用GCM模式加密时,需要获取[doFinal()](#dofinal-2)输出的[DataBlob](#datablob),将其作为解密时[GcmParamsSpec](#gcmparamsspec)中的authTag| +| authTag | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数authTag,长度为16字节。
采用GCM模式加密时,需要获取[doFinal()](#dofinal-2)输出的[DataBlob](#datablob),将其末尾16字节作为解密时[GcmParamsSpec](#gcmparamsspec)中的authTag | ## CcmParamsSpec @@ -928,7 +928,7 @@ promiseGenerateRand.then(randData => { | ------- | -------- | ---- | ---- | -------------------------------| | iv | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数iv,长度为7字节 | | aad | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数aad,长度为8字节 | -| authTag | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数authTag,长度为12字节。
采用CCM模式加密时,需要获取[doFinal()](#dofinal-2)输出的[DataBlob](#datablob),将其作为解密时[CcmParamsSpec](#ccmparamsspec)中的authTag | +| authTag | [DataBlob](#datablob) | 是 | 是 | 指明加解密参数authTag,长度为12字节。
采用CCM模式加密时,需要获取[doFinal()](#dofinal-2)输出的[DataBlob](#datablob),将其末尾12字节作为解密时[CcmParamsSpec](#ccmparamsspec)中的authTag | ## CryptoMode @@ -1102,7 +1102,7 @@ key.clearMem(); createSymKeyGenerator(algName : string) : SymKeyGenerator -通过指定算法名称的字符串,获取相应的对称密钥生成器实例。 +通过指定算法名称的字符串,获取相应的对称密钥生成器实例。支持的对称密钥参数详见框架概述“[密钥生成规格](../../security/cryptoFramework-overview.md#密钥生成规格)”一节中“生成密钥的字符串”。 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1118,6 +1118,13 @@ createSymKeyGenerator(algName : string) : SymKeyGenerator | ----------------------------------- | -------------------------- | | [SymKeyGenerator](#symkeygenerator) | 返回对称密钥生成器的对象。 | +**示例:** + +```js +import cryptoFramework from '@ohos.security.cryptoFramework'; +let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); +``` + ## SymKeyGenerator 对称密钥生成器。在使用该类的方法前,需要先使用[createSymKeyGenerator](#cryptoframeworkcreatesymkeygenerator)方法构建一个symKeyGenerator实例。 @@ -1367,7 +1374,7 @@ keyGenPromise.then( keyPair => { ### convertKey convertKey(pubKey : DataBlob, priKey : DataBlob, callback : AsyncCallback\) : void -异步获取指定数据生成非对称密钥,通过注册回调函数获取结果。 +异步获取指定数据生成非对称密钥,通过注册回调函数获取结果。详情请看下方**密钥转换说明** **系统能力:** SystemCapability.Security.CryptoFramework @@ -1397,7 +1404,7 @@ asyKeyGenerator.convertKey(pubKey, priKey, (err, keyPair) => { ### convertKey convertKey(pubKey : DataBlob, priKey : DataBlob) : Promise\ -异步获取指定数据生成非对称密钥,通过Promise获取结果。 +异步获取指定数据生成非对称密钥,通过Promise获取结果。详情请看下方**密钥转换说明** **系统能力:** SystemCapability.Security.CryptoFramework @@ -1428,10 +1435,18 @@ keyGenPromise.then( keyPair => { }); ``` +**密钥转换说明** + +1. RSA二进制密钥数据,按keysize(32位) ,nsize(keysize/8), esize(e实际长度),dsize(keysize/8),nval(大数n的二进制数据),eval(大数e的二进制数据),dval(大数d的二进制数据)拼接形成。 +2. RSA二进制密钥数据中,nsize和dsize为密钥位数/8,esize为具体的实际长度。 +3. RSA私钥数据需要包含keysize,nsize,esize,dsize,nval,eval,dval的全部数据,公钥材料中dsize设置为0,缺省dval的数据。 +4. RSA二进制密钥数据中,keysize、nsize、esize和dsize为32位二进制数据,数据的大小端格式请按设备CPU默认格式,密钥材料(nval、eval、dval)统一为大端格式。 +5. convertKey接口中,公钥和私钥二进制数据为可选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。 + ## cryptoFramework.createCipher createCipher(transformation : string) : Cipher -通过指定算法名称,获取相应的[Cipher](#cipher)实例。 +通过指定算法名称,获取相应的[Cipher](#cipher)实例。支持的算法名参数详见框架概述“[加解密规格](../../security/cryptoFramework-overview.md#加解密规格)”一节中的“指定算法名称字符串”。 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1465,7 +1480,7 @@ try { ## Cipher -提供加解密的算法操作功能,按序调用本类中的[init()](#init-2)、[update()](#update-4)、[doFinal()](#dofinal-2)方法,可以实现对称加密/对称解密/非对称加密/非对称解密。 +提供加解密的算法操作功能,按序调用本类中的[init()](#init-2)、[update()](#update-4)、[doFinal()](#dofinal-2)方法,可以实现对称加密/对称解密/非对称加密/非对称解密。完整的加解密流程示例可参考开发指导中的“[使用加解密操作](../../security/cryptoFramework-guidelines.md#使用加解密操作)”一节。 ### 属性 @@ -1630,7 +1645,7 @@ cipher.update(data).then((output) => { doFinal(data : DataBlob, callback : AsyncCallback\) : void -最后结束加密或者解密数据操作,通过注册回调函数获取加密或者解密数据。如果在本次加解密过程中已经使用[update](#update-4)传入过数据,可以在doFinal的data参数处传入null。
根据对称加解密的模式不同,doFinal的输出可能不同。
对于GCM和CCM模式的对称加密,在doFinal完成后需要将其结果暂存作为解密时的authTag。
对于其他模式的对称加解密,存在两种情况(1)update输出一部分加解密结果,doFinal输出剩余加解密结果;(2)update输出加解密结果全部由update输出,doFinal输出空。 +最后结束加密或者解密数据操作,通过注册回调函数获取加密或者解密数据。如果在本次加解密过程中已经使用[update](#update-4)传入过数据,可以在doFinal的data参数处传入null。
根据对称加解密的模式不同,doFinal的输出可能不同:
对于GCM和CCM模式的对称加密,doFinal的结果是剩余密文和authTag的拼接,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag(因此如果doFinal的data参数传入null,则doFinal的结果就是authTag)。在doFinal完成后需要将authTag暂存,填入解密时的[GcmParamsSpec](#gcmparamsspec)或[CcmParamsSpec](#ccmparamsspec)。
对于其他模式的对称加解密,根据不同的模式特点,存在两种情况(1)update输出一部分加解密结果,doFinal输出剩余加解密结果;(2)加解密结果全部由update输出,doFinal输出空。 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1662,7 +1677,7 @@ cipher.doFinal(data, (err, output) => { doFinal(data : DataBlob) : Promise\ -最后结束加密或者解密数据操作,通过Promise获取结果。如果在本次加解密过程中已经使用update传入过数据,可以在doFinal的data参数处传入null。 +最后结束加密或者解密数据操作,通过Promise获取结果。如果在本次加解密过程中已经使用[update](#update-4)传入过数据,可以在doFinal的data参数处传入null。
根据对称加解密的模式不同,doFinal的输出可能不同:
对于GCM和CCM模式的对称加密,doFinal的结果是剩余密文和authTag的拼接,即末尾的16字节(GCM模式)或12字节(CCM模式)是authTag(因此如果doFinal的data参数传入null,则doFinal的结果就是authTag)。在doFinal完成后需要将authTag暂存,填入解密时的[GcmParamsSpec](#gcmparamsspec)或[CcmParamsSpec](#ccmparamsspec)。
对于其他模式的对称加解密,根据不同的模式特点,存在两种情况(1)update输出一部分加解密结果,doFinal输出剩余加解密结果;(2)加解密结果全部由update输出,doFinal输出空。 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1802,7 +1817,7 @@ init(opMode : CryptoMode, key : Key, params : ParamsSpec) : Promise\ update(data : DataBlob, callback : AsyncCallback\) : void -当待签名数据较多时,可以通过update方法追加待签名数据,数据追加结束后,调用Sign方法即可完成签名。callback形式 +追加待签名数据,callback方式 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1817,7 +1832,7 @@ update(data : DataBlob, callback : AsyncCallback\) : void update(data : DataBlob) : Promise\; -当待签名数据较多时,可以通过update方法追加待签名数据,数据追加结束后,调用Sign方法即可完成签名。promise形式 +追加待签名数据,promise方式 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1980,7 +1995,7 @@ init(pubKey : PubKey) : Promise\ update(data : DataBlob, callback : AsyncCallback\) : void -当待验签数据较多时,可以通过update方法追加待验签数据,数据追加结束后,调用verify方法即可完成验签。callback形式 +追加待验签数据,callback方式 **系统能力:** SystemCapability.Security.CryptoFramework @@ -1995,7 +2010,7 @@ update(data : DataBlob, callback : AsyncCallback\) : void update(data : DataBlob) : Promise\; -当待验签数据较多时,可以通过update方法追加待验签数据,数据追加结束后,调用verify方法即可完成验签。promise方式 +追加待验签数据,promise方式 **系统能力:** SystemCapability.Security.CryptoFramework @@ -2183,7 +2198,7 @@ createX509Cert(inStream : EncodingBlob, callback : AsyncCallback\) : v | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------ | -| inStream | EncodingBlob | 是 | X509证书序列化数据 | +| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | | callback | AsyncCallback\ | 否 | 回调函数。表示X509证书对象 | @@ -2220,7 +2235,7 @@ createX509Cert(inStream : EncodingBlob) : Promise\ | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------ | ---- | ------------------ | -| inStream | EncodingBlob | 是 | X509证书序列化数据 | +| inStream | [EncodingBlob](#encodingblob) | 是 | X509证书序列化数据 | **返回值**: @@ -2263,7 +2278,7 @@ verify(key : PubKey, callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------ | -| key | PubKey | 是 | 用于验签的公钥对象 | +| key | [PubKey](#pubkey) | 是 | 用于验签的公钥对象 | | callback | AsyncCallback\) | 否 | 回调函数。使用AsyncCallback的第一个error参数判断是否验签成功,error为null表示成功,不为null表示失败 | @@ -2309,7 +2324,7 @@ verify(key : PubKey) : Promise\ | 参数名 | 类型 | 必填 | 说明 | | ------ | ------ | ---- | ------------------ | -| key | PubKey | 是 | 用于验签的公钥对象 | +| key | [PubKey](#pubkey) | 是 | 用于验签的公钥对象 | **返回值**: @@ -2355,7 +2370,7 @@ getEncoded(callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------- | -| callback | AsyncCallback\ | 否 | 回调函数。表示X509证书序列化数据 | +| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 否 | 回调函数。表示X509证书序列化数据 | **示例**: @@ -2398,7 +2413,7 @@ getEncoded() : Promise\ | 类型 | 说明 | | ------------ | ---------------------- | -| Promise\ | 表示X509证书序列化数据 | +| Promise\<[EncodingBlob](#encodingblob)> | 表示X509证书序列化数据 | **示例**: @@ -2679,7 +2694,7 @@ getIssuerName() : DataBlob | 类型 | 说明 | | -------- | ---------------------- | -| DataBlob | 表示X509证书颁发者名称 | +| [DataBlob](#datablob) | 表示X509证书颁发者名称 | **示例**: @@ -2715,7 +2730,7 @@ getSubjectName() : DataBlob | 类型 | 说明 | | -------- | -------------------- | -| DataBlob | 表示X509证书主体名称 | +| [DataBlob](#datablob) | 表示X509证书主体名称 | **示例**: @@ -2823,7 +2838,7 @@ getSignature() : DataBlob | 类型 | 说明 | | -------- | -------------------- | -| DataBlob | 表示X509证书签名数据 | +| [DataBlob](#datablob) | 表示X509证书签名数据 | **示例**: @@ -2887,15 +2902,15 @@ cryptoFramework.createX509Cert(encodingBlob, function (error, x509Cert) { getSignatureAlgOid() : string -表示获取X509证书签名算法OID。 +表示获取X509证书签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 **系统能力**:SystemCapability.Security.CryptoFramework **返回值**: -| 类型 | 说明 | -| ------ | ----------------------- | -| string | 表示X509证书签名算法OID | +| 类型 | 说明 | +| ------ | --------------------------------- | +| string | 表示X509证书签名算法对象标志符OID | **示例**: @@ -2931,7 +2946,7 @@ getSignatureAlgParams() : DataBlob | 类型 | 说明 | | -------- | ------------------------ | -| DataBlob | 表示X509证书签名算法参数 | +| [DataBlob](#datablob) | 表示X509证书签名算法参数 | **示例**: @@ -2967,7 +2982,7 @@ getKeyUsage() : DataBlob | 类型 | 说明 | | -------- | -------------------- | -| DataBlob | 表示X509证书秘钥用途 | +| [DataBlob](#datablob) | 表示X509证书秘钥用途 | **示例**: @@ -3003,7 +3018,7 @@ getExtKeyUsage() : DataArray | 类型 | 说明 | | --------- | ------------------------ | -| DataArray | 表示X509证书扩展秘钥用途 | +| [DataArray](#dataarray) | 表示X509证书扩展秘钥用途 | **示例**: @@ -3075,7 +3090,7 @@ getSubjectAltNames() : DataArray | 类型 | 说明 | | --------- | ------------------------ | -| DataArray | 表示X509证书主体可选名称 | +| [DataArray](#dataarray) | 表示X509证书主体可选名称 | **示例**: @@ -3111,7 +3126,7 @@ getIssuerAltNames() : DataArray | 类型 | 说明 | | --------- | -------------------------- | -| DataArray | 表示X509证书颁发者可选名称 | +| [DataArray](#dataarray) | 表示X509证书颁发者可选名称 | **示例**: @@ -3147,7 +3162,7 @@ createX509Crl(inStream : EncodingBlob, callback : AsyncCallback\) : voi | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------------------------- | -| inStream | EncodingBlob | 是 | 表示证书吊销列表序列化数据 | +| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | | callback | AsyncCallback\ | 否 | 回调函数。表示证书吊销列表对象 | @@ -3184,7 +3199,7 @@ createX509Crl(inStream : EncodingBlob) : Promise\ | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------ | ---- | -------------------------- | -| inStream | EncodingBlob | 是 | 表示证书吊销列表序列化数据 | +| inStream | [EncodingBlob](#encodingblob) | 是 | 表示证书吊销列表序列化数据 | **返回值**: @@ -3227,7 +3242,7 @@ isRevoked(cert : X509Cert, callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------------------- | -| cert | X509Cert | 是 | 表示被检查的证书对象 | +| cert | [X509Cert](#x509cert) | 是 | 表示被检查的证书对象 | | callback | AsyncCallback\ | 否 | 回调函数。表示证书吊销状态,true表示已吊销,false表示未吊销 | @@ -3482,7 +3497,7 @@ verify(key : PubKey) : Promise\ | 参数名 | 类型 | 必填 | 说明 | | ------ | ------ | ---- | ---------------------- | -| key | PubKey | 是 | 表示用于验签的公钥对象 | +| key | [PubKey](#pubkey) | 是 | 表示用于验签的公钥对象 | **返回值**: @@ -3564,7 +3579,7 @@ getIssuerName() : DataBlob | 类型 | 说明 | | -------- | ------------------------------ | -| DataBlob | 表示X509证书吊销列表颁发者名称 | +| [DataBlob](#datablob) | 表示X509证书吊销列表颁发者名称 | **示例**: @@ -3937,7 +3952,7 @@ getTbsInfo(callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------- | -| callback | AsyncCallback\ | 否 | 回调函数。表示证书吊销列表的tbsCertList信息 | +| callback | AsyncCallback\<[DataBlob](#datablob)> | 否 | 回调函数。表示证书吊销列表的tbsCertList信息 | **示例**: @@ -3980,7 +3995,7 @@ getTbsInfo() : Promise\ | 类型 | 说明 | | -------- | --------------------------------- | -| Promise\ | 表示证书吊销列表的tbsCertList信息 | +| Promise\<[DataBlob](#datablob)> | 表示证书吊销列表的tbsCertList信息 | **示例**: @@ -4018,7 +4033,7 @@ getSignature() : DataBlob | 类型 | 说明 | | -------- | ------------------------------ | -| DataBlob | 表示X509证书吊销列表的签名数据 | +| [DataBlob](#datablob) | 表示X509证书吊销列表的签名数据 | **示例**: @@ -4082,15 +4097,15 @@ cryptoFramework.createX509Crl(encodingBlob, function (error, x509Crl) { getSignatureAlgOid() : string -表示获取X509证书吊销列表签名的算法OID。 +表示获取X509证书吊销列表签名算法的对象标志符OID(Object Identifier)。OID是由国际标准组织(ISO)的名称注册机构分配。 **系统能力**:SystemCapability.Security.CryptoFramework **返回值**: -| 类型 | 说明 | -| ------ | ----------------------------------- | -| string | 表示X509证书吊销列表签名的算法OID。 | +| 类型 | 说明 | +| ------ | --------------------------------------------- | +| string | 表示X509证书吊销列表签名算法的对象标志符OID。 | **示例**: @@ -4126,7 +4141,7 @@ getSignatureAlgParams() : DataBlob | 类型 | 说明 | | -------- | ---------------------------------- | -| DataBlob | 表示X509证书吊销列表签名的算法参数 | +| [DataBlob](#datablob) | 表示X509证书吊销列表签名的算法参数 | **示例**: @@ -4160,9 +4175,9 @@ createCertChainValidator(algorithm :string) : CertChainValidator **参数**: -| 参数名 | 类型 | 必填 | 说明 | -| --------- | ------ | ---- | -------------------- | -| algorithm | string | 是 | 表示证书链校验器算法 | +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------ | ---- | ------------------------------------------ | +| algorithm | string | 是 | 表示证书链校验器算法。当前仅支持输入“PKIX” | **返回值**: @@ -4187,6 +4202,7 @@ let validator = cryptoFramework.createCertChainValidator("PKIX"); validate(certChain : CertChainData, callback : AsyncCallback\) : void 表示校验X509证书链。 +由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cryptoFramework-overview.md#证书规格) **系统能力**:SystemCapability.Security.CryptoFramework @@ -4194,7 +4210,7 @@ validate(certChain : CertChainData, callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | --------- | ------------- | ---- | ------------------------ | -| certChain | CertChainData | 是 | 表示X509证书链序列化数据 | +| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据 | | callback | AsyncCallback\ | 否 | 回调函数。使用AsyncCallback的第一个error参数判断是否校验成功,error为null表示成功,error不为null表示失败 | @@ -4228,6 +4244,7 @@ validator.validate(certChainData, function (error, data) { validate(certChain : CertChainData) : Promise\ 表示校验X509证书链。 +由于端侧系统时间不可信,证书链校验不包含对证书有效时间的校验。如果需要检查证书的时间有效性,可使用X509证书的[checkValidityWithDate](#checkvaliditywithdate)方法进行检查。详见[证书规格](../../security/cryptoFramework-overview.md#证书规格) **系统能力**:SystemCapability.Security.CryptoFramework @@ -4235,7 +4252,7 @@ validate(certChain : CertChainData) : Promise\ | 参数名 | 类型 | 必填 | 说明 | | --------- | ------------- | ---- | ------------------------ | -| certChain | CertChainData | 是 | 表示X509证书链序列化数据。使用AsyncCallback的第一个error参数判断是否校验成功,error为null表示成功,error不为null表示失败 | +| certChain | [CertChainData](#certchaindata) | 是 | 表示X509证书链序列化数据。 | **返回值**: @@ -4305,7 +4322,7 @@ getEncoded(callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------- | -| callback | AsyncCallback\ | 否 | 回调函数。表示被吊销证书的序列化数据 | +| callback | AsyncCallback\<[EncodingBlob](#encodingblob)> | 否 | 回调函数。表示被吊销证书的序列化数据 | **示例**: @@ -4336,7 +4353,7 @@ getEncoded() : Promise\ | 类型 | 说明 | | ------------ | -------------------------- | -| Promise\ | 表示被吊销证书的序列化数据 | +| Promise\<[EncodingBlob](#encodingblob)> | 表示被吊销证书的序列化数据 | **示例**: @@ -4388,7 +4405,7 @@ getCertIssuer(callback : AsyncCallback\) : void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | -------- | -| callback | AsyncCallback\ | 否 | 回调函数。表示被吊销证书的颁发者信息 | +| callback | AsyncCallback\<[DataBlob](#datablob)> | 否 | 回调函数。表示被吊销证书的颁发者信息 | **示例**: @@ -4419,7 +4436,7 @@ getCertIssuer() : Promise\ | 类型 | 说明 | | -------- | -------------------------- | -| Promise\ | 表示被吊销证书的颁发者信息 | +| Promise\<[DataBlob](#datablob)> | 表示被吊销证书的颁发者信息 | **示例**: diff --git a/zh-cn/application-dev/security/cryptoFramework-guidelines.md b/zh-cn/application-dev/security/cryptoFramework-guidelines.md index 25d4340ded2db5588d03a999a7df1690bd27f47b..368108ba13572fde86046d1e30febc4dae2551ed 100644 --- a/zh-cn/application-dev/security/cryptoFramework-guidelines.md +++ b/zh-cn/application-dev/security/cryptoFramework-guidelines.md @@ -1,5 +1,9 @@ # 加解密算法库框架开发指导 +> **说明** +> +> 本开发指导基于API version 9,OH SDK版本3.2.7.3,适用于JS语言开发 + ## 使用密钥对象生成与转换操作 **场景说明** @@ -9,7 +13,7 @@ 1. 随机生成算法库密钥对象。该对象可用于后续的加解密等操作。 2. 根据指定数据生成算法库密钥对象(也就是将外部或存储的二进制数据转换为算法库的密钥对象)。该对象可用于后续的加解密等操作。 3. 获取算法库密钥对象的二进制数据,用于存储或传输。 -> **说明**:密钥对象Key包括对称密钥SymKey和非对称密钥(公钥PubKey和私钥PriKey),其中公钥和私钥组成密钥对KeyPair。密钥之间的具体关系可参考[接口声明](https://gitee.com/openharmony/security_crypto_framework/blob/master/interfaces/kits/js/@ohos.security.cryptoFramework.d.ts)。 +> **说明**:密钥对象Key包括对称密钥SymKey和非对称密钥(公钥PubKey和私钥PriKey),其中公钥和私钥组成密钥对KeyPair。密钥之间的具体关系可参考[接口声明](../reference/apis/js-apis-cryptoFramework.md)。 **接口及参数说明** @@ -96,7 +100,7 @@ function testGenerateAesKey() { 示例3:根据指定的RSA非对称密钥二进制数据,生成KeyPair对象(场景2) -1. 获取RSA二进制密钥数据,封装成DataBlob对象,按keysize(32位) ,nsize(keysize/8), esize(e实际长度),dsize(keysize/8),nval(大数n的二进制数据),eval(大数e的二进制数据),dval(大数d的二进制数据)拼接形成。 +1. 获取RSA二进制密钥数据封装成DataBlob对象,按keysize(32位) 、nsize(keysize/8)、 esize(e实际长度)、dsize(keysize/8)、nval(大数n的二进制数据)、eval(大数e的二进制数据)和dval(大数d的二进制数据)拼接形成。 2. 调用convertKey方法,传入公钥二进制和私钥二进制(二者非必选项,可只传入其中一个),转换为KeyPair对象。 ```javascript @@ -121,10 +125,10 @@ function convertAsyKey() { **说明** -1. nsize和dsize为密钥位数/8,esize为具体的实际长度; -2. 私钥材料需要包含keysize,nsize,esize,dsize,nval,eval,dval的全部数据,公钥材料中dsize设置为为0,缺省dval的数据; -3. 公钥和私钥二进制数据为可选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象; -4. keysize、nsize、esize和dsize为32位二进制数据,数据的大小端格式请按设备CPU默认格式,密钥材料(nval、eval、dval)统一为大端格式; +1. nsize和dsize为密钥位数/8,esize为具体的实际长度。 +2. 私钥材料需要包含keysize,nsize,esize,dsize,nval,eval,dval的全部数据,公钥材料中dsize设置为为0,缺省dval的数据。 +3. 公钥和私钥二进制数据为可选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。 +4. keysize、nsize、esize和dsize为32位二进制数据,数据的大小端格式请按设备CPU默认格式,密钥材料(nval、eval、dval)统一为大端格式。 示例4:根据指定的ECC非对称密钥二进制数据,生成KeyPair对象(场景2、3) @@ -1119,3 +1123,497 @@ function doRandByCallback(len) { }); } ``` + +## 使用证书操作 + +**场景说明** + +使用证书操作中,典型的场景有: + +1. 解析X509证书数据生成证书对象。 +2. 获取证书信息,比如:证书版本、证书序列号等。 +3. 获取证书对象的序列化数据。 +4. 获取证书公钥。 +5. 证书验签。 +6. 校验证书有效期。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| --------------- | ------------------------------------------------------------ | -------------------------------------------- | +| cryptoFramework | createX509Cert(inStream : EncodingBlob, callback : AsyncCallback) : void | 使用callback方式解析X509证书数据生成证书对象 | +| cryptoFramework | createX509Cert(inStream : EncodingBlob) : Promise | 使用promise方式解析X509证书数据生成证书对象 | +| X509Cert | verify(key : PubKey, callback : AsyncCallback) : void | 使用callback方式进行证书验签 | +| X509Cert | verify(key : PubKey) : Promise | 使用promise方式进行证书验签 | +| X509Cert | getEncoded(callback : AsyncCallback) : void | 使用callback方式获取证书序列化数据 | +| X509Cert | getEncoded() : Promise | 使用promise方式获取证书序列化数据 | +| X509Cert | getPublicKey(callback : AsyncCallback) : void | 使用callback方式获取证书公钥 | +| X509Cert | getPublicKey() : Promise | 使用Promise方式获取证书公钥 | +| X509Cert | checkValidityWithDate(date: string, callback : AsyncCallback) : void | 使用callback方式校验证书有效期 | +| X509Cert | checkValidityWithDate(date: string) : Promise | 使用Promise方式校验证书有效期 | +| X509Cert | getVersion() : number | 获取证书版本 | +| X509Cert | getSerialNumber() : number | 获取证书序列号 | +| X509Cert | getIssuerName() : DataBlob | 获取证书颁发者名称 | +| X509Cert | getSubjectName() : DataBlob | 获取证书主体名称 | +| X509Cert | getNotBeforeTime() : string | 获取证书有效期起始时间 | +| X509Cert | getNotAfterTime() : string | 获取证书有效期截至时间 | +| X509Cert | getSignature() : DataBlob | 获取证书签名 | +| X509Cert | getSignatureAlgName() : string | 获取证书签名算法名称 | +| X509Cert | getSignatureAlgOid() : string | 获取证书签名算法OID | +| X509Cert | getSignatureAlgParams() : DataBlob | 获取证书签名算法参数 | +| X509Cert | getKeyUsage() : DataBlob | 获取证书秘钥用途 | +| X509Cert | getExtKeyUsage() : DataArray | 获取证书扩展秘钥用途 | +| X509Cert | getBasicConstraints() : number | 获取证书基本约束 | +| X509Cert | getSubjectAltNames() : DataArray | 获取证书主体可选名称 | +| X509Cert | getIssuerAltNames() : DataArray | 获取证书颁发者可选名称 | + +**开发步骤** + +示例:解析X509证书数据生成证书对象,并调用对象方法(包含场景1-6) + +```javascript +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 证书数据,此处仅示例,业务需根据场景自行设置 +let certData = "-----BEGIN CERTIFICATE-----\n" ++ "IBzTCCAXCgAwIBAgIGAXKnMKNyMAwGCCqBHM9VAYN1BQAwSTELMAkGA1UEBhMC\n" ++ "04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRgwFgYDVQQDEw9S\n" ++ "290Q0EgZm9yIFRlc3QwIhgPMjAxNTEyMzExNjAwMDBaGA8yMDM1MTIzMDE2MDAw\n" ++ "FowSTELMAkGA1UEBhMCQ04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kv\n" ++ "00yMRgwFgYDVQQDEw9Sb290Q0EgZm9yIFRlc3QwWTATBgcqhkjOPQIBBggqgRzP\n" ++ "QGCLQNCAATj+apYlL+ddWXZ7+mFZXZJGbcJFXUN+Fszz6humeyWZP4qEEr2N0+a\n" ++ "dwo/21ft232yo0jPLzdscKB261zSQXSoz4wPDAZBgNVHQ4EEgQQnGnsD7oaOcWv\n" ++ "CTrspwSBDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIAxjAMBggqgRzP\n" ++ "QGDdQUAA0kAMEYCIQCEnW5BlQh0vmsOLxSoXYc/7zs++wWyFc1tnBHENR4ElwIh\n" ++ "I1Lwu6in1ruflZhzseWulXwcITf3bm/Y5X1g1XFWQUH\n" ++ "-----END CERTIFICATE-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书示例 +function certSample() { + let encodingBlob = { + // 将string类型证书数据转为Uint8Array + data: stringToUint8Array(certData), + // 证书格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM + }; + + // 创建证书对象 + cryptoFramework.createX509Cert(encodingBlob, function (err, x509Cert) { + if (err != null) { + // 创建证书对象失败 + Console.log("createX509Cert failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 创建证书对象成功 + Console.log("createX509Cert success"); + + // 获取证书版本 + let version = x509Cert.getVersion(); + + // 获取证书对象的序列化数据 + x509Cert.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + Console.log("getEncoded success"); + } + }); + + // 获取证书公钥对象 + x509Cert.getPublicKey(function (err, pubKey) { + if (err != null) { + // 获取证书公钥失败 + Console.log("getPublicKey failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取证书公钥成功 + Console.log("getPublicKey success"); + } + }); + + // 业务需通过上级证书对象或本证书对象(自签名)的getPublicKey接口获取公钥对象,此处省略 + let pubKey = null; + + // 证书验签 + x509Cert.verify(pubKey, function (err, data) { + if (err == null) { + // 验签成功 + Console.log("verify success"); + } else { + // 验签失败 + Console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); + } + }); + + // 时间字符串 + let date = "150527000001Z"; + + // 校验证书有效期 + x509Cert.checkValidityWithDate(date, function (err, data) { + if (err != null) { + // 证书有效期校验失败 + Console.log("checkValidityWithDate failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 证书有效期校验成功 + Console.log("checkValidityWithDate success"); + } + }); + }); +} +``` + +## 使用证书吊销列表操作 + +**场景说明** + +使用证书吊销列表操作中,典型的场景有: + +1. 解析X509证书吊销列表数据生成吊销列表对象。 +2. 获取证书吊销列表信息,比如:证书吊销列表版本、证书吊销列表类型等。 +3. 获取证书吊销列表对象的序列化数据。 +4. 检查证书是否被吊销。 +5. 证书吊销列表验签。 +6. 获取被吊销证书。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| cryptoFramework | createX509Crl(inStream : EncodingBlob, callback : AsyncCallback) : void | 使用callback方式解析X509证书吊销列表数据生成证书吊销列表对象 | +| cryptoFramework | createX509Crl(inStream : EncodingBlob) : Promise | 使用promise方式解析X509证书吊销列表数据生成证书吊销列表对象 | +| X509Crl | isRevoked(cert : X509Cert, callback : AsyncCallback) : void | 使用callback方式检查证书是否被吊销 | +| X509Crl | isRevoked(cert : X509Cert) : Promise | 使用promise方式检查证书是否被吊销 | +| X509Crl | getType() : string | 获取证书吊销列表类型 | +| X509Crl | getEncoded(callback : AsyncCallback) : void | 使用callback方式获取证书吊销列表序列化数据 | +| X509Crl | getEncoded() : Promise | 使用promise方式获取证书吊销列表序列化数据 | +| X509Crl | verify(key : PubKey, callback : AsyncCallback) : void | 使用callback方式进行证书吊销列表验签 | +| X509Crl | verify(key : PubKey) : Promise | 使用Promise方式进行证书吊销列表验签 | +| X509Crl | getVersion() : number | 获取证书吊销列表版本 | +| X509Crl | getIssuerName() : DataBlob | 获取证书吊销列表颁发者名称 | +| X509Crl | getLastUpdate() : string | 获取证书吊销列表lastUpdate日期 | +| X509Crl | getNextUpdate() : string | 获取证书吊销列表nextUpdate日期 | +| X509Crl | getRevokedCert(serialNumber : number, callback : AsyncCallback) : void | 使用callback方式通过序列号获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCert(serialNumber : number) : Promise | 使用Promise方式通过序列号获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCertWithCert(cert : X509Cert, callback : AsyncCallback) : void | 使用callback方式通过X509证书获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCertWithCert(cert : X509Cert) : Promise | 使用Promise方式通过X509证书获取证书吊销列表中的被吊销证书 | +| X509Crl | getRevokedCerts(callback : AsyncCallback>) : void | 使用callback方式获取证书吊销列表的所有被吊销证书 | +| X509Crl | getRevokedCerts() : Promise> | 使用Promise方式获取证书吊销列表的所有被吊销证书 | +| X509Crl | getTbsInfo(callback : AsyncCallback) : void | 使用callback方式获取证书吊销列表的tbsCertList | +| X509Crl | getTbsInfo() : Promise | 使用Promise方式获取证书吊销列表的tbsCertList | +| X509Crl | getSignature() : DataBlob | 获取证书吊销列表的签名 | +| X509Crl | getSignatureAlgName() : string | 获取证书吊销列表的签名算法名称 | +| X509Crl | getSignatureAlgOid() : string | 获取证书吊销列表的签名算法OID | +| X509Crl | getSignatureAlgParams() : DataBlob | 获取证书吊销列表的签名算法参数 | + +**开发步骤** + +示例:解析X509证书吊销列表数据生成证书吊销列表对象,并调用对象方法(包含场景1-6) + +```javascript +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 证书吊销列表数据,此处仅示例,业务需根据场景自行设置 +let crlData = "-----BEGIN X509 CRL-----\n" ++ "MIIBijB0AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCHJvb3QtY2ExFw0y\n" ++ "MDA2MTkxNjE1NDhaFw0yMDA3MTkxNjE1NDhaMBwwGgIJAMsozRATnap1Fw0yMDA2\n" ++ "MTkxNjEyMDdaoA8wDTALBgNVHRQEBAICEAIwDQYJKoZIhvcNAQELBQADggEBACPs\n" ++ "9gQB+djaXPHHRmAItebZpD3iJ/e36Dxr6aMVkn9FkI8OVpUI4RNcCrywyCZHQJte\n" ++ "995bbPjP7f1sZstOTZS0fDPgJ5SPAxkKOQB+SQnBFrlZSsxoUNU60gRqd2imR0Rn\n" ++ "1r09rP69F6E4yPc9biEld+llLGgoImP3zPOVDD6fbfcvVkjStY3bssVEQ/vjp4a3\n" ++ "/I12U7ZnSe3jaKqaQBoVJppkTFOIOq7IOxf5/IkMPmvRHDeC2IzDMzcUxym0dkny\n" ++ "EowHrjzo0bZVqpHMA2YgKZuwTpVLHk9GeBEK2hVkIoPVISkmiU4HFg0S6z68C5yd\n" ++ "DrAA7hErVgXhtURLbAI=\n" ++ "-----END X509 CRL-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书吊销列表示例 +function crlSample() { + let encodingBlob = { + // 将string类型证书吊销列表数据转为Uint8Array + data: stringToUint8Array(crlData), + // 证书吊销列表格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM + }; + + // 创建证书吊销列表对象 + cryptoFramework.createX509Crl(encodingBlob, function (err, x509Crl) { + if (err != null) { + // 创建证书吊销列表对象失败 + Console.log("createX509Crl failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 创建证书吊销列表对象成功 + Console.log("createX509Crl success"); + + // 获取证书吊销列表版本 + let version = x509Crl.getVersion(); + + // 获取证书吊销列表对象的序列化数据 + x509Crl.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + Console.log("getEncoded success"); + } + }); + + // 业务需通过cryptoFramework的createX509Cert生成X509Cert证书对象,此处省略 + let x509Cert = null; + + // 检查证书是否被吊销 + x509Crl.isRevoked(x509Cert, function (err, isRevoked) { + if (err != null) { + // 检查证书是否被吊销失败 + Console.log("isRevoked failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 检查证书是否被吊销成功 + Console.log("isRevoked success, isRevoked? " + isRevoked); + } + }); + + // 业务需通过AsyKeyGenerator的generateKeyPair或convertKey接口获取PubKey对象,此处省略 + let pubKey = null; + + // 证书吊销列表验签 + x509Crl.verify(pubKey, function (err, data) { + if (err == null) { + // 验签成功 + Console.log("verify success"); + } else { + // 验签失败 + Console.log("verify failed, errCode: " + err.code + ", errMsg: " + err.message); + } + }); + + // 证书序列号,业务需自行设置 + let serialNumber = 1000; + + // 获取被吊销证书对象 + x509Crl.getRevokedCert(serialNumber, function (err, entry) { + if (err != null) { + // 获取被吊销证书对象失败 + Console.log("getRevokedCert failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取被吊销证书对象成功 + Console.log("getRevokedCert success"); + } + }); + }); +} +``` + +## 使用证书链校验器操作 + +**场景说明** + +使用证书链校验器操作中,典型的场景有: + +1. 证书链校验。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| ------------------ | ------------------------------------------------------------ | -------------------------------- | +| cryptoFramework | createCertChainValidator(algorithm :string) : CertChainValidator | 使用指定算法生成证书链校验器对象 | +| CertChainValidator | validate(certChain : CertChainData, callback : AsyncCallback) : void | 使用callback方式校验证书链 | +| CertChainValidator | validate(certChain : CertChainData) : Promise | 使用promise方式校验证书链 | +| CertChainValidator | algorithm : string | 证书链校验器算法名称 | + +**开发步骤** + +示例:创建证书链校验器对象,并对证书链数据进行校验(场景1) + +```javascript +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 一级证书数据,此处仅示例,业务需自行设置真实数据 +let caCertData = "-----BEGIN CERTIFICATE-----\n" ++ "...\n" ++ "...\n" ++ "...\n" ++ "-----END CERTIFICATE-----\n"; + +// 二级证书数据,此处仅示例,业务需自行设置真实数据 +let secondCaCertData = "-----BEGIN CERTIFICATE-----\n" ++ "...\n" ++ "...\n" ++ "...\n" ++ "-----END CERTIFICATE-----\n"; + +// string转Uint8Array +function stringToUint8Array(str) { + var arr = []; + for (var i = 0, j = str.length; i < j; i++) { + arr.push(str.charCodeAt(i)); + } + return new Uint8Array(arr); +} + +// 证书链校验器示例:此示例中以校验二级证书链为例,业务需根据场景自行修改 +function certChainValidatorSample() { + // 证书链校验器算法,当前仅支持PKIX + let algorithm = "PKIX"; + + // 创建证书链校验器对象 + let validator = cryptoFramework.createCertChainValidator(algorithm); + + // 一级证书数据 + let uint8ArrayOfCaCertData = stringToUint8Array(caCertData); + + // 一级证书数据长度 + let uint8ArrayOfCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOfCaCertData.byteLength]).buffer); + + // 二级证书数据 + let uint8ArrayOf2ndCaCertData = stringToUint8Array(secondCaCertData); + + // 二级证书数据长度 + let uint8ArrayOf2ndCaCertDataLen = new Uint8Array(new Uint16Array([uint8ArrayOf2ndCaCertData.byteLength]).buffer); + + // 证书链二进制数据:二级证书数据长度+二级证书数据+一级证书数据长度+一级证书数据(L-V格式) + let encodingData = new Uint8Array(uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + + uint8ArrayOfCaCertDataLen.length + uint8ArrayOfCaCertData.length); + for (var i = 0; i < uint8ArrayOf2ndCaCertDataLen.length; i++) { + encodingData[i] = uint8ArrayOf2ndCaCertDataLen[i]; + } + for (var i = 0; i < uint8ArrayOf2ndCaCertData.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + i] = uint8ArrayOf2ndCaCertData[i]; + } + for (var i = 0; i < uint8ArrayOfCaCertDataLen.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + i] = uint8ArrayOfCaCertDataLen[i]; + } + for (var i = 0; i < uint8ArrayOfCaCertData.length; i++) { + encodingData[uint8ArrayOf2ndCaCertDataLen.length + uint8ArrayOf2ndCaCertData.length + + uint8ArrayOfCaCertDataLen.length + i] = uint8ArrayOfCaCertData[i]; + } + + let certChainData = { + // Uint8Array类型:L-V格式(证书数据长度-证书数据) + data: encodingData, + // 证书数量,此示例中为2 + count: 2, + // 证书格式:支持PEM和DER,此例中对应PEM + encodingFormat: cryptoFramework.EncodingFormat.FORMAT_PEM + }; + + // 校验证书链 + validator.validate(certChainData, function (err, data) { + if (err != null) { + // 证书链校验失败 + Console.log("validate failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 证书链校验成功 + Console.log("validate success"); + } + }); +} +``` + +## 使用被吊销证书操作 + +**场景说明** + +使用被吊销证书操作中,典型的场景有: + +1. 获取被吊销证书对象。 +2. 获取被吊销证书信息,比如:序列号、证书颁发者、证书吊销日期。 +3. 获取被吊销证书对象的序列化数据。 + +**接口及参数说明** + +详细接口说明可参考[API参考](../reference/apis/js-apis-cryptoFramework.md)。 + +以上场景涉及的常用接口如下表所示: + +| 实例名 | 接口名 | 描述 | +| ------------ | ----------------------------------------------------------- | ------------------------------------------ | +| X509CrlEntry | getEncoded(callback : AsyncCallback) : void; | 使用callback方式获取被吊销证书的序列化数据 | +| X509CrlEntry | getEncoded() : Promise; | 使用promise方式获取被吊销证书的序列化数据 | +| X509CrlEntry | getSerialNumber() : number; | 获取被吊销证书的序列号 | +| X509CrlEntry | getCertIssuer(callback : AsyncCallback) : void; | 使用callback方式获取被吊销证书颁发者 | +| X509CrlEntry | getCertIssuer() : Promise; | 使用promise方式获取被吊销证书颁发者 | +| X509CrlEntry | getRevocationDate(callback : AsyncCallback) : void; | 使用callback方式获取被吊销证书的吊销日期 | +| X509CrlEntry | getRevocationDate() : Promise; | 使用promise方式获取被吊销证书的吊销日期 | + +**开发步骤** + +示例:获取被吊销证书对象,并调用对象方法(包含场景1-3) + +```javascript +import cryptoFramework from '@ohos.security.cryptoFramework'; + +// 被吊销证书示例 +function crlEntrySample() { + // 业务需自行通过cryptoFramework的createX509Crl接口创建X509Crl对象,此处省略 + let x509Crl = null; + + // 获取被吊销证书对象,业务需根据场景调用X509Crl的接口获取,此示例使用getRevokedCert获取 + let serialNumber = 1000; + x509Crl.getRevokedCert(serialNumber, function (err, crlEntry) { + if (err != null) { + // 获取被吊销证书对象失败 + Console.log("getRevokedCert failed, errCode: " + err.code + ", errMsg: " + err.message); + return; + } + // 获取被吊销证书对象成功 + Console.log("getRevokedCert success"); + + // 获取被吊销证书的序列号 + let serialNumber = crlEntry.getSerialNumber(); + + // 获取被吊销证书的吊销日期 + crlEntry.getRevocationDate(function (err, date) { + if (err != null) { + // 获取吊销日期失败 + Console.log("getRevocationDate failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取吊销日期成功 + Console.log("getRevocationDate success, date is: " + date); + } + }); + + // 获取被吊销证书对象的序列化数据 + crlEntry.getEncoded(function (err, data) { + if (err != null) { + // 获取序列化数据失败 + Console.log("getEncoded failed, errCode: " + err.code + ", errMsg: " + err.message); + } else { + // 获取序列化数据成功 + Console.log("getEncoded success"); + } + }); + }); +} +``` +