summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/gnu/clojure/gnunet/identity.clj7
-rw-r--r--src/org/gnu/clojure/gnunet/peer.clj16
2 files changed, 17 insertions, 6 deletions
diff --git a/src/org/gnu/clojure/gnunet/identity.clj b/src/org/gnu/clojure/gnunet/identity.clj
index dc47164..7eb3e03 100644
--- a/src/org/gnu/clojure/gnunet/identity.clj
+++ b/src/org/gnu/clojure/gnunet/identity.clj
@@ -39,4 +39,9 @@
(defn sha-512
[x]
(let [sha (java.security.MessageDigest/getInstance "SHA-512")]
- (.digest sha (byte-array x)))) \ No newline at end of file
+ (.digest sha (byte-array x))))
+
+(defn generate-id
+ "Generate the SHA-512 hash of the encoded public key"
+ [keypair]
+ (sha-512 (encode-rsa-public-key (.getPublic keypair))))
diff --git a/src/org/gnu/clojure/gnunet/peer.clj b/src/org/gnu/clojure/gnunet/peer.clj
index c35e420..b60c4d6 100644
--- a/src/org/gnu/clojure/gnunet/peer.clj
+++ b/src/org/gnu/clojure/gnunet/peer.clj
@@ -1,11 +1,17 @@
-(ns org.gnu.clojure.gnunet.peer)
+(ns org.gnu.clojure.gnunet.peer
+ (:use (org.gnu.clojure.gnunet identity)))
-(defstruct peer
- :options)
+(defstruct remote-peer
+ :id)
+
+(def peer (apply create-struct (concat
+ (keys (struct-map remote-peer))
+ (list :keypair))))
(defstruct peer-options
- :id)
+ :keypair)
(defn new-peer [options]
(struct-map peer
- :options (ref options)))
+ :keypair (:keypair options)
+ :id (generate-id (:keypair options))))