aboutsummaryrefslogtreecommitdiff
path: root/lib/identity.ex
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2018-09-01 16:01:48 +0200
committerAlex Auvolat <alex@adnab.me>2018-09-01 16:01:48 +0200
commit1a0ef154a421af60f6d57dfe861dacb844a7d142 (patch)
treeac4ce4ef99991c9826d69114489acaaeb7638e51 /lib/identity.ex
parentdd078cfecbe07f1e4d4e002467707ed53aeff180 (diff)
downloadshard-1a0ef154a421af60f6d57dfe861dacb844a7d142.tar.gz
shard-1a0ef154a421af60f6d57dfe861dacb844a7d142.zip
Add peer id suffix to make sub networks
Diffstat (limited to 'lib/identity.ex')
-rw-r--r--lib/identity.ex16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/identity.ex b/lib/identity.ex
index 229d6c7..f1899df 100644
--- a/lib/identity.ex
+++ b/lib/identity.ex
@@ -1,13 +1,15 @@
defmodule Shard.Identity do
use Agent
require Salty.Sign.Ed25519, as: Sign
+ require Logger
def start_link(_) do
Agent.start_link(__MODULE__, :init, [], name: __MODULE__)
end
def init() do
- {:ok, pk, sk} = Sign.keypair
+ Logger.info "Generating keypair..."
+ {pk, sk} = gen_keypair(Application.get_env(:shard, :peer_id_suffix))
nick_suffix = pk
|> binary_part(0, 3)
|> Base.encode16
@@ -18,6 +20,18 @@ defmodule Shard.Identity do
}
end
+ defp gen_keypair(suffix, n \\ 0) do
+ {:ok, pk, sk} = Sign.keypair
+ if rem(n, 10000) == 0 do
+ Logger.info "#{n}... expected #{:math.pow(256, byte_size(suffix))}"
+ end
+ if :binary.longest_common_suffix([pk, suffix]) == byte_size(suffix) do
+ {pk, sk}
+ else
+ gen_keypair(suffix, n+1)
+ end
+ end
+
def get_keypair() do
Agent.get(__MODULE__, &(&1.keypair))
end