Skip to content

Commit

Permalink
fix: move micheline encoding to Tezex.Micheline
Browse files Browse the repository at this point in the history
  • Loading branch information
vhf committed Mar 17, 2024
1 parent 8f82d67 commit 9c87a35
Show file tree
Hide file tree
Showing 7 changed files with 215 additions and 180 deletions.
23 changes: 5 additions & 18 deletions lib/crypto.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ defmodule Tezex.Crypto do
A set of functions to check Tezos signed messages, derive a pkh from a pubkey, verify that a public key corresponds to a wallet address (public key hash).
"""

alias Tezex.Crypto.KnownCurves
alias Tezex.Crypto.Base58Check
alias Tezex.Crypto.ECDSA
alias Tezex.Crypto.KnownCurves
alias Tezex.Crypto.PrivateKey
alias Tezex.Crypto.Signature
alias Tezex.Crypto.Utils
alias Tezex.Micheline

# public key
@prefix_edpk <<13, 15, 37, 217>>
Expand Down Expand Up @@ -239,37 +240,23 @@ defmodule Tezex.Crypto do
end

@doc """
Sign an operation using 0x03 as watermark
Sign an operation using `0x03` as watermark
"""
@spec sign_operation(privkey_param(), binary()) :: nonempty_binary()
def sign_operation(privkey_param, bytes) do
sign(privkey_param, bytes, <<3>>)
end

@doc """
Sign the hexadecimal/Micheline representation of a string
Sign the hexadecimal/Micheline representation of a string, Micheline encoding is done when `bytes` do not start with `"0501"`.
"""
@spec sign_message(privkey_param(), binary()) :: nonempty_binary()
def sign_message(privkey_param, "0501" <> _ = bytes) do
sign(privkey_param, bytes)
end

def sign_message(privkey_param, bytes) do
sign(privkey_param, encode_message(bytes))
end

@doc """
Encode a string to its Micheline representation:
* "05" to indicate that it is a Micheline expression
* "01" to indicate that it is a Micheline string
* byte size encoded on 4 bytes
* hex representation of the string
"""
def encode_message(bytes) do
hex_bytes = :binary.encode_hex(bytes)
padded_bytes_size = String.pad_leading("#{trunc(byte_size(hex_bytes) / 2)}", 8, "0")

"0501" <> padded_bytes_size <> hex_bytes
sign(privkey_param, Micheline.string_to_micheline_hex(bytes))
end

@spec sign(privkey_param(), binary(), binary()) :: nonempty_binary()
Expand Down
106 changes: 68 additions & 38 deletions lib/crypto/hmacdrbg.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,57 @@ defmodule Tezex.Crypto.HMACDRBG do
@moduledoc """
Pure Elixir implementation of [HMAC-DRBG](https://csrc.nist.gov/csrc/media/events/random-number-generation-workshop-2004/documents/hashblockcipherdrbg.pdf)
Ported from:
Usage:
```
entropy = "totally random0123456789"
nonce = "some secret nonce"
pers = "my drbg"
drbg = HMACDRBG.init(entropy, nonce, pers)
{_result, drbg} = HMACDRBG.generate(drbg, 32)
{_result, drbg} = HMACDRBG.generate(drbg, 32)
{result, drbg} = HMACDRBG.generate(drbg, 32)
:binary.encode_hex(result, :lowercase) == "a00cb0982eec3917b4b48abccfd460366d98b887943ff402bb7147cda174a46f"
```
Implementation inspired by both:
> https://github.com/indutny/hmac-drbg/blob/master/package.json
> MIT / (c) Fedor Indutny <[email protected]>
> https://github.com/sorpaas/rust-hmac-drbg/blob/master/src/lib.rs
> Apache License, Version 2.0, January 2004
> Copyright {yyyy} {name of copyright owner}
> Apache License, Version 2.0, January 2004 / Copyright {yyyy} {name of copyright owner}
"""

@type hash_algo ::
:sha
| :sha224
| :sha256
| :sha384
| :sha512
| :sha3_224
| :sha3_256
| :sha3_384
| :sha3_512
@type t :: %__MODULE__{
k: binary(),
v: binary(),
count: non_neg_integer()
count: non_neg_integer(),
algo: hash_algo()
}

defstruct k: <<>>, v: <<>>, count: 0
defstruct k: <<>>, v: <<>>, count: 0, algo: :sha256

@spec init(iodata(), iodata()) :: t()
@spec init(iodata(), iodata(), iodata() | nil) :: t()
def init(entropy, nonce, pers \\ nil) do
@doc """
Initialize a DRBG
"""
@spec init(binary(), binary()) :: t()
@spec init(binary(), binary(), binary() | nil) :: t()
@spec init(binary(), binary(), binary() | nil, hash_algo()) :: t()
def init(entropy, nonce, pers \\ nil, algo \\ :sha256) do
k = for _ <- 1..32, into: <<>>, do: <<0>>
v = for _ <- 1..32, into: <<>>, do: <<1>>
state = %__MODULE__{k: k, v: v, count: 0}
state = %__MODULE__{k: k, v: v, count: 0, algo: algo}

seed =
[entropy, nonce, pers]
Expand All @@ -38,47 +68,48 @@ defmodule Tezex.Crypto.HMACDRBG do
defp update(state, seed) do
seed = if is_nil(seed), do: nil, else: :binary.decode_hex(seed)

kmac =
hmac(state.k)
k =
:crypto.mac_init(:hmac, state.algo, state.k)
|> :crypto.mac_update(state.v)
|> :crypto.mac_update(<<0>>)

kmac =
if is_nil(seed) do
kmac
else
:crypto.mac_update(kmac, seed)
end

k = :crypto.mac_final(kmac)
|> then(fn kmac ->
if is_nil(seed) do
kmac
else
:crypto.mac_update(kmac, seed)
end
end)
|> :crypto.mac_final()

v =
hmac(k)
:crypto.mac_init(:hmac, state.algo, k)
|> :crypto.mac_update(state.v)
|> :crypto.mac_final()

if is_nil(seed) do
%{state | k: k, v: v}
else
kmac =
hmac(k)
k =
:crypto.mac_init(:hmac, state.algo, k)
|> :crypto.mac_update(v)
|> :crypto.mac_update(<<1>>)
|> :crypto.mac_update(seed)
|> :crypto.mac_final()

kmac = :crypto.mac_update(kmac, seed)

k = :crypto.mac_final(kmac)

v = hmac(k) |> :crypto.mac_update(v) |> :crypto.mac_final()
v =
:crypto.mac_init(:hmac, state.algo, k)
|> :crypto.mac_update(v)
|> :crypto.mac_final()

# d("#{source} update with", seed)
# d(v)
%{state | k: k, v: v}
end
end

@spec reseed(t(), iodata()) :: t()
@spec reseed(t(), iodata(), iodata() | nil) :: t()
@doc """
Reseed a DRBG
"""
@spec reseed(t(), binary()) :: t()
@spec reseed(t(), binary(), binary() | nil) :: t()
def reseed(state, entropy, add \\ nil) do
seed =
[entropy, add]
Expand All @@ -89,8 +120,11 @@ defmodule Tezex.Crypto.HMACDRBG do
update(state, seed)
end

@doc """
Generate `size` bytes, returning the generated bytes and the updated DRBG
"""
@spec generate(t(), pos_integer()) :: {binary(), t()}
@spec generate(t(), pos_integer(), iodata() | nil) :: {binary(), t()}
@spec generate(t(), pos_integer(), binary() | nil) :: {binary(), t()}
def generate(state, size, add \\ nil) do
state =
case add do
Expand All @@ -110,7 +144,7 @@ defmodule Tezex.Crypto.HMACDRBG do
Enum.reduce_while(1..10000, {state.v, <<>>}, fn _i, {v, result} ->
if byte_size(result) < size / 2 do
v =
hmac(state.k)
:crypto.mac_init(:hmac, state.algo, state.k)
|> :crypto.mac_update(v)
|> :crypto.mac_final()

Expand All @@ -120,8 +154,4 @@ defmodule Tezex.Crypto.HMACDRBG do
end
end)
end

defp hmac(k) do
:crypto.mac_init(:hmac, :sha256, k)
end
end
21 changes: 18 additions & 3 deletions lib/micheline.ex
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ defmodule Tezex.Micheline do
iex> Tezex.Micheline.read_packed("0200e1d22c")
%{int: -365_729}
"""
@spec read_packed(binary) :: map | list(map)
@spec read_packed(binary()) :: map() | list(map())
def read_packed(<<_::binary-size(2), rest::binary>>) do
{val, _consumed} = hex_to_micheline(rest)
val
Expand All @@ -47,7 +47,7 @@ defmodule Tezex.Micheline do
iex> Tezex.Micheline.hex_to_micheline("00e1d22c")
{%{int: -365729}, 8}
"""
@spec hex_to_micheline(binary) :: {map | list(map), pos_integer}
@spec hex_to_micheline(binary()) :: {map() | list(map()), pos_integer()}
# literal int or nat
def hex_to_micheline("00" <> rest) do
{result, consumed} = Zarith.consume(rest)
Expand Down Expand Up @@ -210,6 +210,21 @@ defmodule Tezex.Micheline do
{text, length + 8}
end

@doc """
Encode a string to its Micheline representation:
* `"05"` to indicate that it is a Micheline expression
* `"01"` to indicate that it is a Micheline string
* byte size encoded on 4 bytes
* hex representation of the string
"""
@spec string_to_micheline_hex(binary()) :: binary()
def string_to_micheline_hex(bytes) do
hex_bytes = :binary.encode_hex(bytes)
padded_bytes_size = String.pad_leading("#{trunc(byte_size(hex_bytes) / 2)}", 8, "0")

"0501" <> padded_bytes_size <> hex_bytes
end

@doc """
Decode optimized Micheline representation of an address value
Expand All @@ -219,7 +234,7 @@ defmodule Tezex.Micheline do
iex> Tezex.Micheline.decode_optimized_address("10007fc95c97fd368cd9055610ee79e64ff9e0b5285c")
{:error, :invalid}
"""
@spec decode_optimized_address(<<_::_*16>>) :: {:error, :invalid} | {:ok, nonempty_binary()}
@spec decode_optimized_address(binary()) :: {:error, :invalid} | {:ok, nonempty_binary()}
def decode_optimized_address(hex) do
{prefix, pkh} =
case :binary.decode_hex(hex) do
Expand Down
28 changes: 14 additions & 14 deletions mix.lock
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
%{
"base_58_check": {:hex, :base_58_check, "1.0.0", "bbe527bb00ffd9c5b03abdf970aefd9ca36bd3967dcd75efa8a3c2ed1dcec154", [:mix], [], "hexpm", "06b538938722a04680210e889edaf96f4c967251218fbfbafa19ec2702ba489c"},
"blake2": {:hex, :blake2, "1.0.4", "8263c69a191142922bc2510f1ffc0de0ae96e8c3bd5e2ad3fac7e87aed94c8b1", [:mix], [], "hexpm", "e9f4120d163ba14d86304195e50745fa18483e6ad2be94c864ae449bbdd6a189"},
"certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"},
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"},
"earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"},
"certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"},
"dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"},
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"},
"ex_doc": {:hex, :ex_doc, "0.31.2", "8b06d0a5ac69e1a54df35519c951f1f44a7b7ca9a5bb7a260cd8a174d6322ece", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "317346c14febaba9ca40fd97b5b5919f7751fb85d399cc8e7e8872049f37e0af"},
"ex_unit_notifier": {:hex, :ex_unit_notifier, "1.3.0", "1d82aa6d2fb44e6f0f219142661a46e13dcba833e150e1395190d2e0fb721990", [:mix], [], "hexpm", "55fffd6062e8d962fc44e8b06fa30a87dc7251ee2a69f520781a3bb29858c365"},
"excoveralls": {:hex, :excoveralls, "0.15.3", "54bb54043e1cf5fe431eb3db36b25e8fd62cf3976666bafe491e3fa5e29eba47", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f8eb5d8134d84c327685f7bb8f1db4147f1363c3c9533928234e496e3070114e"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~> 2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
"file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"},
"hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"},
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
"jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
"makeup": {:hex, :makeup, "1.1.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
"mix_test_watch": {:hex, :mix_test_watch, "1.1.0", "330bb91c8ed271fe408c42d07e0773340a7938d8a0d281d57a14243eae9dc8c3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "52b6b1c476cbb70fd899ca5394506482f12e5f6b0d6acff9df95c7f1e0812ec3"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
"mix_test_watch": {:hex, :mix_test_watch, "1.2.0", "1f9acd9e1104f62f280e30fc2243ae5e6d8ddc2f7f4dc9bceb454b9a41c82b42", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "278dc955c20b3fb9a3168b5c2493c2e5cffad133548d307e0a50c7f2cfbf34f6"},
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
}
2 changes: 0 additions & 2 deletions test/crypto/hmacdrbg_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ defmodule Tezex.Crypto.HMACDRBG.Test do
describe "NIST" do
@fixtures Jason.decode!(File.read!("./test/fixtures/hmac-drbg-nist.json"))

# fixtures = [List.first(@fixtures)]

for t <- @fixtures do
test "vector #{t["name"]}" do
entropy = :binary.decode_hex(unquote(t["entropy"]))
Expand Down
3 changes: 2 additions & 1 deletion test/crypto_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ defmodule Tezex.Crypto.Test do
doctest Tezex.Crypto

alias Tezex.Crypto
alias Tezex.Micheline

describe "check_signature/4" do
@msg_sig_pubkey [
Expand Down Expand Up @@ -357,7 +358,7 @@ defmodule Tezex.Crypto.Test do

defp sign_and_verify(encoded_private_key, pubkey) do
msg = "aaøfË"
msg = Crypto.encode_message(msg)
msg = Micheline.string_to_micheline_hex(msg)

signature = Crypto.sign_message(encoded_private_key, msg)
Crypto.verify_signature(signature, msg, pubkey)
Expand Down
Loading

0 comments on commit 9c87a35

Please sign in to comment.