X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2FT357-index-decryption.sh;h=a7497489293b6d9e7df7d835385dbef0d9d92e41;hp=fcecb1d9f4b19f6c76cc7be8d6e61b8a636e5029;hb=HEAD;hpb=29648a137c5807135ab168917b4a51d5e19e51c2 diff --git a/test/T357-index-decryption.sh b/test/T357-index-decryption.sh index fcecb1d9..a7497489 100755 --- a/test/T357-index-decryption.sh +++ b/test/T357-index-decryption.sh @@ -4,12 +4,12 @@ test_description='indexing decrypted mail' . $(dirname "$0")/test-lib.sh || exit 1 +. $NOTMUCH_SRCDIR/test/test-lib-emacs.sh || exit 1 ################################################## +test_require_emacs add_gnupg_home -# get key fingerprint -FINGERPRINT=$(gpg --no-tty --list-secret-keys --with-colons --fingerprint | grep '^fpr:' | cut -d: -f10) # create a test encrypted message test_begin_subtest 'emacs delivery of encrypted message' @@ -50,11 +50,8 @@ test_expect_equal \ test_begin_subtest "show the message body of the encrypted message" notmuch dump wumpus -output=$(notmuch show wumpus | awk '/^\014part}/{ f=0 }; { if (f) { print $0 } } /^\014part{ ID: 3/{ f=1 }') +output=$(notmuch show wumpus | notmuch_show_part 3) expected='This is a test encrypted message with a wumpus.' -if [ $NOTMUCH_HAVE_GMIME_SESSION_KEYS -eq 0 ]; then - test_subtest_known_broken -fi test_expect_equal \ "$output" \ "$expected" @@ -80,6 +77,21 @@ test_expect_equal \ "$output" \ "$expected" +# show the message using stashing decryption +test_begin_subtest "stash decryption during show" +output=$(notmuch show --decrypt=stash tag:encrypted subject:002 | notmuch_show_part 3) +expected='This is a test encrypted message with a wumpus.' +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "search should now find the contents" +output=$(notmuch search wumpus) +expected='thread:0000000000000003 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (encrypted inbox unread)' +test_expect_equal \ + "$output" \ + "$expected" + # try reinserting it with decryption, should appear again, but now we # have two copies of the message: test_begin_subtest "message cleartext is present after reinserting with --decrypt=true" @@ -102,12 +114,10 @@ test_expect_equal \ "$expected" # try inserting it with decryption, should appear as a single copy -# (note: i think thread id skips 4 because of duplicate message-id -# insertion, above) test_begin_subtest "message cleartext is present with insert --decrypt=true" notmuch insert --folder=sent --decrypt=true <<<"$contents" -output=$(notmuch search wumpus) -expected='thread:0000000000000005 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (encrypted inbox unread)' +output=$(notmuch search wumpus | notmuch_search_sanitize) +expected='thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (encrypted inbox unread)' test_expect_equal \ "$output" \ "$expected" @@ -117,9 +127,9 @@ test_expect_equal \ test_begin_subtest 'tagging all messages' test_expect_success 'notmuch tag +blarney "encrypted message"' test_begin_subtest "verify that tags have not changed" -output=$(notmuch search tag:blarney) -expected='thread:0000000000000001 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 001 (blarney encrypted inbox) -thread:0000000000000005 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (blarney encrypted inbox unread)' +output=$(notmuch search tag:blarney | notmuch_search_sanitize) +expected='thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 001 (blarney encrypted inbox) +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (blarney encrypted inbox unread)' test_expect_equal \ "$output" \ "$expected" @@ -128,14 +138,14 @@ test_expect_equal \ test_begin_subtest 'reindex old messages' test_expect_success 'notmuch reindex --decrypt=true tag:encrypted and not property:index.decryption=success' test_begin_subtest "reindexed encrypted message, including cleartext" -output=$(notmuch search wumpus) +output=$(notmuch search wumpus | notmuch_search_sanitize) test_expect_equal \ "$output" \ "$expected" # and the same search, but by property ($expected is untouched): test_begin_subtest "emacs search by property for both messages" -output=$(notmuch search property:index.decryption=success) +output=$(notmuch search property:index.decryption=success | notmuch_search_sanitize) test_expect_equal \ "$output" \ "$expected" @@ -144,10 +154,7 @@ test_expect_equal \ test_begin_subtest 'reindex in auto mode' test_expect_success 'notmuch reindex tag:encrypted and property:index.decryption=success' test_begin_subtest "reindexed encrypted messages, should not have changed" -output=$(notmuch search wumpus) -if [ $NOTMUCH_HAVE_GMIME_SESSION_KEYS -eq 0 ]; then - test_subtest_known_broken -fi +output=$(notmuch search wumpus | notmuch_search_sanitize) test_expect_equal \ "$output" \ "$expected" @@ -181,9 +188,32 @@ test_expect_equal \ # ensure that the tags remain even when we are dropping the cleartext. test_begin_subtest "verify that tags remain without cleartext" -output=$(notmuch search tag:blarney) -expected='thread:0000000000000001 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 001 (blarney encrypted inbox) -thread:0000000000000005 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (blarney encrypted inbox unread)' +output=$(notmuch search tag:blarney | notmuch_search_sanitize) +expected='thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 001 (blarney encrypted inbox) +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test encrypted message for cleartext index 002 (blarney encrypted inbox unread)' +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "index cleartext without keeping session keys" +test_expect_success "notmuch reindex --decrypt=nostash tag:blarney" + +test_begin_subtest "Ensure that the indexed terms are present" +output=$(notmuch search wumpus | notmuch_search_sanitize) +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "show one of the messages with --decrypt=true" +output=$(notmuch show --decrypt=true thread:0000000000000001 | notmuch_show_part 3) +expected='This is a test encrypted message with a wumpus.' +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "Ensure that we cannot show the message with --decrypt=auto" +output=$(notmuch show thread:0000000000000001 | notmuch_show_part 3) +expected='Non-text part: application/octet-stream' test_expect_equal \ "$output" \ "$expected" @@ -192,10 +222,13 @@ add_email_corpus crypto test_begin_subtest "indexing message fails when secret key not available" notmuch reindex --decrypt=true id:simple-encrypted@crypto.notmuchmail.org -output=$(notmuch dump ) -expected='#notmuch-dump batch-tag:3 config,properties,tags -+encrypted +inbox +unread -- id:simple-encrypted@crypto.notmuchmail.org -#= simple-encrypted@crypto.notmuchmail.org index.decryption=failure' +output=$(notmuch dump | LC_ALL=C sort) +expected='#= simple-encrypted@crypto.notmuchmail.org index.decryption=failure +#notmuch-dump batch-tag:3 config,properties,tags ++encrypted +inbox +unread -- id:basic-encrypted@crypto.notmuchmail.org ++encrypted +inbox +unread -- id:encrypted-rfc822-attachment@crypto.notmuchmail.org ++encrypted +inbox +unread -- id:encrypted-signed@crypto.notmuchmail.org ++encrypted +inbox +unread -- id:simple-encrypted@crypto.notmuchmail.org' test_expect_equal \ "$output" \ "$expected" @@ -213,11 +246,8 @@ notmuch restore <') expected='> This is a top sekrit message.' -if [ $NOTMUCH_HAVE_GMIME_SESSION_KEYS -eq 0 ]; then - test_subtest_known_broken -fi test_expect_equal \ "$output" \ "$expected" test_begin_subtest "notmuch show should show cleartext if session key is present" -output=$(notmuch show id:simple-encrypted@crypto.notmuchmail.org | awk '/^\014part}/{ f=0 }; { if (f) { print $0 } } /^\014part{ ID: 3/{ f=1 }') +output=$(notmuch show id:simple-encrypted@crypto.notmuchmail.org | notmuch_show_part 3) expected='This is a top sekrit message.' -if [ $NOTMUCH_HAVE_GMIME_SESSION_KEYS -eq 0 ]; then - test_subtest_known_broken -fi test_expect_equal \ "$output" \ "$expected" test_begin_subtest "notmuch show should show nothing if decryption is explicitly disallowed" -output=$(notmuch show --decrypt=false id:simple-encrypted@crypto.notmuchmail.org | awk '/^\014part}/{ f=0 }; { if (f) { print $0 } } /^\014part{ ID: 3/{ f=1 }') +output=$(notmuch show --decrypt=false id:simple-encrypted@crypto.notmuchmail.org | notmuch_show_part 3) expected='Non-text part: application/octet-stream' test_expect_equal \ "$output" \ @@ -266,6 +290,27 @@ test_expect_equal \ "$output" \ "$expected" +goodsig='good_sig:[0][0][0]["crypto"]["signed"]["status"][0]["status"]="good"' +nosig='no_sig:[0][0][0]["crypto"]!"signed"' + +test_begin_subtest "verify signature without a session key stashed when --decrypt=true" +output=$(notmuch show --format=json --decrypt=true id:encrypted-signed@crypto.notmuchmail.org) +test_json_nodes <<<"$output" "$goodsig" + +test_begin_subtest "do not verify sig without a session key stashed if --decrypt=auto" +output=$(notmuch show --format=json id:encrypted-signed@crypto.notmuchmail.org) +test_json_nodes <<<"$output" "$nosig" + +test_begin_subtest "verify signature when --decrypt=stash" +output=$(notmuch show --format=json --decrypt=stash id:encrypted-signed@crypto.notmuchmail.org) +test_json_nodes <<<"$output" "$goodsig" + +test_begin_subtest "verify signature with stashed session key" +output=$(notmuch show --format=json id:encrypted-signed@crypto.notmuchmail.org) +if [ $NOTMUCH_GMIME_VERIFY_WITH_SESSION_KEY -ne 1 ]; then + test_subtest_known_broken +fi +test_json_nodes <<<"$output" "$goodsig" # TODO: test removal of a message from the message store between # indexing and reindexing.