nshlib: Implementation of modifying command md5

Simplify the "cmd_codecs_proc" md5 related framework and modify the implementation of the command md5:

Signed-off-by: wangmingrong <wangmingrong@xiaomi.com>
This commit is contained in:
wangmingrong
2023-08-30 19:36:20 +08:00
committed by Xiang Xiao
parent a4ab405faa
commit 2459476b65

View File

@@ -96,8 +96,7 @@
#endif
#if defined(HAVE_CODECS_URLENCODE) || defined(HAVE_CODECS_URLDECODE) || \
defined(HAVE_CODECS_BASE64ENC) || defined(HAVE_CODECS_BASE64DEC) || \
defined(HAVE_CODECS_HASH_MD5)
defined(HAVE_CODECS_BASE64ENC) || defined(HAVE_CODECS_BASE64DEC)
# define NEED_CMD_CODECS_PROC 1
#endif
@@ -184,18 +183,6 @@ static void b64dec_cb(FAR char *src, int srclen, FAR char *dest,
}
#endif
/****************************************************************************
* Name: md5_cb
****************************************************************************/
#ifdef HAVE_CODECS_HASH_MD5
static void md5_cb(FAR char *src, int srclen, FAR char *dest,
FAR int *destlen, int mode)
{
md5_update((MD5_CTX *)dest, (unsigned char *)src, srclen);
}
#endif
/****************************************************************************
* Name: calc_codec_buffsize
****************************************************************************/
@@ -235,14 +222,6 @@ static int cmd_codecs_proc(FAR struct nsh_vtbl_s *vtbl, int argc,
FAR char **argv, uint8_t mode,
codec_callback_t func)
{
#ifdef HAVE_CODECS_HASH_MD5
static const unsigned char hexchars[] = "0123456789abcdef";
MD5_CTX ctx;
unsigned char mac[16];
FAR unsigned char *src;
FAR char *dest;
#endif
FAR char *localfile = NULL;
FAR char *srcbuf = NULL;
FAR char *destbuf = NULL;
@@ -318,13 +297,6 @@ static int cmd_codecs_proc(FAR struct nsh_vtbl_s *vtbl, int argc,
goto errout;
}
#ifdef HAVE_CODECS_HASH_MD5
if (mode == CODEC_MODE_HASH_MD5)
{
md5_init(&ctx);
}
#endif
if (isfile)
{
/* Get the local file name */
@@ -403,41 +375,13 @@ static int cmd_codecs_proc(FAR struct nsh_vtbl_s *vtbl, int argc,
memset(destbuf, 0, buflen);
if (func)
{
#ifdef HAVE_CODECS_HASH_MD5
if (mode == CODEC_MODE_HASH_MD5)
{
func(srcbuf, ret, (char *)&ctx, &buflen, 0);
}
else
#endif
{
func(srcbuf, ret, destbuf, &buflen, iswebsafe ? 1 : 0);
nsh_output(vtbl, "%s", destbuf);
}
func(srcbuf, ret, destbuf, &buflen, iswebsafe ? 1 : 0);
nsh_output(vtbl, "%s", destbuf);
}
buflen = calc_codec_buffsize(srclen + 2, mode);
}
#ifdef HAVE_CODECS_HASH_MD5
if (mode == CODEC_MODE_HASH_MD5)
{
int i;
md5_final(mac, &ctx);
src = mac;
dest = destbuf;
for (i = 0; i < 16; i++, src++)
{
*dest++ = hexchars[(*src) >> 4];
*dest++ = hexchars[(*src) & 0x0f];
}
*dest = '\0';
nsh_output(vtbl, "%s\n", destbuf);
}
#endif
ret = OK;
goto exit;
}
@@ -456,28 +400,7 @@ static int cmd_codecs_proc(FAR struct nsh_vtbl_s *vtbl, int argc,
memset(destbuf, 0, buflen);
if (func)
{
#ifdef HAVE_CODECS_HASH_MD5
if (mode == CODEC_MODE_HASH_MD5)
{
int i;
func(srcbuf, srclen, (char *)&ctx, &buflen, 0);
md5_final(mac, &ctx);
src = mac;
dest = destbuf;
for (i = 0; i < 16; i++, src++)
{
*dest++ = hexchars[(*src) >> 4];
*dest++ = hexchars[(*src) & 0x0f];
}
*dest = '\0';
}
else
#endif
{
func(srcbuf, srclen, destbuf, &buflen, iswebsafe ? 1 : 0);
}
func(srcbuf, srclen, destbuf, &buflen, iswebsafe ? 1 : 0);
}
nsh_output(vtbl, "%s\n", destbuf);
@@ -572,7 +495,29 @@ int cmd_base64decode(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
#ifdef HAVE_CODECS_HASH_MD5
int cmd_md5(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
{
return cmd_codecs_proc(vtbl, argc, argv, CODEC_MODE_HASH_MD5, md5_cb);
int i;
int ret = OK;
unsigned char digest[16];
if (argc == 3 && !strncmp(argv[1], "-f", 2))
{
ret = md5_file(argv[2], digest);
if (ret < 0)
{
return ret;
}
}
else
{
md5_sum((unsigned char *)argv[1], strlen(argv[1]), digest);
}
for (i = 0; i < 16; i++)
{
nsh_output(vtbl, "%02x", digest[i]);
}
return ret;
}
#endif