Skip to content

Instantly share code, notes, and snippets.

@jefft0
Created February 9, 2024 16:27
Show Gist options
  • Save jefft0/d98d3a0c551ac11be45dfdb3c4d905f8 to your computer and use it in GitHub Desktop.
Save jefft0/d98d3a0c551ac11be45dfdb3c4d905f8 to your computer and use it in GitHub Desktop.
Utility to create the Wesh accountSK and put it in the keystore
package main
import (
"fmt"
crand "crypto/rand"
"berty.tech/weshnet/pkg/ipfsutil"
"github.com/dgraph-io/badger/v2/options"
ds "github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/keytransform"
badger "github.com/ipfs/go-ds-badger2"
keystore "github.com/ipfs/go-ipfs-keystore"
"github.com/libp2p/go-libp2p/core/crypto"
)
func main() {
path := "data"
namespaceDeviceKeystore := "device_keystore"
keyName := "accountSK"
bopts := badger.DefaultOptions
bopts.ValueLogLoadingMode = options.FileIO
rootDatastore, err := badger.NewDatastore(path, &bopts)
if err != nil {
fmt.Printf("unable to init badger datastore: %w\n", err)
return
}
defer rootDatastore.Close()
ds := keytransform.Wrap(rootDatastore, keytransform.PrefixTransform{Prefix: ds.NewKey(namespaceDeviceKeystore)})
ks := ipfsutil.NewDatastoreKeystore(ds)
// Check if key already exists.
_, err = ks.Get(keyName)
if err == nil {
fmt.Println("Found existing key for " + keyName)
return
} else if err.Error() != keystore.ErrNoSuchKey.Error() {
fmt.Printf("error checking for key in secret store: %w\n", err)
return
}
//****** Put your code here to generate the key.
privateKey, _, err := crypto.GenerateEd25519Key(crand.Reader)
if err != nil {
fmt.Printf("unable to generate an ed25519 key: %w\n", err)
return
}
if err := ks.Put(keyName, privateKey); err != nil {
fmt.Printf("unable to perform put operation on keystore: %w\n", err)
return
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment