Version in base suite: 5.0.3+dfsg-3~deb12u1 Base version: request-tracker5_5.0.3+dfsg-3~deb12u1 Target version: request-tracker5_5.0.3+dfsg-3~deb12u2 Base file: /srv/ftp-master.debian.org/ftp/pool/main/r/request-tracker5/request-tracker5_5.0.3+dfsg-3~deb12u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/r/request-tracker5/request-tracker5_5.0.3+dfsg-3~deb12u2.dsc .git-dpm | 4 changelog | 16 patches/Update-expired-certificates.diff | 2630 +++++++++++++ patches/series | 3 patches/upstream_5.0.3_cve:_patchset_2023-09-26.diff | 1175 +++++ patches/upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff | 265 + 6 files changed, 4091 insertions(+), 2 deletions(-) diff -Nru request-tracker5-5.0.3+dfsg/debian/.git-dpm request-tracker5-5.0.3+dfsg/debian/.git-dpm --- request-tracker5-5.0.3+dfsg/debian/.git-dpm 2023-06-26 00:53:17.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/.git-dpm 2023-10-25 09:26:55.000000000 +0000 @@ -1,6 +1,6 @@ # see git-dpm(1) from git-dpm package -28481171ee3345c8bed6efb9d5a46cfce1547fc0 -28481171ee3345c8bed6efb9d5a46cfce1547fc0 +7c498c032d3aaa601c4a43405f1d3a78ac043016 +7c498c032d3aaa601c4a43405f1d3a78ac043016 52cb0ca22325e7a067f0a3411ffb55ef03d47aa4 52cb0ca22325e7a067f0a3411ffb55ef03d47aa4 request-tracker5_5.0.3+dfsg.orig.tar.gz diff -Nru request-tracker5-5.0.3+dfsg/debian/changelog request-tracker5-5.0.3+dfsg/debian/changelog --- request-tracker5-5.0.3+dfsg/debian/changelog 2023-06-26 01:36:32.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/changelog 2023-10-25 09:26:55.000000000 +0000 @@ -1,3 +1,19 @@ +request-tracker5 (5.0.3+dfsg-3~deb12u2) bookworm-security; urgency=medium + + * Apply upstream patch which fixes several security vulnerabilities + (Closes: #1054517). + - [CVE-2023-41259] Vulnerablility to unvalidated email headers in + incoming email and the mail-gateway REST interface. + - [CVE-2023-41620] Information leakage via response messages returned + from requests sent via the mail-gateway REST interface. + - [CVE-2023-45024] Information leakage via transaction searches made by + authenticated users in the transaction query builder. + - Reveal information about data on various RT objects in errors and other + response messages to REST 2 requests. + * Add upstream fix to tests for FTBFS due to expired certs. + + -- Andrew Ruthven Wed, 25 Oct 2023 22:26:55 +1300 + request-tracker5 (5.0.3+dfsg-3~deb12u1) bookworm; urgency=medium * Rebuild for bookworm. diff -Nru request-tracker5-5.0.3+dfsg/debian/patches/Update-expired-certificates.diff request-tracker5-5.0.3+dfsg/debian/patches/Update-expired-certificates.diff --- request-tracker5-5.0.3+dfsg/debian/patches/Update-expired-certificates.diff 1970-01-01 00:00:00.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/patches/Update-expired-certificates.diff 2023-10-25 09:26:55.000000000 +0000 @@ -0,0 +1,2630 @@ +From 84d5b352325ac94def7a6c464060bfcf6439c7f1 Mon Sep 17 00:00:00 2001 +From: Andrew Ruthven +Date: Mon, 4 Sep 2023 22:46:47 +1200 +Subject: Update expired certificates and related tests + +S/MIME certs in tests expired in August 2023. This is the upstream fix +that'll be in release 5.0.5 of RT. + +Patch-Name: Update-expired-certificates.diff +Origin: https://github.com/bestpractical/rt/commit/bf956a7a67d3c81daa43ae3cdf14cf92a411e773 +Author: sunnavy +Bug: https://rt.bestpractical.com/Ticket/Display.html?id=37670 +Applied: 5.0.5, commit:bf956a7a67d3c81daa43ae3cdf14cf92a411e773 +--- + t/data/smime/keys/demoCA/cacert.pem | 68 ++--- + t/data/smime/keys/otherCA/cacert.pem | 93 +++---- + t/data/smime/keys/root@example.com.crt | 104 +++++--- + t/data/smime/keys/root@example.com.csr | 33 ++- + t/data/smime/keys/root@example.com.key | 64 ++++- + t/data/smime/keys/root@example.com.pem | 168 +++++++++--- + t/data/smime/keys/sender@example.com.crt | 104 +++++--- + t/data/smime/keys/sender@example.com.csr | 33 ++- + t/data/smime/keys/sender@example.com.key | 64 ++++- + t/data/smime/keys/sender@example.com.pem | 168 +++++++++--- + t/data/smime/mails/1-signed.eml | 151 +++++------ + t/data/smime/mails/2-signed-attachment.eml | 179 +++++++------ + t/data/smime/mails/3-signed-binary.eml | 189 +++++++------- + t/data/smime/mails/4-encrypted-plain.eml | 81 +++--- + t/data/smime/mails/5-encrypted-attachment.eml | 100 ++++--- + t/data/smime/mails/6-encrypted-binary.eml | 112 ++++---- + .../smime/mails/7-signed-encrypted-plain.eml | 215 ++++++++------- + .../mails/8-signed-encrypted-attachment.eml | 234 +++++++++-------- + .../smime/mails/9-signed-encrypted-binary.eml | 246 ++++++++++-------- + t/web/smime/outgoing.t | 2 +- + 20 files changed, 1444 insertions(+), 964 deletions(-) + +diff --git a/t/data/smime/keys/demoCA/cacert.pem b/t/data/smime/keys/demoCA/cacert.pem +index de734a98..c60df475 100644 +--- a/t/data/smime/keys/demoCA/cacert.pem ++++ b/t/data/smime/keys/demoCA/cacert.pem +@@ -1,13 +1,14 @@ + Certificate: + Data: + Version: 3 (0x2) +- Serial Number: 11236924883769032812 (0x9bf193a560cd006c) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Serial Number: ++ 6c:5a:84:c5:d2:ee:02:8e:2f:db:de:25:04:2c:8a:42:36:89:ed:4c ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Validity +- Not Before: Aug 28 21:19:44 2013 GMT +- Not After : Aug 26 21:19:44 2023 GMT +- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Not Before: Aug 29 10:48:56 2023 GMT ++ Not After : Aug 29 10:48:56 2123 GMT ++ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (1024 bit) +@@ -26,33 +27,34 @@ Certificate: + X509v3 Subject Key Identifier: + 8D:1B:2D:BD:BD:24:E8:19:62:AE:4C:C9:2A:58:90:08:1C:D1:05:2B + X509v3 Authority Key Identifier: +- keyid:8D:1B:2D:BD:BD:24:E8:19:62:AE:4C:C9:2A:58:90:08:1C:D1:05:2B +- +- X509v3 Basic Constraints: ++ 8D:1B:2D:BD:BD:24:E8:19:62:AE:4C:C9:2A:58:90:08:1C:D1:05:2B ++ X509v3 Basic Constraints: critical + CA:TRUE +- Signature Algorithm: sha1WithRSAEncryption +- 7b:f5:8f:d2:b9:44:34:fe:91:ab:1d:52:d3:10:2d:23:75:05: +- 8e:17:70:be:52:11:b0:8e:ee:f6:33:50:7c:c7:82:f3:c4:d2: +- 98:90:b3:a6:ad:00:33:36:dc:95:f4:4e:45:d2:09:e9:88:ae: +- 88:a2:72:e4:75:95:7a:78:31:16:34:a3:50:e0:c9:25:7f:65: +- 51:d4:59:20:23:d5:3e:35:79:cf:ed:3d:3c:8c:d1:79:b0:99: +- d3:6b:99:ed:32:c5:29:7a:82:8a:98:cb:c6:95:c7:52:59:7c: +- f8:1d:fd:18:b8:ef:4d:1f:9d:5d:09:b0:eb:68:50:ed:c0:21: +- 61:eb ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ 2f:76:27:06:f5:76:bb:de:cf:a5:51:8a:07:2f:b2:f9:87:3e: ++ 23:ec:ee:70:38:33:ac:fb:c9:61:e6:60:3e:27:11:62:ca:61: ++ 7b:15:1f:73:2a:5e:d3:ff:8c:8e:ee:20:74:71:b9:ac:5c:b6: ++ e5:bb:39:00:80:03:09:1d:2d:80:9a:e0:3f:d5:4b:b6:ed:b1: ++ 7b:ea:c5:45:63:79:84:55:92:2f:96:1f:eb:7d:31:46:c5:a4: ++ d3:dd:66:9d:b5:e9:75:97:98:b5:4b:81:26:92:eb:90:f6:aa: ++ 77:f7:32:e1:4a:7b:c3:8d:e3:b4:0b:f4:97:f4:c4:a1:cc:ac: ++ 7a:09 + -----BEGIN CERTIFICATE----- +-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 ++47QL9Jf0xKHMrHoJ + -----END CERTIFICATE----- +diff --git a/t/data/smime/keys/otherCA/cacert.pem b/t/data/smime/keys/otherCA/cacert.pem +index bebd5f3a..9523c3a2 100644 +--- a/t/data/smime/keys/otherCA/cacert.pem ++++ b/t/data/smime/keys/otherCA/cacert.pem +@@ -1,13 +1,14 @@ + Certificate: + Data: + Version: 3 (0x2) +- Serial Number: 16372135729078323798 (0xe33582b3ca31ca56) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Other Widgits, LLC, CN=CA Owner/emailAddress=ca.owner@example.net ++ Serial Number: ++ 6b:df:42:4b:c4:f9:01:08:67:f2:ba:27:a1:21:05:8e:91:65:44:27 ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = "Other Widgits, LLC", CN = CA Owner, emailAddress = ca.owner@example.net + Validity +- Not Before: Aug 28 22:16:28 2013 GMT +- Not After : Aug 28 22:16:28 2023 GMT +- Subject: C=AU, ST=Some-State, O=Other Widgits, LLC, CN=CA Owner/emailAddress=ca.owner@example.net ++ Not Before: Aug 29 10:49:43 2023 GMT ++ Not After : Aug 29 10:49:43 2123 GMT ++ Subject: C = AU, ST = Some-State, O = "Other Widgits, LLC", CN = CA Owner, emailAddress = ca.owner@example.net + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) +@@ -35,46 +36,46 @@ Certificate: + X509v3 Subject Key Identifier: + 7F:75:3B:B2:1E:CF:EF:D6:A7:D1:42:F8:1C:A9:13:63:CF:C9:0E:5A + X509v3 Authority Key Identifier: +- keyid:7F:75:3B:B2:1E:CF:EF:D6:A7:D1:42:F8:1C:A9:13:63:CF:C9:0E:5A +- +- X509v3 Basic Constraints: ++ 7F:75:3B:B2:1E:CF:EF:D6:A7:D1:42:F8:1C:A9:13:63:CF:C9:0E:5A ++ X509v3 Basic Constraints: critical + CA:TRUE +- Signature Algorithm: sha1WithRSAEncryption +- 44:f7:e8:e6:af:a9:be:cf:28:51:dc:86:14:e2:4d:e4:14:9f: +- 09:4d:cb:e9:10:2c:ef:21:ec:b0:8c:14:57:59:45:52:b4:e3: +- db:f4:34:e3:39:b6:de:0c:eb:68:78:db:d0:21:d2:c1:51:18: +- ce:33:14:a4:4d:91:88:eb:cc:b0:4a:93:73:75:48:e8:56:ce: +- 29:c9:07:73:18:28:20:e1:2e:ba:0f:cc:4c:26:e7:45:d5:4c: +- 60:89:ef:1d:d7:7a:a5:80:62:bf:30:da:ac:bf:be:f8:54:f3: +- fc:8a:09:1c:89:2d:2a:12:20:99:66:54:a0:78:50:f0:46:44: +- 9d:ad:95:81:83:c0:47:38:b8:4a:81:3c:72:49:68:a2:a1:04: +- c7:d3:e9:e8:6f:65:ce:10:11:7f:0a:8b:96:ce:4e:1e:55:c7: +- 54:34:25:5e:ba:95:62:ad:45:43:b1:69:70:d4:c4:33:29:56: +- cd:45:08:7d:e5:1e:5c:77:55:7b:f7:34:ea:c5:d5:48:21:b1: +- 71:a5:02:16:50:78:64:e4:01:85:28:3e:e4:b8:f6:f8:02:3d: +- 01:23:ba:2c:54:c3:72:a5:2a:3d:41:fd:c1:15:60:37:0b:65: +- bf:23:bd:33:f6:d8:75:03:71:46:47:97:93:ae:bc:7f:76:1e: +- f3:5f:ba:0f ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ 0b:96:50:8a:82:d2:91:b9:d9:13:e5:38:ee:a8:f5:33:4c:1f: ++ 31:1b:1b:d9:3c:9c:83:c0:64:22:3c:79:4b:b2:35:44:4f:cd: ++ 93:63:05:ef:63:f7:98:fe:06:44:dc:be:f6:b7:3f:0e:40:18: ++ 5f:17:77:10:e3:61:dc:d0:ba:67:86:4b:5d:61:c9:34:d8:dd: ++ 33:22:f9:cf:82:f9:b6:34:19:eb:c7:9f:e0:02:0f:1b:85:6e: ++ 35:5f:5c:39:bc:20:d3:d7:96:89:bc:2f:a7:6f:c4:e1:17:77: ++ e8:a7:50:a6:c1:17:fc:0d:82:19:6d:05:09:a4:d8:e0:37:5c: ++ a6:4e:ca:9c:86:17:6d:90:95:74:60:33:5c:64:f2:cd:af:88: ++ a3:d3:2c:57:d9:c3:1e:73:99:f2:b2:58:7c:fc:a3:44:2f:52: ++ 80:36:03:aa:3c:a8:07:60:6b:2b:66:6c:78:f9:3a:e1:28:2d: ++ 41:47:62:70:0f:8a:49:ce:6b:ee:2d:fd:f3:5c:2e:b0:0b:a5: ++ f1:b2:0c:63:0d:f3:e6:9f:88:88:d0:ab:73:f4:fd:30:30:2a: ++ c6:6b:6d:da:1f:d1:b7:09:18:bc:c9:04:87:3e:e5:87:65:4d: ++ 0f:74:a6:be:30:a6:9a:46:9b:20:48:2a:36:20:71:f0:7b:92: ++ 19:0d:ba:5b + -----BEGIN CERTIFICATE----- +-MIIDwTCCAqmgAwIBAgIJAOM1grPKMcpWMA0GCSqGSIb3DQEBBQUAMHcxCzAJBgNV +-BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMRswGQYDVQQKDBJPdGhlciBXaWRn +-aXRzLCBMTEMxETAPBgNVBAMMCENBIE93bmVyMSMwIQYJKoZIhvcNAQkBFhRjYS5v +-d25lckBleGFtcGxlLm5ldDAeFw0xMzA4MjgyMjE2MjhaFw0yMzA4MjgyMjE2Mjha +-MHcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMRswGQYDVQQKDBJP +-dGhlciBXaWRnaXRzLCBMTEMxETAPBgNVBAMMCENBIE93bmVyMSMwIQYJKoZIhvcN +-AQkBFhRjYS5vd25lckBleGFtcGxlLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEP +-ADCCAQoCggEBANa2UwRT6JiRxmqrJ8O6AVPh81YekMlhfnM3NoBJqbRqnzrYCG+6 +-gmTFhZJBU3El7BiFHJ6ASzD3FrT4Bz73m6otn/gIpArmngrSLwZZKFOetHeKK/C1 +-xsqvQb7tFxIPNy7puEM6diD96IGRuL8DknYfQNPgRP00x/PU9nfJUlnaN5WrVKcR +-pRoD+sxxGXLLKTkVabX2WxYi2O2ks7WD7WnZkX8tDK9PxkpKTx2j3B8Q9HfISOWU +-ZDspPZ0WDNIwOkQNpIcEBITs/RmCCHe1d2T0zrxspcG3F36iSt4oYkBePXdcmgnc +-fqa2ozTKc6TCQnRO2FItmE8obomTfjQ76zcCAwEAAaNQME4wHQYDVR0OBBYEFH91 +-O7Iez+/Wp9FC+BypE2PPyQ5aMB8GA1UdIwQYMBaAFH91O7Iez+/Wp9FC+BypE2PP +-yQ5aMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAET36Oavqb7PKFHc +-hhTiTeQUnwlNy+kQLO8h7LCMFFdZRVK049v0NOM5tt4M62h429Ah0sFRGM4zFKRN +-kYjrzLBKk3N1SOhWzinJB3MYKCDhLroPzEwm50XVTGCJ7x3XeqWAYr8w2qy/vvhU +-8/yKCRyJLSoSIJlmVKB4UPBGRJ2tlYGDwEc4uEqBPHJJaKKhBMfT6ehvZc4QEX8K +-i5bOTh5Vx1Q0JV66lWKtRUOxaXDUxDMpVs1FCH3lHlx3VXv3NOrF1UghsXGlAhZQ +-eGTkAYUoPuS49vgCPQEjuixUw3KlKj1B/cEVYDcLZb8jvTP22HUDcUZHl5OuvH92 +-HvNfug8= ++MIID0TCCArmgAwIBAgIUa99CS8T5AQhn8ronoSEFjpFlRCcwDQYJKoZIhvcNAQEL ++BQAwdzELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxGzAZBgNVBAoM ++Ek90aGVyIFdpZGdpdHMsIExMQzERMA8GA1UEAwwIQ0EgT3duZXIxIzAhBgkqhkiG ++9w0BCQEWFGNhLm93bmVyQGV4YW1wbGUubmV0MCAXDTIzMDgyOTEwNDk0M1oYDzIx ++MjMwODI5MTA0OTQzWjB3MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0 ++ZTEbMBkGA1UECgwST3RoZXIgV2lkZ2l0cywgTExDMREwDwYDVQQDDAhDQSBPd25l ++cjEjMCEGCSqGSIb3DQEJARYUY2Eub3duZXJAZXhhbXBsZS5uZXQwggEiMA0GCSqG ++SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWtlMEU+iYkcZqqyfDugFT4fNWHpDJYX5z ++NzaASam0ap862AhvuoJkxYWSQVNxJewYhRyegEsw9xa0+Ac+95uqLZ/4CKQK5p4K ++0i8GWShTnrR3iivwtcbKr0G+7RcSDzcu6bhDOnYg/eiBkbi/A5J2H0DT4ET9NMfz ++1PZ3yVJZ2jeVq1SnEaUaA/rMcRlyyyk5FWm19lsWItjtpLO1g+1p2ZF/LQyvT8ZK ++Sk8do9wfEPR3yEjllGQ7KT2dFgzSMDpEDaSHBASE7P0Zggh3tXdk9M68bKXBtxd+ ++okreKGJAXj13XJoJ3H6mtqM0ynOkwkJ0TthSLZhPKG6Jk340O+s3AgMBAAGjUzBR ++MB0GA1UdDgQWBBR/dTuyHs/v1qfRQvgcqRNjz8kOWjAfBgNVHSMEGDAWgBR/dTuy ++Hs/v1qfRQvgcqRNjz8kOWjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA ++A4IBAQALllCKgtKRudkT5TjuqPUzTB8xGxvZPJyDwGQiPHlLsjVET82TYwXvY/eY ++/gZE3L72tz8OQBhfF3cQ42Hc0LpnhktdYck02N0zIvnPgvm2NBnrx5/gAg8bhW41 ++X1w5vCDT15aJvC+nb8ThF3fop1CmwRf8DYIZbQUJpNjgN1ymTsqchhdtkJV0YDNc ++ZPLNr4ij0yxX2cMec5nyslh8/KNEL1KANgOqPKgHYGsrZmx4+TrhKC1BR2JwD4pJ ++zmvuLf3zXC6wC6XxsgxjDfPmn4iI0Ktz9P0wMCrGa23aH9G3CRi8yQSHPuWHZU0P ++dKa+MKaaRpsgSCo2IHHwe5IZDbpb + -----END CERTIFICATE----- +diff --git a/t/data/smime/keys/root@example.com.crt b/t/data/smime/keys/root@example.com.crt +index 45e3eb44..c4aaadb7 100644 +--- a/t/data/smime/keys/root@example.com.crt ++++ b/t/data/smime/keys/root@example.com.crt +@@ -1,43 +1,85 @@ + Certificate: + Data: + Version: 1 (0x0) +- Serial Number: 9974010075738841110 (0x8a6acd51be94a016) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Serial Number: ++ 8a:6a:cd:51:be:94:a0:16 ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Validity +- Not Before: Aug 28 21:41:07 2013 GMT +- Not After : Aug 28 21:41:07 2023 GMT +- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=Enoch Root/emailAddress=root@example.com ++ Not Before: Aug 29 10:49:26 2023 GMT ++ Not After : Aug 29 10:49:26 2123 GMT ++ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = Enoch Root, emailAddress = root@example.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (512 bit) ++ Public-Key: (4096 bit) + Modulus: +- 00:b2:77:b9:bc:09:7d:14:8e:6b:6f:7e:33:a9:95: +- 21:5d:f3:3c:91:61:f1:bc:5c:1d:7e:e7:54:25:e8: +- cb:5f:b7:18:0e:23:26:00:42:09:bd:89:da:5c:06: +- cb:52:08:43:f6:4e:fe:dd:f8:0a:8a:95:35:8f:4a: +- 25:16:da:e6:bf ++ 00:d7:38:31:b4:41:16:d8:bb:6f:cf:f8:ba:90:ed: ++ 88:d3:aa:51:5d:05:19:19:4b:69:95:95:f5:40:0e: ++ fc:20:49:32:fb:59:9d:5b:54:bd:cd:a6:4c:cf:07: ++ 13:51:0a:2b:80:01:bf:49:da:fe:f4:a8:9b:ec:9e: ++ c5:ad:4e:1a:72:02:87:cd:57:c1:a9:82:a3:36:3d: ++ 96:62:81:e1:9d:a6:92:88:d0:fc:70:be:11:c0:3a: ++ d2:8b:e3:c7:51:f2:b0:13:c8:65:c7:f9:f0:13:d8: ++ 33:c1:46:53:48:67:89:6a:0a:25:75:86:89:b6:cf: ++ 3e:f0:c9:94:97:4d:c5:f5:9a:5e:2e:7d:af:55:78: ++ b3:65:95:4c:a7:e8:4a:f3:10:e9:29:20:10:00:65: ++ bf:97:fd:68:e3:ed:2d:68:07:5d:6b:ea:78:1d:01: ++ 73:56:24:26:eb:7b:26:78:97:9a:41:bf:1a:cb:18: ++ 6c:67:31:19:47:79:55:b9:4f:00:9a:d9:65:bd:0f: ++ 74:b9:08:39:39:0c:4e:bb:a8:78:21:ba:4b:52:07: ++ 72:7b:50:37:ee:2e:ab:f0:2d:79:0f:53:58:b7:a5: ++ a0:c2:bb:9f:86:7c:a6:a4:7a:68:c1:d3:d4:66:25: ++ e8:7d:f7:41:0a:96:25:bc:c6:87:b6:ed:34:71:17: ++ 55:e1:95:4a:c2:e2:5b:7a:6a:5f:67:5e:cd:0f:d8: ++ 43:f4:4d:13:d8:00:bf:4b:e2:d9:df:1a:6e:14:13: ++ e3:30:6e:05:ad:35:1d:5c:c9:be:59:cb:9f:9f:f8: ++ 9d:e6:0f:de:06:db:4c:15:9e:a6:8f:84:b5:37:2c: ++ 72:bc:45:9b:61:72:d0:0e:23:fb:d4:a2:cb:bd:77: ++ c3:70:69:4c:bc:6b:09:1c:00:26:0b:90:5b:c9:d8: ++ 10:f4:18:04:6e:9b:1a:f2:7b:da:60:30:df:78:04: ++ de:39:bb:c7:a3:36:30:41:38:5e:7f:7a:3e:6f:40: ++ 1d:c2:58:05:bf:a3:16:1e:ba:77:bd:30:1d:3f:0b: ++ 16:98:a4:67:98:2a:ae:b2:42:2d:30:72:9c:bb:1d: ++ 8d:0a:25:85:2d:7b:42:4d:8b:87:4b:7a:15:ae:af: ++ 2a:3e:78:a7:a6:a7:50:cc:ad:6e:dd:75:d1:f7:d6: ++ 07:2a:44:92:4a:88:3b:30:e9:72:84:54:e4:68:4e: ++ db:da:42:7e:d2:88:28:79:bb:0b:0d:d0:22:7f:b7: ++ 75:f7:57:8b:45:25:0b:b6:02:6f:8d:56:27:1e:14: ++ 5a:6e:c5:84:ff:f5:d5:79:54:c5:24:e4:b2:fa:ab: ++ 55:95:1d:d2:56:d8:46:c9:1c:77:bd:64:57:cf:88: ++ e9:04:cf + Exponent: 65537 (0x10001) +- Signature Algorithm: sha1WithRSAEncryption +- 1a:cd:7e:0e:e0:6f:90:b7:22:0e:4d:79:4d:6a:9b:ac:a1:6a: +- ab:85:32:9c:86:9c:d2:10:96:f7:e0:00:2c:7d:3c:16:a4:ff: +- dd:9e:37:fb:a3:7a:43:ab:2f:ee:c4:ff:be:77:0f:40:f8:0e: +- 45:3e:48:46:bf:ec:e1:b0:46:8d:13:37:7a:a6:d1:7c:16:cb: +- 28:6b:37:88:4d:0a:12:6b:87:b9:7c:d9:c4:d7:57:93:b9:f6: +- 21:26:1b:32:88:1d:cd:84:0f:6a:f9:05:0a:76:01:de:5e:99: +- 86:10:fc:7d:ee:d5:70:b2:44:99:41:0a:d7:0e:e8:5b:c9:ca: +- 10:39 ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ 0c:76:a3:14:d4:b5:2d:0c:9c:6b:e8:54:89:87:00:78:3c:12: ++ 50:7f:a7:f1:7b:3f:81:a7:0f:d6:ef:a2:28:24:16:61:32:69: ++ 57:43:27:2a:be:1d:50:76:23:cf:44:90:20:7c:89:5b:de:3a: ++ b2:eb:b5:37:a2:84:7a:10:e6:7a:d3:8c:13:b1:fd:9b:89:24: ++ ec:ff:8b:9c:e7:6e:c3:b5:17:cb:5f:76:61:5c:10:a3:5e:49: ++ e4:f8:ad:0c:fe:f6:b8:33:6b:85:a7:f1:6f:43:d1:97:de:c8: ++ 83:d7:56:e9:34:77:c0:77:2a:a6:64:0c:7b:6f:ab:fb:34:d6: ++ 64:51 + -----BEGIN CERTIFICATE----- +-MIICKzCCAZQCCQCKas1RvpSgFjANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJB ++MIID9TCCA14CCQCKas1RvpSgFjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJB + VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 + cyBQdHkgTHRkMREwDwYDVQQDDAhDQSBPd25lcjEjMCEGCSqGSIb3DQEJARYUY2Eu +-b3duZXJAZXhhbXBsZS5jb20wHhcNMTMwODI4MjE0MTA3WhcNMjMwODI4MjE0MTA3 +-WjB7MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMY +-SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQDEwpFbm9jaCBSb290MR8w +-HQYJKoZIhvcNAQkBFhByb290QGV4YW1wbGUuY29tMFwwDQYJKoZIhvcNAQEBBQAD +-SwAwSAJBALJ3ubwJfRSOa29+M6mVIV3zPJFh8bxcHX7nVCXoy1+3GA4jJgBCCb2J +-2lwGy1IIQ/ZO/t34CoqVNY9KJRba5r8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAa +-zX4O4G+QtyIOTXlNapusoWqrhTKchpzSEJb34AAsfTwWpP/dnjf7o3pDqy/uxP++ +-dw9A+A5FPkhGv+zhsEaNEzd6ptF8FssoazeITQoSa4e5fNnE11eTufYhJhsyiB3N +-hA9q+QUKdgHeXpmGEPx97tVwskSZQQrXDuhbycoQOQ== ++b3duZXJAZXhhbXBsZS5jb20wIBcNMjMwODI5MTA0OTI2WhgPMjEyMzA4MjkxMDQ5 ++MjZaMHsxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK ++DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEzARBgNVBAMMCkVub2NoIFJvb3Qx ++HzAdBgkqhkiG9w0BCQEWEHJvb3RAZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEB ++AQUAA4ICDwAwggIKAoICAQDXODG0QRbYu2/P+LqQ7YjTqlFdBRkZS2mVlfVADvwg ++STL7WZ1bVL3NpkzPBxNRCiuAAb9J2v70qJvsnsWtThpyAofNV8GpgqM2PZZigeGd ++ppKI0PxwvhHAOtKL48dR8rATyGXH+fAT2DPBRlNIZ4lqCiV1hom2zz7wyZSXTcX1 ++ml4ufa9VeLNllUyn6ErzEOkpIBAAZb+X/Wjj7S1oB11r6ngdAXNWJCbreyZ4l5pB ++vxrLGGxnMRlHeVW5TwCa2WW9D3S5CDk5DE67qHghuktSB3J7UDfuLqvwLXkPU1i3 ++paDCu5+GfKakemjB09RmJeh990EKliW8xoe27TRxF1XhlUrC4lt6al9nXs0P2EP0 ++TRPYAL9L4tnfGm4UE+MwbgWtNR1cyb5Zy5+f+J3mD94G20wVnqaPhLU3LHK8RZth ++ctAOI/vUosu9d8NwaUy8awkcACYLkFvJ2BD0GARumxrye9pgMN94BN45u8ejNjBB ++OF5/ej5vQB3CWAW/oxYeune9MB0/CxaYpGeYKq6yQi0wcpy7HY0KJYUte0JNi4dL ++ehWuryo+eKemp1DMrW7dddH31gcqRJJKiDsw6XKEVORoTtvaQn7SiCh5uwsN0CJ/ ++t3X3V4tFJQu2Am+NViceFFpuxYT/9dV5VMUk5LL6q1WVHdJW2EbJHHe9ZFfPiOkE ++zwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAAx2oxTUtS0MnGvoVImHAHg8ElB/p/F7 ++P4GnD9bvoigkFmEyaVdDJyq+HVB2I89EkCB8iVveOrLrtTeihHoQ5nrTjBOx/ZuJ ++JOz/i5znbsO1F8tfdmFcEKNeSeT4rQz+9rgza4Wn8W9D0ZfeyIPXVuk0d8B3KqZk ++DHtvq/s01mRR + -----END CERTIFICATE----- +diff --git a/t/data/smime/keys/root@example.com.csr b/t/data/smime/keys/root@example.com.csr +index a72677a5..c0afa8f2 100644 +--- a/t/data/smime/keys/root@example.com.csr ++++ b/t/data/smime/keys/root@example.com.csr +@@ -1,9 +1,28 @@ + -----BEGIN CERTIFICATE REQUEST----- +-MIIBNTCB4AIBADB7MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEh +-MB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQDEwpFbm9j +-aCBSb290MR8wHQYJKoZIhvcNAQkBFhByb290QGV4YW1wbGUuY29tMFwwDQYJKoZI +-hvcNAQEBBQADSwAwSAJBALJ3ubwJfRSOa29+M6mVIV3zPJFh8bxcHX7nVCXoy1+3 +-GA4jJgBCCb2J2lwGy1IIQ/ZO/t34CoqVNY9KJRba5r8CAwEAAaAAMA0GCSqGSIb3 +-DQEBBQUAA0EABuN/lyQxMY6DNb9XZ7H+UZLJrNYei1HRvfIXig7EvkSDEnArSwfZ +-uzAeLo3mnIp7WiDk3M7e19LQFkERs2xvHw== ++MIIEwDCCAqgCAQAwezELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx ++ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UEAwwKRW5v ++Y2ggUm9vdDEfMB0GCSqGSIb3DQEJARYQcm9vdEBleGFtcGxlLmNvbTCCAiIwDQYJ ++KoZIhvcNAQEBBQADggIPADCCAgoCggIBANc4MbRBFti7b8/4upDtiNOqUV0FGRlL ++aZWV9UAO/CBJMvtZnVtUvc2mTM8HE1EKK4ABv0na/vSom+yexa1OGnICh81XwamC ++ozY9lmKB4Z2mkojQ/HC+EcA60ovjx1HysBPIZcf58BPYM8FGU0hniWoKJXWGibbP ++PvDJlJdNxfWaXi59r1V4s2WVTKfoSvMQ6SkgEABlv5f9aOPtLWgHXWvqeB0Bc1Yk ++Jut7JniXmkG/GssYbGcxGUd5VblPAJrZZb0PdLkIOTkMTruoeCG6S1IHcntQN+4u ++q/AteQ9TWLeloMK7n4Z8pqR6aMHT1GYl6H33QQqWJbzGh7btNHEXVeGVSsLiW3pq ++X2dezQ/YQ/RNE9gAv0vi2d8abhQT4zBuBa01HVzJvlnLn5/4neYP3gbbTBWepo+E ++tTcscrxFm2Fy0A4j+9Siy713w3BpTLxrCRwAJguQW8nYEPQYBG6bGvJ72mAw33gE ++3jm7x6M2MEE4Xn96Pm9AHcJYBb+jFh66d70wHT8LFpikZ5gqrrJCLTBynLsdjQol ++hS17Qk2Lh0t6Fa6vKj54p6anUMytbt110ffWBypEkkqIOzDpcoRU5GhO29pCftKI ++KHm7Cw3QIn+3dfdXi0UlC7YCb41WJx4UWm7FhP/11XlUxSTksvqrVZUd0lbYRskc ++d71kV8+I6QTPAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAgEAnMJmWXN1AqFQqnJd ++PSDJs/oLrpCYD+eDTtWtwsAVrAuBNMdwjsZqVAihnjm4ewiZSexQWg+U28RizhzQ ++HkS44dY93jT8jzbsd7z34FJ7odqDcO3+V2lKDyFYkJTaOcUsJCcBYgw8u0abPhII ++/rkI3s7gwHbfsOYLPtOvYCo9mqWAQlr5YvpjIxPm39gIuBc92x9oAjIwKMaPqry2 ++qLdS4LH5NdZPsMaNhgXdCRabMuRix6UXxP8iUFsqUb2H1OFMwfz+4R3allbpj8SL ++Xo7R9nWj0fIZcNyhWUTIEBdn3GskUo4FXYnmQZdYww+zHt2mOXL24yY4ZK6myqY8 ++kH+BNFbnHGO/4YYhrkVdT0Adhryy/sSVCcrs4/MX9XAJhY6+3AD0H9OWRBezaoeg ++jrXOFGyjQj1A5hxBjHsLHu0qV/r6cvW8+WfSQ0jzCVJSBqVGMWvH3Pr9nxJN2Lmq ++C0Qrotm8pBVvggqbX8FYdc5JbYUXg2+e/0wmF0XX+GKSS+caJABJmFwjgRk2HOzy ++iqESp4IS3ye2zWtIiOXMPAoYcM6yTNJ6l6C+ekdqFUp7bamRK0iJCcJyVkevfV1w ++sjuCYqByt9DjtItYgaL+Eool6QJsNU+RLh3MgazJfuUk5v3R1oNfycY6fxjm/D7x ++QUdddI/E8yQtTWVV9oPbl3GJHCg= + -----END CERTIFICATE REQUEST----- +diff --git a/t/data/smime/keys/root@example.com.key b/t/data/smime/keys/root@example.com.key +index 7b24e4e8..0e44023f 100644 +--- a/t/data/smime/keys/root@example.com.key ++++ b/t/data/smime/keys/root@example.com.key +@@ -1,12 +1,52 @@ +------BEGIN RSA PRIVATE KEY----- +-Proc-Type: 4,ENCRYPTED +-DEK-Info: DES-EDE3-CBC,6356CE6012402B9B +- +-Lco5rf3/rHlShktH/o6NHF1mVH00k+pZ3bWodejMaHW1ofZXe9/yjzPM2jqqi+Dj +-xmzZ9R/MijO07vpxWHqdvhXeFf0TW67gW413M/bwiRd/rV0mUFz81nowFe9e15tm +-Itku1sePFvvL/UUxBGeYhplHAP6e76JqQcJTkBaG04KitH9GHtj1HFQR8P9/8h6d +-f0ZtU8wqnhkZvtzb72ZLwsw0YZ7R9YLIqCmOn1twW0CC77deACy+deJOC0N4CxW6 +-+jEGbJKMN5rOPsFiieDzZXAaTlGd6qXVWaxUPYH89yWedYoAZgbi6zxGGwNGbc/Q +-2Y7g+qHi3L30uJvgJEGihIM+9iAKUJSazyGYl9Xl2FwTpNFOMJAYFyNKNv5FHwdm +-deoslrbEXVtqurOQYr955cyqs2NN+JYLsz5nNnfBpGo= +------END RSA PRIVATE KEY----- ++-----BEGIN PRIVATE KEY----- ++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 ++l8kdzuSa4Kx4pnCQ4gjGtcDyaYWDfrna ++-----END PRIVATE KEY----- +diff --git a/t/data/smime/keys/root@example.com.pem b/t/data/smime/keys/root@example.com.pem +index 802475e6..6d641a2a 100644 +--- a/t/data/smime/keys/root@example.com.pem ++++ b/t/data/smime/keys/root@example.com.pem +@@ -1,55 +1,137 @@ + Certificate: + Data: + Version: 1 (0x0) +- Serial Number: 9974010075738841110 (0x8a6acd51be94a016) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Serial Number: ++ 8a:6a:cd:51:be:94:a0:16 ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Validity +- Not Before: Aug 28 21:41:07 2013 GMT +- Not After : Aug 28 21:41:07 2023 GMT +- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=Enoch Root/emailAddress=root@example.com ++ Not Before: Aug 29 10:49:26 2023 GMT ++ Not After : Aug 29 10:49:26 2123 GMT ++ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = Enoch Root, emailAddress = root@example.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (512 bit) ++ Public-Key: (4096 bit) + Modulus: +- 00:b2:77:b9:bc:09:7d:14:8e:6b:6f:7e:33:a9:95: +- 21:5d:f3:3c:91:61:f1:bc:5c:1d:7e:e7:54:25:e8: +- cb:5f:b7:18:0e:23:26:00:42:09:bd:89:da:5c:06: +- cb:52:08:43:f6:4e:fe:dd:f8:0a:8a:95:35:8f:4a: +- 25:16:da:e6:bf ++ 00:d7:38:31:b4:41:16:d8:bb:6f:cf:f8:ba:90:ed: ++ 88:d3:aa:51:5d:05:19:19:4b:69:95:95:f5:40:0e: ++ fc:20:49:32:fb:59:9d:5b:54:bd:cd:a6:4c:cf:07: ++ 13:51:0a:2b:80:01:bf:49:da:fe:f4:a8:9b:ec:9e: ++ c5:ad:4e:1a:72:02:87:cd:57:c1:a9:82:a3:36:3d: ++ 96:62:81:e1:9d:a6:92:88:d0:fc:70:be:11:c0:3a: ++ d2:8b:e3:c7:51:f2:b0:13:c8:65:c7:f9:f0:13:d8: ++ 33:c1:46:53:48:67:89:6a:0a:25:75:86:89:b6:cf: ++ 3e:f0:c9:94:97:4d:c5:f5:9a:5e:2e:7d:af:55:78: ++ b3:65:95:4c:a7:e8:4a:f3:10:e9:29:20:10:00:65: ++ bf:97:fd:68:e3:ed:2d:68:07:5d:6b:ea:78:1d:01: ++ 73:56:24:26:eb:7b:26:78:97:9a:41:bf:1a:cb:18: ++ 6c:67:31:19:47:79:55:b9:4f:00:9a:d9:65:bd:0f: ++ 74:b9:08:39:39:0c:4e:bb:a8:78:21:ba:4b:52:07: ++ 72:7b:50:37:ee:2e:ab:f0:2d:79:0f:53:58:b7:a5: ++ a0:c2:bb:9f:86:7c:a6:a4:7a:68:c1:d3:d4:66:25: ++ e8:7d:f7:41:0a:96:25:bc:c6:87:b6:ed:34:71:17: ++ 55:e1:95:4a:c2:e2:5b:7a:6a:5f:67:5e:cd:0f:d8: ++ 43:f4:4d:13:d8:00:bf:4b:e2:d9:df:1a:6e:14:13: ++ e3:30:6e:05:ad:35:1d:5c:c9:be:59:cb:9f:9f:f8: ++ 9d:e6:0f:de:06:db:4c:15:9e:a6:8f:84:b5:37:2c: ++ 72:bc:45:9b:61:72:d0:0e:23:fb:d4:a2:cb:bd:77: ++ c3:70:69:4c:bc:6b:09:1c:00:26:0b:90:5b:c9:d8: ++ 10:f4:18:04:6e:9b:1a:f2:7b:da:60:30:df:78:04: ++ de:39:bb:c7:a3:36:30:41:38:5e:7f:7a:3e:6f:40: ++ 1d:c2:58:05:bf:a3:16:1e:ba:77:bd:30:1d:3f:0b: ++ 16:98:a4:67:98:2a:ae:b2:42:2d:30:72:9c:bb:1d: ++ 8d:0a:25:85:2d:7b:42:4d:8b:87:4b:7a:15:ae:af: ++ 2a:3e:78:a7:a6:a7:50:cc:ad:6e:dd:75:d1:f7:d6: ++ 07:2a:44:92:4a:88:3b:30:e9:72:84:54:e4:68:4e: ++ db:da:42:7e:d2:88:28:79:bb:0b:0d:d0:22:7f:b7: ++ 75:f7:57:8b:45:25:0b:b6:02:6f:8d:56:27:1e:14: ++ 5a:6e:c5:84:ff:f5:d5:79:54:c5:24:e4:b2:fa:ab: ++ 55:95:1d:d2:56:d8:46:c9:1c:77:bd:64:57:cf:88: ++ e9:04:cf + Exponent: 65537 (0x10001) +- Signature Algorithm: sha1WithRSAEncryption +- 1a:cd:7e:0e:e0:6f:90:b7:22:0e:4d:79:4d:6a:9b:ac:a1:6a: +- ab:85:32:9c:86:9c:d2:10:96:f7:e0:00:2c:7d:3c:16:a4:ff: +- dd:9e:37:fb:a3:7a:43:ab:2f:ee:c4:ff:be:77:0f:40:f8:0e: +- 45:3e:48:46:bf:ec:e1:b0:46:8d:13:37:7a:a6:d1:7c:16:cb: +- 28:6b:37:88:4d:0a:12:6b:87:b9:7c:d9:c4:d7:57:93:b9:f6: +- 21:26:1b:32:88:1d:cd:84:0f:6a:f9:05:0a:76:01:de:5e:99: +- 86:10:fc:7d:ee:d5:70:b2:44:99:41:0a:d7:0e:e8:5b:c9:ca: +- 10:39 ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ 0c:76:a3:14:d4:b5:2d:0c:9c:6b:e8:54:89:87:00:78:3c:12: ++ 50:7f:a7:f1:7b:3f:81:a7:0f:d6:ef:a2:28:24:16:61:32:69: ++ 57:43:27:2a:be:1d:50:76:23:cf:44:90:20:7c:89:5b:de:3a: ++ b2:eb:b5:37:a2:84:7a:10:e6:7a:d3:8c:13:b1:fd:9b:89:24: ++ ec:ff:8b:9c:e7:6e:c3:b5:17:cb:5f:76:61:5c:10:a3:5e:49: ++ e4:f8:ad:0c:fe:f6:b8:33:6b:85:a7:f1:6f:43:d1:97:de:c8: ++ 83:d7:56:e9:34:77:c0:77:2a:a6:64:0c:7b:6f:ab:fb:34:d6: ++ 64:51 + -----BEGIN CERTIFICATE----- +-MIICKzCCAZQCCQCKas1RvpSgFjANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJB ++MIID9TCCA14CCQCKas1RvpSgFjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJB + VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 + cyBQdHkgTHRkMREwDwYDVQQDDAhDQSBPd25lcjEjMCEGCSqGSIb3DQEJARYUY2Eu +-b3duZXJAZXhhbXBsZS5jb20wHhcNMTMwODI4MjE0MTA3WhcNMjMwODI4MjE0MTA3 +-WjB7MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMY +-SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQDEwpFbm9jaCBSb290MR8w +-HQYJKoZIhvcNAQkBFhByb290QGV4YW1wbGUuY29tMFwwDQYJKoZIhvcNAQEBBQAD +-SwAwSAJBALJ3ubwJfRSOa29+M6mVIV3zPJFh8bxcHX7nVCXoy1+3GA4jJgBCCb2J +-2lwGy1IIQ/ZO/t34CoqVNY9KJRba5r8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAa +-zX4O4G+QtyIOTXlNapusoWqrhTKchpzSEJb34AAsfTwWpP/dnjf7o3pDqy/uxP++ +-dw9A+A5FPkhGv+zhsEaNEzd6ptF8FssoazeITQoSa4e5fNnE11eTufYhJhsyiB3N +-hA9q+QUKdgHeXpmGEPx97tVwskSZQQrXDuhbycoQOQ== ++b3duZXJAZXhhbXBsZS5jb20wIBcNMjMwODI5MTA0OTI2WhgPMjEyMzA4MjkxMDQ5 ++MjZaMHsxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK ++DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEzARBgNVBAMMCkVub2NoIFJvb3Qx ++HzAdBgkqhkiG9w0BCQEWEHJvb3RAZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEB ++AQUAA4ICDwAwggIKAoICAQDXODG0QRbYu2/P+LqQ7YjTqlFdBRkZS2mVlfVADvwg ++STL7WZ1bVL3NpkzPBxNRCiuAAb9J2v70qJvsnsWtThpyAofNV8GpgqM2PZZigeGd ++ppKI0PxwvhHAOtKL48dR8rATyGXH+fAT2DPBRlNIZ4lqCiV1hom2zz7wyZSXTcX1 ++ml4ufa9VeLNllUyn6ErzEOkpIBAAZb+X/Wjj7S1oB11r6ngdAXNWJCbreyZ4l5pB ++vxrLGGxnMRlHeVW5TwCa2WW9D3S5CDk5DE67qHghuktSB3J7UDfuLqvwLXkPU1i3 ++paDCu5+GfKakemjB09RmJeh990EKliW8xoe27TRxF1XhlUrC4lt6al9nXs0P2EP0 ++TRPYAL9L4tnfGm4UE+MwbgWtNR1cyb5Zy5+f+J3mD94G20wVnqaPhLU3LHK8RZth ++ctAOI/vUosu9d8NwaUy8awkcACYLkFvJ2BD0GARumxrye9pgMN94BN45u8ejNjBB ++OF5/ej5vQB3CWAW/oxYeune9MB0/CxaYpGeYKq6yQi0wcpy7HY0KJYUte0JNi4dL ++ehWuryo+eKemp1DMrW7dddH31gcqRJJKiDsw6XKEVORoTtvaQn7SiCh5uwsN0CJ/ ++t3X3V4tFJQu2Am+NViceFFpuxYT/9dV5VMUk5LL6q1WVHdJW2EbJHHe9ZFfPiOkE ++zwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAAx2oxTUtS0MnGvoVImHAHg8ElB/p/F7 ++P4GnD9bvoigkFmEyaVdDJyq+HVB2I89EkCB8iVveOrLrtTeihHoQ5nrTjBOx/ZuJ ++JOz/i5znbsO1F8tfdmFcEKNeSeT4rQz+9rgza4Wn8W9D0ZfeyIPXVuk0d8B3KqZk ++DHtvq/s01mRR + -----END CERTIFICATE----- +------BEGIN RSA PRIVATE KEY----- +-Proc-Type: 4,ENCRYPTED +-DEK-Info: DES-EDE3-CBC,6356CE6012402B9B +- +-Lco5rf3/rHlShktH/o6NHF1mVH00k+pZ3bWodejMaHW1ofZXe9/yjzPM2jqqi+Dj +-xmzZ9R/MijO07vpxWHqdvhXeFf0TW67gW413M/bwiRd/rV0mUFz81nowFe9e15tm +-Itku1sePFvvL/UUxBGeYhplHAP6e76JqQcJTkBaG04KitH9GHtj1HFQR8P9/8h6d +-f0ZtU8wqnhkZvtzb72ZLwsw0YZ7R9YLIqCmOn1twW0CC77deACy+deJOC0N4CxW6 +-+jEGbJKMN5rOPsFiieDzZXAaTlGd6qXVWaxUPYH89yWedYoAZgbi6zxGGwNGbc/Q +-2Y7g+qHi3L30uJvgJEGihIM+9iAKUJSazyGYl9Xl2FwTpNFOMJAYFyNKNv5FHwdm +-deoslrbEXVtqurOQYr955cyqs2NN+JYLsz5nNnfBpGo= +------END RSA PRIVATE KEY----- ++-----BEGIN PRIVATE KEY----- ++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 ++l8kdzuSa4Kx4pnCQ4gjGtcDyaYWDfrna ++-----END PRIVATE KEY----- +diff --git a/t/data/smime/keys/sender@example.com.crt b/t/data/smime/keys/sender@example.com.crt +index 9497a202..9ef32380 100644 +--- a/t/data/smime/keys/sender@example.com.crt ++++ b/t/data/smime/keys/sender@example.com.crt +@@ -1,43 +1,85 @@ + Certificate: + Data: + Version: 1 (0x0) +- Serial Number: 9974010075738841109 (0x8a6acd51be94a015) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Serial Number: ++ 8a:6a:cd:51:be:94:a0:15 ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Validity +- Not Before: Aug 28 21:41:45 2013 GMT +- Not After : Aug 28 21:41:45 2023 GMT +- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=sender/emailAddress=sender@example.com ++ Not Before: Aug 29 10:49:06 2023 GMT ++ Not After : Aug 29 10:49:06 2123 GMT ++ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = sender, emailAddress = sender@example.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (512 bit) ++ Public-Key: (4096 bit) + Modulus: +- 00:a8:38:41:90:1d:e7:cd:2b:cb:62:cf:ad:ff:70: +- f6:44:5d:f3:4b:7e:21:75:b6:5c:e1:7e:c2:27:3b: +- 85:eb:72:9b:5a:94:0a:69:1d:83:ca:c5:91:b2:3f: +- 04:72:61:e4:b8:eb:5b:ce:b5:10:77:d8:a7:df:8b: +- c9:5a:14:15:61 ++ 00:8f:5d:6c:de:e9:ca:79:e5:01:9e:b6:cf:60:e3: ++ 6a:b0:fb:c7:f4:1a:9a:5d:60:f6:74:f7:a7:86:84: ++ cf:8b:e3:92:7f:f2:23:e9:6a:d3:37:7c:db:e6:fe: ++ 30:6a:2b:ed:41:27:47:b7:11:fe:12:2f:b6:88:cb: ++ 01:11:3d:44:7b:d7:73:23:65:4d:72:10:62:99:de: ++ 76:9b:11:9e:3c:ea:1a:89:1a:62:73:ba:8f:ae:c2: ++ 2a:de:40:78:dc:dc:19:99:f3:c6:9b:32:fc:bc:c6: ++ 0e:57:f5:7a:48:cc:39:ea:08:bf:5d:2c:9d:31:ac: ++ a4:68:7c:69:9f:5c:a1:77:ab:f5:53:b2:d8:d1:10: ++ 17:3d:fe:6d:92:9f:39:bc:b2:8d:0e:2e:58:27:53: ++ dd:eb:ca:1e:10:3a:b2:74:ff:30:db:78:cb:27:bf: ++ 8f:41:57:d0:ba:f9:a3:cd:a7:88:67:46:67:cf:d6: ++ 65:ef:c1:52:fd:22:8c:f0:73:fb:7d:ca:1f:d8:59: ++ f2:4f:01:b3:92:ac:30:00:02:fd:13:30:e2:54:54: ++ 5b:43:5d:31:44:b9:e4:dd:14:a0:36:24:48:6a:ba: ++ eb:1d:53:8c:84:f9:68:a3:d8:d4:0f:10:9e:00:b9: ++ c7:a2:ab:f6:51:87:04:d4:6f:0d:65:f0:47:d3:c4: ++ 88:7a:62:45:a1:f2:49:79:98:6e:40:f0:50:91:44: ++ 37:0f:86:99:37:16:ff:16:ea:4b:38:2b:2d:41:fb: ++ 5a:e1:e6:7c:6d:ac:c4:31:6f:4f:a8:7f:bb:ce:84: ++ b5:4c:9a:ab:9a:d4:ea:56:e1:d5:50:f3:b3:66:ae: ++ a5:fe:81:14:21:13:e1:f8:9d:75:4e:f3:29:e3:cc: ++ 06:b8:34:f0:8c:2d:e0:e4:d7:58:21:16:0e:97:8d: ++ b6:b0:74:e8:61:d2:57:3f:fc:15:5b:1b:a9:11:86: ++ 73:d0:18:b9:a5:a3:45:b8:ae:a3:3c:9f:06:6c:3a: ++ c4:a5:19:cb:65:3d:2a:86:8c:d5:5b:75:15:00:7d: ++ 98:4a:ba:f1:07:e1:de:36:2f:c1:d3:c9:e3:49:bf: ++ 80:4a:96:3c:33:59:4d:57:bf:31:28:bb:c3:c3:f0: ++ 0f:36:b4:a8:e3:33:aa:5a:e4:4a:5f:b7:b5:25:1e: ++ 8e:57:21:3a:1b:ea:38:ca:63:74:ac:81:56:a0:3a: ++ 65:b8:68:39:22:02:df:e0:0d:75:07:5e:31:b0:da: ++ 57:87:4e:5f:23:3a:55:da:29:8a:5e:87:d9:60:7d: ++ 6e:95:6d:d6:50:10:28:5d:ea:b0:38:13:d4:03:8b: ++ 0b:85:0b:b4:16:83:4b:42:7e:12:04:28:7f:e8:f9: ++ bf:57:8b + Exponent: 65537 (0x10001) +- Signature Algorithm: sha1WithRSAEncryption +- 91:74:84:00:98:40:30:6b:a6:61:6b:7b:d7:c9:9d:6e:ef:bb: +- c8:ba:8b:83:15:62:3e:d1:c2:9d:1c:4e:ce:09:ce:d8:4f:4a: +- 49:a8:97:e8:3b:ed:82:2c:a3:20:45:72:f3:d9:23:66:93:d5: +- 54:14:ce:ce:cf:27:04:52:43:b4:a7:0b:ac:b8:45:a3:96:bf: +- 2f:43:59:61:02:7a:36:39:9c:01:ad:b7:63:6e:b5:b6:29:cb: +- 79:78:93:95:25:24:4a:83:bd:1d:d6:07:86:06:6a:fa:04:60: +- 6e:ba:41:11:0a:cb:b2:84:03:ac:30:55:94:ed:b2:2d:3c:c5: +- 99:6f ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ b9:6b:c9:58:6a:34:f3:8d:53:b3:2e:c8:34:87:2a:0e:06:6e: ++ bc:9e:40:eb:12:ca:03:41:c2:ef:03:e4:8d:1f:d2:78:0d:fd: ++ a2:f8:7d:39:bc:5f:06:6e:95:d3:6c:46:3e:42:9b:2e:a2:da: ++ 82:f0:5d:bd:5a:f3:1c:a8:ca:e1:9b:d9:59:0f:dc:be:e5:51: ++ b1:8b:b4:9f:23:e1:19:6a:56:de:ab:61:93:70:25:9a:09:22: ++ 60:c8:9c:50:89:43:c4:f9:35:99:f6:48:eb:23:62:c8:83:b6: ++ 70:36:ba:10:54:aa:3f:1a:cd:2b:eb:38:0b:19:ba:29:ae:de: ++ aa:9b + -----BEGIN CERTIFICATE----- +-MIICKTCCAZICCQCKas1RvpSgFTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJB ++MIID8zCCA1wCCQCKas1RvpSgFTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJB + VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 + cyBQdHkgTHRkMREwDwYDVQQDDAhDQSBPd25lcjEjMCEGCSqGSIb3DQEJARYUY2Eu +-b3duZXJAZXhhbXBsZS5jb20wHhcNMTMwODI4MjE0MTQ1WhcNMjMwODI4MjE0MTQ1 +-WjB5MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMY +-SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ8wDQYDVQQDEwZzZW5kZXIxITAfBgkq +-hkiG9w0BCQEWEnNlbmRlckBleGFtcGxlLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sA +-MEgCQQCoOEGQHefNK8tiz63/cPZEXfNLfiF1tlzhfsInO4XrcptalAppHYPKxZGy +-PwRyYeS461vOtRB32Kffi8laFBVhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAkXSE +-AJhAMGumYWt718mdbu+7yLqLgxViPtHCnRxOzgnO2E9KSaiX6DvtgiyjIEVy89kj +-ZpPVVBTOzs8nBFJDtKcLrLhFo5a/L0NZYQJ6NjmcAa23Y261tinLeXiTlSUkSoO9 +-HdYHhgZq+gRgbrpBEQrLsoQDrDBVlO2yLTzFmW8= ++b3duZXJAZXhhbXBsZS5jb20wIBcNMjMwODI5MTA0OTA2WhgPMjEyMzA4MjkxMDQ5 ++MDZaMHkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK ++DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnNlbmRlcjEhMB8G ++CSqGSIb3DQEJARYSc2VuZGVyQGV4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAj11s3unKeeUBnrbPYONqsPvH9BqaXWD2dPenhoTPi+OS ++f/Ij6WrTN3zb5v4waivtQSdHtxH+Ei+2iMsBET1Ee9dzI2VNchBimd52mxGePOoa ++iRpic7qPrsIq3kB43NwZmfPGmzL8vMYOV/V6SMw56gi/XSydMaykaHxpn1yhd6v1 ++U7LY0RAXPf5tkp85vLKNDi5YJ1Pd68oeEDqydP8w23jLJ7+PQVfQuvmjzaeIZ0Zn ++z9Zl78FS/SKM8HP7fcof2FnyTwGzkqwwAAL9EzDiVFRbQ10xRLnk3RSgNiRIarrr ++HVOMhPloo9jUDxCeALnHoqv2UYcE1G8NZfBH08SIemJFofJJeZhuQPBQkUQ3D4aZ ++Nxb/FupLOCstQfta4eZ8bazEMW9PqH+7zoS1TJqrmtTqVuHVUPOzZq6l/oEUIRPh +++J11TvMp48wGuDTwjC3g5NdYIRYOl422sHToYdJXP/wVWxupEYZz0Bi5paNFuK6j ++PJ8GbDrEpRnLZT0qhozVW3UVAH2YSrrxB+HeNi/B08njSb+ASpY8M1lNV78xKLvD ++w/APNrSo4zOqWuRKX7e1JR6OVyE6G+o4ymN0rIFWoDpluGg5IgLf4A11B14xsNpX ++h05fIzpV2imKXofZYH1ulW3WUBAoXeqwOBPUA4sLhQu0FoNLQn4SBCh/6Pm/V4sC ++AwEAATANBgkqhkiG9w0BAQsFAAOBgQC5a8lYajTzjVOzLsg0hyoOBm68nkDrEsoD ++QcLvA+SNH9J4Df2i+H05vF8GbpXTbEY+QpsuotqC8F29WvMcqMrhm9lZD9y+5VGx ++i7SfI+EZalbeq2GTcCWaCSJgyJxQiUPE+TWZ9kjrI2LIg7ZwNroQVKo/Gs0r6zgL ++Gboprt6qmw== + -----END CERTIFICATE----- +diff --git a/t/data/smime/keys/sender@example.com.csr b/t/data/smime/keys/sender@example.com.csr +index 18fa799a..44d4ffe0 100644 +--- a/t/data/smime/keys/sender@example.com.csr ++++ b/t/data/smime/keys/sender@example.com.csr +@@ -1,9 +1,28 @@ + -----BEGIN CERTIFICATE REQUEST----- +-MIIBMzCB3gIBADB5MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEh +-MB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ8wDQYDVQQDEwZzZW5k +-ZXIxITAfBgkqhkiG9w0BCQEWEnNlbmRlckBleGFtcGxlLmNvbTBcMA0GCSqGSIb3 +-DQEBAQUAA0sAMEgCQQCoOEGQHefNK8tiz63/cPZEXfNLfiF1tlzhfsInO4Xrcpta +-lAppHYPKxZGyPwRyYeS461vOtRB32Kffi8laFBVhAgMBAAGgADANBgkqhkiG9w0B +-AQUFAANBAFoi5bepEWsl0cQiO7k314NAuHenXaVrsWt3kPWfwgWn0aLp3aH86aZ5 +-g4MYNjJzTqnkU1apyY8MV+BUZaXfnII= ++MIIEvjCCAqYCAQAweTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx ++ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1UEAwwGc2Vu ++ZGVyMSEwHwYJKoZIhvcNAQkBFhJzZW5kZXJAZXhhbXBsZS5jb20wggIiMA0GCSqG ++SIb3DQEBAQUAA4ICDwAwggIKAoICAQCPXWze6cp55QGets9g42qw+8f0GppdYPZ0 ++96eGhM+L45J/8iPpatM3fNvm/jBqK+1BJ0e3Ef4SL7aIywERPUR713MjZU1yEGKZ ++3nabEZ486hqJGmJzuo+uwireQHjc3BmZ88abMvy8xg5X9XpIzDnqCL9dLJ0xrKRo ++fGmfXKF3q/VTstjREBc9/m2Snzm8so0OLlgnU93ryh4QOrJ0/zDbeMsnv49BV9C6 +++aPNp4hnRmfP1mXvwVL9Iozwc/t9yh/YWfJPAbOSrDAAAv0TMOJUVFtDXTFEueTd ++FKA2JEhquusdU4yE+Wij2NQPEJ4Auceiq/ZRhwTUbw1l8EfTxIh6YkWh8kl5mG5A ++8FCRRDcPhpk3Fv8W6ks4Ky1B+1rh5nxtrMQxb0+of7vOhLVMmqua1OpW4dVQ87Nm ++rqX+gRQhE+H4nXVO8ynjzAa4NPCMLeDk11ghFg6XjbawdOhh0lc//BVbG6kRhnPQ ++GLmlo0W4rqM8nwZsOsSlGctlPSqGjNVbdRUAfZhKuvEH4d42L8HTyeNJv4BKljwz ++WU1XvzEou8PD8A82tKjjM6pa5Epft7UlHo5XITob6jjKY3SsgVagOmW4aDkiAt/g ++DXUHXjGw2leHTl8jOlXaKYpeh9lgfW6VbdZQEChd6rA4E9QDiwuFC7QWg0tCfhIE ++KH/o+b9XiwIDAQABoAAwDQYJKoZIhvcNAQELBQADggIBAFlt/HCc+3G5LEQC0LoD ++3lALIZm+985auQEDzXi8+i+W1/Q2qPWvsybUUQD5d0FFIE9bPsYxWadnKNzuvN7N ++iRnM4Efm/m0kbNhNbe1TVPNXzSpEwSKlQVMQ4j9xF0aTwbztPTznAzxYqcUgE+P8 ++VZ7lAneWTlZl3z2I47x0Oy3HSQ2okeNBH9IsnhUYZT2ZlsLKEqulmDhrYsiYpyVu ++82jL7pWpudRsjhdmmoZbzIwc5mqIWGeSP/vY9wwlVfxP69MUXdMwguvO7erQ5SA+ ++K6OcjDEWqXtMhaQBnq/iJdfXO9aBMdVo+EUkTf27KVqhF3zTvm8/rOGxMeV66D96 ++V6MBgVxcJ7uc8j0KHs3+3T5ShSwvmzYOdSjsUomfSlooxcZzGJWREgTFpgJ0QhN+ ++pdYtwpDUkpNgyW3Bq007UYieq0uoZBWx7zYaywMpi0M9LDTK4V2TbJmGGNkGWEbO ++m0uVQxSSPv5y9fGbJQLWRSrNx7w/6DMysB+rceEexGmAkYP29fPFm4iI6UKe5L5K ++WhWol6ZHMP/gj4PNt8BtKKDpxqNYEOKR5NRFhM+lRPGmjbu5ZBTUWnDhslcktono ++gMBgRRSpAmf2zBqenKNDPFCvZW5I1EU7tG/yAbfkJE3Dmc0Q8gRXsgyPerFreZXf ++qQWDtWQ+XRCayAJG5sox73Je + -----END CERTIFICATE REQUEST----- +diff --git a/t/data/smime/keys/sender@example.com.key b/t/data/smime/keys/sender@example.com.key +index 26ed8506..fe8609a1 100644 +--- a/t/data/smime/keys/sender@example.com.key ++++ b/t/data/smime/keys/sender@example.com.key +@@ -1,12 +1,52 @@ +------BEGIN RSA PRIVATE KEY----- +-Proc-Type: 4,ENCRYPTED +-DEK-Info: DES-EDE3-CBC,605762440BC8261C +- +-MpUs66ILz2ePX4NKQ408LOAwvmpLLLnSwDX/Zmr/LG4SyZ7AnY6dY06XB6suev3m +-AS+xm/LM44lvUaDvPnl4gO8jnCw3D1yktcfeHc6XqcFx2U9AiUTawmoSTKwrT4P+ +-tnpSrrBJY3WghElbckK3vbZboX9Eld+dJjGPf9YqMrkixObp0ul1zW7Wt+aSEV5B +-ngP3VmQinB1EjSUhGF/gsFzhJsutsX4Z1SE/U4K1A1OPl3Oz4e+9VLGgUN4ao84y +-pcNYdXO/BCax4Uk8l0r0DcMd73P9WZs9+bcSgmkqduWCXkNXDbfi4RTOEn19Ehpu +-MyKc3JrskRhNRN1vfMSRFUsrmppxBdPfkrGrTCJNBuL7zdbQh9k9XMaNzfw5Tt2R +-oCWay5shBGEEKXRLIEqzO+Jx1BWVlWwxUwDLr73ItHA= +------END RSA PRIVATE KEY----- ++-----BEGIN PRIVATE KEY----- ++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 ++oysIX0sWQfO1ZCDtnWL5ow9Z446flzk= ++-----END PRIVATE KEY----- +diff --git a/t/data/smime/keys/sender@example.com.pem b/t/data/smime/keys/sender@example.com.pem +index 500bc83f..95b282bd 100644 +--- a/t/data/smime/keys/sender@example.com.pem ++++ b/t/data/smime/keys/sender@example.com.pem +@@ -1,55 +1,137 @@ + Certificate: + Data: + Version: 1 (0x0) +- Serial Number: 9974010075738841109 (0x8a6acd51be94a015) +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=CA Owner/emailAddress=ca.owner@example.com ++ Serial Number: ++ 8a:6a:cd:51:be:94:a0:15 ++ Signature Algorithm: sha256WithRSAEncryption ++ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA Owner, emailAddress = ca.owner@example.com + Validity +- Not Before: Aug 28 21:41:45 2013 GMT +- Not After : Aug 28 21:41:45 2023 GMT +- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=sender/emailAddress=sender@example.com ++ Not Before: Aug 29 10:49:06 2023 GMT ++ Not After : Aug 29 10:49:06 2123 GMT ++ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = sender, emailAddress = sender@example.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (512 bit) ++ Public-Key: (4096 bit) + Modulus: +- 00:a8:38:41:90:1d:e7:cd:2b:cb:62:cf:ad:ff:70: +- f6:44:5d:f3:4b:7e:21:75:b6:5c:e1:7e:c2:27:3b: +- 85:eb:72:9b:5a:94:0a:69:1d:83:ca:c5:91:b2:3f: +- 04:72:61:e4:b8:eb:5b:ce:b5:10:77:d8:a7:df:8b: +- c9:5a:14:15:61 ++ 00:8f:5d:6c:de:e9:ca:79:e5:01:9e:b6:cf:60:e3: ++ 6a:b0:fb:c7:f4:1a:9a:5d:60:f6:74:f7:a7:86:84: ++ cf:8b:e3:92:7f:f2:23:e9:6a:d3:37:7c:db:e6:fe: ++ 30:6a:2b:ed:41:27:47:b7:11:fe:12:2f:b6:88:cb: ++ 01:11:3d:44:7b:d7:73:23:65:4d:72:10:62:99:de: ++ 76:9b:11:9e:3c:ea:1a:89:1a:62:73:ba:8f:ae:c2: ++ 2a:de:40:78:dc:dc:19:99:f3:c6:9b:32:fc:bc:c6: ++ 0e:57:f5:7a:48:cc:39:ea:08:bf:5d:2c:9d:31:ac: ++ a4:68:7c:69:9f:5c:a1:77:ab:f5:53:b2:d8:d1:10: ++ 17:3d:fe:6d:92:9f:39:bc:b2:8d:0e:2e:58:27:53: ++ dd:eb:ca:1e:10:3a:b2:74:ff:30:db:78:cb:27:bf: ++ 8f:41:57:d0:ba:f9:a3:cd:a7:88:67:46:67:cf:d6: ++ 65:ef:c1:52:fd:22:8c:f0:73:fb:7d:ca:1f:d8:59: ++ f2:4f:01:b3:92:ac:30:00:02:fd:13:30:e2:54:54: ++ 5b:43:5d:31:44:b9:e4:dd:14:a0:36:24:48:6a:ba: ++ eb:1d:53:8c:84:f9:68:a3:d8:d4:0f:10:9e:00:b9: ++ c7:a2:ab:f6:51:87:04:d4:6f:0d:65:f0:47:d3:c4: ++ 88:7a:62:45:a1:f2:49:79:98:6e:40:f0:50:91:44: ++ 37:0f:86:99:37:16:ff:16:ea:4b:38:2b:2d:41:fb: ++ 5a:e1:e6:7c:6d:ac:c4:31:6f:4f:a8:7f:bb:ce:84: ++ b5:4c:9a:ab:9a:d4:ea:56:e1:d5:50:f3:b3:66:ae: ++ a5:fe:81:14:21:13:e1:f8:9d:75:4e:f3:29:e3:cc: ++ 06:b8:34:f0:8c:2d:e0:e4:d7:58:21:16:0e:97:8d: ++ b6:b0:74:e8:61:d2:57:3f:fc:15:5b:1b:a9:11:86: ++ 73:d0:18:b9:a5:a3:45:b8:ae:a3:3c:9f:06:6c:3a: ++ c4:a5:19:cb:65:3d:2a:86:8c:d5:5b:75:15:00:7d: ++ 98:4a:ba:f1:07:e1:de:36:2f:c1:d3:c9:e3:49:bf: ++ 80:4a:96:3c:33:59:4d:57:bf:31:28:bb:c3:c3:f0: ++ 0f:36:b4:a8:e3:33:aa:5a:e4:4a:5f:b7:b5:25:1e: ++ 8e:57:21:3a:1b:ea:38:ca:63:74:ac:81:56:a0:3a: ++ 65:b8:68:39:22:02:df:e0:0d:75:07:5e:31:b0:da: ++ 57:87:4e:5f:23:3a:55:da:29:8a:5e:87:d9:60:7d: ++ 6e:95:6d:d6:50:10:28:5d:ea:b0:38:13:d4:03:8b: ++ 0b:85:0b:b4:16:83:4b:42:7e:12:04:28:7f:e8:f9: ++ bf:57:8b + Exponent: 65537 (0x10001) +- Signature Algorithm: sha1WithRSAEncryption +- 91:74:84:00:98:40:30:6b:a6:61:6b:7b:d7:c9:9d:6e:ef:bb: +- c8:ba:8b:83:15:62:3e:d1:c2:9d:1c:4e:ce:09:ce:d8:4f:4a: +- 49:a8:97:e8:3b:ed:82:2c:a3:20:45:72:f3:d9:23:66:93:d5: +- 54:14:ce:ce:cf:27:04:52:43:b4:a7:0b:ac:b8:45:a3:96:bf: +- 2f:43:59:61:02:7a:36:39:9c:01:ad:b7:63:6e:b5:b6:29:cb: +- 79:78:93:95:25:24:4a:83:bd:1d:d6:07:86:06:6a:fa:04:60: +- 6e:ba:41:11:0a:cb:b2:84:03:ac:30:55:94:ed:b2:2d:3c:c5: +- 99:6f ++ Signature Algorithm: sha256WithRSAEncryption ++ Signature Value: ++ b9:6b:c9:58:6a:34:f3:8d:53:b3:2e:c8:34:87:2a:0e:06:6e: ++ bc:9e:40:eb:12:ca:03:41:c2:ef:03:e4:8d:1f:d2:78:0d:fd: ++ a2:f8:7d:39:bc:5f:06:6e:95:d3:6c:46:3e:42:9b:2e:a2:da: ++ 82:f0:5d:bd:5a:f3:1c:a8:ca:e1:9b:d9:59:0f:dc:be:e5:51: ++ b1:8b:b4:9f:23:e1:19:6a:56:de:ab:61:93:70:25:9a:09:22: ++ 60:c8:9c:50:89:43:c4:f9:35:99:f6:48:eb:23:62:c8:83:b6: ++ 70:36:ba:10:54:aa:3f:1a:cd:2b:eb:38:0b:19:ba:29:ae:de: ++ aa:9b + -----BEGIN CERTIFICATE----- +-MIICKTCCAZICCQCKas1RvpSgFTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJB ++MIID8zCCA1wCCQCKas1RvpSgFTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJB + VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 + cyBQdHkgTHRkMREwDwYDVQQDDAhDQSBPd25lcjEjMCEGCSqGSIb3DQEJARYUY2Eu +-b3duZXJAZXhhbXBsZS5jb20wHhcNMTMwODI4MjE0MTQ1WhcNMjMwODI4MjE0MTQ1 +-WjB5MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMY +-SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ8wDQYDVQQDEwZzZW5kZXIxITAfBgkq +-hkiG9w0BCQEWEnNlbmRlckBleGFtcGxlLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sA +-MEgCQQCoOEGQHefNK8tiz63/cPZEXfNLfiF1tlzhfsInO4XrcptalAppHYPKxZGy +-PwRyYeS461vOtRB32Kffi8laFBVhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAkXSE +-AJhAMGumYWt718mdbu+7yLqLgxViPtHCnRxOzgnO2E9KSaiX6DvtgiyjIEVy89kj +-ZpPVVBTOzs8nBFJDtKcLrLhFo5a/L0NZYQJ6NjmcAa23Y261tinLeXiTlSUkSoO9 +-HdYHhgZq+gRgbrpBEQrLsoQDrDBVlO2yLTzFmW8= ++b3duZXJAZXhhbXBsZS5jb20wIBcNMjMwODI5MTA0OTA2WhgPMjEyMzA4MjkxMDQ5 ++MDZaMHkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK ++DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnNlbmRlcjEhMB8G ++CSqGSIb3DQEJARYSc2VuZGVyQGV4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAj11s3unKeeUBnrbPYONqsPvH9BqaXWD2dPenhoTPi+OS ++f/Ij6WrTN3zb5v4waivtQSdHtxH+Ei+2iMsBET1Ee9dzI2VNchBimd52mxGePOoa ++iRpic7qPrsIq3kB43NwZmfPGmzL8vMYOV/V6SMw56gi/XSydMaykaHxpn1yhd6v1 ++U7LY0RAXPf5tkp85vLKNDi5YJ1Pd68oeEDqydP8w23jLJ7+PQVfQuvmjzaeIZ0Zn ++z9Zl78FS/SKM8HP7fcof2FnyTwGzkqwwAAL9EzDiVFRbQ10xRLnk3RSgNiRIarrr ++HVOMhPloo9jUDxCeALnHoqv2UYcE1G8NZfBH08SIemJFofJJeZhuQPBQkUQ3D4aZ ++Nxb/FupLOCstQfta4eZ8bazEMW9PqH+7zoS1TJqrmtTqVuHVUPOzZq6l/oEUIRPh +++J11TvMp48wGuDTwjC3g5NdYIRYOl422sHToYdJXP/wVWxupEYZz0Bi5paNFuK6j ++PJ8GbDrEpRnLZT0qhozVW3UVAH2YSrrxB+HeNi/B08njSb+ASpY8M1lNV78xKLvD ++w/APNrSo4zOqWuRKX7e1JR6OVyE6G+o4ymN0rIFWoDpluGg5IgLf4A11B14xsNpX ++h05fIzpV2imKXofZYH1ulW3WUBAoXeqwOBPUA4sLhQu0FoNLQn4SBCh/6Pm/V4sC ++AwEAATANBgkqhkiG9w0BAQsFAAOBgQC5a8lYajTzjVOzLsg0hyoOBm68nkDrEsoD ++QcLvA+SNH9J4Df2i+H05vF8GbpXTbEY+QpsuotqC8F29WvMcqMrhm9lZD9y+5VGx ++i7SfI+EZalbeq2GTcCWaCSJgyJxQiUPE+TWZ9kjrI2LIg7ZwNroQVKo/Gs0r6zgL ++Gboprt6qmw== + -----END CERTIFICATE----- +------BEGIN RSA PRIVATE KEY----- +-Proc-Type: 4,ENCRYPTED +-DEK-Info: DES-EDE3-CBC,605762440BC8261C +- +-MpUs66ILz2ePX4NKQ408LOAwvmpLLLnSwDX/Zmr/LG4SyZ7AnY6dY06XB6suev3m +-AS+xm/LM44lvUaDvPnl4gO8jnCw3D1yktcfeHc6XqcFx2U9AiUTawmoSTKwrT4P+ +-tnpSrrBJY3WghElbckK3vbZboX9Eld+dJjGPf9YqMrkixObp0ul1zW7Wt+aSEV5B +-ngP3VmQinB1EjSUhGF/gsFzhJsutsX4Z1SE/U4K1A1OPl3Oz4e+9VLGgUN4ao84y +-pcNYdXO/BCax4Uk8l0r0DcMd73P9WZs9+bcSgmkqduWCXkNXDbfi4RTOEn19Ehpu +-MyKc3JrskRhNRN1vfMSRFUsrmppxBdPfkrGrTCJNBuL7zdbQh9k9XMaNzfw5Tt2R +-oCWay5shBGEEKXRLIEqzO+Jx1BWVlWwxUwDLr73ItHA= +------END RSA PRIVATE KEY----- ++-----BEGIN PRIVATE KEY----- ++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 ++oysIX0sWQfO1ZCDtnWL5ow9Z446flzk= ++-----END PRIVATE KEY----- +diff --git a/t/data/smime/mails/1-signed.eml b/t/data/smime/mails/1-signed.eml +index 57c09b7a..906c2183 100644 +--- a/t/data/smime/mails/1-signed.eml ++++ b/t/data/smime/mails/1-signed.eml +@@ -1,74 +1,77 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709B50.6040609@example.com> +-Date: Tue, 09 Feb 2010 02:16:32 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:1 +-Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms010504020705000203070202" +- +-This is a cryptographically signed message in MIME format. +- +---------------ms010504020705000203070202 +-Content-Type: text/plain; charset=UTF-8; format=flowed +-Content-Transfer-Encoding: quoted-printable +- +-This is a test email with detached signature. +-ID:1 +- +- +---------------ms010504020705000203070202 +-Content-Type: application/pkcs7-signature; name="smime.p7s" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7s" +-Content-Description: S/MIME Cryptographic Signature +- +-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 +-SMKKtZ91LwT/wfT8cqCADfh0LaTIFAAAAAAAAA== +---------------ms010504020705000203070202-- ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <7134873f-729f-4df8-9538-4545603123b6@example.com> ++Date: Tue, 29 Aug 2023 19:29:53 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:1 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms050903060100010602090608" ++ ++This is a cryptographically signed message in MIME format. ++ ++--------------ms050903060100010602090608 ++Content-Type: text/plain; charset=UTF-8; format=flowed ++Content-Transfer-Encoding: 7bit ++ ++This is a test email with detached signature. ++ID:1 ++ ++ ++--------------ms050903060100010602090608 ++Content-Type: application/pkcs7-signature; name="smime.p7s" ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7s" ++Content-Description: S/MIME Cryptographic Signature ++ ++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 ++m9DZ6yb9pvd1yS2FLOmvjwAAAAAAAA== ++--------------ms050903060100010602090608-- +diff --git a/t/data/smime/mails/2-signed-attachment.eml b/t/data/smime/mails/2-signed-attachment.eml +index 5c8ab27c..6afea9f7 100644 +--- a/t/data/smime/mails/2-signed-attachment.eml ++++ b/t/data/smime/mails/2-signed-attachment.eml +@@ -1,90 +1,89 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709C48.4030908@example.com> +-Date: Tue, 09 Feb 2010 02:20:40 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:2 +-Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms090206030705090204050109" +- +-This is a cryptographically signed message in MIME format. +- +---------------ms090206030705090204050109 +-Content-Type: multipart/mixed; +- boundary="------------090009090000030005040209" +- +-This is a multi-part message in MIME format. +---------------090009090000030005040209 +-Content-Type: text/plain; charset=UTF-8; format=flowed +-Content-Transfer-Encoding: quoted-printable +- +-This is a test email with a text attachment. +-ID:2 +- +- +---------------090009090000030005040209 +-Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; +- name="text-attachment" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; +- filename="text-attachment" +- +-VGhpcyBpcyBhIHRlc3QgYXR0YWNobWVudC4gIFRoZSBtYWdpYyB3b3JkIGlzOiAgemFuemli +-YXIuCg== +---------------090009090000030005040209-- +- +---------------ms090206030705090204050109 +-Content-Type: application/pkcs7-signature; name="smime.p7s" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7s" +-Content-Description: S/MIME Cryptographic Signature +- +-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 +-tziPXZ2qeGSB/mmBf7mwfjPYgGZkoQAAAAAAAA== +---------------ms090206030705090204050109-- ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <1f559aba-f74f-4017-921a-b515b7fd6076@example.com> ++Date: Tue, 29 Aug 2023 19:35:39 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:2 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms060104030103070206000606" ++ ++This is a cryptographically signed message in MIME format. ++ ++--------------ms060104030103070206000606 ++Content-Type: multipart/mixed; boundary="------------5bTJu71y0e4RaxyyRgqLplkg" ++ ++--------------5bTJu71y0e4RaxyyRgqLplkg ++Content-Type: text/plain; charset=UTF-8; format=flowed ++Content-Transfer-Encoding: 7bit ++ ++This is a test email with a text attachment. ++ID:2 ++ ++--------------5bTJu71y0e4RaxyyRgqLplkg ++Content-Type: text/plain; charset=UTF-8; name="text-attachment.txt" ++Content-Disposition: attachment; filename="text-attachment.txt" ++Content-Transfer-Encoding: base64 ++ ++VGhpcyBpcyBhIHRlc3QgYXR0YWNobWVudC4gIFRoZSBtYWdpYyB3b3JkIGlzOiAgemFuemli ++YXIuCg== ++ ++--------------5bTJu71y0e4RaxyyRgqLplkg-- ++ ++--------------ms060104030103070206000606 ++Content-Type: application/pkcs7-signature; name="smime.p7s" ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7s" ++Content-Description: S/MIME Cryptographic Signature ++ ++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 ++w9+K5ueBQt7qb7XsbSoRQgAAAAAAAA== ++--------------ms060104030103070206000606-- +diff --git a/t/data/smime/mails/3-signed-binary.eml b/t/data/smime/mails/3-signed-binary.eml +index ff3449da..0588c1b9 100644 +--- a/t/data/smime/mails/3-signed-binary.eml ++++ b/t/data/smime/mails/3-signed-binary.eml +@@ -1,95 +1,94 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709CC5.4010607@example.com> +-Date: Tue, 09 Feb 2010 02:22:45 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:3 +-Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms020101060809030506070801" +- +-This is a cryptographically signed message in MIME format. +- +---------------ms020101060809030506070801 +-Content-Type: multipart/mixed; +- boundary="------------060502090104050607070406" +- +-This is a multi-part message in MIME format. +---------------060502090104050607070406 +-Content-Type: text/plain; charset=UTF-8; format=flowed +-Content-Transfer-Encoding: quoted-printable +- +-This is a test email with binary attachment and detached signature. +-ID:3 +- +- +---------------060502090104050607070406 +-Content-Type: image/png; +- name="favicon.png" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; +- filename="favicon.png" +- +-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB +-BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d +-BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N +-ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj +-ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW +-AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA +-AAAASUVORK5CYII= +---------------060502090104050607070406-- +- +---------------ms020101060809030506070801 +-Content-Type: application/pkcs7-signature; name="smime.p7s" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7s" +-Content-Description: S/MIME Cryptographic Signature +- +-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 +-53knAqbgZ9v3viuGCo0fj6RvFU4CHgAAAAAAAA== +---------------ms020101060809030506070801-- ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: ++Date: Tue, 29 Aug 2023 19:36:36 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:3 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms080409050107030404080700" ++ ++This is a cryptographically signed message in MIME format. ++ ++--------------ms080409050107030404080700 ++Content-Type: multipart/mixed; boundary="------------60x0NuLY0SgqmauMsaTWB9Uo" ++ ++--------------60x0NuLY0SgqmauMsaTWB9Uo ++Content-Type: text/plain; charset=UTF-8; format=flowed ++Content-Transfer-Encoding: 7bit ++ ++This is a test email with binary attachment and detached signature. ++ID:3 ++ ++--------------60x0NuLY0SgqmauMsaTWB9Uo ++Content-Type: image/png; name="favicon.png" ++Content-Disposition: attachment; filename="favicon.png" ++Content-Transfer-Encoding: base64 ++ ++iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB ++BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d ++BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N ++ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj ++ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW ++AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA ++AAAASUVORK5CYII= ++ ++--------------60x0NuLY0SgqmauMsaTWB9Uo-- ++ ++--------------ms080409050107030404080700 ++Content-Type: application/pkcs7-signature; name="smime.p7s" ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7s" ++Content-Description: S/MIME Cryptographic Signature ++ ++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 ++/Muu/T7yCrODtxAWVZQI5gAAAAAAAA== ++--------------ms080409050107030404080700-- +diff --git a/t/data/smime/mails/4-encrypted-plain.eml b/t/data/smime/mails/4-encrypted-plain.eml +index 481a858b..ccec76f9 100644 +--- a/t/data/smime/mails/4-encrypted-plain.eml ++++ b/t/data/smime/mails/4-encrypted-plain.eml +@@ -1,32 +1,49 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709D39.6090102@example.com> +-Date: Tue, 09 Feb 2010 02:24:41 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:4 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-MIAGCSqGSIb3DQEHA6CAMIACAQAxggHIMIHhAgEAMIGKMH0xCzAJBgNVBAYTAkFVMRMwEQYD +-VQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxETAP +-BgNVBAMTCENBIE93bmVyMSMwIQYJKoZIhvcNAQkBFhRjYS5vd25lckBleGFtcGxlLmNvbQIJ +-AIpqzVG+lKAVMA0GCSqGSIb3DQEBAQUABEB4NUWl1nJB+cQVXPRmHEj+uxapSKRQ2PFeP+Eh +-VJHyPpsgf8APPxhS/6s1DBIWE9fwkghiM7JTgYZow42q/tdfMIHhAgEAMIGKMH0xCzAJBgNV +-BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRz +-IFB0eSBMdGQxETAPBgNVBAMTCENBIE93bmVyMSMwIQYJKoZIhvcNAQkBFhRjYS5vd25lckBl +-eGFtcGxlLmNvbQIJAIpqzVG+lKAWMA0GCSqGSIb3DQEBAQUABEAFd/zqPwzjH8gKZoGUA/yY +-7aDfJzlAsg2tar47hM1xeSTgJ5JpluYy9V/43oK++Q+3HceI4P+aE91CjMrcbqvlMIAGCSqG +-SIb3DQEHATAaBggqhkiG9w0DAjAOAgIAoAQIsDsGzNXDhPmggASBiBdO/BdF/SrEjAeIi2is +-G71RuJ/lcnNlAltdk9lMJLoOxxTaa495lk8HuVD0xFYQueNS8AsACRjkOwgSf9Avh1elFRV5 +-U3XZrmCOqbnDsWRTr2KEc8K9CXxqY6CwFizaoFlTftpji7W3ATU2+/QufIKYBS7Za3Zq1u7M +-HLbv4GLdEP1GVPDj2fAECP7azsN17fhCAAAAAAAAAAAAAA== ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <481f547a-73ea-4d07-8e14-7a978d8b580b@example.com> ++Date: Tue, 29 Aug 2023 19:47:40 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:4 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 ++QchMtSkYzCMSHlEAAAAAAAAAAAAA +diff --git a/t/data/smime/mails/5-encrypted-attachment.eml b/t/data/smime/mails/5-encrypted-attachment.eml +index b6fb9b46..50cf4ad2 100644 +--- a/t/data/smime/mails/5-encrypted-attachment.eml ++++ b/t/data/smime/mails/5-encrypted-attachment.eml +@@ -1,42 +1,58 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709D8E.1000001@example.com> +-Date: Tue, 09 Feb 2010 02:26:06 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:5 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-MIAGCSqGSIb3DQEHA6CAMIACAQAxggHIMIHhAgEAMIGKMH0xCzAJBgNVBAYTAkFVMRMwEQYD +-VQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxETAP +-BgNVBAMTCENBIE93bmVyMSMwIQYJKoZIhvcNAQkBFhRjYS5vd25lckBleGFtcGxlLmNvbQIJ +-AIpqzVG+lKAVMA0GCSqGSIb3DQEBAQUABEALN6in6tg2C0yVmkb0XWJr6qRLrwrJLiqcoamd +-a3VAyQeHcqIB14UYuHiN6zZA2lABUI1DsjFlDiCEg8TSyJuAMIHhAgEAMIGKMH0xCzAJBgNV +-BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRz +-IFB0eSBMdGQxETAPBgNVBAMTCENBIE93bmVyMSMwIQYJKoZIhvcNAQkBFhRjYS5vd25lckBl +-eGFtcGxlLmNvbQIJAIpqzVG+lKAWMA0GCSqGSIb3DQEBAQUABEBDqZbltMcqBRxIshfZ+jSa +-49l6RJAX6HVIBVZRu77rmlyVs2ft18qP0YVgwDPgD5Iok4c1Taemo3Rg7M2bHLwlMIAGCSqG +-SIb3DQEHATAaBggqhkiG9w0DAjAOAgIAoAQIWcv/5Jc8r/uggASCAqjneNECFsRSAPgwjW7G +-Hi+zLy+vPBLNfWgyuEAlKGeM347PdUciZNLhiz3D49lfHmVypGOxYTNU0kfeJVTW5bfwYHdS +-ZmPRx49tNJt08GR0eqbePKZtH0/0BW7LF1//lcNeJchsSdyRvkMB8zvTBhnNVhUSQWumrbda +-OUqvVpSdqx4SeqbyiyQKI+7AiZ2ChcZX9fA+YoiWT85NVtmgBNMMne0uHgmdBMaQHF4bTXvY +-/Mg8ew7Vg3TkVjg9QlaAe7JGrgyvSx/H4f+sn6mb68NaF5jGjiwen4a6ThRJO8lIJ30rTlb+ +-WMqszV6OZK2ieWNn5BQlXOI/ew92UIuoyd5PtDkrLbkYio20KfCLpLbt1tvT8ZG0csgg9PO3 +-iM3S0PWpjg4axknCYonphwSczsPcvUYZ+y4cIMdXvk5A3byMAQjLPYh0N6F9Q9tETc3HhDhA +-rSdVRot6JILv/tUs2ISPxJcMlLh8TcHZNchnRUcDg0wojULs49rONZIw8UGzbZi1H6IoGebk +-1HBsskw21pPDUjG7LpV0bKFKan0wxE5kJP1Xk5EN2Yw+2EHDE19QHs/ru2FdTjfbtcQFGlT1 +-yiNUI7UwAPpCPyLoOpfvwYL2u4nSnbnKHCdjDHl4VAre8bngCMTzdRM91w/nydjpHfBbv+l5 +-/EOKbYPC/SNG3IJZy70iExcXU+WydHdYCW0NhR7K1sCdwDsUpziQMvzlkJKclPC894Yljqnn +-83S8G2z3pTJ+SEAabdXY1GmYdfFeLGwnRmegzmWe0wCZKz0m4CabkDX4h0u8xu/C/5gbfU5Y +-JO1s3iVxzGa1TgyvD4aPvqh9pIQ/wSFt43HtZ5/ReG2ul7PTzOK92xC1c3xpMnXdtLEeRmNx +-2KU0Kfk1Si0lBJHf3R/JhwhHvwQI0IeGb5Ho55oAAAAAAAAAAAAA ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: ++Date: Tue, 29 Aug 2023 19:49:39 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:5 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 ++pmNe5VAVAAAAAAAAAAAAAA== +diff --git a/t/data/smime/mails/6-encrypted-binary.eml b/t/data/smime/mails/6-encrypted-binary.eml +index f4d50886..2171dc49 100644 +--- a/t/data/smime/mails/6-encrypted-binary.eml ++++ b/t/data/smime/mails/6-encrypted-binary.eml +@@ -1,48 +1,64 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709DE8.9000101@example.com> +-Date: Tue, 09 Feb 2010 02:27:36 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:6 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-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 ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <79c3119e-31ac-4f27-8d80-540cec474da6@example.com> ++Date: Tue, 29 Aug 2023 19:50:55 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:6 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 +diff --git a/t/data/smime/mails/7-signed-encrypted-plain.eml b/t/data/smime/mails/7-signed-encrypted-plain.eml +index 7dd981a2..d58ecfd4 100644 +--- a/t/data/smime/mails/7-signed-encrypted-plain.eml ++++ b/t/data/smime/mails/7-signed-encrypted-plain.eml +@@ -1,97 +1,118 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709E37.3080003@example.com> +-Date: Tue, 09 Feb 2010 02:28:55 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:7 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-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 +-AAAAAAA= ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <22b320dc-7dd9-4c6b-aabf-c6b36995a1b4@example.com> ++Date: Tue, 29 Aug 2023 19:52:30 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:7 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 ++AAAAAAAAAAA= +diff --git a/t/data/smime/mails/8-signed-encrypted-attachment.eml b/t/data/smime/mails/8-signed-encrypted-attachment.eml +index 1c53ad95..3087778c 100644 +--- a/t/data/smime/mails/8-signed-encrypted-attachment.eml ++++ b/t/data/smime/mails/8-signed-encrypted-attachment.eml +@@ -1,107 +1,127 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709E7D.8050407@example.com> +-Date: Tue, 09 Feb 2010 02:30:05 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:8 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-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 +-AAAAAAAAAAAA ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: ++Date: Tue, 29 Aug 2023 19:53:37 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:8 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 ++AAA= +diff --git a/t/data/smime/mails/9-signed-encrypted-binary.eml b/t/data/smime/mails/9-signed-encrypted-binary.eml +index eab9d5b6..6d7e1431 100644 +--- a/t/data/smime/mails/9-signed-encrypted-binary.eml ++++ b/t/data/smime/mails/9-signed-encrypted-binary.eml +@@ -1,113 +1,133 @@ +-X-Mozilla-Status: 0801 +-X-Mozilla-Status2: 00000000 +-X-Mozilla-Keys: +-FCC: imap://sender@localhost/Sent +-X-Identity-Key: id1 +-X-Account-Key: account1 +-Message-ID: <4B709ECC.4020500@example.com> +-Date: Tue, 09 Feb 2010 02:31:24 +0300 +-From: tester +-X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0 +-User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.1.7) Gecko/20100111 Thunderbird/3.0.1 +-MIME-Version: 1.0 +-To: root@example.com +-Subject: Test Email ID:9 +-Content-Type: application/pkcs7-mime; name="smime.p7m" +-Content-Transfer-Encoding: base64 +-Content-Disposition: attachment; filename="smime.p7m" +-Content-Description: S/MIME Encrypted Message +- +-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 +-qwQIeNe1tczOd/sAAAAAAAAAAAAA ++X-Mozilla-Status: 0800 ++X-Mozilla-Status2: 00000000 ++Message-ID: <76006a2b-33a3-40b1-90c6-78ff3650080d@example.com> ++Date: Tue, 29 Aug 2023 19:55:20 +0800 ++MIME-Version: 1.0 ++User-Agent: Mozilla Thunderbird ++Content-Language: en-US ++To: root@example.com ++From: sender ++Subject: Test Email ID:9 ++X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; ++ attachmentreminder=0; deliveryformat=1 ++X-Identity-Key: id1 ++Fcc: imap://sender%40example.com@.example.com/Sent ++Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data ++Content-Transfer-Encoding: base64 ++Content-Disposition: attachment; filename="smime.p7m" ++Content-Description: S/MIME Encrypted Message ++ ++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 ++YcWmNQAAAAAAAAAAAAA= +diff --git a/t/web/smime/outgoing.t b/t/web/smime/outgoing.t +index fd01367f..6d3a5304 100644 +--- a/t/web/smime/outgoing.t ++++ b/t/web/smime/outgoing.t +@@ -222,7 +222,7 @@ foreach my $mail ( map cleanup_headers($_), @{ $mail{'signed_encrypted'} } ) { + 'Signature status correctly displayed' + ); + $m->content_like( +- qr{}m, ++ qr{}m, + 'Tooltip correctly displayed' + ); + diff -Nru request-tracker5-5.0.3+dfsg/debian/patches/series request-tracker5-5.0.3+dfsg/debian/patches/series --- request-tracker5-5.0.3+dfsg/debian/patches/series 2023-06-26 00:53:17.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/patches/series 2023-10-25 09:26:55.000000000 +0000 @@ -24,3 +24,6 @@ remove_exclude_Test::WWW::Mechanize.diff Update-tests-for-EN-datetime-locale-change-to-space.diff libdatetime-format-natural-perl-v0.14.diff +upstream_5.0.3_cve:_patchset_2023-09-26.diff +Update-expired-certificates.diff +upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff diff -Nru request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.3_cve:_patchset_2023-09-26.diff request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.3_cve:_patchset_2023-09-26.diff --- request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.3_cve:_patchset_2023-09-26.diff 1970-01-01 00:00:00.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.3_cve:_patchset_2023-09-26.diff 2023-10-25 09:26:55.000000000 +0000 @@ -0,0 +1,1175 @@ +From 649e42551893d748cd196a0b46624766f9c266e7 Mon Sep 17 00:00:00 2001 +From: Andrew Ruthven +Date: Sun, 8 Oct 2023 22:51:44 +1300 +Subject: Fix a number of security issues in RT. + +* RT is vulnerable to unvalidated email headers in incoming email and the + mail-gateway REST interface. This vulnerability is assigned CVE-2023-41259. +* RT is vulnerable to information leakage via response messages returned from + requests sent via the mail-gateway REST interface. This vulnerability is + assigned CVE-2023-41260. +* RT 5.0 is vulnerable to information leakage via transaction searches made + by authenticated users in the transaction query builder. This vulnerability + is assigned CVE-2023-45024. +* RT 5.0 can reveal information about data on various RT objects in errors + and other response messages to REST 2 requests. + +Patch-Name: upstream_5.0.3_cve:_patchset_2023-09-26.diff +Author: Best Practical +Forwarded: not-needed +Applied: 5.0.5 +--- + docs/web_deployment.pod | 25 +++++ + lib/RT/Articles.pm | 5 + + lib/RT/Assets.pm | 5 + + lib/RT/Attachment.pm | 11 +++ + lib/RT/Catalog.pm | 22 +++++ + lib/RT/Catalogs.pm | 5 + + lib/RT/Class.pm | 33 +++++++ + lib/RT/Classes.pm | 5 + + lib/RT/CustomField.pm | 22 +++++ + lib/RT/CustomFields.pm | 5 + + lib/RT/CustomRole.pm | 22 +++++ + lib/RT/CustomRoles.pm | 6 ++ + lib/RT/Group.pm | 34 ++++++- + lib/RT/Groups.pm | 5 + + lib/RT/Interface/Email.pm | 4 + + lib/RT/Interface/Email/Crypt.pm | 5 +- + lib/RT/Interface/Web.pm | 22 +++++ + lib/RT/ObjectCustomFieldValue.pm | 1 + + lib/RT/Queue.pm | 23 +++++ + lib/RT/Queues.pm | 5 + + lib/RT/REST2/Resource/Article.pm | 10 +- + lib/RT/REST2/Resource/Asset.pm | 6 +- + lib/RT/REST2/Resource/Collection.pm | 28 +++--- + lib/RT/REST2/Resource/CustomField.pm | 15 --- + lib/RT/REST2/Resource/Group.pm | 39 +++----- + lib/RT/REST2/Resource/GroupMembers.pm | 2 - + .../REST2/Resource/ObjectCustomFieldValue.pm | 6 -- + lib/RT/REST2/Resource/RT.pm | 4 +- + lib/RT/REST2/Resource/Record.pm | 17 +++- + lib/RT/REST2/Resource/Ticket.pm | 11 +-- + lib/RT/REST2/Resource/User.pm | 3 +- + lib/RT/SearchBuilder.pm | 5 + + lib/RT/SearchBuilder/Role/Roles.pm | 4 +- + lib/RT/Ticket.pm | 4 + + lib/RT/Tickets.pm | 11 ++- + lib/RT/Transactions.pm | 98 ++++++++++++++++++- + lib/RT/Users.pm | 5 + + share/html/Elements/CollectionList | 6 +- + share/html/REST/1.0/NoAuth/mail-gateway | 13 ++- + share/html/Search/Results.html | 10 +- + share/html/Search/Results.tsv | 10 +- + 41 files changed, 451 insertions(+), 121 deletions(-) + +diff --git a/docs/web_deployment.pod b/docs/web_deployment.pod +index 6ee03d48..c2200110 100644 +--- a/docs/web_deployment.pod ++++ b/docs/web_deployment.pod +@@ -127,6 +127,31 @@ RT to access the Authorization header. + + More information is available in L. + ++=head3 Restricting the REST 1.0 mail-gateway ++ ++RT processes email via a REST 1.0 endpoint. If you accept email on the same ++server as your running RT, you can restrict this endpoint to localhost only ++with a configuration like the following: ++ ++ # Accept requests only from localhost ++ ++ Require local ++ ++ ++If you run C on a separate server, you can update ++the above to allow additional IP addresses. ++ ++ ++ Require ip 127.0.0.1 ::1 192.0.2.0 # Add you actual IPs ++ ++ ++See the L ++for additional configuration options. ++ ++After adding this configuration, test receiving email and confirm ++your C utility and C configurations ++can successfully submit email to RT. ++ + =head2 nginx + + C requires that you start RT's fastcgi process externally, for +diff --git a/lib/RT/Articles.pm b/lib/RT/Articles.pm +index 285cfe6d..a2e70bab 100644 +--- a/lib/RT/Articles.pm ++++ b/lib/RT/Articles.pm +@@ -968,6 +968,11 @@ sub SimpleSearch { + return $self; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'ShowArticle', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Assets.pm b/lib/RT/Assets.pm +index 046a834e..d7b390b2 100644 +--- a/lib/RT/Assets.pm ++++ b/lib/RT/Assets.pm +@@ -1857,6 +1857,11 @@ sub _ProcessRestrictions { + + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'ShowAsset', Object => RT->System ) ? 1 : 0; ++} ++ + 1; + + RT::Base->_ImportOverlays(); +diff --git a/lib/RT/Attachment.pm b/lib/RT/Attachment.pm +index b0b2fc66..2cfbea14 100644 +--- a/lib/RT/Attachment.pm ++++ b/lib/RT/Attachment.pm +@@ -1084,6 +1084,17 @@ sub _CacheConfig { + } + + ++=head2 CurrentUserCanSee ++ ++Returns true if the current user can see the attachment, via corresponding ++transaction's rights check. ++ ++=cut ++ ++sub CurrentUserCanSee { ++ my $self = shift; ++ return $self->TransactionObj->CurrentUserCanSee; ++} + + + =head2 id +diff --git a/lib/RT/Catalog.pm b/lib/RT/Catalog.pm +index 41504233..7ddb1245 100644 +--- a/lib/RT/Catalog.pm ++++ b/lib/RT/Catalog.pm +@@ -297,6 +297,28 @@ sub CurrentUserCanSee { + || $self->CurrentUserHasRight('AdminCatalog'); + } + ++=head2 CurrentUserCanCreate ++ ++Returns true if the current user can create a new catalog, using I. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminCatalog'); ++} ++ ++=head2 CurrentUserCanModify ++ ++Returns true if the current user can modify the catalog, using I. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminCatalog'); ++} ++ + =head2 Owner + + Returns an L object for this catalog's I role group. On error, +diff --git a/lib/RT/Catalogs.pm b/lib/RT/Catalogs.pm +index 31b2a0e1..06590225 100644 +--- a/lib/RT/Catalogs.pm ++++ b/lib/RT/Catalogs.pm +@@ -114,6 +114,11 @@ sub _Init { + + sub Table { "Catalogs" } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'ShowCatalog', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Class.pm b/lib/RT/Class.pm +index 236d8548..cd5fcf07 100644 +--- a/lib/RT/Class.pm ++++ b/lib/RT/Class.pm +@@ -396,6 +396,39 @@ sub SetSubjectOverride { + } + } + ++=head2 CurrentUserCanSee ++ ++Returns true if the current user can see the class, using I. ++ ++=cut ++ ++sub CurrentUserCanSee { ++ my $self = shift; ++ return $self->CurrentUserHasRight('SeeClass'); ++} ++ ++=head2 CurrentUserCanCreate ++ ++Returns true if the current user can create a new class, using I. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminClass'); ++} ++ ++=head2 CurrentUserCanModify ++ ++Returns true if the current user can modify the class, using I. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminClass'); ++} ++ + =head2 id + + Returns the current value of id. +diff --git a/lib/RT/Classes.pm b/lib/RT/Classes.pm +index c2dd6328..b665b83c 100644 +--- a/lib/RT/Classes.pm ++++ b/lib/RT/Classes.pm +@@ -81,6 +81,11 @@ sub AddRecord { + + sub _SingularClass { "RT::Class" } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'SeeClass', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/CustomField.pm b/lib/RT/CustomField.pm +index c0112ae7..9a042ac9 100644 +--- a/lib/RT/CustomField.pm ++++ b/lib/RT/CustomField.pm +@@ -2166,6 +2166,28 @@ sub RegisterLookupType { + $FRIENDLY_LOOKUP_TYPES{$path} = $friendly_name; + } + ++=head2 CurrentUserCanCreate ++ ++If the user has I they can create a new custom field. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminCustomField'); ++} ++ ++=head2 CurrentUserCanModify ++ ++If the user has I they can modify the custom field. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminCustomField'); ++} ++ + =head2 IncludeContentForValue [VALUE] (and SetIncludeContentForValue) + + Gets or sets the C for this custom field. RT +diff --git a/lib/RT/CustomFields.pm b/lib/RT/CustomFields.pm +index 76157990..bc93a6d5 100644 +--- a/lib/RT/CustomFields.pm ++++ b/lib/RT/CustomFields.pm +@@ -475,6 +475,11 @@ sub LimitToCatalog { + } + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'SeeCustomField', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/CustomRole.pm b/lib/RT/CustomRole.pm +index fa4ec0f7..80b8e916 100644 +--- a/lib/RT/CustomRole.pm ++++ b/lib/RT/CustomRole.pm +@@ -502,6 +502,28 @@ sub GroupType { + return 'RT::CustomRole-' . $self->id; + } + ++=head2 CurrentUserCanCreate ++ ++Returns true if the current user can create a new custom role, using I. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminClass'); ++} ++ ++=head2 CurrentUserCanModify ++ ++Returns true if the current user can modify the custom role, using I. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminClass'); ++} ++ + =head2 id + + Returns the current value of id. +diff --git a/lib/RT/CustomRoles.pm b/lib/RT/CustomRoles.pm +index f49a9f9e..dc2b0d58 100644 +--- a/lib/RT/CustomRoles.pm ++++ b/lib/RT/CustomRoles.pm +@@ -195,6 +195,12 @@ sub LimitToAdded { + return RT::ObjectCustomRoles->new( $self->CurrentUser )->LimitTargetToAdded( $self => @_ ); + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ # Not typo, user needs SeeQueue to see CustomRoles ++ return $self->CurrentUser->HasRight( Right => 'SeeQueue', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Group.pm b/lib/RT/Group.pm +index 7f9854a2..0e8da390 100644 +--- a/lib/RT/Group.pm ++++ b/lib/RT/Group.pm +@@ -1311,17 +1311,43 @@ sub _Set { + + =head2 CurrentUserCanSee + +-Always returns 1; unfortunately, for historical reasons, users have +-always been able to examine groups they have indirect access to, even if +-they do not have SeeGroup explicitly. ++Unfortunately, for historical reasons, users have always been able to ++examine groups they have indirect access to, even if they do not have ++SeeGroup explicitly. ++ ++We do require "SeeGroup" to see transactions of current group. + + =cut + + sub CurrentUserCanSee { + my $self = shift; +- return 1; ++ my ($what, $txn) = @_; ++ ++ return 1 if ( $what // '' ) ne 'Transaction'; ++ return $self->CurrentUserHasRight('SeeGroup'); ++} ++ ++=head2 CurrentUserCanCreate ++ ++Returns true if the current user can create a new group, using I. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminGroup'); + } + ++=head2 CurrentUserCanModify ++ ++Returns true if the current user can modify the group, using I. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminGroup'); ++} + + =head2 PrincipalObj + +diff --git a/lib/RT/Groups.pm b/lib/RT/Groups.pm +index 2dd03bf5..1222fbfb 100644 +--- a/lib/RT/Groups.pm ++++ b/lib/RT/Groups.pm +@@ -537,6 +537,11 @@ sub SimpleSearch { + return $self; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'SeeGroup', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Interface/Email.pm b/lib/RT/Interface/Email.pm +index 1218b628..0a3acd08 100644 +--- a/lib/RT/Interface/Email.pm ++++ b/lib/RT/Interface/Email.pm +@@ -161,6 +161,10 @@ sub Gateway { + ); + } + ++ # Clean up sensitive headers. Crypt related headers are cleaned up in RT::Interface::Email::Crypt::VerifyDecrypt ++ my @headers = qw( RT-Attach RT-Send-Cc RT-Send-Bcc RT-Message-ID RT-DetectedAutoGenerated RT-Squelch-Replies-To ); ++ $Message->head->delete($_) for @headers; ++ + #Set up a queue object + my $SystemQueueObj = RT::Queue->new( RT->SystemUser ); + $SystemQueueObj->Load( $args{'queue'} ); +diff --git a/lib/RT/Interface/Email/Crypt.pm b/lib/RT/Interface/Email/Crypt.pm +index f4eab019..a8b0ea3f 100644 +--- a/lib/RT/Interface/Email/Crypt.pm ++++ b/lib/RT/Interface/Email/Crypt.pm +@@ -73,13 +73,14 @@ sub VerifyDecrypt { + ); + + # we clean all possible headers +- my @headers = ++ my @headers = ( + qw( + X-RT-Incoming-Encryption + X-RT-Incoming-Signature X-RT-Privacy + X-RT-Sign X-RT-Encrypt + ), +- map "X-RT-$_-Status", RT::Crypt->Protocols; ++ map "X-RT-$_-Status", RT::Crypt->Protocols ++ ); + foreach my $p ( $args{'Message'}->parts_DFS ) { + $p->head->delete($_) for @headers; + } +diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm +index 41c00816..9133deec 100644 +--- a/lib/RT/Interface/Web.pm ++++ b/lib/RT/Interface/Web.pm +@@ -5298,6 +5298,28 @@ sub GetDashboards { + return \%dashboards; + } + ++sub PreprocessTransactionSearchQuery { ++ my %args = ( ++ Query => undef, ++ ObjectType => 'RT::Ticket', ++ @_ ++ ); ++ ++ my @limits; ++ if ( $args{ObjectType} eq 'RT::Ticket' ) { ++ @limits = ( ++ q{TicketType = 'ticket'}, ++ qq{ObjectType = '$args{ObjectType}'}, ++ $args{Query} =~ /^\s*\(.*\)$/ ? $args{Query} : "($args{Query})" ++ ); ++ } ++ else { ++ # Other ObjectTypes are not supported for now ++ @limits = 'id = 0'; ++ } ++ return join ' AND ', @limits; ++} ++ + package RT::Interface::Web; + RT::Base->_ImportOverlays(); + +diff --git a/lib/RT/ObjectCustomFieldValue.pm b/lib/RT/ObjectCustomFieldValue.pm +index e28c3376..1e025f80 100644 +--- a/lib/RT/ObjectCustomFieldValue.pm ++++ b/lib/RT/ObjectCustomFieldValue.pm +@@ -815,6 +815,7 @@ object, otherwise false. + + sub CurrentUserCanSee { + my $self = shift; ++ return undef unless $self->Id; + return $self->CustomFieldObj->CurrentUserHasRight('SeeCustomField'); + } + +diff --git a/lib/RT/Queue.pm b/lib/RT/Queue.pm +index 6aa8ed98..bb6cfb81 100644 +--- a/lib/RT/Queue.pm ++++ b/lib/RT/Queue.pm +@@ -813,6 +813,29 @@ sub CurrentUserCanSee { + return $self->CurrentUserHasRight('SeeQueue'); + } + ++ ++=head2 CurrentUserCanCreate ++ ++Returns true if the current user can create a new queue, using I. ++ ++=cut ++ ++sub CurrentUserCanCreate { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminQueue'); ++} ++ ++=head2 CurrentUserCanModify ++ ++Returns true if the current user can modify the queue, using I. ++ ++=cut ++ ++sub CurrentUserCanModify { ++ my $self = shift; ++ return $self->CurrentUserHasRight('AdminQueue'); ++} ++ + =head2 id + + Returns the current value of id. +diff --git a/lib/RT/Queues.pm b/lib/RT/Queues.pm +index 4612f545..356fdfae 100644 +--- a/lib/RT/Queues.pm ++++ b/lib/RT/Queues.pm +@@ -128,6 +128,11 @@ sub ItemsOrderBy { + return $items; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'SeeQueue', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/REST2/Resource/Article.pm b/lib/RT/REST2/Resource/Article.pm +index fea9f9d9..df3b81f5 100644 +--- a/lib/RT/REST2/Resource/Article.pm ++++ b/lib/RT/REST2/Resource/Article.pm +@@ -80,17 +80,11 @@ sub create_record { + + return (\400, "Invalid Class") if !$data->{Class}; + +- my $class = RT::Class->new(RT->SystemUser); ++ my $class = RT::Class->new($self->current_user); + $class->Load($data->{Class}); + +- return (\400, "Invalid Class") if !$class->Id; +- + return ( \403, $self->record->loc("Permission Denied") ) +- unless $self->record->CurrentUser->HasRight( +- Right => 'CreateArticle', +- Object => $class, +- ) +- and $class->Disabled != 1; ++ unless $class->Id and !$class->__Value('Disabled') and $class->CurrentUserHasRight('CreateArticle'); + + my ($ok, $txn, $msg) = $self->_create_record($data); + return ($ok, $msg); +diff --git a/lib/RT/REST2/Resource/Asset.pm b/lib/RT/REST2/Resource/Asset.pm +index 23e6ae07..588dc093 100644 +--- a/lib/RT/REST2/Resource/Asset.pm ++++ b/lib/RT/REST2/Resource/Asset.pm +@@ -83,10 +83,8 @@ sub create_record { + my $catalog = RT::Catalog->new($self->record->CurrentUser); + $catalog->Load($data->{Catalog}); + +- return (\400, "Invalid Catalog") if !$catalog->Id; +- +- return (\403, $self->record->loc("Permission Denied", $catalog->Name)) +- unless $catalog->CurrentUserHasRight('CreateAsset'); ++ return (\403, $self->record->loc("Permission Denied")) ++ unless $catalog->Id and !$catalog->__Value('Disabled') and $catalog->CurrentUserHasRight('CreateAsset'); + + return $self->_create_record($data); + } +diff --git a/lib/RT/REST2/Resource/Collection.pm b/lib/RT/REST2/Resource/Collection.pm +index e3ea2ced..7fd639ed 100644 +--- a/lib/RT/REST2/Resource/Collection.pm ++++ b/lib/RT/REST2/Resource/Collection.pm +@@ -189,7 +189,7 @@ sub serialize { + + my %results = ( + count => scalar(@results) + 0, +- total => $collection->CountAll + 0, ++ total => $collection->CurrentUserCanSeeAll ? ( $collection->CountAll + 0 ) : undef, + per_page => $collection->RowsPerPage + 0, + page => ($collection->FirstRow / $collection->RowsPerPage) + 1, + items => \@results, +@@ -205,18 +205,20 @@ sub serialize { + } + } + +- $results{pages} = ceil($results{total} / $results{per_page}); +- if ($results{page} < $results{pages}) { +- my $page = $results{page} + 1; +- $uri->query_form( @query_form, page => $results{page} + 1 ); +- $results{next_page} = $uri->as_string; +- }; +- if ($results{page} > 1) { +- # If we're beyond the last page, set prev_page as the last page +- # available, otherwise, the previous page. +- $uri->query_form( @query_form, page => ($results{page} > $results{pages} ? $results{pages} : $results{page} - 1) ); +- $results{prev_page} = $uri->as_string; +- }; ++ $results{pages} = defined $results{total} ? ceil($results{total} / $results{per_page}) : undef; ++ if ( $results{pages} ) { ++ if ($results{page} < $results{pages}) { ++ my $page = $results{page} + 1; ++ $uri->query_form( @query_form, page => $results{page} + 1 ); ++ $results{next_page} = $uri->as_string; ++ } ++ if ($results{page} > 1) { ++ # If we're beyond the last page, set prev_page as the last page ++ # available, otherwise, the previous page. ++ $uri->query_form( @query_form, page => ($results{page} > $results{pages} ? $results{pages} : $results{page} - 1) ); ++ $results{prev_page} = $uri->as_string; ++ } ++ } + + return \%results; + } +diff --git a/lib/RT/REST2/Resource/CustomField.pm b/lib/RT/REST2/Resource/CustomField.pm +index 5f81f669..69b1825f 100644 +--- a/lib/RT/REST2/Resource/CustomField.pm ++++ b/lib/RT/REST2/Resource/CustomField.pm +@@ -87,21 +87,6 @@ sub serialize { + return $data; + } + +-sub forbidden { +- my $self = shift; +- my $method = $self->request->method; +- if ($self->record->id) { +- if ($method eq 'GET') { +- return !$self->record->CurrentUserHasRight('SeeCustomField'); +- } else { +- return !($self->record->CurrentUserHasRight('SeeCustomField') && $self->record->CurrentUserHasRight('AdminCustomField')); +- } +- } else { +- return !$self->current_user->HasRight(Right => "AdminCustomField", Object => RT->System); +- } +- return 0; +-} +- + sub hypermedia_links { + my $self = shift; + my $links = $self->_default_hypermedia_links(@_); +diff --git a/lib/RT/REST2/Resource/Group.pm b/lib/RT/REST2/Resource/Group.pm +index ea90c816..2f61ec6a 100644 +--- a/lib/RT/REST2/Resource/Group.pm ++++ b/lib/RT/REST2/Resource/Group.pm +@@ -58,9 +58,7 @@ extends 'RT::REST2::Resource::Record'; + with 'RT::REST2::Resource::Record::Readable' + => { -alias => { serialize => '_default_serialize' } }, + 'RT::REST2::Resource::Record::DeletableByDisabling', +- => { -alias => { delete_resource => '_delete_resource' } }, + 'RT::REST2::Resource::Record::Writable', +- => { -alias => { create_record => '_create_record' } }, + 'RT::REST2::Resource::Record::Hypermedia' + => { -alias => { hypermedia_links => '_default_hypermedia_links' } }; + +@@ -102,33 +100,20 @@ sub hypermedia_links { + return $links; + } + +-sub create_record { ++override forbidden => sub { + my $self = shift; +- my $data = shift; + +- return (\403, $self->record->loc("Permission Denied")) +- unless $self->current_user->HasRight( +- Right => "AdminGroup", +- Object => RT->System, +- ); +- +- return $self->_create_record($data); +-} +- +-sub delete_resource { +- my $self = shift; +- +- return (\403, $self->record->loc("Permission Denied")) +- unless $self->record->CurrentUserHasRight('AdminGroup'); +- +- return $self->_delete_resource; +-} +- +-sub forbidden { +- my $self = shift; +- return 0 unless $self->record->id; +- return !$self->record->CurrentUserHasRight('SeeGroup'); +-} ++ # For historical reasons, RT::Group::CurrentUserCanSee always returns true. ++ # For REST2, we want to check SeeGroup. ++ no warnings 'redefine'; ++ my $original_can_see = \&RT::Group::CurrentUserCanSee; ++ local *RT::Group::CurrentUserCanSee = sub { ++ my $self = shift; ++ return 0 unless $original_can_see->($self, @_); ++ return $self->CurrentUserHasRight('SeeGroup'); ++ }; ++ return super(); ++}; + + __PACKAGE__->meta->make_immutable; + +diff --git a/lib/RT/REST2/Resource/GroupMembers.pm b/lib/RT/REST2/Resource/GroupMembers.pm +index 887562dc..cc9198fa 100644 +--- a/lib/RT/REST2/Resource/GroupMembers.pm ++++ b/lib/RT/REST2/Resource/GroupMembers.pm +@@ -114,9 +114,7 @@ sub dispatch_rules { + + sub forbidden { + my $self = shift; +- return 0 unless $self->group->id; + return !$self->group->CurrentUserHasRight('AdminGroupMembership'); +- return 1; + } + + sub serialize { +diff --git a/lib/RT/REST2/Resource/ObjectCustomFieldValue.pm b/lib/RT/REST2/Resource/ObjectCustomFieldValue.pm +index a3a1607b..10416970 100644 +--- a/lib/RT/REST2/Resource/ObjectCustomFieldValue.pm ++++ b/lib/RT/REST2/Resource/ObjectCustomFieldValue.pm +@@ -71,12 +71,6 @@ sub content_types_provided { + { [ {$self->record->ContentType || 'text/plain; charset=utf-8' => 'to_binary'} ] }; + } + +-sub forbidden { +- my $self = shift; +- return 0 unless $self->record->id; +- return !$self->record->CurrentUserHasRight('SeeCustomField'); +-} +- + sub to_binary { + my $self = shift; + unless ($self->record->CustomFieldObj->Type =~ /^(?:Image|Binary)$/) { +diff --git a/lib/RT/REST2/Resource/RT.pm b/lib/RT/REST2/Resource/RT.pm +index 8b0756a3..545a48dd 100644 +--- a/lib/RT/REST2/Resource/RT.pm ++++ b/lib/RT/REST2/Resource/RT.pm +@@ -71,7 +71,9 @@ sub to_json { + my $self = shift; + return JSON::to_json({ + Version => $RT::VERSION, +- Plugins => [ RT->Config->Get('Plugins') ], ++ $self->current_user->HasRight( Object => RT->System, Right => 'SuperUser' ) ++ ? ( Plugins => [ RT->Config->Get('Plugins') ] ) ++ : (), + }, { pretty => 1 }); + } + __PACKAGE__->meta->make_immutable; +diff --git a/lib/RT/REST2/Resource/Record.pm b/lib/RT/REST2/Resource/Record.pm +index 16bc4307..17960ee0 100644 +--- a/lib/RT/REST2/Resource/Record.pm ++++ b/lib/RT/REST2/Resource/Record.pm +@@ -100,10 +100,21 @@ sub resource_exists { + + sub forbidden { + my $self = shift; +- return 0 unless $self->record->id; ++ my $method = $self->request->method; ++ ++ my $right_method; ++ if ( $self->record->id ) { ++ $right_method = $method =~ /^(?:GET|HEAD)$/ ? 'CurrentUserCanSee' : 'CurrentUserCanModify'; ++ } ++ else { ++ # Even without id, the method can be GET, e.g. to access a not-exsting record. ++ $right_method = $method =~ /^(?:GET|HEAD)$/ ? 'CurrentUserCanSee' : 'CurrentUserCanCreate'; ++ } ++ ++ if ( $self->record->can($right_method) ) { ++ return !$self->record->$right_method; ++ } + +- my $can_see = $self->record->can("CurrentUserCanSee"); +- return 1 if $can_see and not $self->record->$can_see(); + return 0; + } + +diff --git a/lib/RT/REST2/Resource/Ticket.pm b/lib/RT/REST2/Resource/Ticket.pm +index 349b3dce..36872287 100644 +--- a/lib/RT/REST2/Resource/Ticket.pm ++++ b/lib/RT/REST2/Resource/Ticket.pm +@@ -225,16 +225,11 @@ sub validate_input { + if ( $args{'Action'} eq 'create' ) { + return (0, "Could not create ticket. Queue not set", 400) if !$data->{Queue}; + +- my $queue = RT::Queue->new(RT->SystemUser); ++ my $queue = RT::Queue->new($self->current_user); + $queue->Load($data->{Queue}); + +- return (0, "Unable to find queue", 400) if !$queue->Id; +- +- return (0, $self->record->loc("No permission to create tickets in the queue '[_1]'", $queue->Name), 403) +- unless $self->record->CurrentUser->HasRight( +- Right => 'CreateTicket', +- Object => $queue, +- ) and $queue->Disabled != 1; ++ return (0, $self->record->loc("No permission to create tickets in the queue '[_1]'", $data->{Queue}), 403) ++ unless $queue->Id and $queue->__Value('Disabled') != 1 and $queue->CurrentUserHasRight('CreateTicket'); + } + + if ( $args{'Action'} eq 'update' ) { +diff --git a/lib/RT/REST2/Resource/User.pm b/lib/RT/REST2/Resource/User.pm +index 2f30fc0f..f04f77eb 100644 +--- a/lib/RT/REST2/Resource/User.pm ++++ b/lib/RT/REST2/Resource/User.pm +@@ -105,9 +105,8 @@ around 'serialize' => sub { + + sub forbidden { + my $self = shift; +- return 0 if not $self->record->id; +- return 0 if $self->record->id == $self->current_user->id; + return 0 if $self->current_user->Privileged; ++ return 0 if ( $self->record->id || 0 ) == $self->current_user->id; + return 1; + } + +diff --git a/lib/RT/SearchBuilder.pm b/lib/RT/SearchBuilder.pm +index 4a740d73..e4334e71 100644 +--- a/lib/RT/SearchBuilder.pm ++++ b/lib/RT/SearchBuilder.pm +@@ -1150,6 +1150,11 @@ sub DistinctFieldValues { + return @values; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->HasRight( Right => 'SuperUser', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/SearchBuilder/Role/Roles.pm b/lib/RT/SearchBuilder/Role/Roles.pm +index 4f80302a..42691aea 100644 +--- a/lib/RT/SearchBuilder/Role/Roles.pm ++++ b/lib/RT/SearchBuilder/Role/Roles.pm +@@ -97,7 +97,7 @@ sub _RoleGroupClass { + + sub _RoleGroupsJoin { + my $self = shift; +- my %args = (New => 0, Class => '', Name => '', @_); ++ my %args = (New => 0, Class => '', Name => '', Alias => 'main', @_); + + $args{'Class'} ||= $self->_RoleGroupClass; + +@@ -118,7 +118,7 @@ sub _RoleGroupsJoin { + # Previously (before 4.4) this used an inner join. + my $groups = $self->Join( + TYPE => 'left', +- ALIAS1 => 'main', ++ ALIAS1 => $args{Alias}, + FIELD1 => $instance, + TABLE2 => 'Groups', + FIELD2 => 'Instance', +diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm +index 10508031..dd41a44c 100644 +--- a/lib/RT/Ticket.pm ++++ b/lib/RT/Ticket.pm +@@ -3761,6 +3761,10 @@ sub Serialize { + $obj->Load( $store{EffectiveId} ); + $store{EffectiveId} = \($obj->UID); + ++ unless ( $self->CurrentUserCanSeeTime ) { ++ delete $store{$_} for qw/TimeEstimated TimeLeft TimeWorked/; ++ } ++ + return %store; + } + +diff --git a/lib/RT/Tickets.pm b/lib/RT/Tickets.pm +index 1278f3b0..f0b2a4c1 100644 +--- a/lib/RT/Tickets.pm ++++ b/lib/RT/Tickets.pm +@@ -2855,7 +2855,8 @@ sub CurrentUserCanSee { + return unless @queues; + $self->Limit( + SUBCLAUSE => 'ACL', +- ALIAS => 'main', ++ # RT::Transactions::CurrentUserCanSee reuses RT::Tickets::CurrentUserCanSee ++ ALIAS => $self->isa('RT::Transactions') ? $self->_JoinTickets : 'main', + FIELD => 'Queue', + OPERATOR => 'IN', + VALUE => [ @queues ], +@@ -2875,6 +2876,8 @@ sub CurrentUserCanSee { + FIELD => 'Owner', + VALUE => $id, + ENTRYAGGREGATOR => $ea, ++ # RT::Transactions::CurrentUserCanSee reuses RT::Tickets::CurrentUserCanSee ++ ALIAS => $self->isa('RT::Transactions') ? $self->_JoinTickets : 'main', + ); + } + else { +@@ -3584,6 +3587,12 @@ sub Query { + return $self->{_sql_query}; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return 1 if RT->Config->Get('UseSQLForACLChecks'); ++ return $self->CurrentUser->HasRight( Right => 'ShowTicket', Object => RT->System ) ? 1 : 0; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Transactions.pm b/lib/RT/Transactions.pm +index 6ee5697b..8d574b32 100644 +--- a/lib/RT/Transactions.pm ++++ b/lib/RT/Transactions.pm +@@ -142,7 +142,28 @@ sub AddRecord { + my $self = shift; + my ($record) = @_; + +- return unless $record->CurrentUserCanSee; ++ if ( $self->{_is_ticket_only_search} && RT->Config->Get('UseSQLForACLChecks') ) { ++ # UseSQLForACLChecks implies ShowTicket only, need to check out extra rights here. ++ my $type = $record->__Value('Type'); ++ if ( $type eq 'Comment' ) { ++ return unless $record->CurrentUserHasRight('ShowTicketComments'); ++ } ++ elsif ( $type eq 'CommentEmailRecord' ) { ++ return ++ unless $record->CurrentUserHasRight('ShowTicketComments') ++ && $record->CurrentUserHasRight('ShowOutgoingEmail'); ++ } ++ elsif ( $type eq 'EmailRecord' ) { ++ return unless $record->CurrentUserHasRight('ShowOutgoingEmail'); ++ } ++ elsif ( $type eq 'CustomField' ) { ++ return unless $record->CurrentUserCanSee; ++ } ++ } ++ else { ++ return unless $record->CurrentUserCanSee; ++ } ++ + return $self->SUPER::AddRecord($record); + } + +@@ -1075,6 +1096,28 @@ sub _parser { + return $self->_CloseParen unless $node->isLeaf; + } + ); ++ ++ # Determine if it's a ticket transaction search ++ $tree->traverse( ++ sub { ++ my $node = shift; ++ return unless $node->isLeaf and $node->getNodeValue; ++ my ($key, $subkey, $meta, $op, $value, $bundle) ++ = @{$node->getNodeValue}{qw/Key Subkey Meta Op Value Bundle/}; ++ return unless $key eq 'ObjectType' && $value eq 'RT::Ticket' && $op eq '='; ++ ++ my $is_ticket_only_search = 1; ++ while ( my $parent = $node->getParent ) { ++ last if $parent->isRoot; ++ if ( lc( $parent->getNodeValue // '' ) eq 'or' ) { ++ $is_ticket_only_search = 0; ++ last; ++ } ++ $node = $parent; ++ } ++ $self->{_is_ticket_only_search} ||= $is_ticket_only_search; ++ } ++ ); + } + + sub FromSQL { +@@ -1130,6 +1173,59 @@ sub Query { + return $self->{_sql_query}; + } + ++our $AUTOLOAD; ++sub AUTOLOAD { ++ my $self = shift; ++ my ($method) = ( $AUTOLOAD =~ /::(\w+)$/ ); ++ ++ no strict 'refs'; ++ ++ # Reuse RT::Tickets methods for UseSQLForACLChecks related joins/limitations. ++ if ( $self->{_is_ticket_only_search} && RT::Tickets->can($method) ) { ++ my @args = @_; ++ if ( $method eq '_RoleGroupsJoin' ) { ++ push @args, Alias => $self->_JoinTickets; ++ } ++ ++ if ( $method eq '_RoleGroupClass' ) { ++ # We want ticket's role group class here ++ unshift @args, 'RT::Tickets'; ++ } ++ else { ++ unshift @args, $self; ++ } ++ ++ return "RT::Tickets::$method"->(@args); ++ } ++ elsif ( $method ne 'DESTROY' ) { ++ require Carp; ++ Carp::croak "Undefined subroutine &$AUTOLOAD called"; ++ } ++} ++ ++sub _DoSearch { ++ my $self = shift; ++ $self->CurrentUserCanSee if $self->{_is_ticket_only_search} && RT->Config->Get('UseSQLForACLChecks'); ++ return $self->SUPER::_DoSearch( @_ ); ++} ++ ++sub _DoCount { ++ my $self = shift; ++ $self->CurrentUserCanSee if $self->{_is_ticket_only_search} && RT->Config->Get('UseSQLForACLChecks'); ++ return $self->SUPER::_DoCount( @_ ); ++} ++ ++sub CleanSlate { ++ my $self = shift; ++ if ( $self->{_is_ticket_only_search} && RT->Config->Get('UseSQLForACLChecks') ) { ++ RT::Tickets::CleanSlate( $self, @_ ) ; ++ } ++ else { ++ $self->SUPER::CleanSlate(@_); ++ } ++ delete $self->{_is_ticket_only_search}; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/lib/RT/Users.pm b/lib/RT/Users.pm +index 33c7bbf7..2a59212a 100644 +--- a/lib/RT/Users.pm ++++ b/lib/RT/Users.pm +@@ -715,6 +715,11 @@ sub SimpleSearch { + return $self; + } + ++sub CurrentUserCanSeeAll { ++ my $self = shift; ++ return $self->CurrentUser->Privileged; ++} ++ + RT::Base->_ImportOverlays(); + + 1; +diff --git a/share/html/Elements/CollectionList b/share/html/Elements/CollectionList +index 6c0b8d7b..9e84f4a4 100644 +--- a/share/html/Elements/CollectionList ++++ b/share/html/Elements/CollectionList +@@ -49,11 +49,7 @@ + if (!$Collection) { + $Collection = $Class->new( $session{'CurrentUser'} ); + if ( $Class eq 'RT::Transactions' ) { +- my @limits = ( "ObjectType = '$ObjectType'", $Query ? "($Query)" : () ); +- if ( $ObjectType eq 'RT::Ticket' ) { +- unshift @limits, "TicketType = 'ticket'"; +- } +- $Query = join ' AND ', @limits; ++ $Query = PreprocessTransactionSearchQuery( Query => $Query, ObjectType => $ObjectType ); + } + $Collection->FromSQL($Query); + } +diff --git a/share/html/REST/1.0/NoAuth/mail-gateway b/share/html/REST/1.0/NoAuth/mail-gateway +index 328be91b..107d7858 100644 +--- a/share/html/REST/1.0/NoAuth/mail-gateway ++++ b/share/html/REST/1.0/NoAuth/mail-gateway +@@ -59,9 +59,18 @@ use RT::Interface::Email; + $r->content_type('text/plain; charset=utf-8'); + $m->error_format('text'); + my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway( \%ARGS ); ++ ++# Obscure the message to avoid any information disclosure unless ++# in DevelMode. ++my $log_error; ++unless ( RT->Config->Get('DevelMode') ) { ++ $log_error = $error; ++ $error = 'operation unsuccessful'; ++} ++ + if ( $status == 1 ) { + $m->out("ok\n"); +- if ( $Ticket && $Ticket->Id ) { ++ if ( $Ticket && $Ticket->Id && RT->Config->Get('DevelMode') ) { + $m->out( 'Ticket: ' . ($Ticket->Id || '') . "\n" ); + $m->out( 'Queue: ' . ($Ticket->QueueObj->Name || '') . "\n" ); + $m->out( 'Owner: ' . ($Ticket->OwnerObj->Name || '') . "\n" ); +@@ -73,9 +82,11 @@ if ( $status == 1 ) { + } + else { + if ( $status == -75 ) { ++ RT->Logger->error("mail-gateway returned status -75: $log_error") if $log_error; + $m->out( "temporary failure - $error\n" ); + } + else { ++ RT->Logger->error("mail-gateway error: $log_error") if $log_error; + $m->out( "not ok - $error\n" ); + } + } +diff --git a/share/html/Search/Results.html b/share/html/Search/Results.html +index e0de84d9..30877e24 100644 +--- a/share/html/Search/Results.html ++++ b/share/html/Search/Results.html +@@ -170,15 +170,9 @@ $session{$session_name} = $Class->new($session{'CurrentUser'}) ; + my ( $ok, $msg ); + if ( $Query ) { + if ( $Class eq 'RT::Transactions' ) { +- my @limits = ( "ObjectType = '$ObjectType'", "($Query)" ); +- if ( $ObjectType eq 'RT::Ticket' ) { +- unshift @limits, "TicketType = 'ticket'"; +- } +- ( $ok, $msg ) = $session{$session_name}->FromSQL( join ' AND ', @limits ); +- } +- else { +- ( $ok, $msg ) = $session{$session_name}->FromSQL($Query); ++ $Query = PreprocessTransactionSearchQuery( Query => $Query, ObjectType => $ObjectType ); + } ++ ( $ok, $msg ) = $session{$session_name}->FromSQL($Query); + } + + # Provide an empty search if parsing failed +diff --git a/share/html/Search/Results.tsv b/share/html/Search/Results.tsv +index 6fc595e8..dc9e80d1 100644 +--- a/share/html/Search/Results.tsv ++++ b/share/html/Search/Results.tsv +@@ -61,17 +61,11 @@ my $collection = $Class->new( $session{'CurrentUser'} ); + my @limits; + + if ( $Class eq 'RT::Transactions' ) { +- @limits = ( "ObjectType = '$ObjectType'", "($Query)" ); +- if ( $ObjectType eq 'RT::Ticket' ) { +- unshift @limits, "TicketType = 'ticket'"; +- } +-} +-else { +- push @limits, $Query; ++ $Query = PreprocessTransactionSearchQuery( Query => $Query, ObjectType => $ObjectType ); + } + + if ( $Query ) { +- $collection->FromSQL( join ' AND ', @limits ); ++ $collection->FromSQL( $Query ); + } + elsif ( $Class eq 'RT::Assets' ) { + my $catalog_obj = LoadDefaultCatalog($ARGS{'Catalog'} || ''); diff -Nru request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff --- request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff 1970-01-01 00:00:00.000000000 +0000 +++ request-tracker5-5.0.3+dfsg/debian/patches/upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff 2023-10-25 09:26:55.000000000 +0000 @@ -0,0 +1,265 @@ +From 7c498c032d3aaa601c4a43405f1d3a78ac043016 Mon Sep 17 00:00:00 2001 +From: sunnavy +Date: Thu, 12 Oct 2023 09:56:49 +1300 +Subject: Patches to tests for CVE-2023-41259, CVE-2023-41260, and CVE-45024 + +Patch-Name: upstream_5.0.x_cve:_patchset_2023-09-26-tests.diff +Author: sunnavy +Forwarded: not-needed +Applied: 5.0.5 +--- + t/mail/gateway.t | 2 +- + t/mail/han-encodings.t | 2 +- + t/mail/sendmail-plaintext.t | 2 +- + t/mail/sendmail.t | 2 +- + t/rest2/articles.t | 2 +- + t/rest2/assets.t | 2 +- + t/rest2/attachments.t | 4 ++-- + t/rest2/cf-image.t | 2 +- + t/rest2/customfields.t | 2 +- + t/rest2/group-members.t | 24 +++++------------------- + t/rest2/searches.t | 2 +- + t/rest2/tickets.t | 4 +--- + t/rest2/transactions.t | 4 ++-- + t/ticket/interface.t | 2 +- + 14 files changed, 20 insertions(+), 36 deletions(-) + +diff --git a/t/mail/gateway.t b/t/mail/gateway.t +index c51daa90..8f9e941c 100644 +--- a/t/mail/gateway.t ++++ b/t/mail/gateway.t +@@ -2,7 +2,7 @@ use strict; + use warnings; + + +-use RT::Test config => 'Set( @MailPlugins, "Action::Take", "Action::Resolve");', tests => undef, actual_server => 1; ++use RT::Test config => 'Set( @MailPlugins, "Action::Take", "Action::Resolve"); Set($DevelMode, 1);', tests => undef, actual_server => 1; + my ($baseurl, $m) = RT::Test->started_ok; + + use RT::Tickets; +diff --git a/t/mail/han-encodings.t b/t/mail/han-encodings.t +index ba1acc0c..d2dc5238 100644 +--- a/t/mail/han-encodings.t ++++ b/t/mail/han-encodings.t +@@ -1,7 +1,7 @@ + use strict; + use warnings; + +-use RT::Test tests => undef, actual_server => 1; ++use RT::Test tests => undef, config => 'Set($DevelMode, 1);', actual_server => 1; + + # we can't simply call Encode::HanExtra->require here because we are testing + # if Encode::HanExtra could be automatically loaded. +diff --git a/t/mail/sendmail-plaintext.t b/t/mail/sendmail-plaintext.t +index b9eb7195..14103924 100644 +--- a/t/mail/sendmail-plaintext.t ++++ b/t/mail/sendmail-plaintext.t +@@ -132,7 +132,7 @@ for my $encoding ('ISO-8859-1', 'UTF-8') { + { + my ($ticket) = mail_in_ticket('rt-send-cc'); + my $cc = first_attach($ticket)->GetHeader('RT-Send-Cc'); +- like ($cc, qr/test$_/, "Found test $_") for 1..5; ++ ok (!$cc, "No RT-Send-Cc"); # RT-Send-Cc is supposed to be cleared + } + + { +diff --git a/t/mail/sendmail.t b/t/mail/sendmail.t +index 4ef32061..d6ead4d8 100644 +--- a/t/mail/sendmail.t ++++ b/t/mail/sendmail.t +@@ -157,7 +157,7 @@ for my $encoding ('ISO-8859-1', 'UTF-8') { + { + my ($ticket) = mail_in_ticket('rt-send-cc'); + my $cc = first_attach($ticket)->GetHeader('RT-Send-Cc'); +- like ($cc, qr/test$_/, "Found test $_") for 1..5; ++ ok (!$cc, "No RT-Send-Cc"); # RT-Send-Cc is supposed to be cleared + } + + { +diff --git a/t/rest2/articles.t b/t/rest2/articles.t +index db6ccd85..0bf5514c 100644 +--- a/t/rest2/articles.t ++++ b/t/rest2/articles.t +@@ -172,7 +172,7 @@ TODO: { + is( $content->{count}, 2 ); + is( $content->{page}, 1 ); + is( $content->{per_page}, 20 ); +- is( $content->{total}, 2 ); ++ is( $content->{total}, undef, 'No total count'); + is( scalar @{ $content->{items} }, 2 ); + + for my $txn ( @{ $content->{items} } ) { +diff --git a/t/rest2/assets.t b/t/rest2/assets.t +index 4c1984f3..aba50a29 100644 +--- a/t/rest2/assets.t ++++ b/t/rest2/assets.t +@@ -256,7 +256,7 @@ my ($asset_url, $asset_id); + is($content->{count}, 3); + is($content->{page}, 1); + is($content->{per_page}, 20); +- is($content->{total}, 3); ++ is($content->{total}, undef, 'No total'); + is(scalar @{$content->{items}}, 3); + + for my $txn (@{ $content->{items} }) { +diff --git a/t/rest2/attachments.t b/t/rest2/attachments.t +index 416ea504..f76baf12 100644 +--- a/t/rest2/attachments.t ++++ b/t/rest2/attachments.t +@@ -109,8 +109,8 @@ $image_content = MIME::Base64::encode_base64($image_content); + cmp_deeply( + $mech->json_response, + { per_page => 20, +- pages => 1, +- total => 4, ++ pages => undef, ++ total => undef, + page => 1, + count => 4, + items => [ +diff --git a/t/rest2/cf-image.t b/t/rest2/cf-image.t +index f311c7ab..5025ddf2 100644 +--- a/t/rest2/cf-image.t ++++ b/t/rest2/cf-image.t +@@ -47,7 +47,7 @@ $user->PrincipalObj->GrantRight( Right => 'SeeCustomField' ); + my $res = $mech->get("$rest_base_path/download/cf/666", + 'Authorization' => $auth, + ); +- is($res->code, 404); ++ is($res->code, 403); + } + + # Download cf text +diff --git a/t/rest2/customfields.t b/t/rest2/customfields.t +index 26cb5c1d..e09daa21 100644 +--- a/t/rest2/customfields.t ++++ b/t/rest2/customfields.t +@@ -82,7 +82,7 @@ my $freeform_cf_id; + is($res->code, 200); + + my $content = $mech->json_response; +- is($content->{total}, 3); ++ is($content->{total}, undef, 'No total'); + is($content->{count}, 0); + is_deeply($content->{items}, []); + } +diff --git a/t/rest2/group-members.t b/t/rest2/group-members.t +index 842d595b..fc0dc9e0 100644 +--- a/t/rest2/group-members.t ++++ b/t/rest2/group-members.t +@@ -59,19 +59,12 @@ $group2->Load($group2_id); + ); + is($res->code, 403, 'Cannot disable group without AdminGroup right'); + +- # Rights Test - With AdminGroup, no SeeGroup ++ # Rights Test - With AdminGroup + $user->PrincipalObj->GrantRight(Right => 'AdminGroup', Object => $group2); + $res = $mech->delete($group2_url, + 'Authorization' => $auth, + ); +- is($res->code, 403, 'Cannot disable group without SeeGroup right'); +- +- # Rights Test - With AdminGroup, no SeeGroup +- $user->PrincipalObj->GrantRight(Right => 'SeeGroup', Object => $group2); +- $res = $mech->delete($group2_url, +- 'Authorization' => $auth, +- ); +- is($res->code, 204, 'Disable group with AdminGroup & SeeGroup rights'); ++ is($res->code, 204, 'Disable group with AdminGroup rights'); + + is($group2->Disabled, 1, "Group disabled"); + } +@@ -91,19 +84,12 @@ $group2->Load($group2_id); + 'Authorization' => $auth); + is($res->code, 403, 'Cannot enable group without AdminGroup right'); + +- # Rights Test - With AdminGroup, no SeeGroup ++ # Rights Test - With AdminGroup + $user->PrincipalObj->GrantRight(Right => 'AdminGroup', Object => $group2); + $res = $mech->put_json($group2_url, + $payload, + 'Authorization' => $auth); +- is($res->code, 403, 'Cannot enable group without SeeGroup right'); +- +- # Rights Test - With AdminGroup, no SeeGroup +- $user->PrincipalObj->GrantRight(Right => 'SeeGroup', Object => $group2); +- $res = $mech->put_json($group2_url, +- $payload, +- 'Authorization' => $auth); +- is($res->code, 200, 'Enable group with AdminGroup & SeeGroup rights'); ++ is($res->code, 200, 'Enable group with AdminGroup rights'); + is_deeply($mech->json_response, ['Group enabled']); + + is($group2->Disabled, 0, "Group enabled"); +@@ -111,7 +97,7 @@ $group2->Load($group2_id); + + my $group1_id = $group1->id; + (my $group1_url = $group2_url) =~ s/$group2_id/$group1_id/; +-$user->PrincipalObj->GrantRight(Right => 'SeeGroup', Object => $group1); ++$user->PrincipalObj->GrantRight(Right => 'SeeGroup', Object => $_) for $group1, $group2; + + # Members addition + { +diff --git a/t/rest2/searches.t b/t/rest2/searches.t +index 067ba1fd..bfae6fde 100644 +--- a/t/rest2/searches.t ++++ b/t/rest2/searches.t +@@ -65,7 +65,7 @@ ok( $ret, "created $msg" ); + is( $content->{count}, 4, '4 searches' ); + is( $content->{page}, 1, '1 page' ); + is( $content->{per_page}, 20, '20 per_page' ); +- is( $content->{total}, 4, '4 total' ); ++ is( $content->{total}, undef, 'No total' ); + is( scalar @{ $content->{items} }, 4, 'items count' ); + + for my $item ( @{ $content->{items} } ) { +diff --git a/t/rest2/tickets.t b/t/rest2/tickets.t +index 7c6a378b..fd563c82 100644 +--- a/t/rest2/tickets.t ++++ b/t/rest2/tickets.t +@@ -396,9 +396,7 @@ my ($ticket_url, $ticket_id); + is($content->{page}, 1); + is($content->{per_page}, 20); + +- # TODO This 14 VS 15 inconsitency is because user lacks ShowOutgoingEmail. +- # It'll be perfect if we can keep them in sync +- is($content->{total}, 15); ++ is($content->{total}, undef, 'No total'); + is(scalar @{$content->{items}}, 14); + + for my $txn (@{ $content->{items} }) { +diff --git a/t/rest2/transactions.t b/t/rest2/transactions.t +index 6096b54c..918b19a1 100644 +--- a/t/rest2/transactions.t ++++ b/t/rest2/transactions.t +@@ -41,7 +41,7 @@ my ($comment_txn_url, $comment_txn_id); + is($content->{count}, 5); + is($content->{page}, 1); + is($content->{per_page}, 20); +- is($content->{total}, 5); ++ is($content->{total}, undef, 'No total'); + is(scalar @{$content->{items}}, 5); + + my ($create, $priority1, $subject, $priority2, $comment) = @{ $content->{items} }; +@@ -70,7 +70,7 @@ my ($comment_txn_url, $comment_txn_id); + is($content->{count}, 5); + is($content->{page}, 1); + is($content->{per_page}, 20); +- is($content->{total}, 5); ++ is($content->{total}, undef, 'No total'); + is(scalar @{$content->{items}}, 5); + + my ($create, $priority1, $subject, $priority2, $comment) = @{ $content->{items} }; +diff --git a/t/ticket/interface.t b/t/ticket/interface.t +index c43e1341..9067f869 100644 +--- a/t/ticket/interface.t ++++ b/t/ticket/interface.t +@@ -1,7 +1,7 @@ + use strict; + use warnings; + +-use RT::Test tests => undef, actual_server => 1; ++use RT::Test tests => undef, config => 'Set($DevelMode, 1);', actual_server => 1; + + my ( $baseurl, $m ) = RT::Test->started_ok; +