arnaucube
arnaucube/darkID-prototypePublic Self-hosted repository
darkID-prototype/serverIDsigner/keys.go
serverIDsigner/keys.goRaw
  1package main
  2
  3import (
  4	"crypto/rsa"
  5	"crypto/x509"
  6	"encoding/asn1"
  7	"encoding/json"
  8	"encoding/pem"
  9	"io/ioutil"
 10	"os"
 11	"time"
 12)
 13
 14type Key struct {
 15	ID       string    `json:"id"`
 16	PrivK    string    `json:"privK"` //path of the PrivK file
 17	PubK     string    `json:"pubK"`  //path of the PubK file
 18	Date     time.Time `json:"date"`
 19	Verified bool      `json:"verified"`
 20	Signed   string    `json:"signed"`
 21}
 22
 23func savePEMKey(fileName string, key *rsa.PrivateKey) {
 24	outFile, err := os.Create(fileName)
 25	check(err)
 26	defer outFile.Close()
 27
 28	var privateKey = &pem.Block{
 29		Type:  "PRIVATE KEY",
 30		Bytes: x509.MarshalPKCS1PrivateKey(key),
 31	}
 32
 33	err = pem.Encode(outFile, privateKey)
 34	check(err)
 35}
 36func savePublicPEMKey(fileName string, pubkey rsa.PublicKey) {
 37	asn1Bytes, err := asn1.Marshal(pubkey)
 38	check(err)
 39
 40	var pemkey = &pem.Block{
 41		Type:  "PUBLIC KEY",
 42		Bytes: asn1Bytes,
 43	}
 44
 45	pemfile, err := os.Create(fileName)
 46	check(err)
 47	defer pemfile.Close()
 48
 49	err = pem.Encode(pemfile, pemkey)
 50	check(err)
 51}
 52func openPEMKey(path string) (key rsa.PrivateKey) {
 53	return
 54}
 55func openPublicPEMKey(path string) (key rsa.PublicKey) {
 56	return
 57}
 58func readKeys() []Key {
 59	path := keysDir + "/keys.json"
 60	var keys []Key
 61
 62	file, err := ioutil.ReadFile(path)
 63	check(err)
 64	content := string(file)
 65	json.Unmarshal([]byte(content), &keys)
 66
 67	return keys
 68}
 69
 70func saveKeys(keys []Key) {
 71	jsonKeys, err := json.Marshal(keys)
 72	check(err)
 73	err = ioutil.WriteFile(keysDir+"/keys.json", jsonKeys, 0644)
 74	check(err)
 75}
 76func getKeyByKeyID(keyID string) (k Key) {
 77	keys := readKeys()
 78	for _, key := range keys {
 79		if key.ID == keyID {
 80			k = key
 81		}
 82	}
 83	return k
 84}
 85
 86/*
 87func getServerPubK(url string) ownrsa.RSAPublicKey {
 88	r, err := http.Get(url + "/")
 89	check(err)
 90	fmt.Println(r)
 91
 92	decoder := json.NewDecoder(r.Body)
 93	//var sigmaString string
 94	var pubK ownrsa.RSAPublicKey
 95	err = decoder.Decode(&pubK)
 96	if err != nil {
 97		panic(err)
 98	}
 99	defer r.Body.Close()
100	color.Blue("received server pubK:")
101	fmt.Println(pubK)
102	return pubK
103}
104*/