From 26a105a394209b472e8d065b46d3248d9519a946 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sat, 18 Jun 2022 15:36:13 +0000 Subject: [PATCH] age: Add testkit test files from reference impl Source: https://github.com/FiloSottile/age/tree/eaa4e03cfed731b5a1c2756add1eb28d34af05d6 --- .gitattributes | 2 + Cargo.lock | 30 +++ age/Cargo.toml | 2 + age/tests/testdata/testkit/header_crlf | 10 + age/tests/testdata/testkit/hmac_bad | 9 + age/tests/testdata/testkit/hmac_extra_space | 9 + age/tests/testdata/testkit/hmac_garbage | 9 + age/tests/testdata/testkit/hmac_missing | 9 + age/tests/testdata/testkit/hmac_no_space | 9 + age/tests/testdata/testkit/hmac_not_canonical | 10 + .../testdata/testkit/hmac_trailing_space | 9 + age/tests/testdata/testkit/hmac_truncated | 9 + age/tests/testdata/testkit/scrypt | Bin 0 -> 340 bytes age/tests/testdata/testkit/scrypt_and_x25519 | 12 + .../testdata/testkit/scrypt_long_file_key | Bin 0 -> 377 bytes age/tests/testdata/testkit/scrypt_no_match | Bin 0 -> 270 bytes .../testdata/testkit/scrypt_work_factor_23 | 9 + age/tests/testdata/testkit/stanza_bad_start | 11 + .../testdata/testkit/stanza_base64_padding | 12 + .../testdata/testkit/stanza_empty_argument | 11 + age/tests/testdata/testkit/stanza_empty_body | 12 + .../testdata/testkit/stanza_empty_last_line | 14 ++ .../testdata/testkit/stanza_invalid_character | 11 + age/tests/testdata/testkit/stanza_long_line | 13 + .../testdata/testkit/stanza_missing_body | 11 + .../testkit/stanza_missing_final_line | 12 + .../testkit/stanza_multiple_short_lines | 13 + .../testdata/testkit/stanza_no_arguments | 11 + .../testdata/testkit/stanza_not_canonical | 12 + age/tests/testdata/testkit/stanza_spurious_cr | 11 + .../testdata/testkit/stanza_valid_characters | 14 ++ .../testdata/testkit/stream_empty_payload | 10 + .../testdata/testkit/stream_last_chunk_empty | Bin 0 -> 65978 bytes .../testdata/testkit/stream_last_chunk_full | Bin 0 -> 65955 bytes .../testdata/testkit/version_unsupported | 9 + age/tests/testdata/testkit/x25519 | 10 + age/tests/testdata/testkit/x25519_bad_tag | 10 + .../testdata/testkit/x25519_extra_argument | 10 + age/tests/testdata/testkit/x25519_grease | 14 ++ age/tests/testdata/testkit/x25519_identity | 10 + .../testdata/testkit/x25519_long_file_key | 10 + age/tests/testdata/testkit/x25519_long_share | 10 + age/tests/testdata/testkit/x25519_low_order | 10 + age/tests/testdata/testkit/x25519_lowercase | 10 + .../testkit/x25519_multiple_recipients | 12 + age/tests/testdata/testkit/x25519_no_match | 9 + .../testkit/x25519_not_canonical_body | 10 + .../testkit/x25519_not_canonical_share | 10 + age/tests/testdata/testkit/x25519_short_share | 10 + age/tests/testkit.rs | 222 ++++++++++++++++++ 50 files changed, 692 insertions(+) create mode 100644 .gitattributes create mode 100644 age/tests/testdata/testkit/header_crlf create mode 100644 age/tests/testdata/testkit/hmac_bad create mode 100644 age/tests/testdata/testkit/hmac_extra_space create mode 100644 age/tests/testdata/testkit/hmac_garbage create mode 100644 age/tests/testdata/testkit/hmac_missing create mode 100644 age/tests/testdata/testkit/hmac_no_space create mode 100644 age/tests/testdata/testkit/hmac_not_canonical create mode 100644 age/tests/testdata/testkit/hmac_trailing_space create mode 100644 age/tests/testdata/testkit/hmac_truncated create mode 100644 age/tests/testdata/testkit/scrypt create mode 100644 age/tests/testdata/testkit/scrypt_and_x25519 create mode 100644 age/tests/testdata/testkit/scrypt_long_file_key create mode 100644 age/tests/testdata/testkit/scrypt_no_match create mode 100644 age/tests/testdata/testkit/scrypt_work_factor_23 create mode 100644 age/tests/testdata/testkit/stanza_bad_start create mode 100644 age/tests/testdata/testkit/stanza_base64_padding create mode 100644 age/tests/testdata/testkit/stanza_empty_argument create mode 100644 age/tests/testdata/testkit/stanza_empty_body create mode 100644 age/tests/testdata/testkit/stanza_empty_last_line create mode 100644 age/tests/testdata/testkit/stanza_invalid_character create mode 100644 age/tests/testdata/testkit/stanza_long_line create mode 100644 age/tests/testdata/testkit/stanza_missing_body create mode 100644 age/tests/testdata/testkit/stanza_missing_final_line create mode 100644 age/tests/testdata/testkit/stanza_multiple_short_lines create mode 100644 age/tests/testdata/testkit/stanza_no_arguments create mode 100644 age/tests/testdata/testkit/stanza_not_canonical create mode 100644 age/tests/testdata/testkit/stanza_spurious_cr create mode 100644 age/tests/testdata/testkit/stanza_valid_characters create mode 100644 age/tests/testdata/testkit/stream_empty_payload create mode 100644 age/tests/testdata/testkit/stream_last_chunk_empty create mode 100644 age/tests/testdata/testkit/stream_last_chunk_full create mode 100644 age/tests/testdata/testkit/version_unsupported create mode 100644 age/tests/testdata/testkit/x25519 create mode 100644 age/tests/testdata/testkit/x25519_bad_tag create mode 100644 age/tests/testdata/testkit/x25519_extra_argument create mode 100644 age/tests/testdata/testkit/x25519_grease create mode 100644 age/tests/testdata/testkit/x25519_identity create mode 100644 age/tests/testdata/testkit/x25519_long_file_key create mode 100644 age/tests/testdata/testkit/x25519_long_share create mode 100644 age/tests/testdata/testkit/x25519_low_order create mode 100644 age/tests/testdata/testkit/x25519_lowercase create mode 100644 age/tests/testdata/testkit/x25519_multiple_recipients create mode 100644 age/tests/testdata/testkit/x25519_no_match create mode 100644 age/tests/testdata/testkit/x25519_not_canonical_body create mode 100644 age/tests/testdata/testkit/x25519_not_canonical_share create mode 100644 age/tests/testdata/testkit/x25519_short_share create mode 100644 age/tests/testkit.rs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d7bbaf1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.age binary +age/tests/testdata/testkit/* binary diff --git a/Cargo.lock b/Cargo.lock index 56ebcdd..e59bcb4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,6 +58,7 @@ dependencies = [ "curve25519-dalek", "futures", "futures-test", + "hex", "hkdf", "hmac", "i18n-embed", @@ -79,6 +80,7 @@ dependencies = [ "sha2 0.10.2", "sha2 0.9.9", "subtle", + "test-case", "web-sys", "which", "wsl", @@ -1044,6 +1046,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hkdf" version = "0.12.3" @@ -2315,6 +2323,28 @@ dependencies = [ "winapi", ] +[[package]] +name = "test-case" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196e8a70562e252cc51eaaaee3ecddc39803d9b7fd4a772b7c7dae7cdf42a859" +dependencies = [ + "test-case-macros", +] + +[[package]] +name = "test-case-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd461f47ade621665c9f4e44b20449341769911c253275dc5cb03726cbb852c" +dependencies = [ + "cfg-if", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "textwrap" version = "0.11.0" diff --git a/age/Cargo.toml b/age/Cargo.toml index 2961fc0..3a29414 100644 --- a/age/Cargo.toml +++ b/age/Cargo.toml @@ -93,9 +93,11 @@ wsl = { version = "0.1", optional = true } criterion = "0.3" criterion-cycles-per-byte = "0.1" futures-test = "0.3" +hex = "0.4" i18n-embed = { version = "0.13", features = ["desktop-requester", "fluent-system"] } quickcheck = "1" quickcheck_macros = "1" +test-case = "2" [target.'cfg(unix)'.dev-dependencies] pprof = { version = "0.8", features = ["criterion", "flamegraph"] } diff --git a/age/tests/testdata/testkit/header_crlf b/age/tests/testdata/testkit/header_crlf new file mode 100644 index 0000000..69cafae --- /dev/null +++ b/age/tests/testdata/testkit/header_crlf @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: lines in the header end with CRLF instead of LF + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- 2KIGb7ye32MWtUuEVWkO3MP6qCDLzOvT9wF06lelBSI +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_bad b/age/tests/testdata/testkit/hmac_bad new file mode 100644 index 0000000..5021bb6 --- /dev/null +++ b/age/tests/testdata/testkit/hmac_bad @@ -0,0 +1,9 @@ +expect: HMAC failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- 8McE3ix9R34E/vLrQv3yepsHjo/LXhfs22Ab3UyInmg +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_extra_space b/age/tests/testdata/testkit/hmac_extra_space new file mode 100644 index 0000000..f3bfd1e --- /dev/null +++ b/age/tests/testdata/testkit/hmac_extra_space @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- WyJp9F/9FOZh7gJdheq2WIJcwHgYc8NIVh3ddwhrcNg +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_garbage b/age/tests/testdata/testkit/hmac_garbage new file mode 100644 index 0000000..29e54ab --- /dev/null +++ b/age/tests/testdata/testkit/hmac_garbage @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- WyJp9F/9FOZh7gJdheq2WIJcwHgYc8NIVh3ddwhrcNgAAA +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_missing b/age/tests/testdata/testkit/hmac_missing new file mode 100644 index 0000000..6ecea2a --- /dev/null +++ b/age/tests/testdata/testkit/hmac_missing @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_no_space b/age/tests/testdata/testkit/hmac_no_space new file mode 100644 index 0000000..9f1d80d --- /dev/null +++ b/age/tests/testdata/testkit/hmac_no_space @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +---WyJp9F/9FOZh7gJdheq2WIJcwHgYc8NIVh3ddwhrcNg +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_not_canonical b/age/tests/testdata/testkit/hmac_not_canonical new file mode 100644 index 0000000..fd18cda --- /dev/null +++ b/age/tests/testdata/testkit/hmac_not_canonical @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: the base64 encoding of the HMAC is not canonical + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- WyJp9F/9FOZh7gJdheq2WIJcwHgYc8NIVh3ddwhrcNh +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_trailing_space b/age/tests/testdata/testkit/hmac_trailing_space new file mode 100644 index 0000000..2e216bd --- /dev/null +++ b/age/tests/testdata/testkit/hmac_trailing_space @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- WyJp9F/9FOZh7gJdheq2WIJcwHgYc8NIVh3ddwhrcNg +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/hmac_truncated b/age/tests/testdata/testkit/hmac_truncated new file mode 100644 index 0000000..e7f7196 --- /dev/null +++ b/age/tests/testdata/testkit/hmac_truncated @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- WyJp +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/scrypt b/age/tests/testdata/testkit/scrypt new file mode 100644 index 0000000000000000000000000000000000000000..57dd08f0e7b2312db772e8f24d786de3bb3da187 GIT binary patch literal 340 zcmW-aJ5Iwe06>{DA_k-`W+&8f?8b=%5>zcMC6x5vY>w@uKbkZSZNmk)0}^n79)KN* zGaw{ZHjaQqL2r3_%aiLw^2`D1mUF3;mau#lGvNSem?6O!LQaujkV4b4h|L7Ep~YxG zOIX^LkksIiQf5#DONiruln@F9Vu2QpXA(?h?f_zAg87z^SO^l65R98^`mbIE{)+L(@-y`fnhu!s68`n00HlP7--hE0Lt^ z0Rw7LcT&l3stva{@G1@Ay0uG$Djud`l0UyTq}^bulvuP59c-CJZFaoKl^^+>G)ec?rkOy K*SqdZ`2GvoZEjrv literal 0 HcmV?d00001 diff --git a/age/tests/testdata/testkit/scrypt_and_x25519 b/age/tests/testdata/testkit/scrypt_and_x25519 new file mode 100644 index 0000000..c479d3b --- /dev/null +++ b/age/tests/testdata/testkit/scrypt_and_x25519 @@ -0,0 +1,12 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +passphrase: password +comment: scrypt stanzas must be alone in the header + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +-> scrypt 7s9ix86RtDMnTmjU8vkTTA 10 +0U4Pbxsl9pr9g4nHjPgkvtYkNrGiYJ43x1vbM5X5mhg +--- f2AoyFXU2R5Cn7s38vH1pFkuKqzPh3ibwwHc/7y6RRU +[. #wυ=aYkz66ڦRL \ No newline at end of file diff --git a/age/tests/testdata/testkit/scrypt_long_file_key b/age/tests/testdata/testkit/scrypt_long_file_key new file mode 100644 index 0000000000000000000000000000000000000000..669c22257c94386469dff68ab80cb1152adf8856 GIT binary patch literal 377 zcmXwyOG?8~7=<0*fg2FvcdRjw-kZ`2f)!04Qq(qD>L^YAB+cuFoAePk-~x0e;s$gD zb|Qjp1KgE-6Ei}v+e<0$D*eLYC&Trs-FC3S;oT$Niml$(JO zPTWq|)%2lBBuRozleTqtkQtG>=Y;d4fcM%;G&POmK&}iX-KwTH;!c0Yxk=X8>&Mmm g%3J-Vc(~8EHZFG7uWy$(%g5){&%4EwShT*r0fGa7TmS$7 literal 0 HcmV?d00001 diff --git a/age/tests/testdata/testkit/scrypt_no_match b/age/tests/testdata/testkit/scrypt_no_match new file mode 100644 index 0000000000000000000000000000000000000000..994d64767b0a673eb3ac81207f9e6814598ee6de GIT binary patch literal 270 zcmW;AOHPA87yw|`votPDx*7K(kIqC(qKP)Gv=x!QVMpO-fKs3XQt$%a!9=}458&R! zGZ+)M?mU8t#(cXEstnvh#Q``TaO^u_e9Hm(VGMW)wTfwrP~!ga>9HcwCZ$9n9+9a+ zS_BA1nUm*Pz?~dayy0oW5ONp@khr|giZD%%QqIIuM#34+{}1!7BwlY8@kGyHZGMK^1kH<6c`bq`S+}y017B3kiaNd&WF8tx>T| z$MUMQXG+mE*0vW6r)5M>fSq4dVm|Y2bK#-}efzrq-1$&n>+N%Kc<{4tH=a(v^T)ky L^l-DQzxeOJ>u6hv literal 0 HcmV?d00001 diff --git a/age/tests/testdata/testkit/scrypt_work_factor_23 b/age/tests/testdata/testkit/scrypt_work_factor_23 new file mode 100644 index 0000000..c37ca07 --- /dev/null +++ b/age/tests/testdata/testkit/scrypt_work_factor_23 @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +comment: work factor is very high, would take a long time to compute + +age-encryption.org/v1 +-> scrypt rF0/NwblUHHTpgQgRpe5CQ 23 +qW9eVsT0NVb/Vswtw8kPIxUnaYmm9Px1dYmq2+4+qZA +--- 38TpQMxQRRNMfmYYpBX6DDrPx4/QY5UmJnhPyVoX/cw +]?7PqӦ F ۮ z(r| \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_bad_start b/age/tests/testdata/testkit/stanza_bad_start new file mode 100644 index 0000000..d040d65 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_bad_start @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-- stanza + +--- lpxzkyQGe/sA7F1yh4c6KVZV7//jANm5lYefTToioXs +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_base64_padding b/age/tests/testdata/testkit/stanza_base64_padding new file mode 100644 index 0000000..18ad2d2 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_base64_padding @@ -0,0 +1,12 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB +QUE= +--- OtG7IuNHaf2SHZuowmxg/fhbhtz0/DI5g5OGd7WH7S0 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_empty_argument b/age/tests/testdata/testkit/stanza_empty_argument new file mode 100644 index 0000000..cb9ef0b --- /dev/null +++ b/age/tests/testdata/testkit/stanza_empty_argument @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza argument + +--- bosBxVRBzKF9emyxQ9BERq7+D5JKU+lvbEsL8UHJ/SA +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_empty_body b/age/tests/testdata/testkit/stanza_empty_body new file mode 100644 index 0000000..cf8ec9b --- /dev/null +++ b/age/tests/testdata/testkit/stanza_empty_body @@ -0,0 +1,12 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> empty + +--- 697zSC9pa/ZLNIaXGtuwcUobmxv+Dpx48Hv0papk5c0 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_empty_last_line b/age/tests/testdata/testkit/stanza_empty_last_line new file mode 100644 index 0000000..30a6c8f --- /dev/null +++ b/age/tests/testdata/testkit/stanza_empty_last_line @@ -0,0 +1,14 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB + +--- cb4SqtunSJzXKDGjqeYxuva9Be80QXEDKDn2aKBaCsw +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_invalid_character b/age/tests/testdata/testkit/stanza_invalid_character new file mode 100644 index 0000000..d5c8b43 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_invalid_character @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza è + +--- sTIB/0Fc74rhpjC4RAxoR3E01eVTTnWruaD+c5QWjKI +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_long_line b/age/tests/testdata/testkit/stanza_long_line new file mode 100644 index 0000000..5435260 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_long_line @@ -0,0 +1,13 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: a body line is longer than 64 columns + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + +--- tnRUR2vmmU92czsjnioF5ujgXUetUhzUoQPPGT9wmug +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_missing_body b/age/tests/testdata/testkit/stanza_missing_body new file mode 100644 index 0000000..4c184c7 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_missing_body @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: every stanza must end with a short body line, even if empty + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> empty +--- CDgFIIJ1wE4CpW6zG+LVZ6/G/RCNTH6ZUVGp2NbeIkU +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_missing_final_line b/age/tests/testdata/testkit/stanza_missing_final_line new file mode 100644 index 0000000..58774f4 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_missing_final_line @@ -0,0 +1,12 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: every stanza must end with a short body line + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +--- GRjUy1ShNhFoV3cQikdtUZqDeDEZSrbtNXUgDtDbwC8 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_multiple_short_lines b/age/tests/testdata/testkit/stanza_multiple_short_lines new file mode 100644 index 0000000..e191764 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_multiple_short_lines @@ -0,0 +1,13 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: a short body line ends the stanza + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +--- ct87HSIMoTC4nUsQva+8AeKc2bK2q8b9sPjRhjuf1us +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_no_arguments b/age/tests/testdata/testkit/stanza_no_arguments new file mode 100644 index 0000000..a667ad9 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_no_arguments @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> + +--- B0qjnUjVajTa8I4Uia49g1c4DMQQN6u9m9QOSS1HLks +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_not_canonical b/age/tests/testdata/testkit/stanza_not_canonical new file mode 100644 index 0000000..f7794aa --- /dev/null +++ b/age/tests/testdata/testkit/stanza_not_canonical @@ -0,0 +1,12 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB +QUF +--- nQM2VCzmNLPrUurNWN+SW9wVp/9uTMQ/6CTUM7l8c84 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_spurious_cr b/age/tests/testdata/testkit/stanza_spurious_cr new file mode 100644 index 0000000..b85c2ce --- /dev/null +++ b/age/tests/testdata/testkit/stanza_spurious_cr @@ -0,0 +1,11 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> stanza +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +--- MZaFAh8ldzU0F88NJjLx5yd7fnd57XS5COowmgvQtXQ +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stanza_valid_characters b/age/tests/testdata/testkit/stanza_valid_characters new file mode 100644 index 0000000..c506f30 --- /dev/null +++ b/age/tests/testdata/testkit/stanza_valid_characters @@ -0,0 +1,14 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> !"#$%&' ()*+,-./ 01234567 89:;<=>? @ABCDEFG HIJKLMNO + +-> PQRSTUVW XYZ[\]^_ `abcdefg hijklmno pqrstuvw xyz{|}~ + +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- x538z9xJq9XEK1aTTTv80aWDVvVdROvaXn2tpqXPC8g +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/stream_empty_payload b/age/tests/testdata/testkit/stream_empty_payload new file mode 100644 index 0000000..6ec1c83 --- /dev/null +++ b/age/tests/testdata/testkit/stream_empty_payload @@ -0,0 +1,10 @@ +expect: success +payload: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- Vn+54jqiiUCE+WZcEVY3f1sqHjlu/z1LCQ/T7Xm7qI0 +bΑ3'NhL.O>RA0ޫC6U \ No newline at end of file diff --git a/age/tests/testdata/testkit/stream_last_chunk_empty b/age/tests/testdata/testkit/stream_last_chunk_empty new file mode 100644 index 0000000000000000000000000000000000000000..0795d14259fc1c0cb6ebe24861a2be3c4111c87a GIT binary patch literal 65978 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 UZU|wE6E_j$(C~Ym{pQ7G=m+61761SM literal 0 HcmV?d00001 diff --git a/age/tests/testdata/testkit/stream_last_chunk_full b/age/tests/testdata/testkit/stream_last_chunk_full new file mode 100644 index 0000000000000000000000000000000000000000..bc4baae0973595e5195874e29c4b05f008113752 GIT binary patch literal 65955 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 literal 0 HcmV?d00001 diff --git a/age/tests/testdata/testkit/version_unsupported b/age/tests/testdata/testkit/version_unsupported new file mode 100644 index 0000000..e7a7ddf --- /dev/null +++ b/age/tests/testdata/testkit/version_unsupported @@ -0,0 +1,9 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1234 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- 38AL8Mr4VwmS6CNbM4bc7u3WwGBDqsMTRHOuYJ9ckqs +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519 b/age/tests/testdata/testkit/x25519 new file mode 100644 index 0000000..c7bb509 --- /dev/null +++ b/age/tests/testdata/testkit/x25519 @@ -0,0 +1,10 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- Vn+54jqiiUCE+WZcEVY3f1sqHjlu/z1LCQ/T7Xm7qI0 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_bad_tag b/age/tests/testdata/testkit/x25519_bad_tag new file mode 100644 index 0000000..9a08745 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_bad_tag @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: the ChaCha20Poly1305 authentication tag on the body of the X25519 stanza is wrong + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw0o +--- tG0k9bg4iIuBdMWb13n7FFYDzoBbtsLppNLhbh22aKg +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_extra_argument b/age/tests/testdata/testkit/x25519_extra_argument new file mode 100644 index 0000000..198389b --- /dev/null +++ b/age/tests/testdata/testkit/x25519_extra_argument @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: the base64 encoding of the share is not canonical + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc 1234 +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- hQQySEUXL8pOuIOuw0qXzi66RphDJP9IKMNEChNJIPk +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_grease b/age/tests/testdata/testkit/x25519_grease new file mode 100644 index 0000000..aa212d9 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_grease @@ -0,0 +1,14 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> grease + +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +-> grease + +--- 7NLrfbRUZt6qK0pdtARUf59dHwo12ReldjJKjMlbE3I +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_identity b/age/tests/testdata/testkit/x25519_identity new file mode 100644 index 0000000..eb254e7 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_identity @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: the X25519 share is a low-order point, so the shared secret is the disallowed all-zero value + +age-encryption.org/v1 +-> X25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +W3E/OCRme9TiTY97JoK31Z71arNur77WIIdB90XnN3M +--- Pne3IPMDvBj7wRbPMcNViffpVZAx814tgMxp8AwyMhs +]?7PqӦ F ۮ z(r| \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_long_file_key b/age/tests/testdata/testkit/x25519_long_file_key new file mode 100644 index 0000000..30dc440 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_long_file_key @@ -0,0 +1,10 @@ +expect: header failure +file key: 41204c4f4e4745522059454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: the file key must be checked to be 16 bytes before decrypting it + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +nlObGn0CSA4pxiaG3W6nLlaFFuHmqW+bFC6sJmbsJ9yFesgSok1K0AI +--- C49Jo3+j4I6jWB2tldSs1jVAXbv0mOTAnwdT+5vOiBg +bΑ3'NhLc( tǏP)x1 \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_long_share b/age/tests/testdata/testkit/x25519_long_share new file mode 100644 index 0000000..a2f3a04 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_long_share @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: a trailing zero is missing from the X25519 share + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCcA +hjabGXwSLQ9c3S6Lw2i+S2Tu2fiwQHHslbBN6B41FLE +--- QbEwdWirchS37UUOPh7uVddRiOaWjFwRUpaQ4Q+Z1RE +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_low_order b/age/tests/testdata/testkit/x25519_low_order new file mode 100644 index 0000000..f528a0d --- /dev/null +++ b/age/tests/testdata/testkit/x25519_low_order @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: the X25519 share is a low-order point, so the shared secretis the disallowed all-zero value + +age-encryption.org/v1 +-> X25519 X5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEdc +3E0NpFans/m0WLWF7+54ZBdNj3iqQqpraGDFiaRkvBA +--- sXw327YMT1/ULXe+ZyRMbMY0Z2jnWHGgI9j1we6yQ8A +]?7PqӦ F ۮ z(r| \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_lowercase b/age/tests/testdata/testkit/x25519_lowercase new file mode 100644 index 0000000..853d408 --- /dev/null +++ b/age/tests/testdata/testkit/x25519_lowercase @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: the first argument in the X25519 stanza is lowercase + +age-encryption.org/v1 +-> x25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- SwXKO3dXLh9l5QiSgMWgPhCkwstT8oB4jLDv7aBgC+c +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_multiple_recipients b/age/tests/testdata/testkit/x25519_multiple_recipients new file mode 100644 index 0000000..27c772c --- /dev/null +++ b/age/tests/testdata/testkit/x25519_multiple_recipients @@ -0,0 +1,12 @@ +expect: success +payload: 013f54400c82da08037759ada907a8b864e97de81c088a182062c4b5622fd2ab +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 + +age-encryption.org/v1 +-> X25519 ajtqAvDEkVNr2B7zUOtq2mAQXDSBlNrVAuM/dKb5sT4 +0evrK/HQXVsQ4YaDe+659l5OQzvAzD2ytLGHQLQiqxg +-> X25519 0qC7u6AbLxuwnM8tPFOWVtWZn/ZZe7z7gcsP5kgA0FI +T/PZg76MmVt2IaLntrxppzDnzeFDYHsHFcnTnhbRLQ8 +--- 7W07ef2PhsTAl74pn+9vSj/Xzukwa6SuTqMc16cdBk0 +5TB9 Kom^OY X25519 ajtqAvDEkVNr2B7zUOtq2mAQXDSBlNrVAuM/dKb5sT4 +HUKtz0R2j5Bl2ER7HhAZrURikCFpiIjNa0KjHcjbAGU +--- rrpTlvKEKrK3EqhoOPJeP1KE8O1d2arrRez77mwekRc +roW= 1$!ox-yG^^ \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_not_canonical_body b/age/tests/testdata/testkit/x25519_not_canonical_body new file mode 100644 index 0000000..11138db --- /dev/null +++ b/age/tests/testdata/testkit/x25519_not_canonical_body @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: the base64 encoding of the share is not canonical + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCc +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7V +--- eSjjCjQyp30yHDPwCztKS+1txs+aoCa5ERz8jeEp+9A +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_not_canonical_share b/age/tests/testdata/testkit/x25519_not_canonical_share new file mode 100644 index 0000000..0b2a08d --- /dev/null +++ b/age/tests/testdata/testkit/x25519_not_canonical_share @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1XMWWC06LY3EE5RYTXM9MFLAZ2U56JJJ36S0MYPDRWSVLUL66MV4QX3S7F6 +comment: the base64 encoding of the share is not canonical + +age-encryption.org/v1 +-> X25519 TEiF0ypqr+bpvcqXNyCVJpL7OuwPdVwPL7KQEbFDOCd +EmECAEcKN+n/Vs9SbWiV+Hu0r+E8R77DdWYyd83nw7U +--- AO6haEGU6BGJ8Tzeqnr2fSLEo31JrWodGtZuCZmijI8 +bΑ3'NhLL[R,1f \ No newline at end of file diff --git a/age/tests/testdata/testkit/x25519_short_share b/age/tests/testdata/testkit/x25519_short_share new file mode 100644 index 0000000..7feb27e --- /dev/null +++ b/age/tests/testdata/testkit/x25519_short_share @@ -0,0 +1,10 @@ +expect: header failure +file key: 59454c4c4f57205355424d4152494e45 +identity: AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 +comment: a trailing zero is missing from the X25519 share + +age-encryption.org/v1 +-> X25519 l7o4oTX9X5E3/KODa/7CQ0CrA9fKMWsm9IJjYzSlJg +yUGP5aPob6YJ+vzRfBtDT9D1K/wmyheZE/Xl/mDSKA4 +--- Zn1/VRtHpD93HtIXSv1S++POXeKcQF7w1+hpXhMiAbk +]?7PqӦ F ۮ z(r| \ No newline at end of file diff --git a/age/tests/testkit.rs b/age/tests/testkit.rs new file mode 100644 index 0000000..3ebb172 --- /dev/null +++ b/age/tests/testkit.rs @@ -0,0 +1,222 @@ +use std::{ + fs::File, + io::{self, BufRead, BufReader, Read}, + str::FromStr, +}; + +use age::{x25519, DecryptError, Decryptor, Identity}; +use sha2::{Digest, Sha256}; +use test_case::test_case; + +#[test_case("header_crlf")] +#[test_case("hmac_bad")] +#[test_case("hmac_extra_space")] +#[test_case("hmac_garbage")] +#[test_case("hmac_missing")] +#[test_case("hmac_no_space")] +#[test_case("hmac_not_canonical")] +#[test_case("hmac_trailing_space")] +#[test_case("hmac_truncated")] +#[test_case("scrypt")] +#[test_case("scrypt_and_x25519")] +#[test_case("scrypt_long_file_key")] +#[test_case("scrypt_no_match")] +#[test_case("scrypt_work_factor_23")] +#[test_case("stanza_bad_start")] +#[test_case("stanza_base64_padding")] +#[test_case("stanza_empty_argument")] +#[test_case("stanza_empty_body")] +#[test_case("stanza_empty_last_line")] +#[test_case("stanza_invalid_character")] +#[test_case("stanza_long_line")] +#[test_case("stanza_missing_body")] +#[test_case("stanza_missing_final_line")] +#[test_case("stanza_multiple_short_lines")] +#[test_case("stanza_no_arguments")] +#[test_case("stanza_not_canonical")] +#[test_case("stanza_spurious_cr")] +#[test_case("stanza_valid_characters")] +#[test_case("stream_empty_payload")] +#[test_case("stream_last_chunk_empty")] +#[test_case("stream_last_chunk_full")] +#[test_case("version_unsupported")] +#[test_case("x25519")] +#[test_case("x25519_bad_tag")] +#[test_case("x25519_extra_argument")] +#[test_case("x25519_grease")] +#[test_case("x25519_identity")] +#[test_case("x25519_long_file_key")] +#[test_case("x25519_long_share")] +#[test_case("x25519_lowercase")] +#[test_case("x25519_low_order")] +#[test_case("x25519_multiple_recipients")] +#[test_case("x25519_no_match")] +#[test_case("x25519_not_canonical_body")] +#[test_case("x25519_not_canonical_share")] +#[test_case("x25519_short_share")] +fn testkit(filename: &str) { + let testfile = TestFile::parse(filename); + let comment = testfile + .comment + .map(|c| format!(" ({})", c)) + .unwrap_or_default(); + + match Decryptor::new(&testfile.age_file[..]).and_then(|d| match d { + Decryptor::Recipients(d) => { + assert_eq!(testfile.passphrases.len(), 0); + let identities: Vec = testfile + .identities + .iter() + .map(|s| s.as_str()) + .map(x25519::Identity::from_str) + .collect::>() + .unwrap(); + d.decrypt(identities.iter().map(|i| i as &dyn Identity)) + } + Decryptor::Passphrase(d) => { + assert_eq!(testfile.identities.len(), 0); + match testfile.passphrases.len() { + 0 => panic!("Test file is missing passphrase{}", comment), + 1 => d.decrypt( + &testfile.passphrases.get(0).cloned().unwrap().into(), + Some(16), + ), + n => panic!("Too many passphrases ({}){}", n, comment), + } + } + }) { + Ok(mut r) => { + let mut payload = vec![]; + let res = r.read_to_end(&mut payload); + match (res, testfile.expect) { + (Ok(_), Expect::Success { payload_sha256 }) => { + assert_eq!(Sha256::digest(&payload)[..], payload_sha256); + } + // These testfile failures are expected, because we maintains support for + // parsing legacy age stanzas without an explicit short final line. + (Ok(_), Expect::HeaderFailure) + if ["stanza_missing_body", "stanza_missing_final_line"].contains(&filename) => { + } + (Err(e), Expect::PayloadFailure) => { + assert_eq!(e.kind(), io::ErrorKind::InvalidData) + } + (actual, expected) => panic!( + "Expected {:?}, got {}{}", + expected, + if actual.is_ok() { + format!("payload '{}'", String::from_utf8_lossy(&payload)) + } else { + format!("{:?}", actual) + }, + comment, + ), + } + } + Err(e) => match e { + DecryptError::DecryptionFailed + | DecryptError::ExcessiveWork { .. } + | DecryptError::InvalidHeader + | DecryptError::Io(_) + | DecryptError::UnknownFormat => { + assert_eq!(testfile.expect, Expect::HeaderFailure) + } + // Temporary workaround for the testkit test files not distinguishing header + // failures from "no matching keys". + DecryptError::NoMatchingKeys + if ["x25519_bad_tag", "x25519_no_match", "x25519_lowercase"] + .contains(&filename) => + { + assert_eq!(testfile.expect, Expect::HeaderFailure) + } + DecryptError::InvalidMac => assert_eq!(testfile.expect, Expect::HmacFailure), + DecryptError::KeyDecryptionFailed => todo!(), + #[cfg(feature = "plugin")] + DecryptError::MissingPlugin { .. } => todo!(), + DecryptError::NoMatchingKeys => todo!(), + #[cfg(feature = "plugin")] + DecryptError::Plugin(_) => todo!(), + }, + } +} + +#[derive(Debug, PartialEq, Eq)] +enum Expect { + Success { payload_sha256: [u8; 32] }, + HeaderFailure, + HmacFailure, + PayloadFailure, +} + +struct TestFile { + expect: Expect, + identities: Vec, + passphrases: Vec, + comment: Option, + age_file: Vec, +} + +impl TestFile { + fn parse(filename: &str) -> Self { + let file = File::open(format!("./tests/testdata/testkit/{}", filename)).unwrap(); + let mut r = BufReader::new(file); + let mut line = String::new(); + + fn data<'l>(line: &'l str, prefix: &str) -> &'l str { + line.strip_prefix(prefix).unwrap().trim() + } + + let expect = { + r.read_line(&mut line).unwrap(); + match data(&line, "expect:") { + "success" => { + line.clear(); + r.read_line(&mut line).unwrap(); + let payload = data(&line, "payload:"); + Expect::Success { + payload_sha256: hex::decode(payload).unwrap().try_into().unwrap(), + } + } + "header failure" => Expect::HeaderFailure, + "payload failure" => Expect::PayloadFailure, + "HMAC failure" => Expect::HmacFailure, + e => panic!("Unknown testkit failure '{}'", e), + } + }; + + let _file_key = { + line.clear(); + r.read_line(&mut line).unwrap(); + hex::decode(data(&line, "file key: ")).unwrap() + }; + + let mut identities = vec![]; + let mut passphrases = vec![]; + let mut comment = None; + loop { + line.clear(); + r.read_line(&mut line).unwrap(); + if line.trim().is_empty() { + break; + } + + let (prefix, data) = line.trim().split_once(": ").unwrap(); + match prefix { + "identity" => identities.push(data.to_owned()), + "passphrase" => passphrases.push(data.to_owned()), + "comment" => comment = Some(data.to_owned()), + _ => panic!("Unknown testkit metadata '{}'", prefix), + } + } + + let mut age_file = vec![]; + r.read_to_end(&mut age_file).unwrap(); + + Self { + expect, + identities, + passphrases, + comment, + age_file, + } + } +}