github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/tools/naclkey/naclkey.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 // naclkey generates NaCL signing keys. Use the -json flag 5 // to output JSON. 6 7 package main 8 9 import ( 10 "crypto/rand" 11 "encoding/hex" 12 "encoding/json" 13 "flag" 14 "fmt" 15 "os" 16 17 "github.com/keybase/go-crypto/ed25519" 18 ) 19 20 // to avoid importing all of libkb, some constants copied from 21 // libkb/constants.go here: 22 const ( 23 KeybaseKIDV1 = 0x01 24 KIDNaclEddsa = 0x20 25 IDSuffixKID = 0x0a 26 ) 27 28 var jsonOutput = flag.Bool("json", false, "output json") 29 30 func main() { 31 flag.Parse() 32 33 pub, priv, err := ed25519.GenerateKey(rand.Reader) 34 if err != nil { 35 fmt.Printf("Error generating keys: %s\n", err) 36 os.Exit(1) 37 } 38 39 pubkb := make([]byte, len(pub)+3) 40 pubkb[0] = KeybaseKIDV1 41 pubkb[1] = KIDNaclEddsa 42 copy(pubkb[2:], pub[:]) 43 pubkb[len(pubkb)-1] = IDSuffixKID 44 45 if *jsonOutput { 46 x := struct { 47 Public string 48 PublicKeybase string 49 Private string 50 }{ 51 Public: hex.EncodeToString(pub[:]), 52 PublicKeybase: hex.EncodeToString(pubkb), 53 Private: hex.EncodeToString(priv[:]), 54 } 55 j, err := json.MarshalIndent(x, "", " ") 56 if err != nil { 57 fmt.Printf("JSON marshal error: %s\n", err) 58 os.Exit(1) 59 } 60 fmt.Println(string(j)) 61 } else { 62 fmt.Printf("Public key: %x\n", pub) 63 fmt.Printf("Keybase public key: %x\n", pubkb) 64 fmt.Printf("Private key: %x\n", priv) 65 } 66 }