From fd10a2ad4b141ee3117f6a110046f003dbba1b05 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Fri, 23 Feb 2024 16:50:41 -0800 Subject: [PATCH] remove format/openssh.go this is unnecessary now that x/crypto/ssh.MarshalPrivateKey has been added --- cmd/cmd.go | 27 ++++++------ format/openssh.go | 102 ---------------------------------------------- 2 files changed, 12 insertions(+), 117 deletions(-) delete mode 100644 format/openssh.go diff --git a/cmd/cmd.go b/cmd/cmd.go index f24ff209..120463f9 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -718,39 +718,36 @@ func initializeKeypair() error { _, err = os.Stat(privKeyPath) if os.IsNotExist(err) { fmt.Printf("Couldn't find '%s'. Generating new private key.\n", privKeyPath) - _, privKey, err := ed25519.GenerateKey(rand.Reader) + cryptoPublicKey, cryptoPrivateKey, err := ed25519.GenerateKey(rand.Reader) if err != nil { return err } - privKeyBytes, err := format.OpenSSHPrivateKey(privKey, "") + privateKeyBytes, err := ssh.MarshalPrivateKey(cryptoPrivateKey, "") if err != nil { return err } - err = os.MkdirAll(filepath.Dir(privKeyPath), 0o755) - if err != nil { + if err := os.MkdirAll(filepath.Dir(privKeyPath), 0o755); err != nil { return fmt.Errorf("could not create directory %w", err) } - err = os.WriteFile(privKeyPath, pem.EncodeToMemory(privKeyBytes), 0o600) + if err := os.WriteFile(privKeyPath, pem.EncodeToMemory(privateKeyBytes), 0o600); err != nil { + return err + } + + sshPublicKey, err := ssh.NewPublicKey(cryptoPublicKey) if err != nil { return err } - sshPrivateKey, err := ssh.NewSignerFromKey(privKey) - if err != nil { + publicKeyBytes := ssh.MarshalAuthorizedKey(sshPublicKey) + + if err := os.WriteFile(pubKeyPath, publicKeyBytes, 0o644); err != nil { return err } - pubKeyData := ssh.MarshalAuthorizedKey(sshPrivateKey.PublicKey()) - - err = os.WriteFile(pubKeyPath, pubKeyData, 0o644) - if err != nil { - return err - } - - fmt.Printf("Your new public key is: \n\n%s\n", string(pubKeyData)) + fmt.Printf("Your new public key is: \n\n%s\n", publicKeyBytes) } return nil } diff --git a/format/openssh.go b/format/openssh.go deleted file mode 100644 index e642e358..00000000 --- a/format/openssh.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Code originally from https://go-review.googlesource.com/c/crypto/+/218620 - -// TODO: replace with upstream once the above change is merged and released. - -package format - -import ( - "crypto" - "crypto/ed25519" - "crypto/rand" - "encoding/binary" - "encoding/pem" - "fmt" - - "golang.org/x/crypto/ssh" -) - -const privateKeyAuthMagic = "openssh-key-v1\x00" - -type openSSHEncryptedPrivateKey struct { - CipherName string - KDFName string - KDFOptions string - KeysCount uint32 - PubKey []byte - KeyBlocks []byte -} - -type openSSHPrivateKey struct { - Check1 uint32 - Check2 uint32 - Keytype string - Rest []byte `ssh:"rest"` -} - -type openSSHEd25519PrivateKey struct { - Pub []byte - Priv []byte - Comment string - Pad []byte `ssh:"rest"` -} - -func OpenSSHPrivateKey(key crypto.PrivateKey, comment string) (*pem.Block, error) { - var check uint32 - if err := binary.Read(rand.Reader, binary.BigEndian, &check); err != nil { - return nil, err - } - - var pk1 openSSHPrivateKey - pk1.Check1 = check - pk1.Check2 = check - - var w openSSHEncryptedPrivateKey - w.KeysCount = 1 - - if k, ok := key.(*ed25519.PrivateKey); ok { - key = *k - } - - switch k := key.(type) { - case ed25519.PrivateKey: - pub, priv := k[32:], k - key := openSSHEd25519PrivateKey{ - Pub: pub, - Priv: priv, - Comment: comment, - } - - pk1.Keytype = ssh.KeyAlgoED25519 - pk1.Rest = ssh.Marshal(key) - - w.PubKey = ssh.Marshal(struct { - KeyType string - Pub []byte - }{ - ssh.KeyAlgoED25519, pub, - }) - default: - return nil, fmt.Errorf("ssh: unknown key type %T", k) - } - - w.KeyBlocks = openSSHPadding(ssh.Marshal(pk1), 8) - - w.CipherName, w.KDFName, w.KDFOptions = "none", "none", "" - - return &pem.Block{ - Type: "OPENSSH PRIVATE KEY", - Bytes: append([]byte(privateKeyAuthMagic), ssh.Marshal(w)...), - }, nil -} - -func openSSHPadding(block []byte, blocksize int) []byte { - for i, j := 0, len(block); (j+i)%blocksize != 0; i++ { - block = append(block, byte(i+1)) - } - - return block -}