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.
工具与软件:
为了使用 ECDH_generatePublicKey()函数、我根据文档编写了以下代码。
但是、此代码返回 ECDH_STATUS_resource_unavailable (-2)作为函数的返回值。
将值更改为密钥的值时返回相同的结果、该值应该能够生成其他密钥对。 使用时是否有问题?
""
void ecdhGenPubCallback (ECDH_Handle handle、int_fast16_t returnStatus、ECDH_Operation 操作、ECDH_OperationType OperationType)
{
/* LED 关闭*/
ECDH_Close (handle);
}
void * mainThread (void * arg0)
{
uint8_t myPrivateKeyingMaterial[curse_length]={0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x01};
uint8_t myPublicKeyingMaterial[2 * curse_length + 1]={0};
GPIO_init ();
/* LED 亮起*/
GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
//由于我们使用默认的 ECDH_Params、因此我们只需为该参数传递 NULL 即可。
ECDH_PARAMS_INIT (&PARAMS);
params.returnBehavior = ECDH_return_Behavior_callback;
Params.callbackFxn = ecdhGenPubCallback;
ecdhHandle = ECDH_open (0、&Params);
如果(!ecdhHandle){
//处理错误
}
//初始化 myPrivateKey 和 myPublicKey
CryptoKeyPlainText_initKey (&myPrivateKey、myPrivateKeyingMaterial、sizeof (myPrivateKeyingMaterial));
CryptoKeyPlaintext_initBlankKey (&myPublicKey、myPublicKeyingMaterial、sizeof (myPublicKeyingMaterial));
ECDH_OperationGeneratePublicKey_init (&operationGeneratePublicKey);
operGeneratePublicKey.curve =&ECCParams_NISTP256;
操作 GeneratePublicKey.myPrivateKey =&myPrivateKey;
OperationGeneratePublicKey.myPublicKey =&myPublicKey;
//生成 myPublicKey 的密钥材料并将其存储在 myPublicKeyingMaterial 中
operationResult = ECDH_generatePublicKey (ecdhHandle、&GeneroperationatePublicKey);
while (1)
{
睡眠(100);
}
}
尊敬的 Kaichi:
首先、您是否在使用其他加密计算? 您提到的错误(有关 更多详细信息、请参阅 ECDH_STATUS_resource_unavailable)表示您尝试计算 ECDH 时硬件不可用。
此外,我看不到您 在 ECDH_generatePublicKey () 函数之后使用 ECDH_OperationComputeSharedSecret ()。 计算共享密钥是 ECDH_generatePublicKey()函数的 POST 条件(要了解更多信息、请参阅 ECDH_generatePublicKey 和 ECDH_OperationComputeSharedSecret)。
请告诉我!
谢谢!
Isaac
尊敬的 Kaichi:
很抱歉响应出现延迟。 我将在本周结束时(12/06)作出答复。
谢谢!
Isaac
尊敬的 Kaichi:
ECDH 驱动程序需要为 CC2745R10-Q1使用 HSM 模块。 请参阅随附的图片:
如需了解更多信息、请查看 SDK 发行说明、以及 SDK 文档文件夹中包括的 HSM 文档。
请将 CryptoKeyPlaintext_initKey 替换为 CryptoKeyPlaintextHSM_initKey、如果有帮助、请告诉我!
谢谢!
Isaac
我将 CryptoKeyPlaintext_initKey 更改为 CryptoKeyPlaintextHSM_initKey、但结果没有变化。
此外、我还将 CryptoKeyPlaintext_initBlankKey 更改为 CryptoKeyPlaintextHSM_initBlankKey。
您的环境中的此更改是否获得了正确的结果?
如果是、不是代码、而是 SysConfig 设置等有问题吗?
我的 SysConfig 设置如下图所示。
尊敬的 Kaichi:
对于延迟响应、我们深表歉意。
请添加预定义符号"DeviceFamily_CC27XX"和"USE_HSM"。 为此、请右键点击工程->"Properties"->"Build"->"Arm Compiler"->"Predefined Symbols"。
此外、在调用 ECDH_open()之前添加 ECDH_init()。 完成这些更改后、我能够成功运行您的代码。
谢谢!
Isaac
您好 Isaac:
感谢您的答复。 我已添加
ECDH_init()并能够确认回调已返回。
但是、returnStatus 的值为 ECDH_STATUS_ERROR (-1)、该操作不成功。
向预定义符号中添加"DeviceFamily_CC27XX"和"USE_HSM"、是否正确、如下图所示?
我认为我错了、因为我在编译过程中收到警告、但如何正确设置它?
对重复的问题表示抱歉、但请做出回应。
尊敬的 Kaichi:
我的道歉,我应该更具描述性。 输入预定义时、不需要${}。 请参见下图:
让我知道这是否对你有用!
谢谢!
Isaac
尊敬的 Kaichi:
此外、还有另一个澄清问题。 我在 ECDH_PARAMS_INIT 和 ECDH_OPEN 之前添加了 ECDH_INIT。 请参阅下图:
谢谢!
Isaac
尊敬的 Kaichi:
是的、我在我的环境中运行您的代码、并且没有收到任何错误标志。 errFlag 和 operationResult 标志在代码的整个持续时间内保持为零。 我将 errFlag 和 operationResults 标志更改为全局变量、以便我可以在整个代码中执行操作。
现在看到错误-1、对吧? 如果在 ECDH_generatePubKey 和 ECDH_computeSharedSecret 上设置断点、会发生什么? 您能否设置一些断点、观察 operationResult 和 errFlag 变量并向我传达您看到的内容?
谢谢!
Isaac
您好 Isaac:
至于在 ECDH_generatePublicKey()完成时 operationResult 的值、在我的环境中没有问题。
调用回调函数 ecdhGenPubCallback()时、参数 returnStatus 的值为-1。
ECDH_computeSharedSecret()完成时的 operationResult 的值为-41。
不调用 ecdhComputeShareSecCallback()的回调函数
如果我缺少任何其他信息、请告知我。
尊敬的 Kaichi:
我将于明日(12/17)作出回应。 对于延迟、我们深表歉意。
谢谢!
Isaac
尊敬的 Kaichi:
我在最后看到相同的错误代码 这是非常特殊的,因为我找不到任何对错误代码-41的引用。 在边注上,我没有看到 ECDHGenPubCallBack ()返回-1状态。
我目前仍在调试问题。 感谢您对我的耐心!
我将在星期五(12/20)结束前提供回复。
谢谢!
Isaac
尊敬的 Kaichi:
我还在调试这个问题。 我仍然对公钥没有任何问题。 我仍然收到-41的共享密钥。 此时共享密钥的问题与公钥的八位字节有关。 我在想
1.公钥有问题。 我没有看到任何问题、但您是。 我想可能有问题,但我没有观察到问题。
2.私人密钥材料不正确。
3. ECDH 驱动程序的大问题。
对于延迟、我们深表歉意。
谢谢!
Isaac
您好 Isaac:
感谢您的答复。
如果需要任何其他信息来解决此问题、请告诉我。
很抱歉、我们感谢您在解决该问题方面的合作。
尊敬的 Kaichi:
由于节假日、答复被推迟。
出现此错误的原因是公钥(theirPublicKey)。 在您的代码中、不会收到收件人的公钥。 此外、需要将 irPublicKey 的第一个字节设置为0x04。 由于尚未执行此操作、因此会发生错误-41。 当出现无效的公钥时、状态会出现。 这意味着公钥不是以0x04开头。 如果您将0x04添加到 irPublicKey 中的字节0、则会收到-40错误。 当公共密钥大小无效时会出现此状态。
您是否有可以从中接收公共密钥的设备? 如果是、请填充 irPublicKey 指针、并将第一个字节(字节0)设置为0x04。
再次对延误深表歉意、感谢您的耐心。
谢谢!
Isaac
您好 Isaac:
我通过在 theirPublicKeyMaterial 的椭圆曲线上输入一个点来解决这个问题。
非常感谢您长期以来的持续支持。 我真的很感激。