You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.0 KiB

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