| author | Alberto Bertogli
<albertito@blitiri.com.ar> 2026-10-04 17:35:40 UTC |
| committer | Alberto Bertogli
<albertito@blitiri.com.ar> 2026-10-04 17:35:40 UTC |
| parent | 9b3f7ca193b355ac0b01133da2d351eb9b7affd0 |
| Makefile | +1 | -2 |
| cmd/smtp-check/smtp-check.go | +2 | -3 |
| internal/smtpsrv/conn.go | +2 | -3 |
| internal/tlsconst/ciphers.go | +0 | -360 |
| internal/tlsconst/generate-ciphers.py | +0 | -54 |
| internal/tlsconst/tlsconst.go | +0 | -33 |
| internal/tlsconst/tlsconst_test.go | +0 | -37 |
| test/t-22-forward_via/expected-chain-1 | +54 | -54 |
| test/t-22-forward_via/expected-external-user333@kiwi | +27 | -27 |
| test/t-22-forward_via/expected-primary-user111@dodo | +27 | -27 |
diff --git a/Makefile b/Makefile index 87c1c92..57e0991 100644 --- a/Makefile +++ b/Makefile @@ -62,8 +62,7 @@ fmt: black -l 79 \ test/util/check-hostaliases \ test/util/chamuyero \ - test/util/mail_diff \ - internal/tlsconst/generate-ciphers.py + test/util/mail_diff .PHONY: chasquid test \ chasquid-util smtp-check mda-lmtp dovecot-auth-cli \ diff --git a/cmd/smtp-check/smtp-check.go b/cmd/smtp-check/smtp-check.go index 6694635..469f634 100644 --- a/cmd/smtp-check/smtp-check.go +++ b/cmd/smtp-check/smtp-check.go @@ -12,7 +12,6 @@ import ( "time" "blitiri.com.ar/go/chasquid/internal/sts" - "blitiri.com.ar/go/chasquid/internal/tlsconst" "blitiri.com.ar/go/spf" "golang.org/x/net/idna" @@ -105,8 +104,8 @@ func main() { errs = append(errs, fmt.Errorf("%s: TLS failed", mx.Host)) } else { cstate, _ := c.TLSConnectionState() - log.Printf("TLS OK: %s - %s", tlsconst.VersionName(cstate.Version), - tlsconst.CipherSuiteName(cstate.CipherSuite)) + log.Printf("TLS OK: %s - %s", tls.VersionName(cstate.Version), + tls.CipherSuiteName(cstate.CipherSuite)) } c.Close() diff --git a/internal/smtpsrv/conn.go b/internal/smtpsrv/conn.go index 9a35f33..3afefe5 100644 --- a/internal/smtpsrv/conn.go +++ b/internal/smtpsrv/conn.go @@ -31,7 +31,6 @@ import ( "blitiri.com.ar/go/chasquid/internal/normalize" "blitiri.com.ar/go/chasquid/internal/queue" "blitiri.com.ar/go/chasquid/internal/set" - "blitiri.com.ar/go/chasquid/internal/tlsconst" "blitiri.com.ar/go/chasquid/internal/trace" "blitiri.com.ar/go/spf" ) @@ -773,12 +772,12 @@ func (c *Conn) addReceivedHeader() { if c.tlsConnState != nil { // https://tools.ietf.org/html/rfc8314#section-4.3 received += fmt.Sprintf("tls %s\n", - tlsconst.CipherSuiteName(c.tlsConnState.CipherSuite)) + tls.CipherSuiteName(c.tlsConnState.CipherSuite)) } received += fmt.Sprintf("(over %s, ", c.mode) if c.tlsConnState != nil { - received += fmt.Sprintf("%s, ", tlsconst.VersionName(c.tlsConnState.Version)) + received += fmt.Sprintf("%s, ", tls.VersionName(c.tlsConnState.Version)) } else { received += "plain text!, " } diff --git a/internal/tlsconst/ciphers.go b/internal/tlsconst/ciphers.go deleted file mode 100644 index 67c3b1a..0000000 --- a/internal/tlsconst/ciphers.go +++ /dev/null @@ -1,360 +0,0 @@ -package tlsconst - -// AUTOGENERATED - DO NOT EDIT -// -// This file was autogenerated by generate-ciphers.py. - -var cipherSuiteName = map[uint16]string{ - 0x0000: "TLS_NULL_WITH_NULL_NULL", - 0x0001: "TLS_RSA_WITH_NULL_MD5", - 0x0002: "TLS_RSA_WITH_NULL_SHA", - 0x0003: "TLS_RSA_EXPORT_WITH_RC4_40_MD5", - 0x0004: "TLS_RSA_WITH_RC4_128_MD5", - 0x0005: "TLS_RSA_WITH_RC4_128_SHA", - 0x0006: "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", - 0x0007: "TLS_RSA_WITH_IDEA_CBC_SHA", - 0x0008: "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0009: "TLS_RSA_WITH_DES_CBC_SHA", - 0x000a: "TLS_RSA_WITH_3DES_EDE_CBC_SHA", - 0x000b: "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", - 0x000c: "TLS_DH_DSS_WITH_DES_CBC_SHA", - 0x000d: "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", - 0x000e: "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x000f: "TLS_DH_RSA_WITH_DES_CBC_SHA", - 0x0010: "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", - 0x0011: "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - 0x0012: "TLS_DHE_DSS_WITH_DES_CBC_SHA", - 0x0013: "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - 0x0014: "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0015: "TLS_DHE_RSA_WITH_DES_CBC_SHA", - 0x0016: "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - 0x0017: "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", - 0x0018: "TLS_DH_anon_WITH_RC4_128_MD5", - 0x0019: "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", - 0x001a: "TLS_DH_anon_WITH_DES_CBC_SHA", - 0x001b: "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", - 0x001e: "TLS_KRB5_WITH_DES_CBC_SHA", - 0x001f: "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", - 0x0020: "TLS_KRB5_WITH_RC4_128_SHA", - 0x0021: "TLS_KRB5_WITH_IDEA_CBC_SHA", - 0x0022: "TLS_KRB5_WITH_DES_CBC_MD5", - 0x0023: "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - 0x0024: "TLS_KRB5_WITH_RC4_128_MD5", - 0x0025: "TLS_KRB5_WITH_IDEA_CBC_MD5", - 0x0026: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - 0x0027: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", - 0x0028: "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - 0x0029: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - 0x002a: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", - 0x002b: "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - 0x002c: "TLS_PSK_WITH_NULL_SHA", - 0x002d: "TLS_DHE_PSK_WITH_NULL_SHA", - 0x002e: "TLS_RSA_PSK_WITH_NULL_SHA", - 0x002f: "TLS_RSA_WITH_AES_128_CBC_SHA", - 0x0030: "TLS_DH_DSS_WITH_AES_128_CBC_SHA", - 0x0031: "TLS_DH_RSA_WITH_AES_128_CBC_SHA", - 0x0032: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - 0x0033: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", - 0x0034: "TLS_DH_anon_WITH_AES_128_CBC_SHA", - 0x0035: "TLS_RSA_WITH_AES_256_CBC_SHA", - 0x0036: "TLS_DH_DSS_WITH_AES_256_CBC_SHA", - 0x0037: "TLS_DH_RSA_WITH_AES_256_CBC_SHA", - 0x0038: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", - 0x0039: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", - 0x003a: "TLS_DH_anon_WITH_AES_256_CBC_SHA", - 0x003b: "TLS_RSA_WITH_NULL_SHA256", - 0x003c: "TLS_RSA_WITH_AES_128_CBC_SHA256", - 0x003d: "TLS_RSA_WITH_AES_256_CBC_SHA256", - 0x003e: "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", - 0x003f: "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", - 0x0040: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", - 0x0041: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", - 0x0042: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", - 0x0043: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", - 0x0044: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", - 0x0045: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", - 0x0046: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", - 0x0067: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", - 0x0068: "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", - 0x0069: "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", - 0x006a: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", - 0x006b: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", - 0x006c: "TLS_DH_anon_WITH_AES_128_CBC_SHA256", - 0x006d: "TLS_DH_anon_WITH_AES_256_CBC_SHA256", - 0x0084: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", - 0x0085: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", - 0x0086: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", - 0x0087: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", - 0x0088: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", - 0x0089: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", - 0x008a: "TLS_PSK_WITH_RC4_128_SHA", - 0x008b: "TLS_PSK_WITH_3DES_EDE_CBC_SHA", - 0x008c: "TLS_PSK_WITH_AES_128_CBC_SHA", - 0x008d: "TLS_PSK_WITH_AES_256_CBC_SHA", - 0x008e: "TLS_DHE_PSK_WITH_RC4_128_SHA", - 0x008f: "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", - 0x0090: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", - 0x0091: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", - 0x0092: "TLS_RSA_PSK_WITH_RC4_128_SHA", - 0x0093: "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", - 0x0094: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", - 0x0095: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", - 0x0096: "TLS_RSA_WITH_SEED_CBC_SHA", - 0x0097: "TLS_DH_DSS_WITH_SEED_CBC_SHA", - 0x0098: "TLS_DH_RSA_WITH_SEED_CBC_SHA", - 0x0099: "TLS_DHE_DSS_WITH_SEED_CBC_SHA", - 0x009a: "TLS_DHE_RSA_WITH_SEED_CBC_SHA", - 0x009b: "TLS_DH_anon_WITH_SEED_CBC_SHA", - 0x009c: "TLS_RSA_WITH_AES_128_GCM_SHA256", - 0x009d: "TLS_RSA_WITH_AES_256_GCM_SHA384", - 0x009e: "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", - 0x009f: "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", - 0x00a0: "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", - 0x00a1: "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", - 0x00a2: "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", - 0x00a3: "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", - 0x00a4: "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", - 0x00a5: "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", - 0x00a6: "TLS_DH_anon_WITH_AES_128_GCM_SHA256", - 0x00a7: "TLS_DH_anon_WITH_AES_256_GCM_SHA384", - 0x00a8: "TLS_PSK_WITH_AES_128_GCM_SHA256", - 0x00a9: "TLS_PSK_WITH_AES_256_GCM_SHA384", - 0x00aa: "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", - 0x00ab: "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", - 0x00ac: "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", - 0x00ad: "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", - 0x00ae: "TLS_PSK_WITH_AES_128_CBC_SHA256", - 0x00af: "TLS_PSK_WITH_AES_256_CBC_SHA384", - 0x00b0: "TLS_PSK_WITH_NULL_SHA256", - 0x00b1: "TLS_PSK_WITH_NULL_SHA384", - 0x00b2: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", - 0x00b3: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", - 0x00b4: "TLS_DHE_PSK_WITH_NULL_SHA256", - 0x00b5: "TLS_DHE_PSK_WITH_NULL_SHA384", - 0x00b6: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", - 0x00b7: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", - 0x00b8: "TLS_RSA_PSK_WITH_NULL_SHA256", - 0x00b9: "TLS_RSA_PSK_WITH_NULL_SHA384", - 0x00ba: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", - 0x00bb: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", - 0x00bc: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", - 0x00bd: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", - 0x00be: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", - 0x00bf: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", - 0x00c0: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c1: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c2: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c3: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c4: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c5: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", - 0x00c6: "TLS_SM4_GCM_SM3", - 0x00c7: "TLS_SM4_CCM_SM3", - 0x00ff: "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", - 0x1301: "TLS_AES_128_GCM_SHA256", - 0x1302: "TLS_AES_256_GCM_SHA384", - 0x1303: "TLS_CHACHA20_POLY1305_SHA256", - 0x1304: "TLS_AES_128_CCM_SHA256", - 0x1305: "TLS_AES_128_CCM_8_SHA256", - 0x1306: "TLS_AEGIS_256_SHA512", - 0x1307: "TLS_AEGIS_128L_SHA256", - 0x5600: "TLS_FALLBACK_SCSV", - 0xc001: "TLS_ECDH_ECDSA_WITH_NULL_SHA", - 0xc002: "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", - 0xc003: "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - 0xc004: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", - 0xc005: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", - 0xc006: "TLS_ECDHE_ECDSA_WITH_NULL_SHA", - 0xc007: "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - 0xc008: "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", - 0xc009: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", - 0xc00a: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", - 0xc00b: "TLS_ECDH_RSA_WITH_NULL_SHA", - 0xc00c: "TLS_ECDH_RSA_WITH_RC4_128_SHA", - 0xc00d: "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - 0xc00e: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", - 0xc00f: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", - 0xc010: "TLS_ECDHE_RSA_WITH_NULL_SHA", - 0xc011: "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - 0xc012: "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - 0xc013: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", - 0xc014: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", - 0xc015: "TLS_ECDH_anon_WITH_NULL_SHA", - 0xc016: "TLS_ECDH_anon_WITH_RC4_128_SHA", - 0xc017: "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", - 0xc018: "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", - 0xc019: "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", - 0xc01a: "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", - 0xc01b: "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", - 0xc01c: "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", - 0xc01d: "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", - 0xc01e: "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", - 0xc01f: "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", - 0xc020: "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", - 0xc021: "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", - 0xc022: "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", - 0xc023: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", - 0xc024: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", - 0xc025: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", - 0xc026: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", - 0xc027: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", - 0xc028: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", - 0xc029: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", - 0xc02a: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", - 0xc02b: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", - 0xc02c: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", - 0xc02d: "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", - 0xc02e: "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", - 0xc02f: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", - 0xc030: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", - 0xc031: "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", - 0xc032: "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", - 0xc033: "TLS_ECDHE_PSK_WITH_RC4_128_SHA", - 0xc034: "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", - 0xc035: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", - 0xc036: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", - 0xc037: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", - 0xc038: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", - 0xc039: "TLS_ECDHE_PSK_WITH_NULL_SHA", - 0xc03a: "TLS_ECDHE_PSK_WITH_NULL_SHA256", - 0xc03b: "TLS_ECDHE_PSK_WITH_NULL_SHA384", - 0xc03c: "TLS_RSA_WITH_ARIA_128_CBC_SHA256", - 0xc03d: "TLS_RSA_WITH_ARIA_256_CBC_SHA384", - 0xc03e: "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256", - 0xc03f: "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384", - 0xc040: "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256", - 0xc041: "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384", - 0xc042: "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", - 0xc043: "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", - 0xc044: "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", - 0xc045: "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", - 0xc046: "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256", - 0xc047: "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384", - 0xc048: "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", - 0xc049: "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", - 0xc04a: "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", - 0xc04b: "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", - 0xc04c: "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", - 0xc04d: "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", - 0xc04e: "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", - 0xc04f: "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", - 0xc050: "TLS_RSA_WITH_ARIA_128_GCM_SHA256", - 0xc051: "TLS_RSA_WITH_ARIA_256_GCM_SHA384", - 0xc052: "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", - 0xc053: "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", - 0xc054: "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256", - 0xc055: "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384", - 0xc056: "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", - 0xc057: "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", - 0xc058: "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256", - 0xc059: "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384", - 0xc05a: "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256", - 0xc05b: "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384", - 0xc05c: "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", - 0xc05d: "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", - 0xc05e: "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", - 0xc05f: "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", - 0xc060: "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", - 0xc061: "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", - 0xc062: "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", - 0xc063: "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", - 0xc064: "TLS_PSK_WITH_ARIA_128_CBC_SHA256", - 0xc065: "TLS_PSK_WITH_ARIA_256_CBC_SHA384", - 0xc066: "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", - 0xc067: "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", - 0xc068: "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", - 0xc069: "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", - 0xc06a: "TLS_PSK_WITH_ARIA_128_GCM_SHA256", - 0xc06b: "TLS_PSK_WITH_ARIA_256_GCM_SHA384", - 0xc06c: "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", - 0xc06d: "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", - 0xc06e: "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", - 0xc06f: "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", - 0xc070: "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", - 0xc071: "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", - 0xc072: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", - 0xc073: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", - 0xc074: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", - 0xc075: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", - 0xc076: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", - 0xc077: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", - 0xc078: "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", - 0xc079: "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", - 0xc07a: "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc07b: "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc07c: "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc07d: "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc07e: "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc07f: "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc080: "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", - 0xc081: "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", - 0xc082: "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256", - 0xc083: "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384", - 0xc084: "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256", - 0xc085: "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384", - 0xc086: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc087: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc088: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc089: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc08a: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc08b: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc08c: "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", - 0xc08d: "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", - 0xc08e: "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", - 0xc08f: "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", - 0xc090: "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", - 0xc091: "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", - 0xc092: "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", - 0xc093: "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", - 0xc094: "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", - 0xc095: "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", - 0xc096: "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", - 0xc097: "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", - 0xc098: "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", - 0xc099: "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", - 0xc09a: "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", - 0xc09b: "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", - 0xc09c: "TLS_RSA_WITH_AES_128_CCM", - 0xc09d: "TLS_RSA_WITH_AES_256_CCM", - 0xc09e: "TLS_DHE_RSA_WITH_AES_128_CCM", - 0xc09f: "TLS_DHE_RSA_WITH_AES_256_CCM", - 0xc0a0: "TLS_RSA_WITH_AES_128_CCM_8", - 0xc0a1: "TLS_RSA_WITH_AES_256_CCM_8", - 0xc0a2: "TLS_DHE_RSA_WITH_AES_128_CCM_8", - 0xc0a3: "TLS_DHE_RSA_WITH_AES_256_CCM_8", - 0xc0a4: "TLS_PSK_WITH_AES_128_CCM", - 0xc0a5: "TLS_PSK_WITH_AES_256_CCM", - 0xc0a6: "TLS_DHE_PSK_WITH_AES_128_CCM", - 0xc0a7: "TLS_DHE_PSK_WITH_AES_256_CCM", - 0xc0a8: "TLS_PSK_WITH_AES_128_CCM_8", - 0xc0a9: "TLS_PSK_WITH_AES_256_CCM_8", - 0xc0aa: "TLS_PSK_DHE_WITH_AES_128_CCM_8", - 0xc0ab: "TLS_PSK_DHE_WITH_AES_256_CCM_8", - 0xc0ac: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", - 0xc0ad: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", - 0xc0ae: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", - 0xc0af: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", - 0xc0b0: "TLS_ECCPWD_WITH_AES_128_GCM_SHA256", - 0xc0b1: "TLS_ECCPWD_WITH_AES_256_GCM_SHA384", - 0xc0b2: "TLS_ECCPWD_WITH_AES_128_CCM_SHA256", - 0xc0b3: "TLS_ECCPWD_WITH_AES_256_CCM_SHA384", - 0xc0b4: "TLS_SHA256_SHA256", - 0xc0b5: "TLS_SHA384_SHA384", - 0xc100: "TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC", - 0xc101: "TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC", - 0xc102: "TLS_GOSTR341112_256_WITH_28147_CNT_IMIT", - 0xc103: "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L", - 0xc104: "TLS_GOSTR341112_256_WITH_MAGMA_MGM_L", - 0xc105: "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S", - 0xc106: "TLS_GOSTR341112_256_WITH_MAGMA_MGM_S", - 0xcca8: "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", - 0xcca9: "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", - 0xccaa: "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", - 0xccab: "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256", - 0xccac: "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", - 0xccad: "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", - 0xccae: "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", - 0xd001: "TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256", - 0xd002: "TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384", - 0xd003: "TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256", - 0xd005: "TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256", -} diff --git a/internal/tlsconst/generate-ciphers.py b/internal/tlsconst/generate-ciphers.py deleted file mode 100755 index 6cd873c..0000000 --- a/internal/tlsconst/generate-ciphers.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 -# -# This hacky script generates a go file with a map of version -> name for the -# entries in the TLS Cipher Suite Registry. - -import csv -import urllib.request -import sys - -# Where to get the TLS parameters from. -# See https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml. -URL = "https://www.iana.org/assignments/tls-parameters/tls-parameters-4.csv" - - -def getCiphers(): - req = urllib.request.urlopen(URL) - data = req.read().decode("utf-8") - - ciphers = [] - reader = csv.DictReader(data.splitlines()) - for row in reader: - desc = row["Description"] - rawval = row["Value"] - - # Just plain TLS values for now, to keep it simple. - if "-" in rawval or not desc.startswith("TLS"): - continue - - rv1, rv2 = rawval.split(",") - rv1, rv2 = int(rv1, 16), int(rv2, 16) - - val = "0x%02x%02x" % (rv1, rv2) - ciphers.append((val, desc)) - - return ciphers - - -ciphers = getCiphers() - -out = open(sys.argv[1], "w") -out.write("""\ -package tlsconst - -// AUTOGENERATED - DO NOT EDIT -// -// This file was autogenerated by generate-ciphers.py. - -var cipherSuiteName = map[uint16]string{ -""") - -for ver, desc in ciphers: - out.write('\t%s: "%s",\n' % (ver, desc)) - -out.write("}\n") diff --git a/internal/tlsconst/tlsconst.go b/internal/tlsconst/tlsconst.go deleted file mode 100644 index 22bce20..0000000 --- a/internal/tlsconst/tlsconst.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package tlsconst contains TLS constants for human consumption. -package tlsconst - -// Most of the constants get automatically generated from IANA's assignments. -//go:generate ./generate-ciphers.py ciphers.go - -import "fmt" - -var versionName = map[uint16]string{ - 0x0300: "SSL-3.0", - 0x0301: "TLS-1.0", - 0x0302: "TLS-1.1", - 0x0303: "TLS-1.2", - 0x0304: "TLS-1.3", -} - -// VersionName returns a human-readable TLS version name. -func VersionName(v uint16) string { - name, ok := versionName[v] - if !ok { - return fmt.Sprintf("TLS-%#04x", v) - } - return name -} - -// CipherSuiteName returns a human-readable TLS cipher suite name. -func CipherSuiteName(s uint16) string { - name, ok := cipherSuiteName[s] - if !ok { - return fmt.Sprintf("TLS_UNKNOWN_CIPHER_SUITE-%#04x", s) - } - return name -} diff --git a/internal/tlsconst/tlsconst_test.go b/internal/tlsconst/tlsconst_test.go deleted file mode 100644 index 1270439..0000000 --- a/internal/tlsconst/tlsconst_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package tlsconst - -import "testing" - -func TestVersionName(t *testing.T) { - cases := []struct { - ver uint16 - expected string - }{ - {0x0302, "TLS-1.1"}, - {0x1234, "TLS-0x1234"}, - } - for _, c := range cases { - got := VersionName(c.ver) - if got != c.expected { - t.Errorf("VersionName(%x) = %q, expected %q", - c.ver, got, c.expected) - } - } -} - -func TestCipherSuiteName(t *testing.T) { - cases := []struct { - suite uint16 - expected string - }{ - {0xc073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"}, - {0x1234, "TLS_UNKNOWN_CIPHER_SUITE-0x1234"}, - } - for _, c := range cases { - got := CipherSuiteName(c.suite) - if got != c.expected { - t.Errorf("CipherSuiteName(%x) = %q, expected %q", - c.suite, got, c.expected) - } - } -} diff --git a/test/t-22-forward_via/expected-chain-1 b/test/t-22-forward_via/expected-chain-1 index b1f9460..8788953 100644 --- a/test/t-22-forward_via/expected-chain-1 +++ b/test/t-22-forward_via/expected-chain-1 @@ -1,54 +1,54 @@ -Authentication-Results: primary - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by primary (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "chain-1-4+fwd_from=chain-1-3+fwd_from=user222=dodo=kiwi@dodo") - ; * -Authentication-Results: secondary - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by secondary (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "chain-1-3+fwd_from=user222=dodo@kiwi") - ; * -Authentication-Results: external - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by external (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "user222@dodo") - ; * -Authentication-Results: primary - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by primary (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "user222@dodo") - ; * -Received: from localhost - by secondary (chasquid) with ESMTPSA - tls TLS_* - (over submission+TLS, TLS-1.3, envelope from "user222@dodo") - ; * -DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; - d=dodo; s=sel-secondary-1; t=* - h=subject:from:subject:date:to:cc:message-id; - bh=* - b=* - * -Subject: Los espejos - -Yo que sentí el horror de los espejos -no sólo ante el cristal impenetrable -donde acaba y empieza, inhabitable, -un imposible espacio de reflejos - +Authentication-Results: primary + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by primary (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "chain-1-4+fwd_from=chain-1-3+fwd_from=user222=dodo=kiwi@dodo") + ; * +Authentication-Results: secondary + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by secondary (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "chain-1-3+fwd_from=user222=dodo@kiwi") + ; * +Authentication-Results: external + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by external (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "user222@dodo") + ; * +Authentication-Results: primary + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by primary (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "user222@dodo") + ; * +Received: from localhost + by secondary (chasquid) with ESMTPSA + tls TLS_* + (over submission+TLS, TLS 1.3, envelope from "user222@dodo") + ; * +DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; + d=dodo; s=sel-secondary-1; t=* + h=subject:from:subject:date:to:cc:message-id; + bh=* + b=* + * +Subject: Los espejos + +Yo que sentí el horror de los espejos +no sólo ante el cristal impenetrable +donde acaba y empieza, inhabitable, +un imposible espacio de reflejos + diff --git a/test/t-22-forward_via/expected-external-user333@kiwi b/test/t-22-forward_via/expected-external-user333@kiwi index e97187d..87eaa1d 100644 --- a/test/t-22-forward_via/expected-external-user333@kiwi +++ b/test/t-22-forward_via/expected-external-user333@kiwi @@ -1,27 +1,27 @@ -Authentication-Results: external - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by external (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "user222@dodo") - ; * -Received: from localhost - by secondary (chasquid) with ESMTPSA - tls TLS_* - (over submission+TLS, TLS-1.3, envelope from "user222@dodo") - ; * -DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; - d=dodo; s=sel-secondary-1; t=* - h=subject:from:subject:date:to:cc:message-id; - bh=* - b=* - * -Subject: Los espejos - -Yo que sentí el horror de los espejos -no sólo ante el cristal impenetrable -donde acaba y empieza, inhabitable, -un imposible espacio de reflejos - +Authentication-Results: external + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by external (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "user222@dodo") + ; * +Received: from localhost + by secondary (chasquid) with ESMTPSA + tls TLS_* + (over submission+TLS, TLS 1.3, envelope from "user222@dodo") + ; * +DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; + d=dodo; s=sel-secondary-1; t=* + h=subject:from:subject:date:to:cc:message-id; + bh=* + b=* + * +Subject: Los espejos + +Yo que sentí el horror de los espejos +no sólo ante el cristal impenetrable +donde acaba y empieza, inhabitable, +un imposible espacio de reflejos + diff --git a/test/t-22-forward_via/expected-primary-user111@dodo b/test/t-22-forward_via/expected-primary-user111@dodo index 6f43f78..7ac5ca0 100644 --- a/test/t-22-forward_via/expected-primary-user111@dodo +++ b/test/t-22-forward_via/expected-primary-user111@dodo @@ -1,27 +1,27 @@ -Authentication-Results: primary - ;spf=pass (matched mx) - ;dkim=pass header.b=???????????? header.d=dodo -Received-SPF: pass (matched mx) -Received: from * - by primary (chasquid) with ESMTPS - tls TLS_* - (over SMTP, TLS-1.3, envelope from "user222@dodo") - ; * -Received: from localhost - by secondary (chasquid) with ESMTPSA - tls TLS_* - (over submission+TLS, TLS-1.3, envelope from "user222@dodo") - ; * -DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; - d=dodo; s=sel-secondary-1; t=* - h=subject:from:subject:date:to:cc:message-id; - bh=* - b=* - * -Subject: Los espejos - -Yo que sentí el horror de los espejos -no sólo ante el cristal impenetrable -donde acaba y empieza, inhabitable, -un imposible espacio de reflejos - +Authentication-Results: primary + ;spf=pass (matched mx) + ;dkim=pass header.b=???????????? header.d=dodo +Received-SPF: pass (matched mx) +Received: from * + by primary (chasquid) with ESMTPS + tls TLS_* + (over SMTP, TLS 1.3, envelope from "user222@dodo") + ; * +Received: from localhost + by secondary (chasquid) with ESMTPSA + tls TLS_* + (over submission+TLS, TLS 1.3, envelope from "user222@dodo") + ; * +DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; + d=dodo; s=sel-secondary-1; t=* + h=subject:from:subject:date:to:cc:message-id; + bh=* + b=* + * +Subject: Los espejos + +Yo que sentí el horror de los espejos +no sólo ante el cristal impenetrable +donde acaba y empieza, inhabitable, +un imposible espacio de reflejos +