aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs18
-rw-r--r--src/protocol.rs13
-rw-r--r--src/sleep_register.rs2
3 files changed, 20 insertions, 13 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 694265e..f0059e6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -52,3 +52,21 @@ mod protocol;
pub use protocol::*;
pub mod network_msgs;
pub mod metadata_msgs;
+
+
+use crypto::digest::Digest;
+use crypto::blake2b::Blake2b;
+
+/// Helper to calculate a discovery key from a public key. 'key' should be 32 bytes; the returned
+/// array will also be 32 bytes long.
+///
+/// dat discovery keys are calculated as a BLAKE2b "keyed hash" (using the passed key) of the string
+/// "hypercore" (with no trailing null byte).
+pub fn make_discovery_key(key: &[u8]) -> Vec<u8> {
+ let mut discovery_key = [0; 32];
+ let mut hash = Blake2b::new_keyed(32, key);
+ hash.input(&"hypercore".as_bytes());
+ hash.result(&mut discovery_key);
+ discovery_key.to_vec()
+}
+
diff --git a/src/protocol.rs b/src/protocol.rs
index 6028bf2..5726efd 100644
--- a/src/protocol.rs
+++ b/src/protocol.rs
@@ -3,8 +3,6 @@ use std::net::TcpStream;
use std::time::Duration;
use std::io::{Read, Write};
use std::cmp;
-use crypto::digest::Digest;
-use crypto::blake2b::Blake2b;
use sodiumoxide::crypto::stream::*;
use rand::{OsRng, Rng};
use protobuf::Message;
@@ -14,6 +12,7 @@ use integer_encoding::{VarIntReader, VarIntWriter};
use errors::*;
use network_msgs::*;
use metadata_msgs::Index;
+use make_discovery_key;
#[derive(Debug)]
pub enum DatNetMessage {
@@ -130,16 +129,6 @@ fn test_bsxii_continued() {
assert_eq!(a, c);
}
-// TODO: move to lib.rs?
-pub fn make_discovery_key(key: &[u8]) -> Vec<u8> {
- // calculate discovery key
- let mut discovery_key = [0; 32];
- let mut hash = Blake2b::new_keyed(32, key);
- hash.input(&"hypercore".as_bytes());
- hash.result(&mut discovery_key);
- discovery_key.to_vec()
-}
-
/// Represents a bi-directional connection to a network peer
///
/// Spec says nonce is 32 bytes, by dat implementation (hypercore-protocol) is 24 bytes.
diff --git a/src/sleep_register.rs b/src/sleep_register.rs
index c169cbb..e0ea5a4 100644
--- a/src/sleep_register.rs
+++ b/src/sleep_register.rs
@@ -13,7 +13,7 @@ use rand::{OsRng, Rng};
use errors::*;
use sleep_file::*;
-use protocol::make_discovery_key;
+use make_discovery_key;
/// Abstract access to Hypercore register
pub trait HyperRegister {