File tree Expand file tree Collapse file tree 2 files changed +18
-51
lines changed Expand file tree Collapse file tree 2 files changed +18
-51
lines changed Original file line number Diff line number Diff line change 1
1
package ssh
2
2
3
- import "io/ioutil"
3
+ import (
4
+ "io/ioutil"
5
+
6
+ gossh "golang.org/x/crypto/ssh"
7
+ )
4
8
5
9
// PasswordAuth returns a functional option that sets PasswordHandler on the server.
6
10
func PasswordAuth (fn PasswordHandler ) Option {
@@ -26,13 +30,14 @@ func HostKeyFile(filepath string) Option {
26
30
if err != nil {
27
31
return err
28
32
}
29
- for _ , block := range decodePemBlocks (pemBytes ) {
30
- signer , err := signerFromBlock (block )
31
- if err != nil {
32
- return err
33
- }
34
- srv .AddHostKey (signer )
33
+
34
+ signer , err := gossh .ParsePrivateKey (pemBytes )
35
+ if err != nil {
36
+ return err
35
37
}
38
+
39
+ srv .AddHostKey (signer )
40
+
36
41
return nil
37
42
}
38
43
}
@@ -41,13 +46,13 @@ func HostKeyFile(filepath string) Option {
41
46
// from a PEM file as bytes.
42
47
func HostKeyPEM (bytes []byte ) Option {
43
48
return func (srv * Server ) error {
44
- for _ , block := range decodePemBlocks (bytes ) {
45
- signer , err := signerFromBlock (block )
46
- if err != nil {
47
- return err
48
- }
49
- srv .AddHostKey (signer )
49
+ signer , err := gossh .ParsePrivateKey (bytes )
50
+ if err != nil {
51
+ return err
50
52
}
53
+
54
+ srv .AddHostKey (signer )
55
+
51
56
return nil
52
57
}
53
58
}
Original file line number Diff line number Diff line change @@ -3,49 +3,11 @@ package ssh
3
3
import (
4
4
"crypto/rand"
5
5
"crypto/rsa"
6
- "crypto/x509"
7
6
"encoding/binary"
8
- "encoding/pem"
9
- "fmt"
10
7
11
8
"golang.org/x/crypto/ssh"
12
9
)
13
10
14
- func signerFromBlock (block * pem.Block ) (ssh.Signer , error ) {
15
- var key interface {}
16
- var err error
17
- switch block .Type {
18
- case "RSA PRIVATE KEY" :
19
- key , err = x509 .ParsePKCS1PrivateKey (block .Bytes )
20
- case "EC PRIVATE KEY" :
21
- key , err = x509 .ParseECPrivateKey (block .Bytes )
22
- case "DSA PRIVATE KEY" :
23
- key , err = ssh .ParseDSAPrivateKey (block .Bytes )
24
- default :
25
- return nil , fmt .Errorf ("unsupported key type %q" , block .Type )
26
- }
27
- if err != nil {
28
- return nil , err
29
- }
30
- signer , err := ssh .NewSignerFromKey (key )
31
- if err != nil {
32
- return nil , err
33
- }
34
- return signer , nil
35
- }
36
-
37
- func decodePemBlocks (pemData []byte ) []* pem.Block {
38
- var blocks []* pem.Block
39
- var block * pem.Block
40
- for {
41
- block , pemData = pem .Decode (pemData )
42
- if block == nil {
43
- return blocks
44
- }
45
- blocks = append (blocks , block )
46
- }
47
- }
48
-
49
11
func generateSigner () (ssh.Signer , error ) {
50
12
key , err := rsa .GenerateKey (rand .Reader , 768 )
51
13
if err != nil {
You can’t perform that action at this time.
0 commit comments