aboutsummaryrefslogblamecommitdiffstats
path: root/libhashsum_get_algorithm_string.c
blob: 5f910bebea50cf21405c74926ee9b7d46e74122a (plain) (tree)




































































































                                                                                                
/* See LICENSE file for copyright and license details. */
#include "common.h"


#if defined(__GNUC__)
__attribute__((__pure__))
#endif
static int
equiv(const char *a, const char *b)
{
	while (*a && *b && *b != '[') {
		if (tolower(*a) == tolower(*b) || (*b == '/' && (*a == '-' || *a == '_'))) {
			a++;
			b++;
		} else if (*b == '-' && !isdigit(b[-1])) {
			b++;
		} else {
			return 0;
		}
	}
	if (!strncasecmp(a, "sum", 3))
		a = &a[3];
	return !*a && (!*b || *b == '[');
}


int
libhashsum_get_algorithm_string(enum libhashsum_algorithm *algorithm_out, const char *algorithm)
{
	if (equiv(algorithm, "MD2"))
		*algorithm_out = LIBHASHSUM_MD2;
	else if (equiv(algorithm, "MD4"))
		*algorithm_out = LIBHASHSUM_MD4;
	else if (equiv(algorithm, "MD5"))
		*algorithm_out = LIBHASHSUM_MD5;
	else if (equiv(algorithm, "RIPEMD-128") || equiv(algorithm, "RMD-128"))
		*algorithm_out = LIBHASHSUM_RIPEMD_128;
	else if (equiv(algorithm, "RIPEMD-160") || equiv(algorithm, "RMD-160"))
		*algorithm_out = LIBHASHSUM_RIPEMD_160;
	else if (equiv(algorithm, "RIPEMD-256") || equiv(algorithm, "RMD-256"))
		*algorithm_out = LIBHASHSUM_RIPEMD_256;
	else if (equiv(algorithm, "RIPEMD-320") || equiv(algorithm, "RMD-320"))
		*algorithm_out = LIBHASHSUM_RIPEMD_320;
	else if (equiv(algorithm, "SHA-0"))
		*algorithm_out = LIBHASHSUM_SHA0;
	else if (equiv(algorithm, "SHA-1"))
		*algorithm_out = LIBHASHSUM_SHA1;
	else if (equiv(algorithm, "SHA-224") || equiv(algorithm, "SHA-2-224"))
		*algorithm_out = LIBHASHSUM_SHA_224;
	else if (equiv(algorithm, "SHA-256") || equiv(algorithm, "SHA-2-256"))
		*algorithm_out = LIBHASHSUM_SHA_256;
	else if (equiv(algorithm, "SHA-384") || equiv(algorithm, "SHA-2-384"))
		*algorithm_out = LIBHASHSUM_SHA_384;
	else if (equiv(algorithm, "SHA-512") || equiv(algorithm, "SHA-2-512"))
		*algorithm_out = LIBHASHSUM_SHA_512;
	else if (equiv(algorithm, "SHA-512/224") || equiv(algorithm, "SHA-2-512/224"))
		*algorithm_out = LIBHASHSUM_SHA_512_224;
	else if (equiv(algorithm, "SHA-512/256") || equiv(algorithm, "SHA-2-512/256"))
		*algorithm_out = LIBHASHSUM_SHA_512_256;
	else if (equiv(algorithm, "Keccak-224"))
		*algorithm_out = LIBHASHSUM_KECCAK_224;
	else if (equiv(algorithm, "Keccak-256"))
		*algorithm_out = LIBHASHSUM_KECCAK_256;
	else if (equiv(algorithm, "Keccak-384"))
		*algorithm_out = LIBHASHSUM_KECCAK_384;
	else if (equiv(algorithm, "Keccak-512"))
		*algorithm_out = LIBHASHSUM_KECCAK_512;
	else if (equiv(algorithm, "SHA-3-224"))
		*algorithm_out = LIBHASHSUM_SHA3_224;
	else if (equiv(algorithm, "SHA-3-256"))
		*algorithm_out = LIBHASHSUM_SHA3_256;
	else if (equiv(algorithm, "SHA-3-384"))
		*algorithm_out = LIBHASHSUM_SHA3_384;
	else if (equiv(algorithm, "SHA-3-512"))
		*algorithm_out = LIBHASHSUM_SHA3_512;
	else if (equiv(algorithm, "SHAKE-128[]"))
		*algorithm_out = LIBHASHSUM_SHAKE128;
	else if (equiv(algorithm, "SHAKE-256[]"))
		*algorithm_out = LIBHASHSUM_SHAKE256;
	else if (equiv(algorithm, "SHAKE-512[]"))
		*algorithm_out = LIBHASHSUM_SHAKE512;
	else if (equiv(algorithm, "RawSHAKE-128[]"))
		*algorithm_out = LIBHASHSUM_RAWSHAKE128;
	else if (equiv(algorithm, "RawSHAKE-256[]"))
		*algorithm_out = LIBHASHSUM_RAWSHAKE256;
	else if (equiv(algorithm, "RawSHAKE-512[]"))
		*algorithm_out = LIBHASHSUM_RAWSHAKE512;
	else if (equiv(algorithm, "Keccak[]"))
		*algorithm_out = LIBHASHSUM_KECCAK;
	else if (equiv(algorithm, "BLAKE-224[]") || equiv(algorithm, "B224[]"))
		*algorithm_out = LIBHASHSUM_BLAKE224;
	else if (equiv(algorithm, "BLAKE-256[]") || equiv(algorithm, "B256[]"))
		*algorithm_out = LIBHASHSUM_BLAKE256;
	else if (equiv(algorithm, "BLAKE-384[]") || equiv(algorithm, "B384[]"))
		*algorithm_out = LIBHASHSUM_BLAKE384;
	else if (equiv(algorithm, "BLAKE-512[]") || equiv(algorithm, "B512[]"))
		*algorithm_out = LIBHASHSUM_BLAKE512;
	else
		return 0;
	return 1;
}