Packages
stellar_sdk
0.2.0
0.23.0
0.22.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Elixir SDK for the Stellar network.
Current section
Files
Jump to
Current section
Files
lib/keypair/default.ex
defmodule Stellar.KeyPair.Default do
@moduledoc """
Ed25519 functions to manage signatures.
"""
alias StellarBase.StrKey
@behaviour Stellar.KeyPair.Spec
@impl true
def random do
{secret, public_key} = Ed25519.generate_key_pair()
encoded_public_key = StrKey.encode!(public_key, :ed25519_public_key)
encoded_secret = StrKey.encode!(secret, :ed25519_secret_seed)
{encoded_public_key, encoded_secret}
end
@impl true
def from_secret_seed(secret) do
public_key =
secret
|> StrKey.decode!(:ed25519_secret_seed)
|> Ed25519.derive_public_key()
|> StrKey.encode!(:ed25519_public_key)
{public_key, secret}
end
@impl true
def raw_public_key(public_key) do
StrKey.decode!(public_key, :ed25519_public_key)
end
@impl true
def raw_secret_seed(secret) do
StrKey.decode!(secret, :ed25519_secret_seed)
end
@impl true
def sign(<<payload::binary>>, <<secret::binary>>) do
raw_secret = raw_secret_seed(secret)
Ed25519.signature(payload, raw_secret)
end
def sign(_payload, _secret), do: {:error, :invalid_signature_payload}
@impl true
def validate_public_key(public_key) when byte_size(public_key) == 56 do
case StrKey.decode(public_key, :ed25519_public_key) do
{:ok, _key} -> :ok
{:error, _reason} -> {:error, :invalid_ed25519_public_key}
end
end
def validate_public_key(_public_key), do: {:error, :invalid_ed25519_public_key}
@impl true
def validate_secret_seed(secret) when byte_size(secret) == 56 do
case StrKey.decode(secret, :ed25519_secret_seed) do
{:ok, _secret} -> :ok
{:error, _reason} -> {:error, :invalid_ed25519_secret_seed}
end
end
def validate_secret_seed(_secret), do: {:error, :invalid_ed25519_secret_seed}
end