HcfResult HcfMdCreate(const char *algoName, HcfMd **md) { if (!IsStrValid(algoName, HCF_MAX_ALGO_NAME_LEN) || (md == NULL)) { LOGE("Invalid input params while creating md!"); return HCF_INVALID_PARAMS; } HcfMdSpiCreateFunc createSpiFunc = FindAbility(algoName); if (createSpiFunc == NULL) { LOGE("Algo not supported!"); return HCF_NOT_SUPPORT; } HcfMdImpl *returnMdApi = (HcfMdImpl *)HcfMalloc(sizeof(HcfMdImpl), 0); if (returnMdApi == NULL) { LOGE("Failed to allocate Md Obj memory!"); return HCF_ERR_MALLOC; } if (strcpy_s(returnMdApi->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnMdApi); return HCF_ERR_COPY; } HcfMdSpi *spiObj = NULL; HcfResult res = createSpiFunc(algoName, &spiObj); if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnMdApi); return res; } returnMdApi->base.base.getClass = GetMdClass; returnMdApi->base.base.destroy = MdDestroy; returnMdApi->base.update = Update; returnMdApi->base.doFinal = DoFinal; returnMdApi->base.getMdLength = GetMdLength; returnMdApi->base.getAlgoName = GetAlgoName; returnMdApi->spiObj = spiObj; *md = (HcfMd *)returnMdApi; return HCF_SUCCESS; } 代码讲解
时间: 2024-04-27 12:24:48 浏览: 142
VC++ string_format(const char* format, ...)
5星 · 资源好评率100%
这是一段 C 语言代码,主要是用来创建消息摘要(message digest)的对象。以下是对其主要部分的解释:
1. `HcfMdCreate` 函数接收两个参数,分别是算法名称 `algoName` 和一个指向 `HcfMd` 指针的指针 `md`。
2. 在函数内部,首先检查输入参数是否合法。如果算法名称为空或长度超过限制,或者 `md` 为空,就返回 `HCF_INVALID_PARAMS` 错误码。
3. 接着,调用 `FindAbility` 函数查找指定算法的实现函数。如果找不到,就返回 `HCF_NOT_SUPPORT` 错误码。
4. 如果找到了实现函数,就分配一个 `HcfMdImpl` 对象的内存,并将算法名称拷贝到该对象中。如果内存分配失败,就返回 `HCF_ERR_MALLOC` 错误码。
5. 接下来,调用实现函数创建一个 `HcfMdSpi` 对象,如果创建失败,就释放先前分配的内存,并返回实现函数返回的错误码。
6. 如果成功创建了 `HcfMdSpi` 对象,就将其与 `HcfMdImpl` 对象关联起来,并将 `HcfMdImpl` 对象转换为 `HcfMd` 对象,最后将 `HcfMd` 对象赋值给 `md` 指针。
7. 最后,返回 `HCF_SUCCESS` 表示创建成功。
该代码中还涉及到了一些其他函数,如 `HcfMalloc`、`HcfFree`、`strcpy_s` 等,这些函数的作用在此不做赘述。
阅读全文