...
1 package rocacheck
2
3 import (
4 "crypto/rsa"
5 "crypto/x509"
6 "encoding/pem"
7 "testing"
8 )
9
10 var bad = []string{
11 `-----BEGIN PUBLIC KEY-----
12 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlze9c7qGdjDLVR/ntk+4
13 ZkfMcYsAnmfTFHfe3Xv7jRQqPCXCULtr0y0jG3aRJmEenoXO9uDveqr43gFB9yvA
14 dLEhu0aJqpB7lNZ+yXsvfVp/96dkSN8oWYL/dd9Z7GQOvVniHUY3Xsd7zdw2eYOy
15 HSXhhA2Ttwnj3c1jEYfC0y9q1cU99aL0ogGDqolcOvlkJu+mGb+6+WyboFa1gwRu
16 kYxBHZWKiHCt/eihvXsPTzTlXmTXWdGJtA1xZDnCBWuZ90b5R0agXVIESTl0cCyH
17 aQM/tLZmktJIU+Eu7ALBXemPg9kh3SCnYd3/YvDGCtYSXOWthHwlP5CImRBcQaNn
18 cQIDAQAB
19 -----END PUBLIC KEY-----`,
20 `-----BEGIN PUBLIC KEY-----
21 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnDSwGO+LetuWIPxBrWIV
22 EZhfr8VB7tnXBnFaNev61bT1lViBUAN8rmMBw2rd/a6Lw4SjDi+3Fc7hpQtccMyr
23 z3Z52VVsuS1Df94/2GJ2J+B8qw0dTHQoVjPGaOrRads5cjrI1fvgcKNhfwXHd8jh
24 6fCHwVIruU8E2wgTu91ceTzAODzCe1aWbE0QMYTV11E0t2+vt808AWsYMDOWMIOa
25 0sFZD1DzQSw1YC74YV92yDGsHA4JNZVl6JB0H21lxENKrkOF9MJx+doXHiEEfwNC
26 3F7kf2QDd+3oyRcrrGZt9rhfRPQckUnYM495nfaQcHzTXyIySnY0s6PkwbgL4B44
27 dQIDAQAB
28 -----END PUBLIC KEY-----`,
29 `-----BEGIN PUBLIC KEY-----
30 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkVOD39Rao7yBD5Msly74
31 VCZzikzRV672cEkNEM6GB3wg15W7Nw9NxdzwlzBNB5fb/FXL3hd9m9djNkrd2fj6
32 FG47dS4A9nK1b+KL7E+Yhh19MP1GKxz3cW8sTg516fpvvnvPKUcRyyIOxARvvhuv
33 s7tza/I7VjIBQSHpBKuiFBkJ5yeVq3iRuiuVnNMut+MllVSEeLEoNCmDAvRI7tTK
34 Xtlap1sPXb93D0x2LnzlNx/5jKSorQo2nPS4iwE8UPBGE6TRMr3ap9bjTG9tP0kE
35 sHuM/OWBF1whlCvb/88BmE0x6v22i6ss3q/mkVt1bH0R+pgLaiRakJW7Zsgpa+sx
36 PQIDAQAB
37 -----END PUBLIC KEY-----`,
38 }
39
40 var good = []string{
41 `-----BEGIN PUBLIC KEY-----
42 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtA+5PaMwafUZVIU0kXo+
43 u3EbF45Sw+11yOuYReWxp5dGLCmqk6Ukq+PvZ9Ygq7xrOQzuUx/dY1rFqB0tz3Z4
44 KurqpK/aVwj+nEhRckEAtbls9qeGcMxdTgPvf8KJbjR6gw0jXdQKeLTIojXNtUSF
45 PpOm0tsAT0SAqGHZF9jFzBOHlpyyhiWvtZpZaUQMXRQwoptaHug7tPBjZHm3n+ba
46 JH8TVua9Kx8zVsrGBzZnGh7Ybap9ZxvNg2m0BMi/jMhoNr7c3eQBrrkcxqrb0GId
47 Hbg94w9W7Ds3v01FPb6qjKbW8Z2ZAm1lGM/3imodT8z3hLXYDUGWXUTGuaRWWKr8
48 +QIDAQAB
49 -----END PUBLIC KEY-----`,
50 `-----BEGIN PUBLIC KEY-----
51 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwYtbVJUsNAQL//ijcypw
52 o40yK5QLJuOvwVnVSy7Q6MVlmaSv4ZQyVR5QJf2kAbBVIFK7xogMW474R9TTyvL+
53 iWjIpdYWF5OILlYBp/dcwqqic1ZZQnUL9ACsProq1b1kaBmpQegwD38O1F64eOPk
54 3GdjJo8/vQLuVfK1wFq90VnyszDuvP1PXo7g91jrwIeeqQ14+J1vYmTI8qpodNJE
55 VDlfQbaQB0DtSDcNcVLQCumKYSU1+8P8fSqve7TRBJtRjBXg/aliF1+twJ+ROFaJ
56 Yo87+pJ2Leh/L1+KqZHxPnGpCoZKKX1nqpmqy4MnE1qE37ACYEcPauI7oMFYXmoh
57 bwIDAQAB
58 -----END PUBLIC KEY-----`,
59 `-----BEGIN PUBLIC KEY-----
60 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1p2IZ0HNzhtIJ4PSRe+A
61 mAZ9PJj4ufBmu9yZd2DgXoWQJjYnSBC1E93KUr3Kdrywpi1OqUe5XhMjIJIIiykK
62 7QuKbcWNEjPPMHFPi8Jw6HGToZZT/IfAJib3pY9FcmzNWyU176Zxx6HamoHUhnhp
63 E4gvK2h9dwpG7pejhk61lgUqQ20RIAsKa83rsLdkb2gthorVdzWd2zMO1mZc/qgl
64 I6xQc9yMwMpEDg2LpEq8FHpDvCqNAtdk7y4keXyMYQ+9Gz4OOGlhD7Q5KsIAXTeU
65 QDetJfwQwYq+tHrt7PfoBhFxV1iIvSDzfy5GtrotcDgEXsktLt14zRSmzv2R/svv
66 zQIDAQAB
67 -----END PUBLIC KEY-----`,
68 }
69
70 func decode(s string) *rsa.PublicKey {
71 b, _ := pem.Decode([]byte(s))
72 k, _ := x509.ParsePKIXPublicKey(b.Bytes)
73 return k.(*rsa.PublicKey)
74 }
75
76 func TestKeys(t *testing.T) {
77 for i, p := range bad {
78 if !IsWeak(decode(p)) {
79 t.Errorf("expected %d to fail", i)
80 }
81 }
82 for i, p := range good {
83 if IsWeak(decode(p)) {
84 t.Errorf("expected %d to pass", i)
85 }
86 }
87 }
88
89 func BenchmarkIsWeak(b *testing.B) {
90 k := decode(bad[1])
91 b.ResetTimer()
92 for i := 0; i < b.N; i++ {
93 IsWeak(k)
94 }
95 }
96
View as plain text