/* taken from RFC-1321/Appendix A.3 */
/*
* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
/*
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights
* reserved.
*
* License to copy and use this software is granted provided that it is
* identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm"
* in all material mentioning or referencing this software or this function.
*
* License is also granted to make and use derivative works provided that such
* works are identified as "derived from the RSA Data Security, Inc. MD5
* Message-Digest Algorithm" in all material mentioning or referencing the
* derived work.
*
* RSA Data Security, Inc. makes no representations concerning either the
* merchantability of this software or the suitability of this software for
* any particular purpose. It is provided "as is" without express or implied
* warranty of any kind.
*
* These notices must be retained in any copies of any part of this
* documentation and/or software.
*/
#include "md5.h"
/*
* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform PROTO_LIST((UINT4[4], unsigned char[64]));
static void Encode PROTO_LIST
((unsigned char*, UINT4*, unsigned int));
static void Decode PROTO_LIST
((UINT4*, unsigned char*, unsigned int));
static void MD5_memcpy PROTO_LIST((POINTER, POINTER, unsigned int));
static void MD5_memset PROTO_LIST((POINTER, int, unsigned int));
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/*
* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/*
* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/*
* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is
* separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/*
* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
void esp_MD5Init(//context)
MD5_CTX* context)/* context */
{
context->count[0] = context->count[1] = 0;
/*
* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/*
* MD5 block update operation. Continues an MD5 message-digest operation,
* processing another message block, and updating the context.
*/
void
esp_MD5Update(//context, input, inputLen)
MD5_CTX* context,/* context */
unsigned char* input, /* input block */
unsigned int inputLen) /* length of input block */
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
/*
* Transform as many times as possible.
*/
if (inputLen >= partLen) {
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform(context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform(context->state, &input[i]);
index = 0;
}
else
i = 0;
/* Buffer remaining input */
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen - i);
}
/*
* MD5 finalization. Ends an MD5 message-digest operation, writing the the
* message digest and zeroizing the context.
*/
void
esp_MD5Final(//digest, context)
unsigned char digest[16], /* message digest */
MD5_CTX* context)/* context */
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode(bits, context->count, 8);
/*
* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
esp_MD5Update(context, PADDING, padLen);
/* Append length (before padding) */
esp_MD5Update(context, bits, 8);
/* Store state in digest */
Encode(digest, context->state, 16);
/*
* Zeroize sensitive information.
*/
MD5_memset((POINTER)context, 0, sizeof(*context));
}
/*
* MD5 basic transformation. Transforms state based on block.
*/
static void
MD5Transform(//state, block)
UINT4 state[4],
unsigned char block[64])
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3],
x[16];
Decode(x, block, 64);
/* Round 1 */
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(c, d, a, b, x[11],
没有合适的资源?快使用搜索试试~ 我知道了~
onenet对接token计算C语言实现
共80个文件
sample:13个
o:8个
c:8个
需积分: 50 32 下载量 194 浏览量
2022-03-27
11:02:07
上传
评论
收藏 147KB ZIP 举报
温馨提示
使用mqtt对接onenet时认证方式,token计算。计算方式采用纯C语言实现,可以移植到任何平台而不受限制
资源详情
资源评论
资源推荐
收起资源包目录
onenet_token.zip (80个子文件)
onenet_token
.gitignore 368B
.git
info
exclude 240B
objects
pack
pack-656d339012097860ee6d905d415c65c5a47a96a8.idx 1KB
pack-656d339012097860ee6d905d415c65c5a47a96a8.pack 5KB
85
3bacfee2ca50a96ac86f8df411e697ecf010bf 1022B
495cc20dbfefae52ae47429f2d9a13a1180e09 3KB
0f
a2fa6e8b6ff77290125afff9f6438b81acd180 4KB
e1
ce50dc5257be1e6b32bac5ac1b8385240856a4 399B
info
86
aa6378777aed386f4c05b5165679d8440653c1 314B
c1
21f5c598b88ee0a7f9786dea2f8c0e905166f3 508B
70
019dc87f2c35466342143939defd736fb3db43 1KB
7f
78ca749001a22358fb38334d13a1b450303684 304B
44
91b6ee480c840909b636c5beb70bfeb7c21893 1KB
4e
118d63ef9371b8dacfd4d92fcc3599b6a33c4c 3KB
b4
3b212b51d89fd17d041108e92a68c98b1e7fae 277B
67
f531b1643cdb02aedb4d13dffa3ffa0f0ec6fa 1KB
47
886bb1b9b0a86c8e78c897f36677e4b769b160 2KB
a7
3b7427802f9ca1d4d27828c8b1db30257ac084 416B
a9
33c1523038eedfc946a0e081a8f3354e6ff16d 502B
1b1a4fe61a7a0af63b01b372656d5c5fc9eb9c 366B
7d
78e5b0f6c8d7a484df0c38f525d87e44cddd1a 157B
81
1f0aa97c2407bc7386c0106963804346d84295 261B
f0
87e35228caeac867702f8c4e26ca0c7e2c0d04 4KB
65
95b07726e9d10c3c2b8ee504b4dbf3429fa1b9 518B
1a
b5f881d2a8efae8d9506c5331d9e26482ffffa 242B
tgitchangelist 0B
HEAD 23B
description 73B
packed-refs 114B
config 304B
index 2KB
refs
tags
remotes
origin
HEAD 32B
master 41B
heads
master 41B
COMMIT_EDITMSG 13B
hooks
commit-msg.sample 896B
pre-receive.sample 544B
fsmonitor-watchman.sample 5KB
pre-rebase.sample 5KB
prepare-commit-msg.sample 1KB
update.sample 4KB
pre-push.sample 1KB
pre-commit.sample 2KB
pre-merge-commit.sample 416B
post-update.sample 189B
push-to-checkout.sample 3KB
applypatch-msg.sample 478B
pre-applypatch.sample 424B
logs
HEAD 347B
refs
remotes
origin
HEAD 190B
master 151B
heads
master 347B
mbed.layout 3KB
mbed.cbp 2KB
obj
Debug
mbedtls
md5.o 10KB
sha256.o 9KB
sha1.o 10KB
token.o 7KB
sha.o 8KB
base64.o 9KB
hmac.o 6KB
main.o 4KB
bin
Debug
mbed.exe 103KB
mbedtls
base64.h 3KB
hmac.c 5KB
hmac.h 794B
sha.h 579B
token.h 561B
base64.c 10KB
sha256.h 696B
sha1.c 10KB
md5.h 3KB
token.c 4KB
sha1.h 872B
sha256.c 7KB
md5.c 12KB
sha.c 6KB
LICENSE 9KB
mbed.depend 3KB
main.c 588B
共 80 条
- 1
sunny.Bit
- 粉丝: 553
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0