11package main
22
33import (
4- "errors"
54 "fmt"
65 "io/ioutil"
76 "os"
@@ -12,187 +11,95 @@ import (
1211 "github.com/google/goexpect"
1312)
1413
15- type keygenCase struct {
16- name string
17- expectFailure bool
18- keydgen * Keydgen
19- }
20-
21- func init () {
22- WorkFactor = 4096
23- }
24-
25- func testKeygenImport (k * Keydgen ) error {
26-
27- if _ , err := k .GenerateKey (); err != nil {
28- return err
29- }
30-
31- pub , err := k .MarshalPublicKey ()
32- if err != nil {
33- return err
34- }
35-
36- tmpFile , err := ioutil .TempFile ("" , "keydgen_test" )
37- if err != nil {
38- return err
39- }
40-
41- if err := writeKeyToFile (k , tmpFile .Name ()); err != nil {
42- return err
43- }
44- defer func () {
45- os .Remove (tmpFile .Name ())
46- os .Remove (tmpFile .Name () + ".pub" )
47- }()
48-
49- e , _ , err := expect .Spawn ("ssh-keygen -y -f " + tmpFile .Name (), - 1 )
50- if err != nil {
51- return err
52- }
53- defer e .Close ()
54-
55- expr := regexp .MustCompilePOSIX (regexp .QuoteMeta (string (pub )))
56- if _ , _ , eErr := e .Expect (expr , - 1 ); eErr != nil {
57- err = errors .New ("unable to verify generated public key with ssh-keygen" )
58- }
59-
60- return err
61-
62- }
14+ func TestKeydgen_GenerateKey (t * testing.T ) {
6315
64- func TestKeydgen_GenerateKey_DSA ( t * testing. T ) {
16+ WorkFactor = 1024 * 1
6517
66- cases := []keygenCase {
18+ cases := []struct {
19+ name string
20+ expectFailure bool
21+ keydgen * Keydgen
22+ }{
23+ // DSA
6724 {
68- name : "InvalidKeyLength" ,
69- expectFailure : true ,
25+ name : "DSA_InvalidKeyLength" ,
7026 keydgen : & Keydgen {
7127 Type : DSA ,
7228 Bits : 100 ,
7329 Seed : []byte ("keydgen" ),
7430 },
31+ expectFailure : true ,
7532 },
7633 {
77- name : "1024 " ,
34+ name : "DSA_1024 " ,
7835 keydgen : & Keydgen {
7936 Type : DSA ,
8037 Bits : 1024 ,
8138 Seed : []byte ("keydgen" ),
8239 },
8340 },
8441 {
85- name : "2048 " ,
42+ name : "DSA_2048 " ,
8643 keydgen : & Keydgen {
8744 Type : DSA ,
8845 Bits : 2048 ,
8946 Seed : []byte ("keydgen" ),
9047 },
9148 },
9249 {
93- name : "3072 " ,
50+ name : "DSA_3072 " ,
9451 keydgen : & Keydgen {
9552 Type : DSA ,
9653 Bits : 3072 ,
9754 Seed : []byte ("keydgen" ),
9855 },
9956 },
100- }
101-
102- for _ , c := range cases {
103- t .Run (c .name , func (t * testing.T ) {
104- start := time .Now ()
105- fmt .Print (t .Name ())
106- if err := testKeygenImport (c .keydgen ); err != nil && ! c .expectFailure {
107- t .Fatal (err )
108- }
109- fmt .Printf (" PASS %s\n " , time .Since (start ))
110- })
111- }
112-
113- }
114-
115- func TestKeydgen_GenerateKey_ECDSA (t * testing.T ) {
116-
117- cases := []keygenCase {
57+ // ECDSA
11858 {
119- name : "InvalidCurve" ,
120- expectFailure : true ,
59+ name : "ECDSA_InvalidCurve" ,
12160 keydgen : & Keydgen {
12261 Type : ECDSA ,
12362 Curve : 128 ,
12463 Seed : []byte ("keydgen" ),
12564 },
65+ expectFailure : true ,
12666 },
12767 {
128- name : "256 " ,
68+ name : "ECDSA_256 " ,
12969 keydgen : & Keydgen {
13070 Type : ECDSA ,
13171 Curve : 256 ,
13272 Seed : []byte ("keydgen" ),
13373 },
13474 },
13575 {
136- name : "384 " ,
76+ name : "ECDSA_384 " ,
13777 keydgen : & Keydgen {
13878 Type : ECDSA ,
13979 Curve : 384 ,
14080 Seed : []byte ("keydgen" ),
14181 },
14282 },
14383 {
144- name : "521 " ,
84+ name : "ECDSA_521 " ,
14585 keydgen : & Keydgen {
14686 Type : ECDSA ,
14787 Curve : 521 ,
14888 Seed : []byte ("keydgen" ),
14989 },
15090 },
151- }
152-
153- for _ , c := range cases {
154- t .Run (c .name , func (t * testing.T ) {
155- start := time .Now ()
156- fmt .Print (t .Name ())
157- if err := testKeygenImport (c .keydgen ); err != nil && ! c .expectFailure {
158- t .Fatal (err )
159- }
160- fmt .Printf (" PASS %s\n " , time .Since (start ))
161- })
162- }
163-
164- }
165-
166- func TestKeydgen_GenerateKey_RSA (t * testing.T ) {
167-
168- cases := []keygenCase {
91+ // RSA
16992 {
170- name : "2048 " ,
93+ name : "RSA_2048 " ,
17194 keydgen : & Keydgen {
17295 Type : RSA ,
17396 Bits : 2048 ,
17497 Seed : []byte ("keydgen" ),
17598 },
17699 },
177- }
178-
179- for _ , c := range cases {
180- t .Run (c .name , func (t * testing.T ) {
181- start := time .Now ()
182- fmt .Print (t .Name ())
183- if err := testKeygenImport (c .keydgen ); err != nil && ! c .expectFailure {
184- t .Fatal (err )
185- }
186- fmt .Printf (" PASS %s\n " , time .Since (start ))
187- })
188- }
189-
190- }
191-
192- func TestKeydgen_GenerateKey_ED25519 (t * testing.T ) {
193-
194- cases := []keygenCase {
100+ // ED25519
195101 {
102+ name : "ED25519" ,
196103 keydgen : & Keydgen {
197104 Type : ED25519 ,
198105 Seed : []byte ("keydgen" ),
@@ -202,12 +109,56 @@ func TestKeydgen_GenerateKey_ED25519(t *testing.T) {
202109
203110 for _ , c := range cases {
204111 t .Run (c .name , func (t * testing.T ) {
112+
205113 start := time .Now ()
206- fmt .Print (t .Name ())
207- if err := testKeygenImport (c .keydgen ); err != nil && ! c .expectFailure {
114+ fmt .Print (c .name )
115+
116+ if _ , err := c .keydgen .GenerateKey (); err != nil && ! c .expectFailure {
208117 t .Fatal (err )
209118 }
119+
120+ if ! c .expectFailure {
121+
122+ pub , err := c .keydgen .MarshalPublicKey ()
123+ if err != nil {
124+ t .Fatal (err )
125+ }
126+
127+ filename := fmt .Sprintf ("keydgen_test_%s_" , c .keydgen .Type )
128+ if c .keydgen .Type == RSA || c .keydgen .Type == DSA {
129+ filename += fmt .Sprintf ("%d_" , c .keydgen .Bits )
130+ } else if c .keydgen .Type == ECDSA {
131+ filename += fmt .Sprintf ("%d_" , c .keydgen .Curve )
132+ }
133+
134+ tmpFile , err := ioutil .TempFile ("" , filename )
135+ if err != nil {
136+ t .Fatal (err )
137+ }
138+
139+ if err := writeKeyToFile (c .keydgen , tmpFile .Name ()); err != nil {
140+ t .Fatal (err )
141+ }
142+ defer func () {
143+ os .Remove (tmpFile .Name ())
144+ os .Remove (tmpFile .Name () + ".pub" )
145+ }()
146+
147+ e , _ , err := expect .Spawn ("ssh-keygen -y -f " + tmpFile .Name (), - 1 )
148+ if err != nil {
149+ t .Fatal (err )
150+ }
151+ defer e .Close ()
152+
153+ expr := regexp .MustCompilePOSIX (regexp .QuoteMeta (string (pub )))
154+ if out , _ , err := e .Expect (expr , - 1 ); err != nil {
155+ t .Fatal ("unable to verify generated public key with ssh-keygen: " + out )
156+ }
157+
158+ }
159+
210160 fmt .Printf (" PASS %s\n " , time .Since (start ))
161+
211162 })
212163 }
213164
0 commit comments