Added ed25519-converter script
This commit is contained in:
83
scripts/ed25519-converter.go
Normal file
83
scripts/ed25519-converter.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"crypto/ed25519"
|
||||
"encoding/base64"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
func main() {
|
||||
key := ""
|
||||
|
||||
fmt.Println("Key:")
|
||||
_, _ = fmt.Scan(&key)
|
||||
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
fmt.Print("Passphrase: ")
|
||||
passphrase, _ := reader.ReadString('\n')
|
||||
passphrase = strings.TrimSpace(passphrase)
|
||||
|
||||
keyBytes, err := base64.StdEncoding.DecodeString(key)
|
||||
if err != nil {
|
||||
fmt.Println("Invalid base64:", err)
|
||||
return
|
||||
}
|
||||
if len(keyBytes) != 64 {
|
||||
fmt.Println("Invalid key length:", len(keyBytes))
|
||||
return
|
||||
}
|
||||
|
||||
// Use the first 32 bytes as private seed
|
||||
privKey := ed25519.NewKeyFromSeed(keyBytes[:32])
|
||||
|
||||
var pemBlock *pem.Block
|
||||
hasPassphrase := passphrase != "none"
|
||||
if hasPassphrase {
|
||||
fmt.Printf("Encrypting with passphrase: '%s'\n", passphrase)
|
||||
pemBlock, err = ssh.MarshalPrivateKeyWithPassphrase(privKey, "eko", []byte(passphrase))
|
||||
} else {
|
||||
fmt.Println("Encrypting without passphrase")
|
||||
pemBlock, err = ssh.MarshalPrivateKey(privKey, "eko")
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("failed private key marshaling", err)
|
||||
return
|
||||
}
|
||||
err = pem.Encode(os.Stdout, pemBlock)
|
||||
if err != nil {
|
||||
fmt.Println("pem encoding to file error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("randomart")
|
||||
printRandomart(privKey)
|
||||
}
|
||||
|
||||
func printRandomart(key ed25519.PrivateKey) {
|
||||
pub, err := ssh.NewPublicKey(key.Public())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
tmpfile, err := os.CreateTemp("", "id_ed25519.pub")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer os.Remove(tmpfile.Name())
|
||||
|
||||
tmpfile.Write(ssh.MarshalAuthorizedKey(pub))
|
||||
tmpfile.Close()
|
||||
|
||||
cmd := exec.Command("ssh-keygen", "-lvf", tmpfile.Name())
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Run()
|
||||
}
|
||||
7
scripts/go.mod
Normal file
7
scripts/go.mod
Normal file
@@ -0,0 +1,7 @@
|
||||
module scripts
|
||||
|
||||
go 1.24.5
|
||||
|
||||
require golang.org/x/crypto v0.41.0
|
||||
|
||||
require golang.org/x/sys v0.35.0 // indirect
|
||||
6
scripts/go.sum
Normal file
6
scripts/go.sum
Normal file
@@ -0,0 +1,6 @@
|
||||
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||
Reference in New Issue
Block a user