From 0770894bac6bab5010e316648e042354a0ee6efa Mon Sep 17 00:00:00 2001 From: Billal GHILAS Date: Sun, 11 Jan 2026 11:00:00 +0100 Subject: [PATCH 1/4] Add ci github action --- .github/workflows/ci.yml | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3800294 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,53 @@ +name: Elixir CI + +on: + push: + branches: + - master + pull_request: + +env: + MIX_ENV: test + +jobs: + test: + strategy: + matrix: + include: + - otp_version: 25.3 + elixir_version: 1.15 + + - otp_version: 27.2 + elixir_version: 1.18 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - uses: erlef/setup-beam@v1 + with: + elixir-version: ${{ matrix.elixir_version }} + otp-version: ${{ matrix.otp_version }} + + - name: Install dependencies + run: mix deps.get + - name: Run tests + run: mix test --warnings-as-errors + - name: Run Credo + run: mix credo --strict + - name: Clean build + run: mix clean --deps + - name: Compile once again but without optional deps + run: mix compile --no-optional-deps + + format: + runs-on: ubuntu-latest + name: mix format + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: 27.2 + elixir-version: 1.18 + - run: mix deps.get + - run: mix format --check-formatted From 305bbce1d967278a244296468a9e960e8eb1a882 Mon Sep 17 00:00:00 2001 From: Billal GHILAS Date: Sun, 11 Jan 2026 11:05:48 +0100 Subject: [PATCH 2/4] Force build on ci --- .github/workflows/ci.yml | 1 + README.md | 5 +---- lib/ex_srtp/backend/rust_crypto.ex | 1 + mix.exs | 3 ++- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3800294..98f93e4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: env: MIX_ENV: test + EXSRTP_BUILD: true jobs: test: diff --git a/README.md b/README.md index f450d13..865af85 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,10 @@ The library supports multiple backends for cryptographic operations: For the rust backend, we offer precompiled NIFs for various platforms, so if your platform is supported, you can use the rust backend without needing to compile anything. However, if your platform is not supported or you want to compile from source, you need to have the rust toolchain installed on your system. You need aslo to add `rustler` dependency and set force build config: ```elixir +{:ex_srtp, "~> 0.4.0", system_env: %{"EXSRTP_BUILD" => "1"}} {:rustler, "~> 0.37.0"} ``` -```elixir -config :rust_precompiled, :force_build, ex_srtp: true -``` - ### Rust Backend and AES-GCM The rust backend is using [graviola](https://github.com/ctz/graviola) for aes-gcm which only works on `aarch64` and `x86_64` architecture with some CPU features. If you are using an older CPU or different architecture, you should use the `elixir` backend or do not use AES_GCM crypto profile. diff --git a/lib/ex_srtp/backend/rust_crypto.ex b/lib/ex_srtp/backend/rust_crypto.ex index ed5321d..f9e59d8 100644 --- a/lib/ex_srtp/backend/rust_crypto.ex +++ b/lib/ex_srtp/backend/rust_crypto.ex @@ -7,6 +7,7 @@ defmodule ExSRTP.Backend.RustCrypto.Native do crate: "ex_srtp", base_url: "https://github.com/elixir-streaming/ex_srtp/releases/download/v#{version}", version: version, + force_build: System.get_env("EXSRTP_BUILD") in ["1", "true"], targets: ~w( aarch64-apple-darwin aarch64-unknown-linux-gnu diff --git a/mix.exs b/mix.exs index efeb507..3d537b5 100644 --- a/mix.exs +++ b/mix.exs @@ -31,7 +31,8 @@ defmodule ExSRTP.MixProject do {:ex_rtcp, "~> 0.4.0"}, {:rustler, "~> 0.37", runtime: false, optional: true}, {:rustler_precompiled, "~> 0.8"}, - {:ex_doc, "~> 0.30", only: :dev, runtime: false} + {:ex_doc, "~> 0.30", only: :dev, runtime: false}, + {:credo, "~> 1.7", only: [:dev, :test], runtime: false} ] end From b221d166c224990e1ab855290ffdb95cfda893a0 Mon Sep 17 00:00:00 2001 From: Billal GHILAS Date: Sun, 11 Jan 2026 11:09:00 +0100 Subject: [PATCH 3/4] Make credo happy --- lib/ex_srtp/cipher/aes_gcm.ex | 1 + mix.lock | 3 +++ test/ex_srtp_test.exs | 8 +++----- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/ex_srtp/cipher/aes_gcm.ex b/lib/ex_srtp/cipher/aes_gcm.ex index bee6070..c653457 100644 --- a/lib/ex_srtp/cipher/aes_gcm.ex +++ b/lib/ex_srtp/cipher/aes_gcm.ex @@ -1,5 +1,6 @@ defmodule ExSRTP.Cipher.AesGcm do @moduledoc """ + An `ExSRTP.Cipher` implementation using AES-GCM (as per RFC 7714). """ import Bitwise diff --git a/mix.lock b/mix.lock index 481ff31..22f2d33 100644 --- a/mix.lock +++ b/mix.lock @@ -1,9 +1,12 @@ %{ + "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "castore": {:hex, :castore, "1.0.17", "4f9770d2d45fbd91dcf6bd404cf64e7e58fed04fadda0923dc32acca0badffa2", [:mix], [], "hexpm", "12d24b9d80b910dd3953e165636d68f147a31db945d2dcb9365e441f8b5351e5"}, + "credo": {:hex, :credo, "1.7.15", "283da72eeb2fd3ccf7248f4941a0527efb97afa224bcdef30b4b580bc8258e1c", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "291e8645ea3fea7481829f1e1eb0881b8395db212821338e577a90bf225c5607"}, "earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"}, "ex_doc": {:hex, :ex_doc, "0.39.3", "519c6bc7e84a2918b737aec7ef48b96aa4698342927d080437f61395d361dcee", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "0590955cf7ad3b625780ee1c1ea627c28a78948c6c0a9b0322bd976a079996e1"}, "ex_rtcp": {:hex, :ex_rtcp, "0.4.0", "f9e515462a9581798ff6413583a25174cfd2101c94a2ebee871cca7639886f0a", [:mix], [], "hexpm", "28956602cf210d692fcdaf3f60ca49681634e1deb28ace41246aee61ee22dc3b"}, "ex_rtp": {:hex, :ex_rtp, "0.4.0", "1f1b5c1440a904706011e3afbb41741f5da309ce251cb986690ce9fd82636658", [:mix], [], "hexpm", "0f72d80d5953a62057270040f0f1ee6f955c08eeae82ac659c038001d7d5a790"}, + "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [: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", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, diff --git a/test/ex_srtp_test.exs b/test/ex_srtp_test.exs index d6887c1..0b652e4 100644 --- a/test/ex_srtp_test.exs +++ b/test/ex_srtp_test.exs @@ -168,9 +168,7 @@ defmodule ExSRTPTest do 156, 66, 244, 203, 218, 58, 80, 24, 60, 28, 171, 30, 89, 192, 155, 19, 59, 128, 0, 0, 1, 139, 226, 152, 17, 40, 71, 251, 110, 11, 235>> - assert {:ok, unprotected_packets, _srtp} = - ExSRTP.Backend.RustCrypto.unprotect_rtcp(protected_rtcp, srtp) - + assert {:ok, unprotected_packets, _srtp} = RustCrypto.unprotect_rtcp(protected_rtcp, srtp) assert unprotected_packets == packets end @@ -280,7 +278,7 @@ defmodule ExSRTPTest do end test "protect and unprotect", %{srtp: srtp, rust_srtp: rust_srtp} do - original_packets = packets(10000) + original_packets = packets(10_000) {encrypted_packets, rust_srtp} = Enum.map_reduce(original_packets, rust_srtp, fn pkt, srtp -> @@ -388,7 +386,7 @@ defmodule ExSRTPTest do |> Enum.take(size) end - defp rand_payload() do + defp rand_payload do len = :rand.uniform(1000) + 500 :crypto.strong_rand_bytes(len) end From af89facd25632272d2b97063b1ad8841152a6437 Mon Sep 17 00:00:00 2001 From: Billal GHILAS Date: Sun, 11 Jan 2026 11:11:08 +0100 Subject: [PATCH 4/4] Update --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98f93e4..bd79cae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,10 +36,6 @@ jobs: run: mix test --warnings-as-errors - name: Run Credo run: mix credo --strict - - name: Clean build - run: mix clean --deps - - name: Compile once again but without optional deps - run: mix compile --no-optional-deps format: runs-on: ubuntu-latest