返回 DeepSeek-Reasonix
keys.go
根目录 / internal / remote / sshtest / keys.go
1 package sshtest
2
3 import (
4 "crypto/ed25519"
5 "crypto/rand"
6 "encoding/pem"
7
8 "golang.org/x/crypto/ssh"
9 )
10
11 // generateHostKey creates a fresh ed25519 SSH signer for the test server.
12 func generateHostKey() (ssh.Signer, error) {
13 _, priv, err := ed25519.GenerateKey(rand.Reader)
14 if err != nil {
15 return nil, err
16 }
17 return ssh.NewSignerFromKey(priv)
18 }
19
20 // GenerateKeyPair returns a new ed25519 signer and its public key, for tests
21 // that exercise publickey auth.
22 func GenerateKeyPair() (ssh.Signer, ssh.PublicKey, error) {
23 _, priv, err := ed25519.GenerateKey(rand.Reader)
24 if err != nil {
25 return nil, nil, err
26 }
27 signer, err := ssh.NewSignerFromKey(priv)
28 if err != nil {
29 return nil, nil, err
30 }
31 return signer, signer.PublicKey(), nil
32 }
33
34 // GenerateKeyPEM returns an unencrypted OpenSSH private key PEM alongside its
35 // public key, for tests that need an identity file on disk.
36 func GenerateKeyPEM() (pemBytes []byte, pub ssh.PublicKey, err error) {
37 _, priv, err := ed25519.GenerateKey(rand.Reader)
38 if err != nil {
39 return nil, nil, err
40 }
41 block, err := ssh.MarshalPrivateKey(priv, "")
42 if err != nil {
43 return nil, nil, err
44 }
45 signer, err := ssh.NewSignerFromKey(priv)
46 if err != nil {
47 return nil, nil, err
48 }
49 return pem.EncodeToMemory(block), signer.PublicKey(), nil
50 }
51
52 // GenerateEncryptedKeyPEM returns an encrypted OpenSSH private key PEM and its
53 // public key, for tests that exercise passphrase-backed identity files.
54 func GenerateEncryptedKeyPEM(passphrase string) (pemBytes []byte, pub ssh.PublicKey, err error) {
55 _, priv, err := ed25519.GenerateKey(rand.Reader)
56 if err != nil {
57 return nil, nil, err
58 }
59 block, err := ssh.MarshalPrivateKeyWithPassphrase(priv, "", []byte(passphrase))
60 if err != nil {
61 return nil, nil, err
62 }
63 signer, err := ssh.NewSignerFromKey(priv)
64 if err != nil {
65 return nil, nil, err
66 }
67 return pem.EncodeToMemory(block), signer.PublicKey(), nil
68 }
69
69 lines GO