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
|
/* 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)
{
#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
return 0;
}
#endif
|