]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/test-database.c
Implement signing/verifying databases
[people/ms/libloc.git] / src / test-database.c
index 74e83ee08115976c262818e564419042e4b51406..9e16608c1297e7d3b2c7bad002b8b4ed8a718456 100644 (file)
@@ -40,6 +40,20 @@ const char* LICENSE = "CC";
 int main(int argc, char** argv) {
        int err;
 
+       // Open public key
+       FILE* public_key = fopen(ABS_SRCDIR "/examples/public-key.pem", "r");
+       if (!public_key) {
+               fprintf(stderr, "Could not open public key file: %s\n", strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       // Open private key
+       FILE* private_key = fopen(ABS_SRCDIR "/examples/private-key.pem", "r");
+       if (!private_key) {
+               fprintf(stderr, "Could not open private key file: %s\n", strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
        struct loc_ctx* ctx;
        err = loc_new(&ctx);
        if (err < 0)
@@ -47,7 +61,7 @@ int main(int argc, char** argv) {
 
        // Create a database
        struct loc_writer* writer;
-       err = loc_writer_new(ctx, &writer);
+       err = loc_writer_new(ctx, &writer, private_key);
        if (err < 0)
                exit(EXIT_FAILURE);
 
@@ -99,7 +113,7 @@ int main(int argc, char** argv) {
                exit(EXIT_FAILURE);
        }
 
-       FILE* f = fopen("test.db", "w");
+       FILE* f = fopen("test.db", "w+");
        if (!f) {
                fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));
                exit(EXIT_FAILURE);
@@ -129,6 +143,14 @@ int main(int argc, char** argv) {
                exit(EXIT_FAILURE);
        }
 
+       // Verify the database signature
+       err = loc_database_verify(db, public_key);
+       if (err) {
+               fprintf(stderr, "Could not verify the database: %d\n", err);
+               exit(EXIT_FAILURE);
+       }
+
+       // Try reading something from the database
        vendor = loc_database_get_vendor(db);
        if (!vendor) {
                fprintf(stderr, "Could not retrieve vendor\n");
@@ -143,5 +165,8 @@ int main(int argc, char** argv) {
 
        loc_unref(ctx);
 
+       fclose(private_key);
+       fclose(public_key);
+
        return EXIT_SUCCESS;
 }