# elixir-dasl An Elixir implementation of [DASL](https://dasl.ing/) primitives. ## Overview **DASL** (Decentralized Authenticated Structure Layer) is a family of specifications for content-addressed data that is interoperable with the broader IPFS/IPLD ecosystem while remaining minimal and self-contained. This library provides: - `DASL.CID`: content identifiers, a compact, self-describing pointer to a piece of data. - `DASL.DRISL`: deterministic CBOR serialization. - `DASL.CAR`: Content-Addressable aRchive encoding and decoding, as well as a stream decoder. - `DASL.CAR.DRISL`: a higher-level CAR variant where block values are Elixir terms rather than raw binaries, and are encoded/decoded via DRISL transparently. ## Quick start ```elixir # CIDs cid = DASL.CID.compute("hello world") DASL.CID.verify?(cid, "hello world") # => true DASL.CID.encode(cid) # => "bafkrei..." # Round-trip a CID string {:ok, cid} = DASL.CID.new("bafkreifzjut3te2nhyekklss27nh3k72ysco7y32koao5eei66wof36n5e") # DRISL encode/decode {:ok, bin} = DASL.DRISL.encode(%{"key" => [1, 2, 3]}) {:ok, term, ""} = DASL.DRISL.decode(bin) # Build and encode a CAR archive {car, cid1} = DASL.CAR.add_block(%DASL.CAR{}, "block one") {car, cid2} = DASL.CAR.add_block(car, "block two") {:ok, car} = DASL.CAR.add_root(car, cid1) {:ok, bin} = DASL.CAR.encode(car) # Decode it back {:ok, car} = DASL.CAR.decode(bin) # Stream a large CAR file File.stream!("large.car", 65_536) |> DASL.CAR.stream_decode() |> Enum.each(fn {:header, _version, roots} -> IO.inspect(roots, label: "roots") {:block, cid, _data} -> IO.inspect(cid, label: "block") end) ``` ## Installation Get elixir-dasl from [hex.pm](https://hex.pm) by adding it to your `mix.exs`: ```elixir def deps do [ {:dasl, "~> 0.1.0"} ] end ``` Documentation can be found on HexDocs at https://hexdocs.pm/dasl. --- This project is licensed under the [MIT License](./LICENSE).