Thread 中讨论的其他器件: UNIFLASH、 AES-128
工具/软件:
您好、
我想 验证外部文件(OriginalFile,而不是文件系统中的文件)的签名。
我 可以 通过 OTA 获取签名、并通过 UART 或 SPI 获取哈希值 (SHA256)。
obs、则证书已在闪存中。
所以,我有所有需要的部分,但我总是 在关闭文件时收到错误(即签名被验证时)。
下面是到目前为止我拥有的:
- 执行 OTA 以在文件系统上获取 OriginalFileSignature.bin。
- 将文件读取到变量 signedHash[256]中。
- 从其他外部源获取 OriginalFileHash、放入 unsignedHash[32]。
以下是我要做的事情:
- 创建/覆盖名为 Data.bin 的新安全文件。
- 将 unSignedHash[32]写入 Data.bin。
- 关闭文件、将 signedHash[256]作为 Signature、并使用公钥将 CertName 指向证书。
- 如果已正确关闭、则表示已验证签名。
因此、如果它已成功写入/关闭、则会确认签名。
FileHandle = sl_FsOpen((unsigned char *)FileName,
SL_FS_CREATE | SL_FS_CREATE_SECURE | SL_FS_CREATE_MAX_SIZE( MaxSize ) | SL_FS_OVERWRITE ,
&MasterToken);
if(FileHandle >= 0)
{
RetValWriteToFile = sl_FsWrite(FileHandle, 0, &unsignedHash[0], sizeof(unsignedHash));
RetValCloseFile = sl_FsClose(FileHandle, CERTNAME, (const unsigned char *)&signedHash[0], sizeof(signedHash));
}
Display_printf(dispHandle, 0, 0, "The file [%s] opened: %s \t[%d] \n\rWrote To File: %s \t[%d] \n\rClosed/Verified: %s \t[%d]", FileName,
(FileHandle >= 0) ? "Successfully" : "Error", FileHandle,
(RetValWriteToFile > 0) ? "Successfully" : "Error", RetValWriteToFile,
(RetValCloseFile == 0) ? "OK" : "Not ok", RetValCloseFile);
我不确定应该如何构建签名。 在 OpenSSL 中、我尝试了以下操作。
(请注意 是 )
- $ openssl dgst -SHA256 -binary -sign -out <Data>
- $ openssl dgst -sha1 -binary -sign -out <Data>
- $ openssl dgst -SHA256 -binary <Data> >
$ cat >>
$ openssl dgst -SHA256 -binary -sign -out
(这与我验证 CC3235SF 映像的方式相同)
然后我转身 到 c 中的一个数组(如“uint8_t signedHash[256]={0xf8、0x2C、...};“进行测试)。
基本上 是一个普通的安全文件、但我不知道如何使用 它们 (映像除外)。
我现在有“MasterToken=0",“,因为、因为我不知道如何使用/处理它。
关闭该文件时出现的错误是“-10289",–10289,这“这意味、意味着“SL_ERROR_FS_INFORT_SIGNATION_SECURITY_ALERT",“,</s>、
但当我直接使用 OpenSSL 验证时、工作正常。
希望对此问题提供任何帮助或建议!
此致
David