aboutsummaryrefslogtreecommitdiffstats
path: root/argon2/is_algorithm.c
blob: b13c415f88528f95d5f185ea60a508ca48e2a579 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* See LICENSE file for copyright and license details. */
#include "../common.h"
#ifndef TEST


#define DECLARE_IS_ALGORITHM(ALGO)\
	unsigned\
	librecrypt__##ALGO##__is_algorithm(const char *settings, size_t len)\
	{\
		return len >= sizeof("$"#ALGO"$") - 1u && !strncmp(settings, "$"#ALGO"$", sizeof("$"#ALGO"$") - 1u);\
	}

IF__argon2i__SUPPORTED(DECLARE_IS_ALGORITHM(argon2i))
IF__argon2d__SUPPORTED(DECLARE_IS_ALGORITHM(argon2d))
IF__argon2id__SUPPORTED(DECLARE_IS_ALGORITHM(argon2id))
IF__argon2ds__SUPPORTED(DECLARE_IS_ALGORITHM(argon2ds))


#else


#define CHECK(ALGO, PREFIX, SUFFIX, RET)\
	EXPECT(librecrypt__##ALGO##__is_algorithm(PREFIX SUFFIX, sizeof(PREFIX) - 1u) == (RET))


int
main(void)
{
	SET_UP_ALARM();
	INIT_RESOURCE_TEST();

#if defined(SUPPORT_ARGON2I)
	CHECK(argon2i, "", "", 0u);
	CHECK(argon2i, "$argon2$", "", 0u);
	CHECK(argon2i, "$argon2i", "$", 0u);
	CHECK(argon2i, "$argon2i$", "", 1u);
	CHECK(argon2i, "$ARGON2I$", "", 0u);
	CHECK(argon2i, "$argon2i$x", "", 1u);
	CHECK(argon2i, "$argon2d$", "", 0u);
	CHECK(argon2i, "$argon2id$", "", 0u);
	CHECK(argon2i, "$argon2ds$", "", 0u);
#endif

#if defined(SUPPORT_ARGON2D)
	CHECK(argon2d, "", "", 0u);
	CHECK(argon2d, "$argon2$", "", 0u);
	CHECK(argon2d, "$argon2d", "$", 0u);
	CHECK(argon2d, "$argon2d$", "", 1u);
	CHECK(argon2d, "$ARGON2D$", "", 0u);
	CHECK(argon2d, "$argon2d$x", "", 1u);
	CHECK(argon2d, "$argon2i$", "", 0u);
	CHECK(argon2d, "$argon2id$", "", 0u);
	CHECK(argon2d, "$argon2ds$", "", 0u);
#endif

#if defined(SUPPORT_ARGON2ID)
	CHECK(argon2id, "", "", 0u);
	CHECK(argon2id, "$argon2$", "", 0u);
	CHECK(argon2id, "$argon2id", "$", 0u);
	CHECK(argon2id, "$argon2id$", "", 1u);
	CHECK(argon2id, "$ARGON2ID$", "", 0u);
	CHECK(argon2id, "$argon2id$x", "", 1u);
	CHECK(argon2id, "$argon2i$", "", 0u);
	CHECK(argon2id, "$argon2d$", "", 0u);
	CHECK(argon2id, "$argon2ds$", "", 0u);
#endif

#if defined(SUPPORT_ARGON2DS)
	CHECK(argon2ds, "", "", 0u);
	CHECK(argon2ds, "$argon2$", "", 0u);
	CHECK(argon2ds, "$argon2ds", "$", 0u);
	CHECK(argon2ds, "$argon2ds$", "", 1u);
	CHECK(argon2ds, "$ARGON2DS$", "", 0u);
	CHECK(argon2ds, "$argon2ds$x", "", 1u);
	CHECK(argon2ds, "$argon2i$", "", 0u);
	CHECK(argon2ds, "$argon2d$", "", 0u);
	CHECK(argon2ds, "$argon2id$", "", 0u);
#endif

	STOP_RESOURCE_TEST();
	return 0;
}


#endif