Skip to content

Instantly share code, notes, and snippets.

@miguelmota
Created July 22, 2018 22:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miguelmota/08686dc24e77fe648639cb251a9bfb10 to your computer and use it in GitHub Desktop.
Save miguelmota/08686dc24e77fe648639cb251a9bfb10 to your computer and use it in GitHub Desktop.
Golang IPFS key pair to IPNS peer ID
ipfs key gen mykey --type=rsa --size=2048
package main
import (
"bufio"
"bytes"
"encoding/pem"
"fmt"
"log"
"github.com/ipfs/go-ipfs/keystore"
b58 "github.com/mr-tron/base58/base58"
mh "github.com/multiformats/go-multihash"
)
func main() {
ks, err := keystore.NewFSKeystore("/Users/mota/.ipfs/keystore/")
if err != nil {
log.Fatal(err)
}
priv, err := ks.Get("default")
if err != nil {
log.Fatal(err)
}
privBytes, err := priv.Bytes()
if err != nil {
log.Fatal(err)
}
var privPEM bytes.Buffer
privWriter := bufio.NewWriter(&privPEM)
pem.Encode(privWriter, &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: privBytes,
})
privWriter.Flush()
pub := priv.GetPublic()
var pubPEM bytes.Buffer
pubBytes, err := pub.Bytes()
pubWriter := bufio.NewWriter(&pubPEM)
pem.Encode(pubWriter, &pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: pubBytes,
})
pubWriter.Flush()
privPEMString := string(privPEM.Bytes())
pubPEMString := string(pubPEM.Bytes())
var alg uint64 = mh.SHA2_256
maxInlineKeyLength := 42
if len(pubBytes) <= maxInlineKeyLength {
alg = mh.ID
}
hash, _ := mh.Sum(pubBytes, alg, -1)
peerID := b58.Encode(hash)
fmt.Println(privPEMString)
fmt.Println(pubPEMString)
fmt.Println("IPNS:", peerID)
}
-----BEGIN RSA PRIVATE KEY-----
CAASpwkwggSjAgEAAoIBAQDjwkdyAvwfL6zIr2O6MF2ipNd/pkkV+5+9wOyvAL9I
HY4WRMmmLBGiBTj1Kln79ttChegxy/XME7ipzt2KXq7qaMT7ZiscB0pPpLCpViue
GxY90VbYmTeUrtvFJ+fJ5k4InuYtxJpwIpK0zkTZEQbq7mjOOl0VaIzH4iBjKKDq
uYXxX5JSz5/9I2a4d5YvOoci703krFEAGw4FsnUR+NU0wKE2A66+t+xml3E6D/Oo
OowSzLk2o0vZOFqNG4/tas9HGKYO8ofmFYMhbw5j/p3lZCHhPdklZZ4nlrEZIxPT
lwdeY3qBG+7WyzctLbJLerg8cvwOJ5m46uQ4f0j4mYf9AgMBAAECggEAQPhftxdA
4oiQCmN12FwJqebKDoDZ4mp4BAIvwjA9YI4FxTZ0K3Hwyb4hpFYjeyvNGinmtaXQ
BRovGEmJivo9fWLLpkdbztAJk7SQLI4HPT/O1W2ND5aNc116FcCvbznCUtU5Jh8q
SwihvvAEVcN0rLm7rfCaMwwy9KX9xSuG0830suMmVJ31W0evzRYHtnsvmDC9rdrA
TOy2HZdbL5Bty+nSwOlD608hCPWG6jCH5/BpEA3nCGX6KGH4yqFjaWGRA54cGGsh
bcKP1Hsdk0zle+Epl04yR1h2XCuwfmM3yegZuKjG5dfF51kV0yq2kND4F47D5azp
QJEhYHHOi6dvhQKBgQDwhZVl0W1rZjUvzkf/mZ2uC7aL64Rg1DFWNpSc05NK4IBS
eAf17HCCxLHCZnR0r8+CC0bOR+0xFT24RKcDyiPzpUo90LKHV3CXZEeFEWwfCg6N
RUfKMVLu9Vf5z7U4V2lOkojE7pWLt/ZMEAxXByQPlNyARfiRI8HPsPgrTlJvKwKB
gQDyam+oJbAfLvEFQ+h0B1ov3/3BEzV3GRkRz/IHTzQvHKyrN8zn/NZzQfrv3GR8
5W9BumpdfPkV5kCJb00fjS7AgLGWGHBsqzyDdliZdiQ5h5b15SflDrzfCF6c23lp
iizEtoNWTFYpgp3MuXYtfvr+6p6VdwZkZ5xTUebK4bIRdwKBgErJnqysNBPDEiKt
R6HoiCkIJ1jWgLEDCdw+2HLzLseHix8Zh5AmVs2yj3tdFDT8Pc+35epaXxx1+F0F
q9D317n42V7jN7/xpmbMnZh41F/KZr/ynOH3+EupKhPZTAYa1/nAgpqJfSKWrxTz
oIKnC8V0iiOwnhuzPJ5x7pi4n9VFAoGBAMV7OdzkXvb4WbatXJfxSWJI+kKosFyG
oKqnGYck2eErXerZuV6f1d/tN0zh4SbyDdGg2HeykIRrn9WWS2DRte1yqbkZzbRp
RxHdfk3+NYJ8V9mXxglPGUQkYFcuYFk/DDtwZ8wMwgBs/LpDt+dWU4kJfwlJ/nYb
BfnGddp/RH3/AoGAYxXvoxuhGzMXvDLNJ0SNuqNUfZ/F/ltMAcPmhtJkTo+RpZlm
eBvXrduLemNPYcNxTNmuRMgA4kVHOlu+/s7VQ4sRcNp7Fgau3+aqkE/9pkV3wJnf
xTlPlC4y+VeMKqBczpIXBD42mQMSwe9x/chOVQ+oebqB6Nvyk8RbcI9fJEs=
-----END RSA PRIVATE KEY-----
-----BEGIN RSA PUBLIC KEY-----
CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjwkdyAvwfL6zI
r2O6MF2ipNd/pkkV+5+9wOyvAL9IHY4WRMmmLBGiBTj1Kln79ttChegxy/XME7ip
zt2KXq7qaMT7ZiscB0pPpLCpViueGxY90VbYmTeUrtvFJ+fJ5k4InuYtxJpwIpK0
zkTZEQbq7mjOOl0VaIzH4iBjKKDquYXxX5JSz5/9I2a4d5YvOoci703krFEAGw4F
snUR+NU0wKE2A66+t+xml3E6D/OoOowSzLk2o0vZOFqNG4/tas9HGKYO8ofmFYMh
bw5j/p3lZCHhPdklZZ4nlrEZIxPTlwdeY3qBG+7WyzctLbJLerg8cvwOJ5m46uQ4
f0j4mYf9AgMBAAE=
-----END RSA PUBLIC KEY-----
IPNS: QmTU9rhcwQM6refNwa64oqibG6C2mmFLhhxDBUjWDBtRa6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment