diff --git a/src/jwk/jose_jwk_openssh_key.erl b/src/jwk/jose_jwk_openssh_key.erl index ded2796..bca6936 100644 --- a/src/jwk/jose_jwk_openssh_key.erl +++ b/src/jwk/jose_jwk_openssh_key.erl @@ -127,7 +127,7 @@ parse_key(<< W, Rest/binary >>, Body) orelse W =:= $\t -> parse_key(Rest, Body); parse_key(<< ?OPENSSH_TAIL, Rest/binary >>, Body) -> - case parse_key(jose_base64:decode(Body)) of + case parse_key(jose_base64:'decode!'(Body)) of {true, Key} -> {Key, Rest}; false -> diff --git a/test/jose_test.exs b/test/jose_test.exs index 8b73322..fbe4f21 100644 --- a/test/jose_test.exs +++ b/test/jose_test.exs @@ -544,4 +544,12 @@ defmodule JOSETest do assert({:error, _} = JOSE.JWT.verify(jwk, nil)) assert({:error, _} = JOSE.JWT.verify_strict(jwk, [], nil)) end + + # See https://github.com/potatosalad/erlang-jose/issues/96 + test "reads valid openssh keys" do + input = + "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\nQyNTUxOQAAACAvwUoBPsC8rc4wpR1xbN3Onjuuo+2gqLNECWvmUlDEpQAAAKA6FC8aOhQv\nGgAAAAtzc2gtZWQyNTUxOQAAACAvwUoBPsC8rc4wpR1xbN3Onjuuo+2gqLNECWvmUlDEpQ\nAAAEBXwZ8kolKDzWxBdcPJT0KXilyZEfbF/GjyGa4AOf2d5C/BSgE+wLytzjClHXFs3c6e\nO66j7aCos0QJa+ZSUMSlAAAAFmRtb3JuQHNpbHZlci5mcml0ei5ib3gBAgMEBQYH\n-----END OPENSSH PRIVATE KEY-----\n" + + assert %JOSE.JWK{kty: {:jose_jwk_kty_okp_ed25519, _}} = JOSE.JWK.from_openssh_key(input) + end end