use*_*774 3 c++ arduino sha hmac arduino-ide
我安装了此SHA库:https : //github.com/Cathedrow/Cryptosuite。我想使用Win上安装的Arduino IDE 1.6.7实现HMAC256。10,控制器为ATMEGA328。
我复制了他们网页中给出的示例。我还是新手,想测试一下。我在Arduino IDE中编写了此代码。
#include "sha256.h"
void setup() {
// put your setup code here, to run once:
uint8_t *hash;
//static const char hash[450]={};
//const char *hash; hash={};
Sha256.initHmac("hash key",8); // key, and length of key in bytes
Sha256.print("This is a message to hash");
hash = Sha256.resultHmac();
//Serial.print(hash,HEX);
}
void loop() {
// put your main code here, to run repeatedly:
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
从'const char *'到'const uint8_t * {aka const unsigned char *}'的无效转换'[-fpermissive]
我不知道为什么会这样。该示例是从库站点获取的原始数据。你能帮我吗?
编辑: 我试图从更改行:
Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)
至:
Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)
但是同样,编译失败。它说:
Arduino:1.6.7(Windows 10),开发板:“ Arduino / Genuino Uno”
在C:\ Program Files(x86)\ Arduino \ hardware \ arduino \ avr \ cores \ arduino / arduino.h:28:0中包含的文件中,
Run Code Online (Sandbox Code Playgroud)from C:\Users\e\Documents\Arduino\libraries\Sha\sha1_config.h:13, from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.h:4, from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.cpp:1:C:\ Users \ e \ Documents \ Arduino \ libraries \ Sha \ sha1.cpp:8:25:错误:变量'sha1InitState'必须为const才能通过' attribute((progmem ))'
uint8_t sha1InitState [] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)^退出状态1编译错误。
该报告将具有在文件>首选项中启用的“在编译过程中显示详细输出”的更多信息。
该initHmac函数签名是:
void initHmac(const uint8_t* secret, int secretLength);
Run Code Online (Sandbox Code Playgroud)
但是,您可以const char*保密。
解
尝试将secret变量强制转换为const uint8_t*(或const unsigned char*):
Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)
更新
要解决新的编译错误,只需在库源代码中const包含的所有声明之前添加PROGMEM。保险起见:
在Sha / sha1.cpp中(第11行)
const uint8_t sha1InitState[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)
在Sha / sha256.cpp中(第6行)
const uint32_t sha256K[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)
在Sha / sha256.cpp(第11行)中:
const uint8_t sha256InitState[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)