summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus.amongus@gmail.com>2010-04-05 01:15:36 -0700
committerDavid Barksdale <amatus.amongus@gmail.com>2010-04-05 01:15:36 -0700
commit0137267336e36d3492e266c187d4580fdb10deb3 (patch)
treeb32f8394c08a1d00d90462c6a223f708e0891e0c
parente8c901ff50ac23a3127dbcd1b010f59295f5693e (diff)
I think a peer should be a struct-map. I also coded up the first steps to being able to compute a peer identity.
-rw-r--r--src/org/gnu/clojure/gnunet/identity.clj22
-rw-r--r--src/org/gnu/clojure/gnunet/peer.clj11
2 files changed, 33 insertions, 0 deletions
diff --git a/src/org/gnu/clojure/gnunet/identity.clj b/src/org/gnu/clojure/gnunet/identity.clj
new file mode 100644
index 0000000..0f36057
--- /dev/null
+++ b/src/org/gnu/clojure/gnunet/identity.clj
@@ -0,0 +1,22 @@
+(ns org.gnu.clojure.gnunet.identity)
+
+(defn bit-count-to-bytes [x] (quot (+ 7 x) 8))
+
+(defn bigint-to-bytes [x]
+ (let [len (bit-count-to-bytes (.bitLength x))
+ a (.toByteArray x)]
+ (drop (- (alength a) len) a)))
+
+(defn short-to-bytes [x]
+ (list (quot x 256) (rem x 256)))
+
+(defn rsa-public-key-binary-encoded [key]
+ (let [modulus (bigint-to-bytes (.getModulus key))
+ exponent (bigint-to-bytes (.getPublicExponent key))
+ len (+ (count modulus) (count exponent) 4)]
+ (concat
+ (short-to-bytes len)
+ (short-to-bytes (count modulus))
+ modulus
+ exponent
+ (short-to-bytes 0)))) \ No newline at end of file
diff --git a/src/org/gnu/clojure/gnunet/peer.clj b/src/org/gnu/clojure/gnunet/peer.clj
new file mode 100644
index 0000000..c35e420
--- /dev/null
+++ b/src/org/gnu/clojure/gnunet/peer.clj
@@ -0,0 +1,11 @@
+(ns org.gnu.clojure.gnunet.peer)
+
+(defstruct peer
+ :options)
+
+(defstruct peer-options
+ :id)
+
+(defn new-peer [options]
+ (struct-map peer
+ :options (ref options)))