t/adsp.t ........................ 1..6 ok 1 - created verifier ok 2 - new() works ok 3 - parse() works # neutral ok 4 - got expected result ok 5 - parse() works # reject ok 6 - got expected result ok Authentication-Results Header parse error: not expecting a string at /home/willem/repos/net-dns-repository/regression-testing/Mail-DKIM-1.20200907/blib/lib/Mail/DKIM/ARC/Signer.pm line 116. Authentication-Results: Garbage Authentication-Results Header - SHOULD NOT PARSE at /home/willem/repos/net-dns-repository/regression-testing/Mail-DKIM-1.20200907/blib/lib/Mail/DKIM/ARC/Signer.pm line 121. t/arc-draft-sign-tests.t ........ 1..51 ok 1 - headers whitespace surrounding colon ignored - headers_col_wsp ARC-Seal ok 2 - headers whitespace surrounding colon ignored - headers_col_wsp ARC-Message-Signature ok 3 - headers whitespace surrounding colon ignored - headers_col_wsp ARC-Authentication-Results ok 4 - headers ignore eol whitespace - headers_eol_wsp ARC-Seal ok 5 - headers ignore eol whitespace - headers_eol_wsp ARC-Message-Signature ok 6 - headers ignore eol whitespace - headers_eol_wsp ARC-Authentication-Results ok 7 - header field names case insensitive - headers_field_name_case ARC-Seal ok 8 - header field names case insensitive - headers_field_name_case ARC-Message-Signature ok 9 - header field names case insensitive - headers_field_name_case ARC-Authentication-Results ok 10 - header - headers_field_unfold ARC-Seal ok 11 - header - headers_field_unfold ARC-Message-Signature ok 12 - header - headers_field_unfold ARC-Authentication-Results ok 13 - header reduce inline whitespace - headers_inl_wsp ARC-Seal ok 14 - header reduce inline whitespace - headers_inl_wsp ARC-Message-Signature ok 15 - header reduce inline whitespace - headers_inl_wsp ARC-Authentication-Results ok 16 - message body ignore trailing empty lines - message_body_end_lines ARC-Seal ok 17 - message body ignore trailing empty lines - message_body_end_lines ARC-Message-Signature ok 18 - message body ignore trailing empty lines - message_body_end_lines ARC-Authentication-Results ok 19 - message body eol whitespace ignored - message_body_eol_wsp ARC-Seal ok 20 - message body eol whitespace ignored - message_body_eol_wsp ARC-Message-Signature ok 21 - message body eol whitespace ignored - message_body_eol_wsp ARC-Authentication-Results ok 22 - message body inline whitespace reduced - message_body_inl_wsp ARC-Seal ok 23 - message body inline whitespace reduced - message_body_inl_wsp ARC-Message-Signature ok 24 - message body inline whitespace reduced - message_body_inl_wsp ARC-Authentication-Results ok 25 - message body add crlf to end if na - message_body_trail_crlf ARC-Seal ok 26 - message body add crlf to end if na - message_body_trail_crlf ARC-Message-Signature ok 27 - message body add crlf to end if na - message_body_trail_crlf ARC-Authentication-Results ok 28 - i=0 basic test - ar_merged1 ARC-Seal ok 29 - i=0 basic test - ar_merged1 ARC-Message-Signature ok 30 - i=0 basic test - ar_merged1 ARC-Authentication-Results ok 31 - i=0 basic test - ar_merged2 ARC-Seal ok 32 - i=0 basic test - ar_merged2 ARC-Message-Signature ok 33 - i=0 basic test - ar_merged2 ARC-Authentication-Results ok 34 - i=0 basic test - i0_base ARC-Seal ok 35 - i=0 basic test - i0_base ARC-Message-Signature ok 36 - i=0 basic test - i0_base ARC-Authentication-Results ok 37 - i=1 basic test - i1_base ARC-Seal ok 38 - i=1 basic test - i1_base ARC-Message-Signature ok 39 - i=1 basic test - i1_base ARC-Authentication-Results ok 40 - i=1 basic test with failing arc set - i1_base_fail ARC-Seal ok 41 - i=1 basic test with failing arc set - i1_base_fail ARC-Message-Signature ok 42 - i=1 basic test with failing arc set - i1_base_fail ARC-Authentication-Results ok 43 - i=2 basic test - i2_base ARC-Seal ok 44 - i=2 basic test - i2_base ARC-Message-Signature ok 45 - i=2 basic test - i2_base ARC-Authentication-Results ok 46 - i=1 basic test - i2_base_fail ARC-Seal ok 47 - i=1 basic test - i2_base_fail ARC-Message-Signature ok 48 - i=1 basic test - i2_base_fail ARC-Authentication-Results ok 49 - if a chain is failing, dont add another set - no_additional_sig ARC-Seal ok 50 - if a chain is failing, dont add another set - no_additional_sig ARC-Message-Signature ok 51 - if a chain is failing, dont add another set - no_additional_sig ARC-Authentication-Results ok t/arc-draft-validation-tests.t .. 1..168 ok 1 - base test message1 - cv_base1 ARC Result None want None ok 2 - base test message2 - cv_base2 ARC Result None want None ok 3 - empty message - cv_empty ARC Result None want None ok 4 - failing message i=i invalid ams - cv_fail_i1_ams_invalid ARC Result Fail want Fail ok 5 - failing message i=i no ams - cv_fail_i1_ams_na ARC Result Fail want Fail ok 6 - failing message i=i as cv=fail - cv_fail_i1_as_cv_fail ARC Result Fail want fail ok 7 - failing message i=i invalid as b= - cv_fail_i1_as_invalid ARC Result Fail want Fail ok 8 - failing message i=i no as - cv_fail_i1_as_na ARC Result Fail want Fail ok 9 - failing message i=i as cv=Pass - cv_fail_i1_as_pass ARC Result Fail want Fail ok 10 - i=2 base1 AMS(2) invalid - cv_fail_i2_ams_invalid ARC Result Fail want Fail ok 11 - i=2 base1 missing AMS(2) - cv_fail_i2_ams_na ARC Result Fail want Fail ok 12 - i=2 base1 as(1) cv=fail - cv_fail_i2_as1_fail ARC Result Fail want fail ok 13 - i=2 base1 as(1) invalid - cv_fail_i2_as1_invalid ARC Result Fail want Fail ok 14 - i=2 base1 as(1) not available - cv_fail_i2_as1_na ARC Result Fail want Fail ok 15 - i=2 base1 as(1) cv=pass - cv_fail_i2_as1_pass ARC Result Fail want Fail ok 16 - i=2 base1 cv2=fail - cv_fail_i2_as2_fail ARC Result Fail want fail ok 17 - i=2 base1 AS(2) invalid - cv_fail_i2_as2_invalid ARC Result Fail want Fail ok 18 - i=2 base1 AS(1) NA - cv_fail_i2_as2_na ARC Result Fail want Fail ok 19 - i=2 base1 cv2=none - cv_fail_i2_as2_none ARC Result Fail want Fail ok 20 - message with no body - cv_no_body ARC Result None want None ok 21 - message with no headers - cv_no_headers ARC Result None want None ok 22 - passing message i=1 base1 - cv_pass_i1_1 ARC Result Pass want Pass ok 23 - passing message i=1 base2 - cv_pass_i1_2 ARC Result Pass want Pass ok 24 - passing message i=2 base1 - cv_pass_i2_1 ARC Result Pass want Pass ok 25 - i=2 base1 modified from header, ams(1) no longer valid - cv_pass_i2_1_ams1_invalid ARC Result Pass want Pass ok 26 - passing message i=2 base2 - cv_pass_i2_2 ARC Result Pass want Pass ok 27 - passing message i=3 base1 - cv_pass_i3_1 ARC Result Pass want Pass ok 28 - passing message i=4 base1 - cv_pass_i4_1 ARC Result Pass want Pass ok 29 - passing message i=5 base1 - cv_pass_i5_1 ARC Result Pass want Pass ok 30 - Duplicate AMS i=1 - ams_struct_dup ARC Result Fail want Fail ok 31 - AMS i= empty - ams_struct_i_empty ARC Result Fail want Fail ok 32 - AMS i= invalid value - ams_struct_i_invalid ARC Result Fail want Fail ok 33 - AMS i= NA - ams_struct_i_na ARC Result Fail want Fail ok 34 - AMS i= zero - ams_struct_i_zero ARC Result Fail want Fail ok 35 - Missing AMS i=1 - ams_struct_missing ARC Result Fail want Fail ok 36 - ams format tag whitespace around equals ignored - ams_format_eq_wsp ARC Result Pass want Pass ok 37 - ams format invalid tag key - ams_format_inv_tag_key ARC Result Fail want Fail ok 38 - ams format tag whitespace around semicolon ignored - ams_format_sc_wsp ARC Result Pass want Pass ok 39 - tags are not de duplicated - ams_format_tags_dup ARC Result Fail want Fail ok 40 - tag keys are case sensitive - ams_format_tags_key_case ARC Result Fail want Fail ok 41 - additional semicolons are invalid - ams_format_tags_sc ARC Result Fail want Fail ok 42 - ams trailing semi colon no effect - ams_format_tags_trail_sc ARC Result Pass want Pass ok 43 - unknown tags still valid - ams_format_tags_unknown ARC Result Pass want Pass ok 44 - tag values are case sensitive - ams_format_tags_val_case ARC Result Fail want Fail ok 45 - ams tag values whitespace sensitive - ams_format_tags_wsp ARC Result Fail want Fail ok 46 - a= empty - ams_fields_a_empty ARC Result Fail want Fail ok 47 - a= not avaliable - ams_fields_a_na ARC Result Fail want Fail ok 48 - a= unknown algorithm - ams_fields_a_unknown ARC Result Fail want Fail ok 49 - ams b= - ams_fields_b_base64 ARC Result Fail want Fail ok 50 - ams b= canonicalization colon whitespace removed - ams_fields_b_col_wsp ARC Result Pass want Pass ok 51 - ams b= empty - ams_fields_b_empty ARC Result Fail want Fail ok 52 - ams b= canonicalization eol whitespace stripped - ams_fields_b_eol_wsp ARC Result Pass want Pass ok 53 - ams b= canonicalization header key case insensitive - ams_fields_b_head_case ARC Result Pass want Pass ok 54 - ams b= canonicalization headers unfolded - ams_fields_b_head_unfold ARC Result Pass want Pass ok 55 - ams b= ignores whitespace - ams_fields_b_ignores_wsp ARC Result Pass want Pass ok 56 - ams b= canonicalization inline whitespace reduced - ams_fields_b_inl_wsp ARC Result Pass want Pass ok 57 - ams b= w/ modified headers 1 - ams_fields_b_mod_headers1 ARC Result Fail want Fail ok 58 - ams b= w/ modified headers 2 - ams_fields_b_mod_headers2 ARC Result Fail want Fail ok 59 - ams b= w/ modified value - ams_fields_b_mod_sig ARC Result Fail want Fail ok 60 - ams b= not available - ams_fields_b_na ARC Result Fail want Fail ok 61 - ams bh= not base64 - ams_fields_bh_base64 ARC Result Fail want Fail ok 62 - ams bh= empty - ams_fields_bh_empty ARC Result Fail want Fail ok 63 - ams bh= ignores wsp - ams_fields_bh_ignores_wsp ARC Result Pass want Pass ok 64 - ams bh= modified body - ams_fields_bh_mod_body ARC Result Fail want Fail ok 65 - ams bh= modified sig - ams_fields_bh_mod_sig ARC Result Fail want Fail ok 66 - ams bh= not available - ams_fields_bh_na ARC Result Fail want Fail ok 67 - ams bh= relaxed canonicalization ignores end of body empty lines - ams_fields_bh_rel_end_lines ARC Result Pass want Pass ok 68 - ams bh= relaxed canonicalization deletes trailing whitespace - ams_fields_bh_rel_eol_wsp ARC Result Pass want Pass ok 69 - ams bh= relaxed canonicalization reduces inline whitespace - ams_fields_bh_rel_inl_wsp ARC Result Pass want Pass ok 70 - ams bh= relaxed canonicalization adds crlf at end of body if non existant - ams_fields_bh_rel_trail_crlf ARC Result Pass want Pass ok 71 - ams bh= simple canonicalization - ams_fields_bh_sim_base ARC Result Pass want Pass ok 72 - ams bh= simple canonicalization ignores ending empty lines - ams_fields_bh_sim_end_lines ARC Result Pass want Pass ok 73 - ams bh= simple canonicalization doesnt reduce wsp - ams_fields_bh_sim_inl_wsp ARC Result Fail want Fail ok 74 - ams c= empty - ams_fields_c_empty ARC Result Fail want Fail ok 75 - ams c= invalid - ams_fields_c_invalid ARC Result Fail want Fail ok 76 - ams c= not available - ams_fields_c_na ARC Result Fail want Fail ok 77 - ams c= relaxed/relaxed - ams_fields_c_rr ARC Result Pass want Pass ok 78 - ams c= relaxed/simple - ams_fields_c_rs ARC Result Pass want Pass ok 79 - ams c= simple/relaxed - ams_fields_c_sr ARC Result Pass want Pass ok 80 - ams c= simple/simple - ams_fields_c_ss ARC Result Pass want Pass ok 81 - ams d= empty - ams_fields_d_empty ARC Result Fail want Fail ok 82 - ams d= not valid domain name - ams_fields_d_invalid ARC Result Fail want Fail ok 83 - ams d= not available - ams_fields_d_na ARC Result Fail want Fail ok 84 - ams h= case insensitive - ams_fields_h_case ARC Result Pass want Pass ok 85 - ams h= colon folding whitspace ignored - ams_fields_h_cws1 ARC Result Pass want Pass ok 86 - ams h= colon folding whitspace ignored - ams_fields_h_cws2 ARC Result Pass want Pass ok 87 - ams h= with duplicated header correct order(bottom up) - ams_fields_h_dup1 ARC Result Pass want Pass ok 88 - ams h= with duplicated header not correct order(bottom up) - ams_fields_h_dup2 ARC Result Fail want Fail ok 89 - ams h= empty - ams_fields_h_empty ARC Result Pass want Pass ok 90 - ams h= signing non-existant header field is then added(MIME-Version) - ams_fields_h_empty_added ARC Result Fail want Fail ok 91 - ams fields h includes AMS1 - ams_fields_h_includes_ams ARC Result Pass want Pass ok 92 - ams fields h includes AS(1) - ams_fields_h_includes_as ARC Result Fail want Fail ok 93 - ams h= blank sig-header - ams_fields_h_mis_hdr ARC Result Pass want Pass ok 94 - ams h= not available - ams_fields_h_na ARC Result Fail want Fail ok 95 - ams h= signing non-existant header field - ams_fields_h_non_existant ARC Result Pass want Pass ok 96 - ams h= duplicated non-existant header field - ams_fields_h_non_existant_dup ARC Result Pass want Pass ok 97 - ams h= mis ordered - ams_fields_h_order ARC Result Fail want Fail ok 98 - duplicate ams i=1 order 1 - ams_fields_i_dup1 ARC Result Fail want Fail ok 99 - duplicate ams i=1 order 2 - ams_fields_i_dup2 ARC Result Fail want Fail ok 100 - ams s= empty - ams_fields_s_empty ARC Result Fail want Fail ok 101 - ams s= not available - ams_fields_s_na ARC Result Fail want Fail ok 102 - ams t= empty - ams_fields_t_empty ARC Result Fail want Fail ok 103 - ams t= invalid - ams_fields_t_invalid ARC Result Fail want Fail ok 104 - ams t= not available - ams_fields_t_na ARC Result Pass want Pass ok 105 - Duplicate AS for i=1 - as_struct_dup ARC Result Fail want Fail ok 106 - AS i= empty - as_struct_i_empty ARC Result Fail want Fail ok 107 - AS i= invalid value - as_struct_i_invalid ARC Result Fail want Fail ok 108 - AS i= NA - as_struct_i_na ARC Result Fail want Fail ok 109 - AS i= 0 - as_struct_i_zero ARC Result Fail want Fail ok 110 - Missing AS for i=1 - as_struct_missing ARC Result Fail want Fail ok 111 - as format tag whitespace around equals ignored - as_format_eq_wsp ARC Result Pass want Pass ok 112 - as format invalid tag key - as_format_inv_tag_key ARC Result Fail want Fail ok 113 - as format tag whitespace around semicolon ignored - as_format_sc_wsp ARC Result Pass want Pass ok 114 - as dup tag error - as_format_tags_dup ARC Result Fail want Fail ok 115 - as tag key case - as_format_tags_key_case ARC Result Fail want Fail ok 116 - as random semi colon error - as_format_tags_sc ARC Result Fail want Fail ok 117 - as trailing ; no effect - as_format_tags_trail_sc ARC Result Pass want Pass ok 118 - as unknown tags no effect - as_format_tags_unknown ARC Result Pass want Pass ok 119 - as tag value case - as_format_tags_val_case ARC Result Fail want Fail ok 120 - as whitespace sensitive - as_format_tags_wsp ARC Result Fail want Fail ok 121 - as a= is empty - as_fields_a_empty ARC Result Fail want Fail ok 122 - as a= not avaliable - as_fields_a_na ARC Result Fail want Fail ok 123 - as a= unknown - as_fields_a_unknown ARC Result Fail want Fail ok 124 - as b= with 1024 bit key - as_fields_b_1024 ARC Result Pass want Pass ok 125 - as b= with 2048 bit key - as_fields_b_2048 ARC Result Pass want Pass ok 126 - as b= with 512 bit key - as_fields_b_512 ARC Result Fail want Fail ok 127 - as b= modified aar1 - as_fields_b_aar1 ARC Result Fail want Fail ok 128 - as b= modified ams1 - as_fields_b_ams1 ARC Result Fail want Fail ok 129 - as b= modified asb1 - as_fields_b_asb1 ARC Result Fail want Fail ok 130 - as b= not base64 - as_fields_b_base64 ARC Result Fail want Fail ok 131 - as b= canonicalization strips whitespace around colon - as_fields_b_col_wsp ARC Result Pass want Pass ok 132 - as b= empty - as_fields_b_empty ARC Result Fail want Fail ok 133 - as b= canonicalization eol whitespace stripped - as_fields_b_eol_wsp ARC Result Pass want Pass ok 134 - as b= canonicalization header key case insensitive - as_fields_b_head_case ARC Result Pass want Pass ok 135 - as b= canonicalization headers unfolded - as_fields_b_head_unfold ARC Result Pass want Pass ok 136 - as b= ignores whitespace - as_fields_b_ignores_wsp ARC Result Pass want Pass ok 137 - as b= canonicalization inline whitespace reduced - as_fields_b_inl_wsp ARC Result Pass want Pass ok 138 - as b= with modified signature - as_fields_b_mod_sig ARC Result Fail want Fail ok 139 - as b= not available - as_fields_b_na ARC Result Fail want Fail ok 140 - as cv= empty - as_fields_cv_empty ARC Result Fail want Fail ok 141 - as cv= invalid - as_fields_cv_invalid ARC Result Fail want Fail ok 142 - as cv= not avaliable - as_fields_cv_na ARC Result Fail want Fail ok 143 - as d= empty - as_fields_d_empty ARC Result Fail want Fail ok 144 - as d= invalid - as_fields_d_invalid ARC Result Fail want Fail ok 145 - as d= not available - as_fields_d_na ARC Result Fail want Fail ok 146 - duplicate as - as_fields_i_dup ARC Result Fail want Fail ok 147 - duplicate AS i=2 - as_fields_i_dup2 ARC Result Fail want Fail ok 148 - as fields i= missing - as_fields_i_missing ARC Result Fail want Fail ok 149 - as s= empty - as_fields_s_empty ARC Result Fail want Fail ok 150 - as s= not available - as_fields_s_na ARC Result Fail want Fail ok 151 - as t= empty - as_fields_t_empty ARC Result Fail want Fail ok 152 - as t= invalid - as_fields_t_invalid ARC Result Fail want Fail ok 153 - as t= na - as_fields_t_na ARC Result Pass want Pass ok 154 - Duplicated AAR for i=1 - aar_struct_dup ARC Result Fail want Fail ok 155 - AAR i= empty - aar_struct_i_empty ARC Result Fail want Fail ok 156 - AAR i= NA - aar_struct_i_na ARC Result Fail want Fail ok 157 - AAR i=0 - aar_struct_i_zero ARC Result Fail want Fail ok 158 - AAR i= invalid value - aar_struct_invalid ARC Result Fail want Fail ok 159 - Missing AAR for i=1 - aar_struct_missing ARC Result Fail want Fail ok 160 - aar missing for i=2 - aar2_missing ARC Result Fail want Fail ok 161 - arc authentication results no i= tag - aar_i_missing ARC Result Fail want Fail ok 162 - arc authentication results i= no semicolon - aar_i_no_semi ARC Result Fail want Fail ok 163 - arc authentication results i= not prefixed - aar_i_not_prefixed ARC Result Fail want Fail ok 164 - arc authentication results wrong i= tag - aar_i_wrong ARC Result Fail want Fail ok 165 - missing arc authentication results - aar_missing ARC Result Fail want Fail ok 166 - differing domains & selectors across ams & as - ams_as_diff_s_d ARC Result Pass want Pass ok 167 - public key invalid - public_key_invalid ARC Result Fail want Fail ok 168 - public key not available - public_key_na ARC Result Fail want Fail ok t/arc-signer.t .................. 1..12 ok 1 - new() works ok 2 - result() is skipped ok 3 - result() is skipped ok 4 - result() is sealed ok 5 - AS has cv=none ok 6 - AAR has AR contents ok 7 - result() is sealed ok 8 - AS has cv=pass ok 9 - AAR has AR contents and expected formatting ok 10 - result() is sealed ok 11 - AS has cv=fail ok 12 - AAR has AR contents and expected formatting ok t/author-pod-syntax.t ........... skipped: these tests are for testing by the author t/dev-manifest.t ................ skipped: Author tests not required for installation t/external_signer.t ............. 1..3 ok 1 - new() works ok 2 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=example.org; h=from:subject; s=test; bh=5EPkzXwxglEaVOaXSvuqWjSMqEs=; b=AAAAAAAA ok 3 - got expected signature value ok t/Mail-DKIM.t ................... 1..1 ok 1 - use Mail::DKIM; ok t/policy.t ...................... 1..19 ok 1 - new() works ok 2 - parse() works ok 3 - fetch() works (requires DNS) ok 4 - not the default policy ok 5 - parse() works (no tags) ok 6 - note tag has default value ok 7 - note tag has been changed ok 8 - policy tag has default value ok 9 - policy tag has been changed ok 10 - testing flag has default value ok 11 - as_string() method is implemented ok 12 # skip these tests depend on local resolver behaviour and may fail unnecessarily ok 13 # skip these tests depend on local resolver behaviour and may fail unnecessarily ok 14 # skip these tests depend on local resolver behaviour and may fail unnecessarily ok 15 # skip these tests depend on local resolver behaviour and may fail unnecessarily ok 16 # skip these tests depend on local resolver behaviour and may fail unnecessarily ok 17 # skip test depends on specific DNS setup at test site ok 18 # skip test depends on specific DNS setup at test site ok 19 # skip this test is currently failing ok t/public_key.t .................. 1..5 ok 1 - public key exists ok 2 - public key should not exist ok 3 - reason given is NODATA or NXDOMAIN ok 4 # skip These tests are currently failing due to external factors ok 5 # skip test depends on specific DNS setup at test site ok t/signature.t ................... 1..12 ok 1 - new() works ok 2 - algorithm() works ok 3 - canonicalization() works (I) ok 4 - canonicalization() works (II) ok 5 - canonicalization() works (III) ok 6 - canonicalization() works (IV) ok 7 - parse() works (I) ok 8 - parse() works (II) ok 9 - parse() correctly handles spaces #BEFORE-> DKIM-Signature: a = rsa-sha1; c = simple/simple; d = example.org ; h = Date : From : MIME-Version : To : Subject : Content-Type : Content-Transfer-Encoding; s = foo; b=aqanVhX/f1gmXSdVeX3KdmeKTZb1mkj1y111tZRp/8tXWX/srpGu2SJ/+O06fQv8YtgP0BrSRpEC WEtFgMHcDf0ZFLQgtm0f7vPBO98vDtB7dpDExzHyTsK9rxm8Cf18 #SAFE---> DKIM-Signature: a = rsa-sha1; c = simple/simple; d = example.org ; h = Date : From : MIME-Version : To : Subject : Content-Type : Content-Transfer-Encoding; s = foo; b=aqanVhX/f1gmXSdVeX3KdmeKTZb1mkj1y111tZRp/8tXWX/srpGu2SJ/+O06fQv8YtgP0 BrSRpECWEtFgMHcDf0ZFLQgtm0f7vPBO98vDtB7dpDExzHyTsK9rxm8Cf18 #PRETTY-> DKIM-Signature: a=rsa-sha1; c=simple/simple; d=example.org; h=Date:From :MIME-Version:To:Subject:Content-Type:Content-Transfer-Encoding; s=foo; b=aqanVhX/f1gmXSdVeX3KdmeKTZb1mkj1y111tZRp/8tXWX/srpGu2S J/+O06fQv8YtgP0BrSRpECWEtFgMHcDf0ZFLQgtm0f7vPBO98vDtB7dpDExzHyTs K9rxm8Cf18 ok 10 - any lines exceed 72 characters ok 11 - parse() works (III) #BEFORE-> DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ijs.si; s=jakla2; t=1225813757; bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=; b= #AFTER--> DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ijs.si; s=jakla2; t=1225813757; bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=; b=blah #PRETTY-> DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ijs.si; s=jakla2; t=1225813757; bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=; b= blah ok 12 - signature preserved with prettify_safe ok t/signer.t ...................... 1..31 ok 1 - new() works ok 2 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=example.org; h=from:subject; s=test; bh=5EPkzXwxglEaVOaXSvuqWjSMqEs=; b=dpM67y4q9hG+TKu5vSoxuky/U1m+cWRcApiIABsyhwDTRhKbtmycb2ZJgY0iz0HNtCIDMVc94VWhLZ4Ktq2Q05011qBXSO/hzuhOlQdg1WuG6SsZiSwgb+u1YWU2KlO3jFhKH8pUVMBjvgq0GnvmDPXChEexI3nYA5lFAQYAz9A= ok 3 - got expected signature value ok 4 - new() works ok 5 - signature() works ok 6 - new() works ok 7 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=example.org; h=from:subject; s=test; i=bob@example.org; t=1639654966; bh=5EPkzXwxglEaVOaXSvuqWjSMqEs=; b=fFClxTDFQ6eCUgZF/IdqXdngtqPnairC2eI8uOk+j6R1t3+nOnxSOEfHK+Cbb8F6KR/xnx/ZCbdnGiHm40fTk4F7gRleiko3EyGgptp2KFO7ISa5hkEJDhPvBJ7uXnKQVhhxdGrEJfpbI0PwXZC80e2+1n/pSXSSpVjo02bx3SE= ok 8 - subject was signed ok 9 - from was signed ok 10 - received was excluded ok 11 - comments was excluded ok 12 - got expected identity value ok 13 - found timestamp value ok 14 - new() works ok 15 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=example.org; h=from:subject:subject:x-test:x-test:x-tests; s=test; i=bob@example.org; t=1639654966; bh=5EPkzXwxglEaVOaXSvuqWjSMqEs=; b=S2sse6rD9DmnD3WOKGgcnHtJbz7RGiSvfQIio8aymgnSb3jwwryUxiomyVh64bZk7U9SZOItn9vJFJdp1kBl80QO83e1PC5AK+ascDASA//n+bEXyQw8mo1HRzCtu+p7IFe+MpaKg4wGB148dJ6Ohfabi0dYH9IO/T7DH6c2F1w= ok 16 - subject was over signed ok 17 - x-test was all signed ok 18 - x-tests was signed ok 19 - x-tests was signed only once ok 20 - from was signed ok 21 - date was excluded ok 22 - comments was excluded ok 23 - got expected identity value ok 24 - found timestamp value # Error: cannot read t/non_existent_file_!!: No such file or directory ok 25 - new() with bogus key file dies as expected # Error: cannot read t/unreadable_file: No such file or directory ok 26 - new() with bogus key file dies as expected ok 27 - signature() works ok 28 - signature() works ok 29 - signature() works ok 30 - subject was signed ok 31 - from was signed ok t/signer_dk.t ................... 1..8 ok 1 - signature() works # DomainKey-Signature: a=rsa-sha1; c=simple; d=messiah.edu; q=dns; s=test8; b=TL93PzPvedAijHChCAt+Mh4Pd8SGxgHejrGw3Jmh2qEN6BdFWihWMWe/fXcOR2bRe4D6117HYMwwKY+mQFWVfa9mmihsR9+DLEQx1D5Jdy+WhWsDU1PJCJ9CAQ5Hbnex3UPunbfh/N23/8c7mtM2NTVVnEAfpSQPjxMUgmyuPh4= ok 2 - got expected signature ok 3 - signature() works # DomainKey-Signature: a=rsa-sha1; c=simple; d=messiah.edu; h=from:subject; q=dns; s=test8; b=n+qfVkhQPch80atOC7ccFHnnZwruL3nBTO2rkQYCVFLp4Elj7Fl7mm9a5C/cyRaqDJKrxLmWIFffgzHOJRj3BnN6efqvEm4WqSCTnQLc1rEdnEznhKlzma29yev1Ck7IvvsLPQMSFuoTTkQQqUWv/SZC71WDRgtKX1Zv4hHNj5E= ok 4 - got expected signature ok 5 - signature() works # DomainKey-Signature: a=rsa-sha1; c=nofws; d=messiah.edu; q=dns; s=test8; b=JWzIzvCZBIYnoMebzKU++zJ3x3FN6TfDQ45eBcN1cck3HdEbVtKBA6eh6ycKmjVGUFqpSbwvIL3BTEPDwEY79aczy9tn+jdiO2TcUDtNYdnlHi3oGbYAr8dNK1yD/dMnRXWXcL9IdLY3OW5v1QSUpsRcuPygUOvMYUe2Y96UdZo= ok 6 - got expected signature ok 7 - signature() works # DomainKey-Signature: a=rsa-sha1; c=nofws; d=messiah.edu; h=from:subject; q=dns; s=test8; b=fkDC8iF+FCJ29ed/P4mJDGPp8KJu1hWfK+4wQ7Gg9LT34yg8SkL9Gf0GYJ5Yt9v/mQ4ZoYSy3N1oPZH4D2E+jc4xGqqPvI9JJ2Y/kT9DWPf7UxmjvJYW9kNKY1vNjlxDKXhc19qdeADIlfrgyuhi/aiL2n248B1wLfic7NA5AwA= ok 8 - got expected signature ok t/signer_policy.t ............... 1..24 ok 1 - processed message ok 2 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=different-domain.example; h=from:subject; s=beta; bh=9BN++4wnqO4ajX1d2BOaBC4kJ+RiukVHCVGcdRe+yWQ=; b=fFe/FwX9+Qdlk7k9KzXpi1Pt0y2eShePCY01nPo7WC5Hyiyx2vDIE7A21vB2ihv96f5AaKHOE0haLy7ONPP+l9UITdK40APPON5uSL0BaZPYo6JO2b0l8YpLKdxmD/rFAMXLypP55Qov+kpzgYT3YErVijcimp9wAMyMQ9x2kyQ= ok 3 - got expected domain in signature ok 4 - got expected canonicalization method in signature ok 5 - got expected algorithm in signature ok 6 - processed message ok 7 - signature() works # signature=DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=different-domain.example; h=from:subject; s=beta; bh=9BN++4wnqO4ajX1d2BOaBC4kJ+RiukVHCVGcdRe+yWQ=; b=fFe/FwX9+Qdlk7k9KzXpi1Pt0y2eShePCY01nPo7WC5Hyiyx2vDIE7A21vB2ihv96f5AaKHOE0haLy7ONPP+l9UITdK40APPON5uSL0BaZPYo6JO2b0l8YpLKdxmD/rFAMXLypP55Qov+kpzgYT3YErVijcimp9wAMyMQ9x2kyQ= ok 8 - got expected domain in signature ok 9 - processed message ok 10 - got signature ok 11 - processed message ok 12 - no signature ok 13 - processed message ok 14 - got signature # signature=DomainKey-Signature: a=rsa-sha1; c=nofws; d=different-domain.example; h=from:subject; q=dns; s=beta; b=cLTgcEshwaUkcP4eEPhLu+TAfzF0LUAzRt8bvjQv/gmtCxXew+/vjw310c3w5Y4v1H8D7F8edFZTmyShHBZGlPSnLNSnCJNI1q2tioO6gd9Q2y6rJBHK8DKegV0oE05L5hayZzsVOv4JNbWSRSLGCDKZLwTv7tlXDV44hlwTu84= ok 15 - got DomainKeys signature ok 16 - got expected domain in signature ok 17 - got expected canonicalization method in signature ok 18 - no bh= tag in signature ok 19 - processed message ok 20 - got signature # signature=DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=different-domain.example; h=from:subject; s=beta; bh=9BN++4wnqO4ajX1d2BOaBC4kJ+RiukVHCVGcdRe+yWQ=; b=fFe/FwX9+Qdlk7k9KzXpi1Pt0y2eShePCY01nPo7WC5Hyiyx2vDIE7A21vB2ihv96f5AaKHOE0haLy7ONPP+l9UITdK40APPON5uSL0BaZPYo6JO2b0l8YpLKdxmD/rFAMXLypP55Qov+kpzgYT3YErVijcimp9wAMyMQ9x2kyQ= ok 21 - got DKIM signature ok 22 - got 2 signatures ok 23 - first is DomainKeys signature ok 24 - second is DKIM signature ok t/simple_canonicalization.t ..... 1..4 ok 1 - create signature works ok 2 - new() works ok 3 - finish_message() works ok 4 - got expected result ok t/textwrap.t .................... 1..16 ok 1 - new() works # basic wrapping # ---------- # Mary had a # little # lamb, # whose # fleece was # white as # snow. # ---------- ok 2 - basic wrapping got expected number of lines # basic wrapping- words added separately, space following each # ---------- # Mary had a # little # lamb, # whose # fleece was # white as # snow. # ---------- ok 3 - same result when words added separately, space following each # basic wrapping- words added separately, space preceding each # ---------- # Mary had a # little # lamb, # whose # fleece was # white as # snow. # ---------- ok 4 - same result when words added separately, space preceding each # with second-line indent # ---------- # Mary had a # little # lamb, # whose # fleece # was # white as # snow. # ---------- ok 5 - first line looks ok # colon-separated list # ---------- # apple: # orange: # banana: # apricot: # blueberry: # strawberry-kiwi # ---------- ok 6 - first line looks ok ok 7 - second line looks ok ok 8 - over-long word did not get split # colon-separated list with spaces # ---------- # apple : # orange : # apricot : # kiwi # ---------- ok 9 - first line begins with space ok 10 - last line ends with space ok 11 - middle lines neither begin nor end with space # colon-separated list, split before colons # ---------- # apple # :orange # :banana # :apricot # :lime:kiwi # ---------- ok 12 - first line looks ok ok 13 - second line looks ok ok 14 - last line looks ok # # ---------- # appleorangebananaapricot # ---------- ok 15 - no wrapping took place # # ---------- # apple # orange # banana # apricot # ---------- ok 16 - no long lines ok t/verifier.t .................... 1..105 ok 1 - new() works ok 2 - new_object() works ok 3 - able to read sample email ok 4 - sample has proper line endings ok 5 - result() works ok 6 # skip older-prestandard DKIM signatures ok 7 # skip older-prestandard DKIM signatures ok 8 # skip older-prestandard DKIM signatures ok 9 # skip older-prestandard DKIM signatures ok 10 # skip older-prestandard DKIM signatures # verifying message 'mine_ietf01_1.txt' # result: pass ok 11 - 'mine_ietf01_1.txt' should 'pass' # verifying message 'mine_ietf01_2.txt' # result: pass ok 12 - 'mine_ietf01_2.txt' should 'pass' # verifying message 'mine_ietf01_3.txt' # result: pass ok 13 - 'mine_ietf01_3.txt' should 'pass' # verifying message 'mine_ietf01_4.txt' # result: pass ok 14 - 'mine_ietf01_4.txt' should 'pass' # verifying message 'mine_ietf05_1.txt' # result: pass ok 15 - 'mine_ietf05_1.txt' should 'pass' # verifying message 'good_ietf01_1.txt' # result: pass ok 16 - 'good_ietf01_1.txt' should 'pass' # verifying message 'good_ietf01_2.txt' # result: pass ok 17 - 'good_ietf01_2.txt' should 'pass' # verifying message 'good_rfc4871_3.txt' # result: pass ok 18 - 'good_rfc4871_3.txt' should 'pass' # verifying message 'good_rfc4871_4.txt' # result: pass ok 19 - 'good_rfc4871_4.txt' should 'pass' # verifying message 'good_1878523.txt' # result: pass ok 20 - 'good_1878523.txt' should 'pass' # verifying message 'good_83176.txt' # result: pass ok 21 - 'good_83176.txt' should 'pass' # verifying message 'multiple_1.txt' # result: pass ok 22 - 'multiple_1.txt' should 'pass' # verifying message 'multiple_2.txt' # result: pass ok 23 - 'multiple_2.txt' should 'pass' ok 24 - first signature is 'invalid' ok 25 - second signature is 'pass' ok 26 - third signature is 'fail' # verifying message 'good_qp_1.txt' # result: pass ok 27 - 'good_qp_1.txt' should 'pass' # verifying message 'good_qp_2.txt' # result: pass ok 28 - 'good_qp_2.txt' should 'pass' # verifying message 'good_qp_3.txt' # result: pass ok 29 - 'good_qp_3.txt' should 'pass' # verifying message 'bad_ietf01_1.txt' # result: fail (body has been altered) ok 30 - 'bad_ietf01_1.txt' should 'fail' ok 31 - determined body had been altered # verifying message 'bad_ietf01_2.txt' # result: fail (message has been altered) ok 32 - 'bad_ietf01_2.txt' should 'fail' ok 33 - determined message had been altered # verifying message 'bad_ietf01_3.txt' # result: fail (bad RSA signature) ok 34 - 'bad_ietf01_3.txt' should 'fail' ok 35 - determined RSA failure # verifying message 'bad_1.txt' # result: fail (OpenSSL error: data too small for key size) ok 36 - 'bad_1.txt' should 'fail' # fail (OpenSSL error: data too small for key size) ok 37 - determined OpenSSL error # verifying message 'bad_1878954.txt' # result: fail (message has been altered) ok 38 - 'bad_1878954.txt' should 'fail' # verifying message 'good_dk_gmail.txt' # result: pass ok 39 - 'good_dk_gmail.txt' should 'pass' # verifying message 'good_dk_yahoo.txt' # result: pass ok 40 - 'good_dk_yahoo.txt' should 'pass' # verifying message 'good_dk_1.txt' # result: pass ok 41 - 'good_dk_1.txt' should 'pass' # verifying message 'good_dk_2.txt' # result: pass ok 42 - 'good_dk_2.txt' should 'pass' # verifying message 'good_dk_3.txt' # result: pass ok 43 - 'good_dk_3.txt' should 'pass' # verifying message 'good_dk_4.txt' # result: pass ok 44 - 'good_dk_4.txt' should 'pass' # verifying message 'good_dk_5.txt' # result: pass ok 45 - 'good_dk_5.txt' should 'pass' # verifying message 'good_dk_6.txt' # result: pass ok 46 - 'good_dk_6.txt' should 'pass' # verifying message 'good_dk_7.txt' # result: pass ok 47 - 'good_dk_7.txt' should 'pass' # verifying message 'dk_headers_1.txt' # result: pass ok 48 - 'dk_headers_1.txt' should 'pass' # verifying message 'dk_headers_2.txt' # result: pass ok 49 - 'dk_headers_2.txt' should 'pass' # verifying message 'bad_dk_1.txt' # result: invalid (bad identity) ok 50 - 'bad_dk_1.txt' should 'invalid' # verifying message 'bad_dk_2.txt' # result: invalid (bad identity) ok 51 - 'bad_dk_2.txt' should 'invalid' ok 52 # skip missing q= tag on DomainKey signature accepted # verifying message 'bad_dk_4.txt' # result: invalid (unsupported query protocol, q=) ok 53 - 'bad_dk_4.txt' should 'invalid' # verifying message 'bad_dk_5.txt' # result: invalid (unsupported query protocol, q=bogus) ok 54 - 'bad_dk_5.txt' should 'invalid' # verifying message 'dk_multiple_1.txt' # result: pass ok 55 - 'dk_multiple_1.txt' should 'pass' ok 56 - found two signatures ok 57 - first signature is 'pass' ok 58 - second signature is 'pass' # verifying message 'no_body_1.txt' # result: pass ok 59 - 'no_body_1.txt' should 'pass' # verifying message 'no_body_2.txt' # result: pass ok 60 - 'no_body_2.txt' should 'pass' # verifying message 'no_body_3.txt' # result: pass ok 61 - 'no_body_3.txt' should 'pass' # verifying message 'ignore_1.txt' # result: invalid (unsupported version 5) ok 62 - 'ignore_1.txt' should 'invalid' # verifying message 'ignore_2.txt' # result: invalid (unsupported algorithm rsa-md5) ok 63 - 'ignore_2.txt' should 'invalid' # verifying message 'ignore_3.txt' # result: invalid (unsupported algorithm dsa-sha1) ok 64 - 'ignore_3.txt' should 'invalid' # verifying message 'ignore_4.txt' # result: invalid (unsupported canonicalization future/simple) ok 65 - 'ignore_4.txt' should 'invalid' # verifying message 'ignore_5.txt' # result: invalid (unsupported query protocol, q=http) ok 66 - 'ignore_5.txt' should 'invalid' # verifying message 'ignore_6.txt' # result: invalid (unsupported query protocol, q=dns/special) ok 67 - 'ignore_6.txt' should 'invalid' # verifying message 'ignore_7.txt' # result: invalid (signature is expired) ok 68 - 'ignore_7.txt' should 'invalid' # verifying message 'ignore_8.txt' # result: invalid (bad identity) ok 69 - 'ignore_8.txt' should 'invalid' # verifying message 'goodkey_1.txt' # result: pass ok 70 - 'goodkey_1.txt' should 'pass' # verifying message 'goodkey_2.txt' # result: pass ok 71 - 'goodkey_2.txt' should 'pass' # verifying message 'goodkey_3.txt' # result: pass ok 72 - 'goodkey_3.txt' should 'pass' # verifying message 'goodkey_4.txt' # result: pass ok 73 - 'goodkey_4.txt' should 'pass' # verifying message 'badkey_1.txt' # result: invalid (public key: not available) ok 74 - 'badkey_1.txt' should 'invalid' ok 75 - detail mentions public key # verifying message 'badkey_2.txt' # result: invalid (public key: revoked) ok 76 - 'badkey_2.txt' should 'invalid' ok 77 - detail mentions public key # verifying message 'badkey_3.txt' # result: invalid (public key: unsupported version) ok 78 - 'badkey_3.txt' should 'invalid' ok 79 - detail mentions public key # verifying message 'badkey_4.txt' # result: invalid (public key: syntax error) ok 80 - 'badkey_4.txt' should 'invalid' ok 81 - detail mentions public key # verifying message 'badkey_5.txt' # result: invalid (public key: unsupported key type) ok 82 - 'badkey_5.txt' should 'invalid' ok 83 - detail mentions public key # verifying message 'badkey_6.txt' # result: invalid (public key: does not support email) ok 84 - 'badkey_6.txt' should 'invalid' ok 85 - detail mentions public key # verifying message 'badkey_7.txt' # result: invalid (public key: does not support hash algorithm 'sha1') ok 86 - 'badkey_7.txt' should 'invalid' ok 87 - detail mentions public key # verifying message 'badkey_8.txt' # result: invalid (public key: granularity mismatch) ok 88 - 'badkey_8.txt' should 'invalid' ok 89 - detail mentions public key # verifying message 'badkey_9.txt' # result: invalid (public key: granularity is empty) ok 90 - 'badkey_9.txt' should 'invalid' ok 91 - detail mentions public key # verifying message 'badkey_10.txt' # result: invalid (public key: does not support signing subdomains) ok 92 - 'badkey_10.txt' should 'invalid' ok 93 - detail mentions public key # verifying message 'badkey_11.txt' # result: invalid (public key: does not support hash algorithm 'sha256') ok 94 - 'badkey_11.txt' should 'invalid' ok 95 - detail mentions public key # verifying message 'badkey_12.txt' # result: invalid (public key: granularity mismatch) ok 96 - 'badkey_12.txt' should 'invalid' ok 97 - detail mentions public key # verifying message 'badkey_13.txt' # result: invalid (public key: granularity mismatch) ok 98 - 'badkey_13.txt' should 'invalid' ok 99 - detail mentions public key # verifying message 'badkey_14.txt' # result: invalid (public key: DNS error: Query timed out) ok 100 - 'badkey_14.txt' should 'invalid' ok 101 - detail mentions public key ok 102 - type of dns failure # verifying message 'badkey_15.txt' # result: invalid (public key: DNS error: SERVFAIL) ok 103 - 'badkey_15.txt' should 'invalid' ok 104 - detail mentions public key ok 105 - type of dns failure ok t/verifier_strict.t ............. 1..4 # verifying message 'good_1878523.txt' # result: invalid (unsupported algorithm rsa-sha1) ok 1 - 'good_1878523.txt' should 'invalid' # verifying message 'good_ietf01_1.txt' # result: fail (Key length 768 too short) ok 2 - 'good_ietf01_1.txt' should 'fail' # verifying message 'good_qp_1.txt' # result: invalid (unsupported algorithm rsa-sha1) ok 3 - 'good_qp_1.txt' should 'invalid' # verifying message 'mine_ietf01_3.txt' # result: pass ok 4 - 'mine_ietf01_3.txt' should 'pass' ok All tests successful. Files=18, Tests=469, 3 wallclock secs ( 0.10 usr 0.01 sys + 2.04 cusr 0.28 csys = 2.43 CPU) Result: PASS