代码解析 static HcfResult GetSigAlgNameX509Openssl(HcfX509CertificateSpi *self, HcfBlob *outName) { if ((self == NULL) || (outName == NULL)) { LOGE("[GetSigAlgName openssl] The input data is null!"); return HCF_INVALID_PARAMS; } if (!IsClassMatch((HcfObjectBase *)self, GetX509CertClass())) { LOGE("[GetSigAlgName openssl] Input wrong class type!"); return HCF_INVALID_PARAMS; } HcfOpensslX509Cert *realCert = (HcfOpensslX509Cert *)self; X509 *x509 = realCert->x509; const X509_ALGOR *alg; X509_get0_signature(NULL, &alg, x509); const ASN1_OBJECT *oidObj; X509_ALGOR_get0(&oidObj, NULL, NULL, alg); char oidStr[OID_STR_MAX_LEN] = { 0 }; int32_t resLen = OBJ_obj2txt(oidStr, OID_STR_MAX_LEN, oidObj, 1); if ((resLen < 0) || (resLen >= OID_STR_MAX_LEN)) { LOGE("Failed to convert x509 object to text!"); CfPrintOpensslError(); return HCF_ERR_CRYPTO_OPERATION; } const char *algName = GetAlgorithmName(oidStr); if (algName == NULL) { return HCF_ERR_CRYPTO_OPERATION; } uint32_t len = strlen(algName) + 1; return DeepCopyDataToOut(algName, len, outName); }
时间: 2024-04-27 20:23:05 浏览: 9
这是一个静态函数,用于获取 X.509 证书的签名算法名称。该函数首先对传入的参数进行判空处理,如果输入数据为空,则返回 HCF_INVALID_PARAMS 错误码。接下来,该函数通过调用 IsClassMatch 函数判断传入的 self 对象是否是 HcfX509CertificateSpi 类型,如果不是则返回 HCF_INVALID_PARAMS 错误码。然后,该函数将 self 对象转换为 HcfOpensslX509Cert 类型,并从该对象中获取 X509 证书。接着,该函数通过调用 X509_get0_signature 函数获取证书的签名算法,再通过调用 OBJ_obj2txt 函数将签名算法转换为字符串形式。如果转换失败,则返回 HCF_ERR_CRYPTO_OPERATION 错误码。否则,该函数调用 GetAlgorithmName 函数获取签名算法名称,并通过调用 DeepCopyDataToOut 函数将签名算法名称拷贝到 outName 对象中。如果获取签名算法名称失败,则返回 HCF_ERR_CRYPTO_OPERATION 错误码。最后,该函数返回签名算法名称的长度。
相关问题
static HcfResult GetEncoded(HcfKey *self, HcfBlob *key) { if ((self == NULL) || (key == NULL)) { LOGE("Invalid input parameter!"); return HCF_INVALID_PARAMS; } if (!IsClassMatch((const HcfObjectBase *)self, OPENSSL_SYM_KEY_CLASS)) { LOGE("Class is not match."); return HCF_INVALID_PARAMS; } SymKeyImpl *impl = (SymKeyImpl *)self; if ((impl->keyMaterial.data == NULL) || (impl->keyMaterial.len == 0)) { LOGE("Invalid SymKeyImpl parameter!"); return HCF_INVALID_PARAMS; } key->data = (uint8_t *)HcfMalloc(impl->keyMaterial.len, 0); if (key->data == NULL) { LOGE("malloc keyMaterial failed!"); return HCF_ERR_MALLOC; } (void)memcpy_s(key->data, impl->keyMaterial.len, impl->keyMaterial.data, impl->keyMaterial.len); key->len = impl->keyMaterial.len; return HCF_SUCCESS; }代码解析
这段代码是一个静态方法 GetEncoded 的实现,功能是获取一个 HcfKey 对象的加密后的密钥,并将其保存到 HcfBlob 对象中。代码中首先对输入参数进行了判空处理,如果输入参数为空则返回 HCF_INVALID_PARAMS 错误码。然后通过 IsClassMatch 方法判断 HcfKey 对象的类型是否为 OPENSSL_SYM_KEY_CLASS,如果不是则返回 HCF_INVALID_PARAMS 错误码。接着将 HcfKey 对象强制转换为 SymKeyImpl 类型,并对其 keyMaterial 属性进行判空处理,如果为空则返回 HCF_INVALID_PARAMS 错误码。然后通过 HcfMalloc 方法为 HcfBlob 对象的 data 分配内存,并将密钥数据复制到其中。最后将密钥数据的长度赋值给 HcfBlob 对象的 len 属性,并返回 HCF_SUCCESS 错误码表示方法执行成功。
php8.0 安装OpenSSL 报错 make: *** [Makefile:209: openssl.lo] Error 1
针对您的问题,可以尝试以下解决方法:
1. 确认 OpenSSL 库已经正确安装。可以使用以下命令检查 OpenSSL 库是否已经正确安装:
```
sudo apt-get install openssl
```
2. 如果 OpenSSL 已经安装但是仍然无法编译,请尝试使用以下命令安装 OpenSSL 开发库:
```
sudo apt-get install libssl-dev
```
3. 如果您已经安装了 OpenSSL 开发库,但是仍然无法编译,请尝试升级 OpenSSL 到最新版本。可以使用以下命令升级 OpenSSL:
```
sudo apt-get install openssl
sudo apt-get upgrade openssl
```
4. 如果上述方法都无法解决问题,请尝试在编译时指定 OpenSSL 库的路径。可以使用以下命令指定 OpenSSL 库的路径:
```
./configure --with-openssl=/usr/local/ssl
```
这里的 `/usr/local/ssl` 是 OpenSSL 库的安装路径,您需要根据实际情况进行调整。
希望以上方法能够帮助您解决问题!