jsm

jsm

SpeckEx - Speck block cipher for Elixir (using precompiled Rust NIF)

SpeckEx is an Elixir version of block cipher Speck, developed by the NSA (:scream:) in 2013 as a “lightweight” cipher. SpeckEx uses Rust crate “speck_cipher” as its base and is meant to be only a very thin wrapper around it. The main module only exposes CTR and AEAD modes (Speck-Poly1305) with 128-bits block sizes and provides guardrails with regards to nonce generation in particular. Submodules expose the raw block cipher, and CTR and AEAD modes with smaller (risky) block sizes. Extensive documentation including security guidelines is added.

The rationale behind the package is that I have a particular need for a modern cipher that operates on blocks of size 64 and 96, which are very thin on the ground indeed. OTP only offers DES, 3DES and Blowfish, which each have their issues (broken, slow, very slow with crypto_one_time), and nothing for 96-bits blocks. Speck seems like a good solution and supplements the OTP offerings. I figured that I might as well make it into a usable package.

:warning: Experimental state :warning:

The entire package should be considered experimental, and has not been reviewed or audited. I would welcome expert help, particularly with reviewing the Rust code where all of the magic happens, because I am by no means fluent in Rust (in fact Gemini wrote most of that :blush:). I did not implement any of the algorithms involved (neither Speck nor Poly1305), nor the CTR mode, but the combination of Speck and Poly1305 in the AEAD construction is implemented in SpeckEx itself, so that bit in particular qualifies as the prohibited “rolling your own” at this point. Hence the big warnings at the top of the documentation entrypoints. Since the Rust code is very small, hopefully this state of affairs can be improved with some help.

Package: speck_ex | Hex
Docs: SpeckEx — SpeckEx v0.2.0

https://github.com/juulSme/SpeckEx

First Post!

jsm

jsm

The recent 0.2 release has moved to release versions of the backing Rust crates so maturity has increased :partying_face:

Where Next?

Popular in Announcing Top

zorbash
I created Kitto a framework for dashboards inspired by Dashing. The distributed characteristics of Elixir and the low memory footprint...
New
Crowdhailer
Experimenting with this code. OK.try do user <- fetch_user(1) cart <- fetch_cart(1) order = checkout(cart, user) save_orde...
New
Crowdhailer
Raxx is an alternative to Plug and is inspired by projects such as Rack(Ruby) and Ring(Clojure). 1.0-rc.1 is now available. To use it re...
New
mbuhot
Leverage Open Api 3.0 (Swagger) to document, test, validate and explore your Plug and Phoenix APIs. Generate and serve a JSON Open API ...
New
kevinlang
Hey all, We have made an Ecto3 Adapter for SQLite3, ecto_sqlite3! We have successfully on-boarded the full suite of integration tests (...
New
kip
Image is an image processing library for Elixir. It is based upon the fabulous vix library that provides a libvips wrapper for Elixir. I...
622 19610 194
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New

Other popular topics Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 49266 226
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New

We're in Beta

About us Mission Statement