]> git.ipfire.org Git - people/ms/libloc.git/commitdiff
format: Reduce the length of the signature header
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 May 2020 12:22:50 +0000 (12:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 May 2020 12:22:50 +0000 (12:22 +0000)
Since a single signature can only be up to 2048 bytes long,
we do not need 32 bits to tell us how many of those bytes
are being used.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/database.c
src/loc/format.h
src/writer.c

index 659c57b5fce97653da0d7c6cf16df50caf4c57f8..d9192785032ca9552a21715eace9d570b27bca93 100644 (file)
@@ -274,8 +274,8 @@ static int loc_database_read_header_v1(struct loc_database* db) {
        db->description = be32toh(header.description);
        db->license     = be32toh(header.license);
 
-       db->signature1_length = be32toh(header.signature1_length);
-       db->signature2_length = be32toh(header.signature2_length);
+       db->signature1_length = be16toh(header.signature1_length);
+       db->signature2_length = be16toh(header.signature2_length);
 
        // Read signatures
        if (db->signature1_length) {
index ce0d2ff3899badab23ca0b7cb075cda431cd12e2..a04c089491772bee44c8043f641f110059934ff7 100644 (file)
@@ -75,17 +75,14 @@ struct loc_database_header_v1 {
        uint32_t pool_offset;
        uint32_t pool_length;
 
-       // Some padding
-       char padding1[2];
-
        // Signatures
-       uint32_t signature1_length;
-       uint32_t signature2_length;
+       uint16_t signature1_length;
+       uint16_t signature2_length;
        char signature1[LOC_SIGNATURE_MAX_LENGTH];
        char signature2[LOC_SIGNATURE_MAX_LENGTH];
 
        // Add some padding for future extensions
-       char padding2[32];
+       char padding[32];
 };
 
 struct loc_database_network_node_v1 {
index db9ec1a1561c23048f8e5e00e74bbf5428f2ddb4..5939cff0fd5cc42ec20e16a10a7c44b89dcb4ad1 100644 (file)
@@ -531,7 +531,7 @@ static int loc_database_write_countries(struct loc_writer* writer,
 static int loc_writer_create_signature(struct loc_writer* writer,
                struct loc_database_header_v1* header, FILE* f, EVP_PKEY* private_key,
                char* signature, size_t* length) {
-       DEBUG(writer->ctx, "Signing database...\n");
+       DEBUG(writer->ctx, "Creating signature...\n");
 
        // Read file from the beginning
        rewind(f);
@@ -649,8 +649,7 @@ LOC_EXPORT int loc_writer_write(struct loc_writer* writer, FILE* f, enum loc_dat
        header.signature2_length = 0;
 
        // Clear the padding
-       memset(header.padding1, '\0', sizeof(header.padding1));
-       memset(header.padding2, '\0', sizeof(header.padding2));
+       memset(header.padding, '\0', sizeof(header.padding));
 
        int r;
        off_t offset = 0;
@@ -718,13 +717,19 @@ LOC_EXPORT int loc_writer_write(struct loc_writer* writer, FILE* f, enum loc_dat
 
        // Copy the signatures into the header
        if (writer->signature1_length) {
+               DEBUG(writer->ctx, "Copying first signature of %zu byte(s)\n",
+                       writer->signature1_length);
+
                memcpy(header.signature1, writer->signature1, writer->signature1_length);
-               header.signature1_length = htobe32(writer->signature1_length);
+               header.signature1_length = htobe16(writer->signature1_length);
        }
 
        if (writer->signature2_length) {
+               DEBUG(writer->ctx, "Copying second signature of %zu byte(s)\n",
+                       writer->signature1_length);
+
                memcpy(header.signature2, writer->signature2, writer->signature2_length);
-               header.signature2_length = htobe32(writer->signature2_length);
+               header.signature2_length = htobe16(writer->signature2_length);
        }
 
        // Write the header