This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2745R7-Q1:PSA 加密库问题–SHA-256 返回零输出

Guru**** 2925550 points

Other Parts Discussed in Thread: SHA-256, UNIFLASH, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1651863/cc2745r7-q1-issue-with-psa-crypto-library-sha-256-returns-zero-output

器件型号: CC2745R7-Q1
主题中讨论的其他器件: SHA-256UNIFLASHSYSCONFIG

您好:
我们在 CC2745R7 上的 PSA 加密库时遇到问题。  我们能够成功初始化 PSA、 但当我们尝试计算 SHA-256 哈希时、该函数返回 0(表示无错误)、但生成的 256 位输出缓冲区完全用零填充。

您能否说明导致此行为的原因?  是否需要任何额外的初始化或配置步骤?

以下是我们代码的相关部分:

        // Check PSA crypto status
        status = KeyStore_PSA_init();
        if(status == PSA_SUCCESS)
        {
            // PSA initialized
            DEBUG(DL_INFO, "PSA crypto initialized");
            int_fast16_t hukRet = HSMLPF3_provisionHUK();
            if(hukRet == HSMLPF3_STATUS_SUCCESS)
            {
                DEBUG(DL_INFO, "HSMLPF3_provisionHUK initialized");
            }
            else
            {
                DEBUG(DL_ERROR, "HSMLPF3_provisionHUK failed. Status %d", hukRet);
            }

            bool dmaStatus = HWPAL_DMAResource_Init();
            DEBUG(DL_INFO, "HWPAL_DMAResource_Init : status %d", dmaStatus);

            uint8_t testData[8] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65};

            DEBUG(DL_INFO, "--------------------");
            DEBUG(DL_INFO, "testData : %s", convertHex(testData, 8));
            size_t hash_length;
            static uint8_t hash[32];
            memset(hash, 0xcc, 32);
            DEBUG(DL_INFO, "hash1    : %s", convertHex(hash, 16));
            DEBUG(DL_INFO, "hash2    : %s", convertHex(hash + 16, 16));
            status = psa_hash_compute(PSA_ALG_SHA_256, testData, 8, hash, 32, &hash_length);
            DEBUG(DL_INFO, "psa_hash_compute : status %d", status);
            DEBUG(DL_INFO, "hash_len : %d", hash_length);
            DEBUG(DL_INFO, "hash1    : %s", convertHex(hash, 16));
            DEBUG(DL_INFO, "hash2    : %s", convertHex(hash + 16, 16));

And here are the logs after running: 

0:00:00.037 I PSA crypto initialized
0:00:00.037 I HSMLPF3_provisionHUK initialized
0:00:00.037 I HWPAL_DMAResource_Init : status 1
0:00:02.036 I --------------------
0:00:02.037 I testData : 4869205468657265
0:00:02.037 I hash1    : CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0:00:02.037 I hash2    : CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0:00:02.037 I psa_hash_compute : status 0
0:00:02.037 I hash_len : 32
0:00:02.037 I hash1    : 00000000000000000000000000000000
0:00:02.037 I hash2    : 00000000000000000000000000000000

当我们将 keystore PSA_init () 函数更改为 PSA_CRrypto_init () 时,它的工作方式仍然相同。

为了进行测试、我们添加了以下代码以通过 PSA 加密模块生成随机数:

            uint8_t randomBuffer[8];
            memset(randomBuffer, 0xEE, 8);
            status = psa_generate_random(randomBuffer, 8);
            DEBUG(DL_INFO, "Random status: %d, %s", status, convertHex(randomBuffer, 8));

此代码在所有初始化后添加。  函数返回 0–成功、但缓冲区不变。 其中没有随机数据。

我还检查了 HSM 是否已加载 UniFlash、显示的是固件版本 v3.1.1。 我不知道有任何其他方法来检查 HSM 是否正确加载。 有什么问题吗? 是否有让 CC2745R7 使用 PSA 加密库的示例或手册?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    关于您的问题:
    一般来说,最好使用 我注意到你曾说过你尝试过的 pas_crypto_init ()。  
    您对 HUK 的配置也是正确的。
    您在此处尝试初始化 DMA 是否有特定原因? 这是由低级代码处理的、在此处不需要。
    如果 PSA_CRrypto_init 函数调用返回 0、则 HSM 应正常工作。


    此外、您能否分享有关您的项目的更多信息?
    具体地说、  
    您使用的 SDK。
    您的代码是否基于 SDK 中的示例?
    SysConfig 设置。
    项目输出的映射文件、以便检查使用了哪些库。
    您在项目的哪个位置使用此代码? 是什么呢? 还是在其他初始化之后?

    此致、
    Josh Alderson