From 7094247437b574e25ea66273e6ca2880d82183ba Mon Sep 17 00:00:00 2001 From: hexanova <146671001+hexanova@users.noreply.github.com> Date: Thu, 1 Feb 2024 19:39:45 -0800 Subject: [PATCH 1/4] added cid.ex & recordconverter.ex - cid.ex is pulled from ex-cid which has been abandoned. we can modify it to our needs - started the record -> JSON converter logic - upgraded ex_multihash --- lib/hexpds/cid.ex | 759 ++++++++++++++++++++++++++++++++++ lib/hexpds/recordconverter.ex | 64 +++ mix.exs | 1 + mix.lock | 2 +- 4 files changed, 825 insertions(+), 1 deletion(-) create mode 100644 lib/hexpds/cid.ex create mode 100644 lib/hexpds/recordconverter.ex diff --git a/lib/hexpds/cid.ex b/lib/hexpds/cid.ex new file mode 100644 index 0000000..4925fcb --- /dev/null +++ b/lib/hexpds/cid.ex @@ -0,0 +1,759 @@ +defmodule Hexpds.CID do + @moduledoc """ + CID - self-describing content-addressed identifiers for distributed systems. + + ## Overview + + Elixir version of [CID](https://github.com/ipld/cid). CID is currently being used as part of [IPFS](https://ipfs.io/) for identifying distributed content. + + > Self-describing content-addressed identifiers for distributed systems + + This module represents a CID as a CID struct, consisting of the following fields: + + * `multihash` - An encoded multihash, using `Multihash.encode/3` for example. + * `version` - The CID version + * `codec` - The Multicodec to use as part of CID + + The following are building blocks of this CID implementation (see Protocol Description): + + * `Multihash` - hashing content with a tagged identifier according to popular hashing algorithms, ex: `:sha2_256` + * `Multicodec` - tagging content using a given `codec` + * `Multibase` - tagged content encoding using a given `encoding_id` + + A CID struct is created by: + + * Multihashing some data according to a hashing algorithm such as `:sha2_256` + * Selecting a `codec` name from `Multicodec` to describe the content + * Selecting a `CID` version, usually the default (CID v1), but other versions may be selected less than the current version (ex: CID v0). + + ## Features + + The following functionality is provided in this module: + + * Encode/Decode CIDs + * Encode a CID to a string + * Encode a CID buffer to later Multibase encode + * Decode a CID string to a CID and optionally, the Multibase encoding used + * Create human readable CIDs for debugging and checking + * Error handling and exception versions of most major API functions + * Current support for all Multibase and Multicodec encodings + * Elixir struct for CID data + * Easy comparisons, construction, validation, etc. + * Send over the wire + * Consistent API + * Support for CID v0 and CID v1 + + ## How does it work? - Protocol Description + + CID is a self-describing content-addressed identifier. It uses cryptographic hashes to achieve content addressing. It uses several [multiformats](https://github.com/multiformats/multiformats) to achieve flexible self-description, namely [multihash](https://github.com/multiformats/multihash) for hashes, [multicodec](https://github.com/multiformats/multicodec) for data content types, and [multibase](https://github.com/multiformats/multibase) to encode the CID itself into strings. + + Current version: CIDv1 + + A CIDv1 has four parts: + + ```sh + ::= + # or, expanded: + ::= + ``` + Where + + - `` is a [multibase](https://github.com/multiformats/multibase) code (1 or 2 bytes), to ease encoding CIDs into various bases. + - `` is a [varint](https://github.com/multiformats/unsigned-varint) representing the version of CID, here for upgradability purposes. + - `` is a [multicodec](https://github.com/multiformats/multicodec) code representing the content type or format of the data being addressed. + - `` is a [multihash](https://github.com/multiformats/multihash) value, representing the cryptographic hash of the content being addressed. Multihash enables CIDs to use many different cryptographic hash function, for upgradability and protocol agility purposes. + + + ## Human Readable CIDs + + It is advantageous to have a human readable description of a CID, solely for the purposes of debugging and explanation. We can easily transform a CID to a "Human Readable CID" as follows: + + ``` + ::= "-" "-" "-" + ``` + Where each sub-component is represented with its own human-readable form: + + - `` is a human-readable multibase code (eg `base58btc`) + - `` is the string `cidv#` (eg `cidv1` or `cidv2`) + - `` is a human-readable multicodec code (eg `cbor`) + - `` is a human-readable multihash (eg `sha2-256-256-abcdef0123456789...`) + + This module provides a human readable CID function via 'humanize/2'. + + ## Versions + + There are currently 2 active versions of CID, v0 and v1, each with different encoding and decoding algorithms. A CID v0 and CID v1 are not equal. + + This module intentionally avoids assumptions about future versions as a version change may necessitate dramatic encoding and decoding changes. As such, unknown versions will return an exception or error. + + ## General Usage + + Given a CID struct, it can be encoded by selecting an `encoding_id` from `Multibase`. For CID v0, only `:base58_btc` may be used. For CID v1, any base supported by Multibase is valid, for example `:base32_z`. Encoding a struct will produce a binary - a CID string representation. If you need to see the bytes, the string is just an Elixir binary and can be handled accordingly. + + Decoding a CID string is straight forward using `decode/1`, `decode!/1`, `decode_cid/1` or `decode_cid!/1`. Decoding only requires a CID string because all decode information is embedded. + + Inspecting a CID string for debugging or other purposes can be done by using `humanize/2`. It takes a custom separator to allow you to format the pieces to your liking. Decoding a CID back to a struct also is still very legible. `decode/1` offers additional information - the `Multibase` `encoding_id` that was used to encode the CID, while `decode_cid!/1` is just the bare CID struct. + + """ + + alias __MODULE__, as: CID + + @enforce_keys [:version, :codec, :multihash] + + defstruct [:version, :codec, :multihash] + + @typedoc """ + An encoded CID string. + + For CID v1: + + `` + + For CID v0: + + `` + + """ + @type cid_string() :: String.t() + + @typedoc """ + A Multihash encoded binary. + """ + @type multihash_binary() :: binary() + @type cid_version() :: 1 | 0 + + @type t :: %__MODULE__{ + version: cid_version(), + codec: Multicodec.multi_codec(), + multihash: multihash_binary(), + } + + @current_version 1 + @v0_codec "dag-pb" + @v0_encoding_id :base58_btc + + # bugs encountering Multihash + with + @dialyzer {:no_match, [humanize: 2, do_cid: 3]} + + @doc """ + Creates a new CID. + + An error is returned if the provided parameters are invalid. + + * `codec` must correspond to a valid `Multicodec` codec name. + * version 0 CIDs are checked for a valid `multihash` to avoid usage issues. + * version 0 CIDs can only be created by specifying `dag-pb` (default) as the `codec`. + + ## Examples + + iex> CID.cid(<<17, 20, 86, 176, 173, 81, 245, 2, 26, 0, 52, 203, 228, 68, 33, 54, 171, 86, 201, 151, 184, 254>>, "dag-pb", 1) + {:ok, %CID{ + codec: "dag-pb", + multihash: <<17, 20, 86, 176, 173, 81, 245, 2, 26, 0, 52, 203, 228, 68, 33, + 54, 171, 86, 201, 151, 184, 254>>, + version: 1 + }} + + iex> CID.cid(<<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, 175, 31, 65, 149>>, "dag-pb", 0) + {:ok, %CID{ + codec: "dag-pb", + multihash: <<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, + 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, + 175, 31, 65, 149>>, + version: 0 + }} + + iex> CID.cid("charcoal grills best", "dag-pb", 0) + {:error, "Invalid hash code"} + + iex> CID.cid(<<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, 175, 31, 65, 149>>, "dag-json", 0) + {:error, :invalid_multicodec} + + iex> CID.cid(<<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, 175, 31, 65, 149>>, "dag-json", 1) + {:ok, %CID{ + codec: "dag-json", + multihash: <<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, + 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, + 175, 31, 65, 149>>, + version: 1 + }} + + """ + @spec cid(multihash_binary(), Multicodec.multi_codec(), cid_version()) :: {:ok, t()} | {:error, term()} + def cid(multihash, codec \\ @v0_codec, version \\ @current_version) + def cid(multihash, codec, version) + when is_binary(multihash) + and is_binary(codec) + and is_integer(version) and version <= @current_version do + if Multicodec.codec?(codec) do + do_cid(multihash, codec, version) + else + {:error, :invalid_multicodec} + end + end + + def cid(_multihash, _codec, _version) do + {:error, :unsupported_version} + end + + @doc """ + Creates a new CID. + + An exception is raised if the provided parameters are invalid. + + * `codec` must correspond to a valid `Multicodec` codec name. + * version 0 CIDs are checked for a valid `multihash` to avoid usage issues. + * version 0 CIDs can only be created by specifying `dag-pb` (default) as the `codec`. + + ## Examples + + iex> CID.cid!(<<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, 175, 31, 65, 149>>, "raw") + %CID{ + codec: "raw", + multihash: <<18, 32, 149, 184, 131, 27, 7, 230, 246, 113, 26, 45, 235, 92, + 130, 235, 240, 88, 99, 208, 173, 179, 49, 200, 107, 43, 173, 200, 167, 153, + 175, 31, 65, 149>>, + version: 1 + } + + iex> CID.cid!(<<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, "git-raw", 1) + %CID{ + codec: "git-raw", + multihash: <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, + 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, + 157, 199, 161>>, + version: 1 + } + + iex> CID.cid!(<<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, "dag-pb", 0) + %CID{ + codec: "dag-pb", + multihash: <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, + 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, + 157, 199, 161>>, + version: 0 + } + + """ + @spec cid!(multihash_binary(), Multicodec.multi_codec(), cid_version()) :: t() + def cid!(multihash, codec \\ @v0_codec, version \\ @current_version) do + case cid(multihash, codec, version) do + {:ok, cid} -> cid + {:error, reason} -> raise ArgumentError, "invalid cid data - #{inspect reason}" + end + end + + @spec do_cid(multihash_binary(), Multicodec.multi_codec(), cid_version()) :: {:ok, t()} | {:error, term()} + defp do_cid(multihash, codec, version) + defp do_cid(multihash, @v0_codec, 0) do + case Multihash.decode(multihash) do + # ensure this hash is valid for CID v0 to avoid later complications when decoding + {:ok, %Multihash{length: length}} when length == 32 -> + {:ok, %CID{version: 0, codec: @v0_codec, multihash: multihash}} + {:ok, %Multihash{}} -> + {:error, :invalid_multihash} + {:error, _reason} = err -> + err + end + end + + defp do_cid(multihash, codec, 1) do + {:ok, %CID{version: 1, codec: codec, multihash: multihash}} + end + + defp do_cid(_multihash, _codec, 0) do + {:error, :invalid_multicodec} + end + + defp do_cid(_multihash, _codec, _version) do + {:error, :unsupported_version} + end + + @doc """ + Encodes a CID as a Multibase encoded string. + + Returns an error if the CID is invalid and cannot be encoded. + + ## Examples + + iex> CID.encode(%CID{codec: "dag-pb", multihash: <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, version: 0}) + {:ok, "Qme2Gc15TFi3XEbU87WT9zXDfAYPJQku8vpUkjFaoZsttQ"} + + iex> CID.encode(%CID{codec: "dag-json", multihash: <<17, 20, 196, 25, 117, 209, 218, 225, 204, 105, 177, 106, 216, 137, 43, 140, 119, 22, 78, 132, 202, 57>>, version: 1}, :base64_url) + {:ok, "uAakCERTEGXXR2uHMabFq2IkrjHcWToTKOQ"} + + iex> CID.encode(%CID{codec: "dag-json", multihash: <<17, 20, 196, 25, 117, 209, 218, 225, 204, 105, 177, 106, 216, 137, 43, 140, 119, 22, 78, 132, 202, 57>>, version: 1}, :does_not_exist_codec) + {:error, :unsupported_encoding} + + """ + @spec encode(t(), Multibase.encoding_id()) :: {:ok, cid_string()} | {:error, term()} + def encode(cid, encoding_id \\ @v0_encoding_id) when is_map(cid) and is_atom(encoding_id) do + do_encode(cid, encoding_id) + end + + @doc """ + Encodes a CID as a Multibase encoded string. + + Raises an exception if the CID is invalid and cannot be encoded. + + ## Examples + + iex> CID.encode!(%CID{codec: "dag-pb", multihash: <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, version: 0}) + "Qme2Gc15TFi3XEbU87WT9zXDfAYPJQku8vpUkjFaoZsttQ" + + iex> CID.encode!( %CID{codec: "dag-json", multihash: <<17, 20, 196, 25, 117, 209, 218, 225, 204, 105, 177, 106, 216, 137, 43, 140, 119, 22, 78, 132, 202, 57>>, version: 1}, :base64_url) + "uAakCERTEGXXR2uHMabFq2IkrjHcWToTKOQ" + + iex> CID.cid!( <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, "dag-pb", 0) |> CID.encode!(:base58_btc) + "Qme2Gc15TFi3XEbU87WT9zXDfAYPJQku8vpUkjFaoZsttQ" + + """ + @spec encode!(t(), Multibase.encoding_id()) :: cid_string() + def encode!(cid, encoding_id \\ @v0_encoding_id) do + case encode(cid, encoding_id) do + {:ok, cid_string} -> + cid_string + {:error, reason} -> + raise ArgumentError, "unable to encode cid - #{inspect reason}" + end + end + + defp do_encode(%{version: 0} = cid, @v0_encoding_id) do + do_encode_buffer(cid) + end + + defp do_encode(%{version: 0}, _encoding_id) do + #"CID version 0 may only be encoded with :base58_btc. It does not take a multibase prefix." + {:error, :invalid_encoding} + end + + defp do_encode(cid, encoding_id) do + with {:ok, encoded_buffer} <- do_encode_buffer(cid) do + Multibase.encode(encoded_buffer, encoding_id) + end + end + + @doc """ + Encodes a CID as a raw buffer to be encoded with Multibase. + + Raises an error if the CID is invalid and cannot be encoded. + + ## Examples + + iex> CID.cid!( <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, "dag-pb", 1) |> CID.encode_buffer() + {:ok, + <<1, 112, 18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, + 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, + 199, 161>>} + + iex> CID.cid!( <<18, 32, 233, 5, 138, 177, 152, 246, 144, 143, 112, 33, 17, 176, 192, 251, 91, 54, 249, 157, 0, 85, 69, 33, 136, 108, 64, 226, 137, 27, 52, 157, 199, 161>>, "dag-pb", 0) |> CID.encode_buffer() + {:ok, "Qme2Gc15TFi3XEbU87WT9zXDfAYPJQku8vpUkjFaoZsttQ"} + + """ + @spec encode_buffer(t()) :: {:ok, binary()} | {:error, term()} + def encode_buffer(cid) when is_map(cid) do + do_encode_buffer(cid) + end + + @doc """ + Encodes a CID as a raw buffer to be encoded with Multibase. + + Raises an error if the CID is invalid and cannot be encoded. + + ## Examples + + iex> CID.cid!( <<18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, 63, 26, 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, 208, 70, 54, 225>>, "cbor", 1) |> CID.encode_buffer!() + <<1, 81, 18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, 63, 26, + 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, 208, 70, 54, + 225>> + + iex> CID.cid!( <<18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, 63, 26, 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, 208, 70, 54, 225>>, "dag-pb", 1) |> CID.encode_buffer!() + <<1, 112, 18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, 63, 26, + 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, 208, 70, 54, + 225>> + + """ + def encode_buffer!(cid) do + case encode_buffer(cid) do + {:ok, encoded_buffer} -> + encoded_buffer + {:error, reason} -> + raise ArgumentError, "unable to encode the given cid - #{inspect reason}" + end + end + + defp do_encode_buffer(%{version: 0, codec: @v0_codec, multihash: multihash}) do + with encoded_buffer when is_binary(encoded_buffer) <- B58.encode58(multihash) do + {:ok, encoded_buffer} + else + _ -> {:error, "unable to encode v0 buffer."} + end + end + + defp do_encode_buffer(%{version: 0}) do + {:error, :invalid_multicodec} + end + + defp do_encode_buffer(%{version: version, codec: codec, multihash: multihash}) when version <= @current_version do + with {:ok, encoded_multihash} <- Multicodec.encode(multihash, codec), + encoded_version = Varint.LEB128.encode(version) do + {:ok, <>} + else + {:error, _reason} = err -> err + _ -> {:error, "unable to encode buffer."} + end + end + + defp do_encode_buffer(_cid) do + {:error, :unsupported_version} + end + + @doc """ + Creates a CID by decoding a CID encoded as a string. + + Returns an error if the encoded CID string is invalid. + + ## Examples + + iex> CID.decode_cid("zdj7WZUkfydsNtKVZrSMzSuK6oVUj4CqpBN69q8ZRbUBdQUnC") + {:ok, %CID{ + codec: "dag-pb", + multihash: <<18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, + 63, 26, 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, + 208, 70, 54, 225>>, + version: 1 + }} + + iex> CID.decode_cid("QmSPWJYa1uQicrYWdFVHSixvrWrm8GmEDqRbtdCoNBqacG") + {:ok, %CID{ + codec: "dag-pb", + multihash: <<18, 32, 60, 41, 252, 52, 100, 55, 122, 40, 255, 226, 167, 113, + 63, 26, 8, 28, 235, 246, 23, 248, 225, 29, 205, 144, 243, 180, 109, 246, + 208, 70, 54, 225>>, + version: 0 + }} + + iex> CID.decode_cid("QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR") + {:ok, %CID{ + codec: "dag-pb", + multihash: <<18, 32, 195, 196, 115, 62, 200, 175, 253, 6, 207, 158, 159, 245, + 15, 252, 107, 205, 46, 200, 90, 97, 112, 0, 75, 183, 9, 102, 156, 49, 222, + 148, 57, 26>>, + version: 0 + }} + + """ + @spec decode_cid(cid_string()) :: {:ok, t()} | {:error, term()} + def decode_cid(cid_string) when is_binary(cid_string) do + case do_decode(cid_string) do + {:ok, {cid, _encoding_id}} -> + {:ok, cid} + {:error, _reason} = err -> + err + end + end + + @doc """ + Creates a CID by decoding a CID encoded as a string. + + Raises an exception if the encoded CID string is invalid. + + ## Examples + + iex> CID.decode_cid!("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") + %CID{ + codec: "dag-pb", + multihash: <<18, 32, 195, 196, 115, 62, 200, 175, 253, 6, 207, 158, 159, 245, + 15, 252, 107, 205, 46, 200, 90, 97, 112, 0, 75, 183, 9, 102, 156, 49, 222, + 148, 57, 26>>, + version: 1 + } + + iex> CID.decode_cid!("zb2rhk6GMPQF3hfzwXTaNYFLKomMeC6UXdUt6jZKPpeVirLtV") + %CID{ + codec: "raw", + multihash: <<18, 32, 199, 208, 20, 137, 8, 8, 88, 197, 0, 6, 88, 54, 198, 88, + 248, 71, 166, 202, 103, 196, 134, 70, 25, 33, 43, 228, 248, 32, 14, 75, 186, + 206>>, + version: 1 + } + + iex> CID.decode_cid!("bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy") + %CID{ + codec: "raw", + multihash: <<18, 32, 199, 208, 20, 137, 8, 8, 88, 197, 0, 6, 88, 54, 198, 88, + 248, 71, 166, 202, 103, 196, 134, 70, 25, 33, 43, 228, 248, 32, 14, 75, 186, + 206>>, + version: 1 + } + + """ + @spec decode_cid!(cid_string()) :: t() + def decode_cid!(cid_string) do + case decode_cid(cid_string) do + {:ok, cid} -> cid + {:error, reason} -> raise ArgumentError, "invalid CID string - #{inspect reason}" + end + end + + @doc """ + Creates a CID by decoding a CID encoded as a string, and returns a tuple of the CID and the `encoding_id` used to encode the string with Multibase. + + Returns an error if the encoded CID string is invalid. + + ## Examples + + iex> CID.decode("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") + {:ok, + {%CID{ + codec: "dag-pb", + multihash: <<18, 32, 195, 196, 115, 62, 200, 175, 253, 6, 207, 158, 159, + 245, 15, 252, 107, 205, 46, 200, 90, 97, 112, 0, 75, 183, 9, 102, 156, 49, + 222, 148, 57, 26>>, + version: 1 + }, :base32_lower}} + + iex> CID.decode("QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR") + {:ok, + {%CID{ + codec: "dag-pb", + multihash: <<18, 32, 195, 196, 115, 62, 200, 175, 253, 6, 207, 158, 159, + 245, 15, 252, 107, 205, 46, 200, 90, 97, 112, 0, 75, 183, 9, 102, 156, 49, + 222, 148, 57, 26>>, + version: 0 + }, :base58_btc}} + + iex> CID.decode("FREEPRETEZELSbafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") + {:error, "unable to decode CID string"} + + """ + @spec decode(cid_string()) :: {:ok, {t(), Multibase.encoding_id()}} | {:error, term()} + def decode(cid_string) when is_binary(cid_string) do + do_decode(cid_string) + end + + @doc """ + Creates a CID by decoding a CID encoded as a string, and returns a tuple of the CID and the `encoding_id` used to encode the string with Multibase. + + Raises an exception if the encoded CID string is invalid. + + ## Examples + + iex> CID.decode!("zb2rhk6GMPQF3hfzwXTaNYFLKomMeC6UXdUt6jZKPpeVirLtV") + {%CID{ + codec: "raw", + multihash: <<18, 32, 199, 208, 20, 137, 8, 8, 88, 197, 0, 6, 88, 54, 198, 88, + 248, 71, 166, 202, 103, 196, 134, 70, 25, 33, 43, 228, 248, 32, 14, 75, + 186, 206>>, + version: 1 + }, :base58_btc} + + iex> CID.decode!("f015512209d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63") + {%CID{ + codec: "raw", + multihash: <<18, 32, 157, 132, 83, 80, 91, 220, 111, 38, 150, 120, 225, 107, + 62, 86, 194, 162, 148, 138, 65, 242, 199, 146, 97, 124, 201, 97, 30, 211, + 99, 201, 91, 99>>, + version: 1 + }, :base16_lower} + + iex> CID.decode!("QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n") + {%CID{ + codec: "dag-pb", + multihash: <<18, 32, 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, + 153, 111, 185, 36, 39, 174, 65, 228, 100, 155, 147, 76, 164, 149, 153, 27, + 120, 82, 184, 85>>, + version: 0 + }, :base58_btc} + + """ + @spec decode!(cid_string()) :: {t(), Multibase.encoding_id()} + def decode!(cid_string) do + case decode(cid_string) do + {:ok, cid_encoding} -> cid_encoding + {:error, reason} -> raise ArgumentError, "invalid CID string - #{inspect reason}" + end + end + + @spec do_decode(cid_string()) :: {:ok, {t(), Multibase.encoding_id()}} | {:error, term()} + defp do_decode(data) + # v0 decoding + defp do_decode(<<"Qm", _rest::binary>> = data) when byte_size(data) == 46 do + with {:ok, cid_bin} <- B58.decode58(data), + {:ok, cid} <- decode_cid_binary(cid_bin) do + {:ok, {cid, @v0_encoding_id}} + end + end + + # possible v1 decoding + defp do_decode(data) do + with {:ok, {decoded_bin, multibase_codec}} <- Multibase.codec_decode(data), + #TODO: refactor - If the first decoded byte is 0x12, return an error. CIDv0 CIDs may not be multibase encoded and there will be no CIDv18 (0x12 = 18) to prevent ambiguity with decoded CIDv0s + false <- match?(<<0x12, _::binary>>, decoded_bin), + {:ok, cid} <- decode_cid_binary(decoded_bin) + do + {:ok, {cid, multibase_codec}} + else + {:error, _reason} = err -> err + _ -> {:error, "unable to decode CID string"} + end + end + + @spec decode_cid_binary(binary()) :: {:ok, t()} | {:error, term()} + defp decode_cid_binary(cid_bin) + defp decode_cid_binary(cid_bin) when byte_size(cid_bin) == 34 do + decode_cid_version(cid_bin, 0) + end + + defp decode_cid_binary(cid_bin) do + {version, payload} = Varint.LEB128.decode(cid_bin) + decode_cid_version(payload, version) + end + + @spec decode_cid_version(binary(), non_neg_integer()) :: {:ok, t()} | {:error, term()} + defp decode_cid_version(cid_payload, version) + defp decode_cid_version(cid_payload, 0) do + {:ok, %CID{ multihash: cid_payload, codec: @v0_codec, version: 0,}} + end + + defp decode_cid_version(cid_payload, 1) do + with {:ok, {multihash, codec}} <- Multicodec.codec_decode(cid_payload) do + {:ok, %CID{multihash: multihash, codec: codec, version: 1,}} + end + end + + defp decode_cid_version(_cid_payload, version) when version > @current_version do + #raise ArgumentError, "CID version #{inspect version} is reserved and not yet supported." + {:error, :unsupported_version} + end + + defp decode_cid_version(_cid_payload, _version) do + #raise ArgumentError, "CID is malformed" + {:error, :invalid_cid} + end + + @doc """ + Converts a CID to a given destination version. + + Returns an error if the conversion is not possible. Conversion to a v0 CID is only possible if the codec is `dag-pb`. + + ## Examples + + iex> CID.to_version(%CID{codec: "dag-pb", multihash: <<18, 32, 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, 153, 111, 185, 36, 39, 174, 65, 228, 100, 155, 147, 76, 164, 149, 153, 27, 120, 82, 184, 85>>, version: 0}, 1) + {:ok, + %CID{ + codec: "dag-pb", + multihash: <<18, 32, 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, + 153, 111, 185, 36, 39, 174, 65, 228, 100, 155, 147, 76, 164, 149, 153, 27, + 120, 82, 184, 85>>, + version: 1 + }} + + iex> CID.decode_cid!("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") |> CID.to_version(1) + {:ok, + %CID{ + codec: "dag-pb", + multihash: <<18, 32, 195, 196, 115, 62, 200, 175, 253, 6, 207, 158, 159, 245, + 15, 252, 107, 205, 46, 200, 90, 97, 112, 0, 75, 183, 9, 102, 156, 49, 222, + 148, 57, 26>>, + version: 1 + }} + + iex> CID.to_version(%CID{codec: "raw", multihash: <<18, 32, 157, 132, 83, 80, 91, 220, 111, 38, 150, 120, 225, 107, 62, 86, 194, 162, 148, 138, 65, 242, 199, 146, 97, 124, 201, 97, 30, 211, 99, 201, 91, 99>>, version: 1}, 0) + {:error, :unsupported_conversion} + + """ + @spec to_version(t(), cid_version()) :: t() + def to_version(cid, destination_version) when is_map(cid) and is_integer(destination_version) and destination_version <= @current_version do + convert_version(cid, destination_version) + end + + defp convert_version(%{version: version} = cid, destination_version) when version == destination_version do + {:ok, cid} + end + + defp convert_version(%{codec: codec}, 0) when codec != @v0_codec do + {:error, :unsupported_conversion} + end + + defp convert_version(cid, destination_version) do + {:ok, %{cid | version: destination_version}} + end + + @doc ~S""" + Returns a human readable CID + + ## Overview + + It is advantageous to have a human readable description of a CID, solely for the purposes of debugging and explanation. We can easily transform a CID to a "Human Readable CID" as follows: + + ``` + ::= "-" "-" "-" + ``` + Where each sub-component is represented with its own human-readable form: + + - `` is a human-readable multibase code (eg `base58btc`) + - `` is the string `cidv#` (eg `cidv1` or `cidv2`) + - `` is a human-readable multicodec code (eg `cbor`) + - `` is a human-readable multihash (eg `sha2-256-256-abcdef0123456789...`) + + ## Examples + + iex> CID.humanize("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") + {:ok, + "base32_lower - CIDv1 - dag-pb - sha2_256 - c3c4733ec8affd06cf9e9ff50ffc6bcd2ec85a6170004bb709669c31de94391a"} + + iex> CID.humanize("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", "-") + {:ok, + "base32_lower-CIDv1-dag-pb-sha2_256-c3c4733ec8affd06cf9e9ff50ffc6bcd2ec85a6170004bb709669c31de94391a"} + + iex> CID.humanize("f015512209d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63", "::") + {:ok, + "base16_lower::CIDv1::raw::sha2_256::9d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63"} + + iex> CID.humanize("super delicious rolls") + {:error, "unable to decode CID string"} + + """ + @spec humanize(cid_string(), String.t()) :: {:ok, String.t()} | {:error, term()} + def humanize(cid_string, separator \\ " - ") + when is_binary(cid_string) and is_binary(separator) do + with true <- String.printable?(separator), + {:ok, {%{multihash: multihash, codec: codec, version: version}, encoding_id}} <- do_decode(cid_string), + {:ok, %{digest: digest, name: hash_name}} <- Multihash.decode(multihash) do + hex_digest = Base.encode16(digest, case: :lower) + {:ok, [encoding_id, Enum.join(["CIDv", version]), codec, hash_name, hex_digest] |> Enum.join(separator)} + else + {:error, _reason} = err -> err + false -> {:error, "invalid separator."} + _ -> {:error, "unable to decode CID string"} + end + end + + @doc """ + Checks if a given CID string is a valid encoded CID. + + ## Examples + + iex> CID.cid?("uAakCERTEGXXR2uHMabFq2IkrjHcWToTKOQ") + true + + iex> CID.cid?("sweep the leg") + false + + iex> CID.cid?("f015512209d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63") + true + + iex> CID.cid?("$f015512209d8453505bdc6f269678e16b3e56c2a2948a41f2c792617cc9611ed363c95b63") + false + + """ + @spec cid?(cid_string()) :: boolean() + def cid?(cid_string) do + case decode_cid(cid_string) do + {:ok, _cid} -> true + _ -> false + end + end + +end diff --git a/lib/hexpds/recordconverter.ex b/lib/hexpds/recordconverter.ex new file mode 100644 index 0000000..a8712fe --- /dev/null +++ b/lib/hexpds/recordconverter.ex @@ -0,0 +1,64 @@ +defmodule RecordConverter do + alias Hexpds.CID, as: CID + + # Converts a record to a JSON-compatible format. + def record_to_json(record) do + cond do + is_list(record) -> + Enum.map(record, &record_to_json/1) + + is_map(record) -> + Enum.reduce(record, %{}, fn {k, v}, acc -> + Map.put(acc, k, record_to_json(v)) + end) + + # Assuming CID module exists with an encode function + record.__struct__ == CID -> + %{"$link" => CID.encode(record, "base32")} + + is_binary(record) -> + raise ArgumentError, "can't represent bytes as JSON" + + true -> + record + end + end + + # Enumerates CIDs within a record. + def enumerate_record_cids(record) do + cond do + is_list(record) -> + Enum.flat_map(record, &enumerate_record_cids/1) + + is_map(record) -> + Enum.flat_map(record, fn {_k, v} -> enumerate_record_cids(v) end) + + record.__struct__ == CID -> + [record] + + true -> + [] + end + end + + # Converts JSON data to a record format. + def json_to_record(data) do + cond do + is_list(data) -> + Enum.map(data, &json_to_record/1) + + is_map(data) -> + if Kernel.map_size(data) == 1 and Map.has_key?(data, "$link") do + # Assuming CID module exists with a decode function + CID.decode(data["$link"]) + else + Enum.reduce(data, %{}, fn {k, v}, acc -> + Map.put(acc, k, json_to_record(v)) + end) + end + + true -> + data + end + end +end diff --git a/mix.exs b/mix.exs index fdc7cda..ade7a8b 100644 --- a/mix.exs +++ b/mix.exs @@ -29,6 +29,7 @@ defmodule Hexpds.MixProject do {:ex_doc, "~> 0.28.0", only: :dev, runtime: false}, {:ex_secp256k1, "~> 0.7.2"}, {:multibase, "~> 0.0.1"}, + {:ex_multihash, "~> 2.0.0"}, ] end end diff --git a/mix.lock b/mix.lock index 3d13894..eae63dd 100644 --- a/mix.lock +++ b/mix.lock @@ -7,7 +7,7 @@ "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, "ex_doc": {:hex, :ex_doc, "0.28.6", "2bbd7a143d3014fc26de9056793e97600ae8978af2ced82c2575f130b7c0d7d7", [:mix], [{:earmark_parser, "~> 1.4.19", [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", "bca1441614654710ba37a0e173079273d619f9160cbcc8cd04e6bd59f1ad0e29"}, - "ex_multihash": {:hex, :ex_multihash, "1.0.0", "1833995f1871ad006a2e060b9dec0fc172e0e30796031f0a4cf11fcb5e626124", [:mix], [{:monad, "~> 1.0.4", [hex: :monad, repo: "hexpm", optional: false]}], "hexpm", "d31d4794bfbf7ea8a06e095fb8753466cd8532ad4f4c0c6ea60077c77818fbaa"}, + "ex_multihash": {:hex, :ex_multihash, "2.0.0", "7fb36f842a2ec1c6bbba550f28fcd16d3c62981781b9466c9c1975c43d7db43c", [:mix], [], "hexpm", "66a08a86a1ba00d95736c595d7975696e5691308cdf7770c50b0f84a2a1172b0"}, "ex_secp256k1": {:hex, :ex_secp256k1, "0.7.2", "33398c172813b90fab9ab75c12b98d16cfab472c6dcbde832b13c45ce1c01947", [:mix], [{:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.6", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "f3b1bf56e6992e28b9d86e3bf741a4aca3e641052eb47d13ae4f5f4d4944bdaf"}, "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"}, "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"}, From 43134faf395451ef7aa75f86c2e763999e036e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C9=B4=E1=B4=8F=E1=B4=A0=E1=B4=80?= <146671001+hexanova@users.noreply.github.com> Date: Fri, 2 Feb 2024 18:41:00 +0000 Subject: [PATCH 2/4] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 23e8013..1384234 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 ɴᴏᴠᴀ +Copyright (c) 2024 @hexanova Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From d21dd8cff803602b09e7e259e25f487a512244b8 Mon Sep 17 00:00:00 2001 From: hexanova <146671001+hexanova@users.noreply.github.com> Date: Sat, 3 Feb 2024 18:44:02 -0800 Subject: [PATCH 3/4] Rustler implementation --- lib/hexpds/didgenerator.ex | 4 ++-- lib/hexpds/k256.ex | 4 ++++ mix.exs | 2 ++ mix.lock | 2 ++ native/hexpds_k256/.cargo/config.toml | 5 +++++ native/hexpds_k256/.gitignore | 14 ++++++++++++++ native/hexpds_k256/Cargo.toml | 17 +++++++++++++++++ native/hexpds_k256/README.md | 20 ++++++++++++++++++++ native/hexpds_k256/src/lib.rs | 18 ++++++++++++++++++ priv/native/libhexpds_k256.so | Bin 0 -> 428904 bytes 10 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 lib/hexpds/k256.ex create mode 100644 native/hexpds_k256/.cargo/config.toml create mode 100644 native/hexpds_k256/.gitignore create mode 100644 native/hexpds_k256/Cargo.toml create mode 100644 native/hexpds_k256/README.md create mode 100644 native/hexpds_k256/src/lib.rs create mode 100755 priv/native/libhexpds_k256.so diff --git a/lib/hexpds/didgenerator.ex b/lib/hexpds/didgenerator.ex index 1bf22c7..ba57fb5 100644 --- a/lib/hexpds/didgenerator.ex +++ b/lib/hexpds/didgenerator.ex @@ -1,13 +1,13 @@ defmodule Hexpds.DidGenerator do require Logger alias :crypto, as: Crypto - alias ExSecp256k1, as: Secp256k1 + alias Hexpds.K256, as: K256 def generate_private_key(), do: Crypto.strong_rand_bytes(32) @spec get_public_key(binary()) :: binary() | {:error, String.t()} def get_public_key(privkey) when is_binary(privkey) and byte_size(privkey) == 32 do - case(Secp256k1.create_public_key(privkey)) do + case(K256.create_public_key(privkey)) do {:ok, pubkey} -> pubkey _ -> {:error, "Invalid private key"} end diff --git a/lib/hexpds/k256.ex b/lib/hexpds/k256.ex new file mode 100644 index 0000000..8154cf6 --- /dev/null +++ b/lib/hexpds/k256.ex @@ -0,0 +1,4 @@ +defmodule Hexpds.K256 do + use Rustler, otp_app: :hexpds, crate: "hexpds_k256" + def create_public_key(private_key), do: :erlang.nif_error(:nif_not_loaded) +end diff --git a/mix.exs b/mix.exs index ade7a8b..d20da43 100644 --- a/mix.exs +++ b/mix.exs @@ -30,6 +30,8 @@ defmodule Hexpds.MixProject do {:ex_secp256k1, "~> 0.7.2"}, {:multibase, "~> 0.0.1"}, {:ex_multihash, "~> 2.0.0"}, + {:rustler, "~> 0.30.0"}, + {:toml, "~> 0.7.0"} ] end end diff --git a/mix.lock b/mix.lock index eae63dd..1719e09 100644 --- a/mix.lock +++ b/mix.lock @@ -22,8 +22,10 @@ "multibase": {:hex, :multibase, "0.0.1", "9243bebe6f7f0f9f873c770ddcddab285cc554a8dd2374b8de6b2add087eccbc", [:mix], [{:base1, "~> 0.1.0", [hex: :base1, repo: "hexpm", optional: false]}, {:base2, "~> 0.1.0", [hex: :base2, repo: "hexpm", optional: false]}, {:basefiftyeight, "~> 0.1.0", [hex: :basefiftyeight, repo: "hexpm", optional: false]}, {:zbase32, "~> 2.0.0", [hex: :zbase32, repo: "hexpm", optional: false]}], "hexpm", "6ea13a19e47da727c2def81b241ad10a39440c5705a4abed18e8310b46f45f51"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, + "rustler": {:hex, :rustler, "0.30.0", "cefc49922132b072853fa9b0ca4dc2ffcb452f68fb73b779042b02d545e097fb", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "9ef1abb6a7dda35c47cfc649e6a5a61663af6cf842a55814a554a84607dee389"}, "rustler_precompiled": {:hex, :rustler_precompiled, "0.7.1", "ecadf02cc59a0eccbaed6c1937303a5827fbcf60010c541595e6d3747d3d0f9f", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "b9e4657b99a1483ea31502e1d58c464bedebe9028808eda45c3a429af4550c66"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, + "toml": {:hex, :toml, "0.7.0", "fbcd773caa937d0c7a02c301a1feea25612720ac3fa1ccb8bfd9d30d822911de", [:mix], [], "hexpm", "0690246a2478c1defd100b0c9b89b4ea280a22be9a7b313a8a058a2408a2fa70"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "zbase32": {:hex, :zbase32, "2.0.0", "5a61d5ee8f39092d4a243da2a42b5b4339ef226d9b182603f63d5a3f16d192ee", [:mix], [], "hexpm", "798f81895658f9773e1dcf30ba3c118547f482502c5e1e19e72752f9a6f23e44"}, } diff --git a/native/hexpds_k256/.cargo/config.toml b/native/hexpds_k256/.cargo/config.toml new file mode 100644 index 0000000..20f03f3 --- /dev/null +++ b/native/hexpds_k256/.cargo/config.toml @@ -0,0 +1,5 @@ +[target.'cfg(target_os = "macos")'] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] diff --git a/native/hexpds_k256/.gitignore b/native/hexpds_k256/.gitignore new file mode 100644 index 0000000..6985cf1 --- /dev/null +++ b/native/hexpds_k256/.gitignore @@ -0,0 +1,14 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb diff --git a/native/hexpds_k256/Cargo.toml b/native/hexpds_k256/Cargo.toml new file mode 100644 index 0000000..70da1b1 --- /dev/null +++ b/native/hexpds_k256/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "hexpds_k256" +version = "0.1.0" +authors = [ "NetWatchInc" ] +edition = "2021" + +[lib] +name = "hexpds_k256" +path = "src/lib.rs" +crate-type = ["cdylib"] + +[dependencies] +atoms = "2.2.3" +elliptic-curve = "0.13.8" +hex = "0.4.3" +k256 = "0.10.1" +rustler = "0.30.0" diff --git a/native/hexpds_k256/README.md b/native/hexpds_k256/README.md new file mode 100644 index 0000000..a193f5c --- /dev/null +++ b/native/hexpds_k256/README.md @@ -0,0 +1,20 @@ +# NIF for Elixir.Hexpds.k256 + +## To build the NIF module: + +- Your NIF will now build along with your project. + +## To load the NIF: + +```elixir +defmodule Hexpds.K256 do + use Rustler, otp_app: :hexpds, crate: "hexpds_k256" + + # When your NIF is loaded, it will override this function. + def create_public_key(private_key), do: :erlang.nif_error(:nif_not_loaded) +end +``` + +## Examples + +[This](https://github.com/rusterlium/NifIo) is a complete example of a NIF written in Rust. diff --git a/native/hexpds_k256/src/lib.rs b/native/hexpds_k256/src/lib.rs new file mode 100644 index 0000000..8c18956 --- /dev/null +++ b/native/hexpds_k256/src/lib.rs @@ -0,0 +1,18 @@ +use rustler::{Encoder, Env, Term}; +// use k256:: ...; +// use hex; + +mod atoms { + rustler::atoms! { + ok, + error, + } +} + +#[rustler::nif] +fn create_public_key(env: Env, _private_key: String) -> Term { + let response = "TO-DO: Implement creation logic"; + (atoms::ok(), response).encode(env) +} +rustler::init!("Elixir.Hexpds.K256", [create_public_key]); + diff --git a/priv/native/libhexpds_k256.so b/priv/native/libhexpds_k256.so new file mode 100755 index 0000000000000000000000000000000000000000..fc75b824990d26396fb71b96010fdfe87f35de8e GIT binary patch literal 428904 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

