diff --git a/lib/jwt/eddsa/jwk/okp.rb b/lib/jwt/eddsa/jwk/okp.rb index ea17a84..35af1ae 100644 --- a/lib/jwt/eddsa/jwk/okp.rb +++ b/lib/jwt/eddsa/jwk/okp.rb @@ -7,7 +7,7 @@ module JWK class OKP < ::JWT::JWK::KeyBase KTY = "OKP" KTYS = [KTY, JWT::EdDSA::JWK::OKP, Ed25519::SigningKey, Ed25519::VerifyKey].freeze - OKP_PUBLIC_KEY_ELEMENTS = %i[kty n x].freeze + OKP_PUBLIC_KEY_ELEMENTS = %i[crv kty x].freeze OKP_PRIVATE_KEY_ELEMENTS = %i[d].freeze def initialize(key, params = nil, options = {}) diff --git a/spec/jwt/jwk/okp_spec.rb b/spec/jwt/jwk/okp_spec.rb index 0aa438b..be2adb7 100644 --- a/spec/jwt/jwk/okp_spec.rb +++ b/spec/jwt/jwk/okp_spec.rb @@ -73,6 +73,16 @@ end end + describe "#kid" do + # Test vector from RFC 8037 Appendix A.3 (JWK Thumbprint Canonicalization): + # https://www.rfc-editor.org/rfc/rfc8037#appendix-A.3 + let(:key) { { kty: "OKP", crv: "Ed25519", x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo" } } + + it "matches the RFC 7638 JWK thumbprint of the crv/kty/x members" do + expect(instance.kid).to eq("kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k") + end + end + describe "#export" do let(:options) { {} } subject { instance.export(options) }