1faeeb49d5
* pkg/identity: use sha256 instead of sha3 for pow Change-Id: I9b7a4f2c3e624a6e248a233e3653eaccaf23c6f3 * pkg/identity: restructure key generation a bit Change-Id: I0061a5cc62f04b0c86ffbf046519d5c0a154e896 * cmd/identity: indefinite key generation command you can start this command and leave it running and it will fill up your hard drive with node certificate authority private keys ordered by difficulty. Change-Id: I61c7a3438b9ff6656e74b8d74fef61e557e4d95a * pkg/storj: more node id difficulty testing Change-Id: Ie56b1859aa14ec6ef5973caf42aacb4c494b87c7 * review comments Change-Id: Iff019aa8121a7804f10c248bf2e578189e5b829d
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
// Copyright (C) 2018 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package main
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
"crypto/x509"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"sync/atomic"
|
|
|
|
"github.com/spf13/cobra"
|
|
"storj.io/storj/pkg/cfgstruct"
|
|
"storj.io/storj/pkg/identity"
|
|
"storj.io/storj/pkg/process"
|
|
"storj.io/storj/pkg/storj"
|
|
)
|
|
|
|
var (
|
|
keysCmd = &cobra.Command{
|
|
Use: "keys",
|
|
Short: "Manage keys",
|
|
}
|
|
keyGenerateCmd = &cobra.Command{
|
|
Use: "generate",
|
|
Short: "generate lots of keys",
|
|
RunE: cmdKeyGenerate,
|
|
}
|
|
|
|
keyCfg struct {
|
|
MinDifficulty int `help:"minimum difficulty to output" default:"18"`
|
|
Concurrency int `help:"worker concurrency" default:"4"`
|
|
OutputDir string `help:"output directory to place keys" default:"."`
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(keysCmd)
|
|
keysCmd.AddCommand(keyGenerateCmd)
|
|
cfgstruct.Bind(keyGenerateCmd.Flags(), &keyCfg)
|
|
}
|
|
|
|
func cmdKeyGenerate(cmd *cobra.Command, args []string) (err error) {
|
|
ctx := process.Ctx(cmd)
|
|
err = os.MkdirAll(keyCfg.OutputDir, 0700)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
counter := new(uint32)
|
|
return identity.GenerateKeys(ctx, uint16(keyCfg.MinDifficulty), keyCfg.Concurrency,
|
|
func(k *ecdsa.PrivateKey, id storj.NodeID) (done bool, err error) {
|
|
data, err := x509.MarshalECPrivateKey(k)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
difficulty, err := id.Difficulty()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
filename := fmt.Sprintf("gen-%02d-%d.key", difficulty, atomic.AddUint32(counter, 1))
|
|
fmt.Println("writing", filename)
|
|
err = ioutil.WriteFile(filepath.Join(keyCfg.OutputDir, filename), data, 0600)
|
|
return false, err
|
|
})
|
|
}
|