laiboonh

laiboonh

Has anyone managed to sign JWT with ES512 algorithm successfully? I have tried to look for libraries to do this but was not successful

I generated my keypair using

openssl ecparam -genkey -name secp521r1 -noout -out ec521-key-pair.pem
openssl ec -in ec521-key-pair.pem -pubout -out ec521-public-key.pem

Tried using yajwt | Hex

private_key = File.read("ec521-key-pair.pem")

opts = %{
  alg: "ES512",
  key: private_key
}

JWT.sign(
  %{
    jti: Ecto.UUID.generate(),
    iss: "client",
    aud: "server",
    nbf: DateTime.now!("Etc/UTC") |> DateTime.to_unix(),
    iat: DateTime.now!("Etc/UTC") |> DateTime.to_unix(),
    exp: (DateTime.now!("Etc/UTC") |> DateTime.to_unix()) + expiry
  },
  opts
)

Unsuccessful

** (ErlangError) Erlang error: {:badarg, {'pkey.c', 362}, 'Couldn\'t get ECDSA private key'}:

  * 4th argument: Couldn't get ECDSA private key

    (crypto 5.1.2) crypto.erl:1458: :crypto.sign/5
    (yajwt 1.4.1) lib/jwt/algorithm/ecdsa.ex:27: JWT.Algorithm.Ecdsa.sign/3
    (yajwt 1.4.1) lib/jwt/jws.ex:42: JWT.Jws.do_sign/3
    (yajwt 1.4.1) lib/jwt/jws.ex:21: JWT.Jws.sign/3
    .iex.exs:20: Foo.foo/0
    iex:1: (file)

Showing Posts 1 to 2

hubertlepicki

hubertlepicki

I would recommend trying Joken GitHub - joken-elixir/joken: Elixir JWT library · GitHub

I use it, albeit with a different signing algorithm, but the one you want to use is also supported:
https://github.com/joken-elixir/joken/blob/main/lib/joken/signer.ex#L13

danschultzer

danschultzer

Pow Core Team

You need to load and decode the pem. File.read will just return a tuple. Unfortunately yajwt only has this util function for RSA. If you want to continue using the library the following should work (not tested, but based on the readme example):

[entry] = :public_key.pem_decode(File.read!("ec521-key-pair.pem"))
{:ok, private_key} = :public_key.pem_entry_decode(entry)

There are a lot of JWT libraries as well, the most popular ones being JOSE and Joken as @hubertlepicki mentioned. I even rolled my own with Erlang in Assent (but you def shouldn’t do that :smile:).

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

Latest on Elixir Forum

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews