X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2FT357-index-decryption.sh;h=c5435f4faeb70292ba824bca05a03930523fa372;hp=11ea2074d57a776874a29f1393a482775e746841;hb=aa605f7e8a4c5e046503d61fdb953721c32f9d3a;hpb=6d7249fec909b4dbb43e0a7833d30edee839bff1 diff --git a/test/T357-index-decryption.sh b/test/T357-index-decryption.sh index 11ea2074..c5435f4f 100755 --- a/test/T357-index-decryption.sh +++ b/test/T357-index-decryption.sh @@ -29,7 +29,7 @@ test_expect_equal \ # create a test encrypted message that is indexed in the clear test_begin_subtest 'emacs delivery of encrypted message' test_expect_success \ -'emacs_fcc_message --try-decrypt=true \ +'emacs_fcc_message --decrypt=true \ "test encrypted message for cleartext index 002" \ "This is a test encrypted message with a wumpus.\n" \ "(mml-secure-message-encrypt)"' @@ -48,6 +48,17 @@ test_expect_equal \ "$output" \ "$expected" +test_begin_subtest "show the message body of the encrypted message" +notmuch dump wumpus +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" + test_begin_subtest "message should go away after deletion" # cache the message in an env var and remove it: @@ -69,10 +80,28 @@ 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)' +if [ $NOTMUCH_HAVE_GMIME_SESSION_KEYS -eq 0 ]; then + test_subtest_known_broken +fi +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 --try-decrypt" -notmuch insert --folder=sent --try-decrypt <<<"$contents" +test_begin_subtest "message cleartext is present after reinserting with --decrypt=true" +notmuch insert --folder=sent --decrypt=true <<<"$contents" output=$(notmuch search wumpus) expected='thread:0000000000000003 2000-01-01 [1/1(2)] Notmuch Test Suite; test encrypted message for cleartext index 002 (encrypted inbox unread)' test_expect_equal \ @@ -93,8 +122,8 @@ test_expect_equal \ # 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 --try-decrypt" -notmuch insert --folder=sent --try-decrypt <<<"$contents" +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)' test_expect_equal \ @@ -113,9 +142,9 @@ test_expect_equal \ "$output" \ "$expected" -# see if first message shows up after reindexing with --try-decrypt=true (same $expected, untouched): +# see if first message shows up after reindexing with --decrypt=true (same $expected, untouched): test_begin_subtest 'reindex old messages' -test_expect_success 'notmuch reindex --try-decrypt=true tag:encrypted and not property:index.decryption=success' +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) test_expect_equal \ @@ -129,10 +158,21 @@ test_expect_equal \ "$output" \ "$expected" +# try a simple reindex +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 +test_expect_equal \ + "$output" \ + "$expected" # try to remove cleartext indexing test_begin_subtest 'reindex without cleartext' -test_expect_success 'notmuch reindex tag:encrypted and property:index.decryption=success' +test_expect_success 'notmuch reindex --decrypt=false tag:encrypted and property:index.decryption=success' test_begin_subtest "reindexed encrypted messages, without cleartext" output=$(notmuch search wumpus) expected='' @@ -140,6 +180,16 @@ test_expect_equal \ "$output" \ "$expected" +# ensure no session keys are present: +test_begin_subtest 'reindex using only session keys' +test_expect_success 'notmuch reindex tag:encrypted and property:index.decryption=success' +test_begin_subtest "reindexed encrypted messages, decrypting only with session keys" +output=$(notmuch search wumpus) +expected='' +test_expect_equal \ + "$output" \ + "$expected" + # and the same search, but by property ($expected is untouched): test_begin_subtest "emacs search by property with both messages unindexed" output=$(notmuch search property:index.decryption=success) @@ -156,10 +206,33 @@ 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) +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" + add_email_corpus crypto test_begin_subtest "indexing message fails when secret key not available" -notmuch reindex --try-decrypt id:simple-encrypted@crypto.notmuchmail.org +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 @@ -180,9 +253,56 @@ 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 | 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 | notmuch_show_part 3) +expected='Non-text part: application/octet-stream' +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "purging stashed session keys should lose access to the cleartext" +notmuch reindex --decrypt=false id:simple-encrypted@crypto.notmuchmail.org +output=$(notmuch search sekrit) +expected='' +test_expect_equal \ + "$output" \ + "$expected" + +test_begin_subtest "and cleartext should be unrecoverable now that there are no stashed session keys" +notmuch dump +notmuch reindex --decrypt=true id:simple-encrypted@crypto.notmuchmail.org +output=$(notmuch search sekrit) +expected='' test_expect_equal \ "$output" \ "$expected"