]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
istream-decrypt: Ensure we can open short v1 files
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 27 Jun 2016 10:21:05 +0000 (13:21 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 27 Jun 2016 10:21:05 +0000 (13:21 +0300)
src/lib-dcrypt/sample-v1_short.asc [new file with mode: 0644]
src/lib-dcrypt/test-stream.c

diff --git a/src/lib-dcrypt/sample-v1_short.asc b/src/lib-dcrypt/sample-v1_short.asc
new file mode 100644 (file)
index 0000000..4bc4c06
--- /dev/null
@@ -0,0 +1,4 @@
+Q1JZUFRFRAMHAQCtAEMDAA+5INzRNr5OAicv3XI4jh//ufjZN9yYr7mElHKNGY+D
+D2ziqHhPKVra6JzBzZvfySntDnDvdLAomafpDVlESMlkACB8mhA56i5P7XPoHdP/
+w/oi6kooNSk5rd57+OqFiwD6TwAgu4C6eZWV+Spojlk8eOAw784ySgMHK8gDrXhA
+Jwg34GcAIPX4RmqXh+7QTAQWtGNHQvjqSygBxSUYkQ3KfPLMymKvAACMLy6/
index 9031bd1c35a92aa46b50fe2bb935bb2ef03d7dfd..19f4b59a53bda7d8102790066ec5bb0ff8eec11f 100644 (file)
@@ -41,6 +41,7 @@ static const char key_v2_pub[] = "-----BEGIN PUBLIC KEY-----\n" \
 "-----END PUBLIC KEY-----";
 
 static const char test_sample_v1_hash[] = "1d7cc2cc1f1983f76241cc42389911e88590ad58cf9d54cafeb5b198d3723dd1";
+static const char test_sample_v1_short_hash[] = "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c";
 static const char test_sample_v2_hash[] = "2e31218656dd34db65b321688bf418dee4ee785e99eb9c21e0d29b4af27a863e";
 
 static struct dcrypt_keypair test_v1_kp;
@@ -81,6 +82,41 @@ void test_static_v1_input(void)
        test_end();
 }
 
+static
+void test_static_v1_input_short(void)
+{
+       ssize_t siz;
+       const struct hash_method *hash = hash_method_lookup("sha256");
+       unsigned char hash_ctx[hash->context_size];
+       unsigned char hash_dgst[hash->digest_size];
+       hash->init(hash_ctx);
+
+       test_begin("test_static_v1_input_short");
+
+       struct istream *is_1 = i_stream_create_file(DCRYPT_SRC_DIR"/sample-v1_short.asc", IO_BLOCK_SIZE);
+       struct istream *is_2 = i_stream_create_base64_decoder(is_1);
+       i_stream_unref(&is_1);
+       struct istream *is_3 = i_stream_create_decrypt(is_2, test_v1_kp.priv);
+       i_stream_unref(&is_2);
+       struct istream *is_4 = i_stream_create_hash(is_3, hash, hash_ctx);
+       i_stream_unref(&is_3);
+
+       while((siz = i_stream_read(is_4))>0) { i_stream_skip(is_4, siz); }
+
+       if (is_4->stream_errno != 0)
+               i_debug("error: %s", i_stream_get_error(is_4));
+
+       test_assert(is_4->stream_errno == 0);
+
+       i_stream_unref(&is_4);
+
+       hash->result(hash_ctx, hash_dgst);
+
+       test_assert(strcmp(test_sample_v1_short_hash, binary_to_hex(hash_dgst, sizeof(hash_dgst))) == 0);
+
+       test_end();
+}
+
 static
 void test_static_v2_input(void)
 {
@@ -227,6 +263,7 @@ int main(void) {
 
        static void (*test_functions[])(void) = {
                test_static_v1_input,
+               test_static_v1_input_short,
                test_static_v2_input,
                test_write_read_v1,
                test_write_read_v2,