#ifndef UTILS_MD5_H_ #define UTILS_MD5_H_ #include "stdio.h" #include "stdint.h" #include "stdlib.h" #include "string.h" typedef struct { uint32_t total[2]; /*!< number of bytes processed */ uint32_t state[4]; /*!< intermediate digest state */ unsigned char buffer[64]; /*!< data block being processed */ } iot_md5_context; /** * @brief 初始化MD5上下文 * * @param ctx MD5上下文指针 */ void utils_md5_init(iot_md5_context *ctx); /** * @brief 清空MD5上下文 * * @param ctx MD5上下文指针 */ void utils_md5_free(iot_md5_context *ctx); /** * @brief 拷贝MD5上下文 * * @param dst 目标MD5上下文 * @param src 源MD5上下文 */ void utils_md5_clone(iot_md5_context *dst, const iot_md5_context *src); /** * @brief 设置MD5上下文 * * @param ctx MD5上下文指针 */ void utils_md5_starts(iot_md5_context *ctx); /** * @brief MD5过程缓冲区 * * @param ctx MD5上下文指针 * @param input 输入数据 * @param ilen 输入数据长度 */ void utils_md5_update(iot_md5_context *ctx, const unsigned char *input, size_t ilen); /** * @brief MD5数据 * * @param ctx MD5上下文指针 * @param output MD5校验和结果 */ void utils_md5_finish(iot_md5_context *ctx, unsigned char output[16]); /* 内部使用 */ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]); /** * @brief Output = MD5( input buffer ) * * @param input 输入数据 * @param ilen 输入数据长度 * @param output MD5校验和结果 */ void utils_md5(const unsigned char *input, size_t ilen, unsigned char output[16]); int8_t utils_hb2hex(uint8_t hb); #endif