Keystore
A go (golang) implementation of Java KeyStore encoder/decoder
Example
package main
import (
"crypto/rsa"
"crypto/x509"
"github.com/pavel-v-chernykh/keystore-go"
"log"
"os"
"reflect"
)
func readKeyStore(filename, password string) keystore.KeyStore {
f, err := os.Open(filename)
defer f.Close()
if err != nil {
log.Fatal(err)
}
keyStore, err := keystore.Decode(f, password)
if err != nil {
log.Fatal(err)
}
return keyStore
}
func writeKeyStore(keyStore keystore.KeyStore, filename, password string) {
o, err := os.Create(filename)
defer o.Close()
if err != nil {
log.Fatal(err)
}
err = keystore.Encode(o, keyStore, password)
if err != nil {
log.Fatal(err)
}
}
func main() {
ks1 := readKeyStore("keystore1.jks", "password")
writeKeyStore(ks1, "keystore2.jks", "password")
ks2 := readKeyStore("keystore2.jks", "password")
entry := ks1["alias"]
privKeyEntry := entry.(*keystore.PrivateKeyEntry)
key, err := x509.ParsePKCS8PrivateKey(privKeyEntry.PrivKey)
if err != nil {
log.Fatal(err)
}
_, ok := key.(*rsa.PrivateKey)
if !ok {
log.Fatal("Should be a rsa private key")
}
log.Printf("Is equal: %v\n", reflect.DeepEqual(ks1, ks2))
}