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*/