2w>wB1p+o5Z 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�~ud^Q~Br^#z$ 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 literal 0 HcmV?d00001 From ea2ba6dcb87fc40d5a5b9d8778b876567ba6e035 Mon Sep 17 00:00:00 2001 From: hexanova <146671001+hexanova@users.noreply.github.com> Date: Sat, 3 Feb 2024 19:29:45 -0800 Subject: [PATCH 4/4] public key creation logic --- native/hexpds_k256/src/lib.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/native/hexpds_k256/src/lib.rs b/native/hexpds_k256/src/lib.rs index 8c18956..7259a8f 100644 --- a/native/hexpds_k256/src/lib.rs +++ b/native/hexpds_k256/src/lib.rs @@ -1,6 +1,6 @@ use rustler::{Encoder, Env, Term}; -// use k256:: ...; -// use hex; +use k256::{elliptic_curve::sec1::ToEncodedPoint, SecretKey}; +use hex; mod atoms { rustler::atoms! { @@ -10,9 +10,23 @@ mod atoms { } #[rustler::nif] -fn create_public_key(env: Env, _private_key: String) -> Term { - let response = "TO-DO: Implement creation logic"; - (atoms::ok(), response).encode(env) +fn create_public_key(env: Env, private_key: String) -> Term { + let private_key_bytes = match hex::decode(&private_key) { + Ok(bytes) => bytes, + Err(e) => return (atoms::error(), format!("Failed to decode hex string: {}", e)).encode(env), + }; + + let secret_key = match SecretKey::from_be_bytes(&private_key_bytes) { + Ok(key) => key, + Err(e) => return (atoms::error(), format!("Failed to create secret key: {}", e)).encode(env), + }; + + let public_key = secret_key.public_key(); + + let public_key_hex = hex::encode(public_key.to_encoded_point(false).as_bytes()); + + (atoms::ok(), public_key_hex).encode(env) } + rustler::init!("Elixir.Hexpds.K256", [create_public_key]);