Skip to content

Instantly share code, notes, and snippets.

View KamilLelonek's full-sized avatar
🏋️‍♂️
Do you even lift?

Kamil Lelonek KamilLelonek

🏋️‍♂️
Do you even lift?
View GitHub Profile
entropy_bytes
|> bit_size()
|> div(32)
binary
|> :binary.bin_to_list()
|> Enum.map(fn byte ->
byte
|> Integer.to_string(2)
|> String.pad_leading(8, "0")
end)
|> Enum.join()
256
|> div(8)
|> :crypto.strong_rand_bytes()
entropy_length
|> div(32)
|> Kernel.+(entropy_length)
|> div(11)
defp duplicate_zeros(count) do
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
|> String.first()
|> String.duplicate(count)
en
defp leading_zeros(input) do
input
|> :binary.bin_to_list()
|> Enum.find_index(&(&1 != 0))
end
defp prepend_zeros(acc, input) do
input
|> encode_zeros()
|> apend(acc)
end
defp encode_zeros(input) do
input
|> leading_zeros()
|> duplicate_zeros()
def call(input, acc) do
input
|> div(58)
|> call(extended_hash(input, acc))
end
defp extended_hash(input, acc) do
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
|> String.at(rem(input, 58))
|> apend(acc)
def call(input, acc \\ "")
def call(0, acc), do: acc
def call(input, acc)
when is_binary(input) do
input
|> :binary.decode_unsigned()
|> call(acc)
|> prepend_zeros(input)
end
versioned_hash <> checksum