@@ -9,12 +9,12 @@ import (
99 "crypto/ecdsa"
1010 "crypto/elliptic"
1111 "crypto/rand"
12+ "fmt"
13+ "io"
1214 "net"
1315 "reflect"
1416 "testing"
1517 "time"
16-
17- "golang.org/x/crypto/ssh/testdata"
1818)
1919
2020// Cert generated by ssh-keygen 6.0p1 Debian-4.
@@ -226,53 +226,33 @@ func TestHostKeyCert(t *testing.T) {
226226 }
227227}
228228
229+ type legacyRSASigner struct {
230+ Signer
231+ }
232+
233+ func (s * legacyRSASigner ) Sign (rand io.Reader , data []byte ) (* Signature , error ) {
234+ v , ok := s .Signer .(AlgorithmSigner )
235+ if ! ok {
236+ return nil , fmt .Errorf ("invalid signer" )
237+ }
238+ return v .SignWithAlgorithm (rand , data , SigAlgoRSA )
239+ }
240+
229241func TestCertTypes (t * testing.T ) {
230242 var testVars = []struct {
231- name string
232- keys func () Signer
243+ name string
244+ signer Signer
245+ algo string
233246 }{
234- {
235- name : CertAlgoECDSA256v01 ,
236- keys : func () Signer {
237- s , _ := ParsePrivateKey (testdata .PEMBytes ["ecdsap256" ])
238- return s
239- },
240- },
241- {
242- name : CertAlgoECDSA384v01 ,
243- keys : func () Signer {
244- s , _ := ParsePrivateKey (testdata .PEMBytes ["ecdsap384" ])
245- return s
246- },
247- },
248- {
249- name : CertAlgoECDSA521v01 ,
250- keys : func () Signer {
251- s , _ := ParsePrivateKey (testdata .PEMBytes ["ecdsap521" ])
252- return s
253- },
254- },
255- {
256- name : CertAlgoED25519v01 ,
257- keys : func () Signer {
258- s , _ := ParsePrivateKey (testdata .PEMBytes ["ed25519" ])
259- return s
260- },
261- },
262- {
263- name : CertAlgoRSAv01 ,
264- keys : func () Signer {
265- s , _ := ParsePrivateKey (testdata .PEMBytes ["rsa" ])
266- return s
267- },
268- },
269- {
270- name : CertAlgoDSAv01 ,
271- keys : func () Signer {
272- s , _ := ParsePrivateKey (testdata .PEMBytes ["dsa" ])
273- return s
274- },
275- },
247+ {CertAlgoECDSA256v01 , testSigners ["ecdsap256" ], "" },
248+ {CertAlgoECDSA384v01 , testSigners ["ecdsap384" ], "" },
249+ {CertAlgoECDSA521v01 , testSigners ["ecdsap521" ], "" },
250+ {CertAlgoED25519v01 , testSigners ["ed25519" ], "" },
251+ {CertAlgoRSAv01 , testSigners ["rsa" ], SigAlgoRSASHA2512 },
252+ {CertAlgoRSAv01 , & legacyRSASigner {testSigners ["rsa" ]}, SigAlgoRSA },
253+ {CertAlgoRSAv01 , testSigners ["rsa-sha2-256" ], SigAlgoRSASHA2512 },
254+ {CertAlgoRSAv01 , testSigners ["rsa-sha2-512" ], SigAlgoRSASHA2512 },
255+ {CertAlgoDSAv01 , testSigners ["dsa" ], "" },
276256 }
277257
278258 k , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
@@ -304,7 +284,7 @@ func TestCertTypes(t *testing.T) {
304284
305285 go NewServerConn (c1 , conf )
306286
307- priv := m .keys ()
287+ priv := m .signer
308288 if err != nil {
309289 t .Fatalf ("error generating ssh pubkey: %v" , err )
310290 }
@@ -320,6 +300,10 @@ func TestCertTypes(t *testing.T) {
320300 t .Fatalf ("error generating cert signer: %v" , err )
321301 }
322302
303+ if m .algo != "" && cert .Signature .Format != m .algo {
304+ t .Errorf ("expected %q signature format, got %q" , m .algo , cert .Signature .Format )
305+ }
306+
323307 config := & ClientConfig {
324308 User : "user" ,
325309 HostKeyCallback : func (h string , r net.Addr , k PublicKey ) error { return nil },
0 commit comments