Skip to content

Commit acd9ff6

Browse files
Update deps and ignore < 1024 bit RSA key size errors in tests (#449)
* trying a new private key for RSA * Revert "trying a new private key for RSA" This reverts commit c181aa3. * upgrade deps and add RSA small key debug override * fix x509 test import by using larger key * re-enable mac test and fix compile error * turn off rsa small key checks package wide * ensure we're not double-setting the rsa debug key, and add to tls pkg
1 parent 9c5a208 commit acd9ff6

File tree

8 files changed

+93
-36
lines changed

8 files changed

+93
-36
lines changed

ct/x509/x509.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"crypto/elliptic"
1919
"crypto/rsa"
2020
"crypto/sha1"
21+
"os"
22+
"strings"
2123

2224
"github.com/zmap/zcrypto/dsa"
2325

@@ -38,6 +40,18 @@ import (
3840
"time"
3941
)
4042

43+
func init() {
44+
// Go's crypto/rsa package by default rejects RSA keys smaller than 1024, we'll disable this check to allow
45+
// handshakes with servers using 512-bit RSA keys.
46+
if !strings.Contains(os.Getenv("GODEBUG"), "rsa1024min=0") {
47+
if os.Getenv("GODEBUG") == "" {
48+
os.Setenv("GODEBUG", "rsa1024min=0")
49+
} else {
50+
os.Setenv("GODEBUG", os.Getenv("GODEBUG")+",rsa1024min=0")
51+
}
52+
}
53+
}
54+
4155
// pkixPublicKey reflects a PKIX public key structure. See SubjectPublicKeyInfo
4256
// in RFC 3280.
4357
type pkixPublicKey struct {

go.mod

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,23 @@ require (
44
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d
55
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
66
github.com/sirupsen/logrus v1.9.3
7-
github.com/weppos/publicsuffix-go v0.50.1-0.20251017103100-a363bfbecc27
87
github.com/stretchr/testify v1.11.1
8+
github.com/weppos/publicsuffix-go v0.50.1-0.20251017103100-a363bfbecc27
99
github.com/zmap/zcertificate v0.0.1
10-
golang.org/x/crypto v0.41.0
11-
golang.org/x/net v0.43.0
12-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
10+
golang.org/x/crypto v0.43.0
11+
golang.org/x/net v0.46.0
12+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
1313
)
1414

1515
require (
1616
github.com/davecgh/go-spew v1.1.1 // indirect
17-
github.com/kr/pretty v0.1.0 // indirect
18-
github.com/kr/text v0.1.0 // indirect
17+
github.com/kr/pretty v0.3.1 // indirect
18+
github.com/kr/text v0.2.0 // indirect
1919
github.com/pmezard/go-difflib v1.0.0 // indirect
20-
golang.org/x/sys v0.35.0 // indirect
21-
golang.org/x/text v0.28.0 // indirect
20+
github.com/rogpeppe/go-internal v1.9.0 // indirect
21+
golang.org/x/sys v0.37.0 // indirect
22+
golang.org/x/text v0.30.0 // indirect
2223
gopkg.in/yaml.v3 v3.0.1 // indirect
2324
)
2425

25-
go 1.23.0
26-
27-
toolchain go1.23.7
26+
go 1.24.0

go.sum

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
1+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
12
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
23
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
34
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
45
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
5-
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
66
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
7+
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
8+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
9+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
710
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
8-
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
911
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
12+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
13+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
1014
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
1115
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d h1:tLWCMSjfL8XyZwpu1RzI2UpJSPbZCOZ6DVHQFnlpL7A=
1216
github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
1317
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88=
1418
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
19+
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
1520
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1621
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
22+
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
23+
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
1724
github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
1825
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
1926
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
@@ -40,13 +47,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
4047
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
4148
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
4249
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
43-
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
44-
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
50+
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
51+
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
4552
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
4653
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
4754
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
48-
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
49-
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
55+
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
56+
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
5057
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
5158
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
5259
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -55,19 +62,20 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
5562
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5663
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5764
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
58-
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
59-
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
65+
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
66+
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
6067
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
6168
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
6269
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
6370
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
6471
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
65-
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
66-
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
72+
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
73+
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
6774
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6875
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
69-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
7076
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
77+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
78+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
7179
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
7280
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
7381
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

tls/tls.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ import (
2929
"github.com/zmap/zcrypto/x509"
3030
)
3131

32+
func init() {
33+
// Go's crypto/rsa package by default rejects RSA keys smaller than 1024, we'll disable this check to allow
34+
// handshakes with servers using 512-bit RSA keys.
35+
if !strings.Contains(os.Getenv("GODEBUG"), "rsa1024min=0") {
36+
if os.Getenv("GODEBUG") == "" {
37+
os.Setenv("GODEBUG", "rsa1024min=0")
38+
} else {
39+
os.Setenv("GODEBUG", os.Getenv("GODEBUG")+",rsa1024min=0")
40+
}
41+
}
42+
}
43+
3244
// Server returns a new TLS server side connection
3345
// using conn as the underlying transport.
3446
// The configuration config must be non-nil and must include

x509/root_darwin_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestSystemRoots(t *testing.T) {
2424

2525
// There are 174 system roots on Catalina, and 163 on iOS right now, require
2626
// at least 100 to make sure this is not completely broken.
27-
if want, have := 100, sysRoots.len(); have < want {
27+
if want, have := 100, sysRoots.Size(); have < want {
2828
t.Errorf("want at least %d system roots, have %d", want, have)
2929
}
3030

x509/x509.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"crypto/sha256"
1818
_ "crypto/sha512"
1919
"io"
20+
"os"
2021
"strings"
2122
"unicode"
2223

@@ -36,13 +37,26 @@ import (
3637
"time"
3738

3839
"github.com/weppos/publicsuffix-go/publicsuffix"
40+
"golang.org/x/crypto/ed25519"
41+
3942
"github.com/zmap/zcrypto/dsa"
4043
"github.com/zmap/zcrypto/encoding/asn1"
4144
"github.com/zmap/zcrypto/x509/ct"
4245
"github.com/zmap/zcrypto/x509/pkix"
43-
"golang.org/x/crypto/ed25519"
4446
)
4547

48+
func init() {
49+
// Go's crypto/rsa package by default rejects RSA keys smaller than 1024, we'll disable this check to allow
50+
// handshakes with servers using 512-bit RSA keys.
51+
if !strings.Contains(os.Getenv("GODEBUG"), "rsa1024min=0") {
52+
if os.Getenv("GODEBUG") == "" {
53+
os.Setenv("GODEBUG", "rsa1024min=0")
54+
} else {
55+
os.Setenv("GODEBUG", os.Getenv("GODEBUG")+",rsa1024min=0")
56+
}
57+
}
58+
}
59+
4660
// pkixPublicKey reflects a PKIX public key structure. See SubjectPublicKeyInfo
4761
// in RFC 3280.
4862
type pkixPublicKey struct {

x509/x509_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ import (
2727

2828
"github.com/stretchr/testify/assert"
2929
"github.com/stretchr/testify/require"
30+
"golang.org/x/crypto/curve25519"
31+
"golang.org/x/crypto/ed25519"
32+
3033
"github.com/zmap/zcrypto/dsa"
3134
"github.com/zmap/zcrypto/encoding/asn1"
3235
"github.com/zmap/zcrypto/x509/pkix"
33-
"golang.org/x/crypto/curve25519"
34-
"golang.org/x/crypto/ed25519"
3536
)
3637

3738
func TestParsePKCS1PrivateKey(t *testing.T) {

x509/x509_test_import.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"crypto/rand"
1515
"encoding/pem"
1616
"math/big"
17+
"strings"
1718
"time"
1819

1920
"github.com/zmap/zcrypto/x509"
@@ -43,13 +44,21 @@ func main() {
4344
}
4445
}
4546

46-
var pemPrivateKey = `-----BEGIN RSA PRIVATE KEY-----
47-
MIIBOgIBAAJBALKZD0nEffqM1ACuak0bijtqE2QrI/KLADv7l3kK3ppMyCuLKoF0
48-
fd7Ai2KW5ToIwzFofvJcS/STa6HA5gQenRUCAwEAAQJBAIq9amn00aS0h/CrjXqu
49-
/ThglAXJmZhOMPVn4eiu7/ROixi9sex436MaVeMqSNf7Ex9a8fRNfWss7Sqd9eWu
50-
RTUCIQDasvGASLqmjeffBNLTXV2A5g4t+kLVCpsEIZAycV5GswIhANEPLmax0ME/
51-
EO+ZJ79TJKN5yiGBRsv5yvx5UiHxajEXAiAhAol5N4EUyq6I9w1rYdhPMGpLfk7A
52-
IU2snfRJ6Nq2CQIgFrPsWRCkV+gOYcajD17rEqmuLrdIRexpg8N1DOSXoJ8CIGlS
53-
tAboUGBxTDq3ZroNism3DaMIbKPyYrAqhKov1h5V
54-
-----END RSA PRIVATE KEY-----
55-
`
47+
var pemPrivateKey = testingKey(`-----BEGIN RSA TESTING KEY-----
48+
MIICXQIBAAKBgQCw0YNSqI9T1VFvRsIOejZ9feiKz1SgGfbe9Xq5tEzt2yJCsbyg
49+
+xtcuCswNhdqY5A1ZN7G60HbL4/Hh/TlLhFJ4zNHVylz9mDDx3yp4IIcK2lb566d
50+
fTD0B5EQ9Iqub4twLUdLKQCBfyhmJJvsEqKxm4J4QWgI+Brh/Pm3d4piPwIDAQAB
51+
AoGASC6fj6TkLfMNdYHLQqG9kOlPfys4fstarpZD7X+fUBJ/H/7y5DzeZLGCYAIU
52+
+QeAHWv6TfZIQjReW7Qy00RFJdgwFlTFRCsKXhG5x+IB+jL0Grr08KbgPPDgy4Jm
53+
xirRHZVtU8lGbkiZX+omDIU28EHLNWL6rFEcTWao/tERspECQQDp2G5Nw0qYWn7H
54+
Wm9Up1zkUTnkUkCzhqtxHbeRvNmHGKE7ryGMJEk2RmgHVstQpsvuFY4lIUSZEjAc
55+
DUFJERhFAkEAwZH6O1ULORp8sHKDdidyleYcZU8L7y9Y3OXJYqELfddfBgFUZeVQ
56+
duRmJj7ryu0g0uurOTE+i8VnMg/ostxiswJBAOc64Dd8uLJWKa6uug+XPr91oi0n
57+
OFtM+xHrNK2jc+WmcSg3UJDnAI3uqMc5B+pERLq0Dc6hStehqHjUko3RnZECQEGZ
58+
eRYWciE+Cre5dzfZkomeXE0xBrhecV0bOq6EKWLSVE+yr6mAl05ThRK9DCfPSOpy
59+
F6rgN3QiyCA9J/1FluUCQQC5nX+PTU1FXx+6Ri2ZCi6EjEKMHr7gHcABhMinZYOt
60+
N59pra9UdVQw9jxCU9G7eMyb0jJkNACAuEwakX3gi27b
61+
-----END RSA TESTING KEY-----
62+
`)
63+
64+
func testingKey(s string) string { return strings.ReplaceAll(s, "TESTING KEY", "PRIVATE KEY") }

0 commit comments

Comments
 (0)