#include <pakfire/private.h>
#include <pakfire/util.h>
+int pakfire_digest_get_by_name(const char* name) {
+ static const struct _pakfire_digest_name {
+ const char* name;
+ int type;
+ } names[] = {
+ // SHA-2
+ { "sha2-512", PAKFIRE_DIGEST_SHA2_512, },
+ { "sha2-256", PAKFIRE_DIGEST_SHA2_256, },
+
+ // BLAKE2
+ { "blake2b512", PAKFIRE_DIGEST_BLAKE2B512, },
+ { "blake2s256", PAKFIRE_DIGEST_BLAKE2S256, },
+
+ // SHA-3
+ { "sha3-512", PAKFIRE_DIGEST_SHA3_512, },
+ { "sha3-256", PAKFIRE_DIGEST_SHA3_256, },
+
+ { NULL, 0, },
+ };
+
+ // Check that name is not NULL
+ if (!name) {
+ errno = EINVAL;
+ return 0;
+ }
+
+ for (const struct _pakfire_digest_name* n = names; n->name; n++) {
+ if (strcmp(n->name, name) == 0)
+ return n->type;
+ }
+
+ return 0;
+}
+
size_t pakfire_digest_length(const enum pakfire_digest_types digest) {
switch (digest) {
case PAKFIRE_DIGEST_SHA3_512:
return r;
}
+static int test_get_by_name(const struct test* t) {
+ // Positive cases
+ ASSERT(pakfire_digest_get_by_name("sha2-512") == PAKFIRE_DIGEST_SHA2_512);
+ ASSERT(pakfire_digest_get_by_name("sha2-256") == PAKFIRE_DIGEST_SHA2_256);
+ ASSERT(pakfire_digest_get_by_name("blake2b512") == PAKFIRE_DIGEST_BLAKE2B512);
+ ASSERT(pakfire_digest_get_by_name("blake2s256") == PAKFIRE_DIGEST_BLAKE2S256);
+ ASSERT(pakfire_digest_get_by_name("sha3-512") == PAKFIRE_DIGEST_SHA3_512);
+ ASSERT(pakfire_digest_get_by_name("sha3-256") == PAKFIRE_DIGEST_SHA3_256);
+
+ // Negative cases
+ ASSERT(pakfire_digest_get_by_name("XXX") == 0);
+ ASSERT(pakfire_digest_get_by_name(NULL) == 0);
+
+ return EXIT_SUCCESS;
+
+FAIL:
+ return EXIT_FAILURE;
+}
+
int main(int argc, const char* argv[]) {
testsuite_add_test(test_init);
testsuite_add_test(test_random);
+ testsuite_add_test(test_get_by_name);
return testsuite_run(argc, argv);
}