以下代码引用( C语言中的HMAC_SHA1加密方法-源码 )历程,并删掉测试函数,便于自己理解罢了.详细请参考原文.(本历程可在NodeMCU上运行 Arduino IDE版本:1.8.9)
删除的函数后的:
1. #define NUM_TEST_CASES 10//有多少条要加密的
2. int test_case_length[];//消息内容长度
3. unsigned char test_cases[];//消息内容
4. int key_lengths[] ;//key长度
5. unsigned char keys[];//key内容
6. int get_testcase(int test_case, unsigned char *plaintext, unsigned char *key, int *key_length_ptr);//用于在同一个数组包涵多个消息 \ key时选择用返回为消息内容长度 我只用单一个所以无用
7.
#ifdef HMAC_DEBUG
Debug out (unsigned char *label, unsigned char *data, int data_length);//用于调试输出
#endif
8. 所有
#ifdef HMAC_DEBUG
***************
#endif
删除后的hmac_sha1.c文件:
#include
#include
#define MAX_MESSAGE_LENGTH 4096//最大消息长度
/********************************************/
/* Test Cases */
/* An array of test cases taken from the */
/* 802.11i specification. */
/********************************************/
unsigned char digest[20]={0};//最终生成的缓存 算完之后是 20 字节的摘要信息
/*****************************/
/**** Function Prototypes ****/
/*****************************/
unsigned long int ft(
int t,
unsigned long int x,
unsigned long int y,
unsigned long int z
);
int get_testcase( int test_case,
unsigned char *plaintext,
unsigned char *key,
int *key_length_ptr);
void sha1 (
unsigned char *message,
int message_length,
unsigned char *digest
);
/****************************************/
/* sha1() */
/* Performs the NIST SHA-1 algorithm */
/****************************************/
unsigned long int ft(
int t,
unsigned long int x,
unsigned long int y,
unsigned long int z
)
{
unsigned long int a,b,c;
if (t < 20) {
a = x & y;
b = (~x) & z;
c = a ^ b;
}
else if (t < 40) {
c = x ^ y ^ z;
}
else if (t <