Skip to content

Commit

Permalink
Add tests for different key types of JOSE::JWK.
Browse files Browse the repository at this point in the history
  • Loading branch information
potatosalad committed May 10, 2016
1 parent fc8b444 commit 4dde75f
Show file tree
Hide file tree
Showing 11 changed files with 263 additions and 8 deletions.
2 changes: 1 addition & 1 deletion lib/jose/jwk/kty_okp_ed25519ph.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def self.from_openssh_key(key)
end

def to_okp
return [:Ed25519, okp]
return [:Ed25519ph, okp]
end

def to_openssh_key(fields)
Expand Down
30 changes: 30 additions & 0 deletions test/jose/jwk/kty_ec_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,34 @@ def test_block_encryptor
], JOSE::JWK.block_encryptor(extra_jwk))
end

def test_signer
ec_p256_jwk = JOSE::JWK.generate_key([:ec, 'P-256'])
ec_p384_jwk = JOSE::JWK.generate_key([:ec, 'P-384'])
ec_p521_jwk = JOSE::JWK.generate_key([:ec, 'P-521'])
assert_equal JOSE::Map['alg' => 'ES256'], JOSE::JWK.signer(ec_p256_jwk)
assert_equal JOSE::Map['alg' => 'ES384'], JOSE::JWK.signer(ec_p384_jwk)
assert_equal JOSE::Map['alg' => 'ES512'], JOSE::JWK.signer(ec_p521_jwk)
extra_ec_p256_jwk = ec_p256_jwk.merge({'alg' => 'ES256', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'ES256'], JOSE::JWK.signer(extra_ec_p256_jwk)
public_ec_p256_jwk = JOSE::JWK.to_public(ec_p256_jwk)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_ec_p256_jwk) }
end

def test_verifier
ec_p256_jwk = JOSE::JWK.generate_key([:ec, 'P-256'])
ec_p384_jwk = JOSE::JWK.generate_key([:ec, 'P-384'])
ec_p521_jwk = JOSE::JWK.generate_key([:ec, 'P-521'])
assert_equal ['ES256'], JOSE::JWK.verifier(ec_p256_jwk)
assert_equal ['ES384'], JOSE::JWK.verifier(ec_p384_jwk)
assert_equal ['ES512'], JOSE::JWK.verifier(ec_p521_jwk)
extra_ec_p256_jwk = ec_p256_jwk.merge({'alg' => 'ES256', 'use' => 'sig'})
assert_equal ['ES256'], JOSE::JWK.verifier(extra_ec_p256_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
22 changes: 22 additions & 0 deletions test/jose/jwk/kty_oct_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,28 @@ def test_generate_key
assert_raises(ArgumentError) { JOSE::JWK.generate_key([:oct, 1.0]) }
end

def test_signer
oct256_jwk = JOSE::JWK.generate_key([:oct, 32])
oct384_jwk = JOSE::JWK.generate_key([:oct, 48])
oct512_jwk = JOSE::JWK.generate_key([:oct, 64])
assert_equal JOSE::Map['alg' => 'HS256'], JOSE::JWK.signer(oct256_jwk)
assert_equal JOSE::Map['alg' => 'HS384'], JOSE::JWK.signer(oct384_jwk)
assert_equal JOSE::Map['alg' => 'HS512'], JOSE::JWK.signer(oct512_jwk)
extra_oct256_jwk = oct256_jwk.merge({'alg' => 'HS512', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'HS512'], JOSE::JWK.signer(extra_oct256_jwk)
end

def test_verifier
oct256_jwk = JOSE::JWK.generate_key([:oct, 32])
oct384_jwk = JOSE::JWK.generate_key([:oct, 48])
oct512_jwk = JOSE::JWK.generate_key([:oct, 64])
assert_equal ['HS256'], JOSE::JWK.verifier(oct256_jwk)
assert_equal ['HS256', 'HS384'], JOSE::JWK.verifier(oct384_jwk)
assert_equal ['HS256', 'HS384', 'HS512'], JOSE::JWK.verifier(oct512_jwk)
extra_oct256_jwk = oct256_jwk.merge({'alg' => 'HS512', 'use' => 'sig'})
assert_equal ['HS512'], JOSE::JWK.verifier(extra_oct256_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
Expand Down
25 changes: 25 additions & 0 deletions test/jose/jwk/kty_okp_ed25519_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

class JOSE::JWK::KTY_OKP_Ed25519Test < Minitest::Test

SECRET_JWK_JSON = "{\"crv\":\"Ed25519\",\"d\":\"TghhpzoRLQXOLyyN1GN0ft-TPS0ZYnS_QmRkgLUU5n0\",\"kty\":\"OKP\",\"x\":\"h3eN6RqbqjO24jScv4PirOtJGq-P0qECYA7MdbwFo2o\"}"
PUBLIC_JWK_JSON = "{\"crv\":\"Ed25519\",\"kty\":\"OKP\",\"x\":\"h3eN6RqbqjO24jScv4PirOtJGq-P0qECYA7MdbwFo2o\"}"

def test_generate_key
jwk_secret = JOSE::JWK.generate_key([:okp, :Ed25519])
refute_equal JOSE::JWK.thumbprint(jwk_secret), JOSE::JWK.thumbprint(JOSE::JWK.generate_key(jwk_secret))
Expand Down Expand Up @@ -33,4 +36,26 @@ def test_property_of_to_openssh_key_and_from_openssh_key
}
end

def test_signer
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'Ed25519'], JOSE::JWK.signer(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed25519', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'Ed25519'], JOSE::JWK.signer(extra_jwk)
public_jwk = JOSE::JWK.from(PUBLIC_JWK_JSON)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_jwk) }
end

def test_verifier
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal ['Ed25519'], JOSE::JWK.verifier(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed25519', 'use' => 'sig'})
assert_equal ['Ed25519'], JOSE::JWK.verifier(extra_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
25 changes: 25 additions & 0 deletions test/jose/jwk/kty_okp_ed25519ph_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

class JOSE::JWK::KTY_OKP_Ed25519phTest < Minitest::Test

SECRET_JWK_JSON = "{\"crv\":\"Ed25519ph\",\"d\":\"S7dl722lll7RkYH5mAuPCkimJLW2SITzqE3TGkCOd8o\",\"kty\":\"OKP\",\"x\":\"ZO3fbEumWX0Edpa305DYayPveonmsynj0nTszr3Peyc\"}"
PUBLIC_JWK_JSON = "{\"crv\":\"Ed25519ph\",\"kty\":\"OKP\",\"x\":\"ZO3fbEumWX0Edpa305DYayPveonmsynj0nTszr3Peyc\"}"

def test_generate_key
jwk_secret = JOSE::JWK.generate_key([:okp, :Ed25519ph])
refute_equal JOSE::JWK.thumbprint(jwk_secret), JOSE::JWK.thumbprint(JOSE::JWK.generate_key(jwk_secret))
Expand Down Expand Up @@ -33,4 +36,26 @@ def test_property_of_to_openssh_key_and_from_openssh_key
}
end

def test_signer
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'Ed25519ph'], JOSE::JWK.signer(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed25519ph', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'Ed25519ph'], JOSE::JWK.signer(extra_jwk)
public_jwk = JOSE::JWK.from(PUBLIC_JWK_JSON)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_jwk) }
end

def test_verifier
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal ['Ed25519ph'], JOSE::JWK.verifier(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed25519ph', 'use' => 'sig'})
assert_equal ['Ed25519ph'], JOSE::JWK.verifier(extra_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
22 changes: 22 additions & 0 deletions test/jose/jwk/kty_okp_ed448_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,26 @@ def test_property_of_to_openssh_key_and_from_openssh_key
# }
end

def test_signer
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'Ed448'], JOSE::JWK.signer(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed448', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'Ed448'], JOSE::JWK.signer(extra_jwk)
public_jwk = JOSE::JWK.from(PUBLIC_JWK_JSON)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_jwk) }
end

def test_verifier
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal ['Ed448'], JOSE::JWK.verifier(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed448', 'use' => 'sig'})
assert_equal ['Ed448'], JOSE::JWK.verifier(extra_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
22 changes: 22 additions & 0 deletions test/jose/jwk/kty_okp_ed448ph_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,26 @@ def test_property_of_to_openssh_key_and_from_openssh_key
# }
end

def test_signer
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'Ed448ph'], JOSE::JWK.signer(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed448ph', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'Ed448ph'], JOSE::JWK.signer(extra_jwk)
public_jwk = JOSE::JWK.from(PUBLIC_JWK_JSON)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_jwk) }
end

def test_verifier
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal ['Ed448ph'], JOSE::JWK.verifier(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'Ed448ph', 'use' => 'sig'})
assert_equal ['Ed448ph'], JOSE::JWK.verifier(extra_jwk)
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
6 changes: 6 additions & 0 deletions test/jose/jwk/kty_okp_x25519_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,10 @@ def test_property_of_to_openssh_key_and_from_openssh_key
}
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
6 changes: 6 additions & 0 deletions test/jose/jwk/kty_okp_x448_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,10 @@ def test_property_of_to_openssh_key_and_from_openssh_key
# }
end

def test_key_encryptor
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end

end
54 changes: 54 additions & 0 deletions test/jose/jwk/kty_rsa_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require 'test_helper'

class JOSE::JWK::KTY_RSATest < Minitest::Test

SECRET_JWK_JSON = "{\"d\":\"ghUlwEYdrZF-TxysKsRppvPxHG1X4qjh9VmNLglKIcqUQb1ngSdq7VZ0zHCBddDjECN87fzrBm7wz74zniKAsaT4VU4JWLOwvEq0fAW6f-L7gn91eZhklxUrUgbUhpLjYGtx2lCDSMA0_P9TqeCzHwMWcvx86fGW0CkGSjz-16E\",\"dp\":\"M0yue0VjsxkG08bRFNO--mugs0Zvf0skNNT0393UzPp3GDseU7bVhjwFNw6T3GS2YXHWGSEn1sGrEtUulmGrMQ\",\"dq\":\"QWxAUGzS8SaZe_KNrS5BjmLRbDXNgSmZIDMZgDtyNa0sT97zZsJ0WNrp73_rHn_0dxqTYnkJld-Jlxq-u8uFmQ\",\"e\":\"AQAB\",\"kty\":\"RSA\",\"n\":\"6zyrhQgzZOaeauWOFbfhnv8o7F9y1iqZZk1ILqq72UuXHl1vVjwOpD5f4GQ8JMbWtH-qOjRvUj5suy8wWq-rRVp8lHkpZClosTbMoYFI9UxfVYMA45-xnZfrFy3w9obmDWhfLGN_KSeeM4X_rErmXjMi-T2sBX_0yySbPiFqLOU\",\"p\":\"-hNhau_os7GVdN9qoM5VuuOmGeFu7umY3kehVs6A7e8rFg38x1pvTS_5qRatahzYIQ-bDtaoyUOYf1uBLBslTQ\",\"q\":\"8M9MSPEF_skg3I8ON0v4MAcg9GoiWTeEfX6JTNXOlap6xjRL8Lp_lI6cudkEC9WKk2sFuR9jUmM6qDLPOSf5-Q\",\"qi\":\"0kUJWgjRen39Ys5d3ZK8HzlFIA34dbkEQHnEiw0qVakHGpRGsBMofwrmheAPSH3kTSn0ETeiwPm7JZ8zEaNIaw\"}"
PUBLIC_JWK_JSON = "{\"e\":\"AQAB\",\"kty\":\"RSA\",\"n\":\"6zyrhQgzZOaeauWOFbfhnv8o7F9y1iqZZk1ILqq72UuXHl1vVjwOpD5f4GQ8JMbWtH-qOjRvUj5suy8wWq-rRVp8lHkpZClosTbMoYFI9UxfVYMA45-xnZfrFy3w9obmDWhfLGN_KSeeM4X_rErmXjMi-T2sBX_0yySbPiFqLOU\"}"

def test_generate_key
jwk1 = JOSE::JWK.generate_key([:rsa, 128])
jwk2 = JOSE::JWK.generate_key([:rsa, 128, 13])
jwk3 = JOSE::JWK.generate_key(jwk2)
refute_equal JOSE::JWK.thumbprint(jwk1), JOSE::JWK.thumbprint(jwk2)
refute_equal JOSE::JWK.thumbprint(jwk1), JOSE::JWK.thumbprint(jwk3)
refute_equal JOSE::JWK.thumbprint(jwk2), JOSE::JWK.thumbprint(jwk3)
end

def test_block_encryptor
RSAGenerator.cache do
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'RSA-OAEP', 'enc' => 'A128GCM'], JOSE::JWK.block_encryptor(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'RSA-OAEP-256', 'enc' => 'A256GCM', 'use' => 'enc'})
assert_equal JOSE::Map['alg' => 'RSA-OAEP-256', 'enc' => 'A256GCM'], JOSE::JWK.block_encryptor(extra_jwk)
end
end

def test_signer
RSAGenerator.cache do
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal JOSE::Map['alg' => 'RS256'], JOSE::JWK.signer(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'PS256', 'use' => 'sig'})
assert_equal JOSE::Map['alg' => 'PS256'], JOSE::JWK.signer(extra_jwk)
public_jwk = JOSE::JWK.from(PUBLIC_JWK_JSON)
assert_raises(ArgumentError) { JOSE::JWK.signer(public_jwk) }
end
end

def test_verifier
RSAGenerator.cache do
plain_jwk = JOSE::JWK.from(SECRET_JWK_JSON)
assert_equal ['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512'], JOSE::JWK.verifier(plain_jwk)
extra_jwk = plain_jwk.merge({'alg' => 'PS256', 'use' => 'sig'})
assert_equal ['PS256'], JOSE::JWK.verifier(extra_jwk)
end
end

def test_key_encryptor
RSAGenerator.cache do
secret_jwk = JOSE::JWK.from_binary(SECRET_JWK_JSON)
key_encryptor = secret_jwk.kty.key_encryptor(secret_jwk.fields, 'test')
assert_equal 'PBES2-HS256+A128KW', key_encryptor['alg']
end
end

end
57 changes: 50 additions & 7 deletions test/jose/jwk_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,57 @@ def test_property_of_from
property_of {
gen_jwk()
}.check { |tuple|
jwk_secret = tuple[0]
jwk_public = tuple[1]
assert_equal jwk_secret, JOSE::JWK.from(JOSE::JWK.to_binary(jwk_secret))
assert_equal jwk_secret, JOSE::JWK.from(JOSE::JWK.to_map(jwk_secret))
assert_equal jwk_public, JOSE::JWK.from(JOSE::JWK.to_binary(jwk_public))
assert_equal jwk_public, JOSE::JWK.from(JOSE::JWK.to_map(jwk_public))
assert_equal [jwk_secret, jwk_public, jwk_secret, jwk_public], JOSE::JWK.from([JOSE::JWK.to_binary(jwk_secret), JOSE::JWK.to_map(jwk_public), jwk_secret, jwk_public])
secret_jwk = tuple[0]
public_jwk = tuple[1]
assert_equal secret_jwk, JOSE::JWK.from(JOSE::JWK.to_binary(secret_jwk))
assert_equal secret_jwk, JOSE::JWK.from(JOSE::JWK.to_map(secret_jwk))
assert_equal public_jwk, JOSE::JWK.from(JOSE::JWK.to_binary(public_jwk))
assert_equal public_jwk, JOSE::JWK.from(JOSE::JWK.to_map(public_jwk))
assert_equal [secret_jwk, public_jwk, secret_jwk, public_jwk], JOSE::JWK.from([JOSE::JWK.to_binary(secret_jwk), JOSE::JWK.to_map(public_jwk), secret_jwk, public_jwk])
password = SecureRandom.urlsafe_base64(8)
encrypted_jwk_binary = JOSE::JWK.to_binary(secret_jwk, password)
decrypted_jwk, = JOSE::JWK.from(encrypted_jwk_binary, password)
assert_equal secret_jwk, decrypted_jwk
encrypted_jwk_map = JOSE::JWK.to_map(secret_jwk, password)
decrypted_jwk, = JOSE::JWK.from(encrypted_jwk_map, password)
assert_equal secret_jwk, decrypted_jwk
}
end

def test_from_okp_and_to_okp
okp_vectors = [
[:Ed25519, [77,55,145,129,165,187,226,143,188,140,61,104,87,201,145,133,253,129,57,243,242,195,150,212,103,60,163,59,220,156,149,108,14,178,245,236,59,188,194,41,139,148,2,125,27,252,174,134,93,12,229,221,211,42,233,48,162,231,70,228,62,46,240,149].pack('C*')],
[:Ed25519, [14,178,245,236,59,188,194,41,139,148,2,125,27,252,174,134,93,12,229,221,211,42,233,48,162,231,70,228,62,46,240,149].pack('C*')],
[:Ed25519ph, [66,87,195,90,240,202,40,161,243,233,135,160,14,207,13,144,60,189,176,244,48,108,219,23,66,83,116,235,251,129,234,250,50,235,167,100,221,193,52,118,237,47,245,101,161,0,201,229,247,250,183,238,191,13,210,243,127,10,73,3,228,114,5,75].pack('C*')],
[:Ed25519ph, [50,235,167,100,221,193,52,118,237,47,245,101,161,0,201,229,247,250,183,238,191,13,210,243,127,10,73,3,228,114,5,75].pack('C*')],
[:Ed448, [126,157,160,184,161,41,66,7,194,42,86,166,248,20,210,36,52,215,156,220,176,16,121,27,164,217,87,147,111,159,157,233,245,129,19,192,73,188,126,101,46,13,59,207,145,89,144,105,11,216,45,152,173,89,194,177,244,96,47,191,18,118,201,94,244,125,216,216,131,83,5,195,23,100,63,43,100,179,212,239,200,231,139,65,227,138,96,230,21,229,93,204,253,116,161,145,55,184,186,175,2,20,184,19,94,197,40,53,85,244,128,195,11,128].pack('C*')],
[:Ed448, [96,47,191,18,118,201,94,244,125,216,216,131,83,5,195,23,100,63,43,100,179,212,239,200,231,139,65,227,138,96,230,21,229,93,204,253,116,161,145,55,184,186,175,2,20,184,19,94,197,40,53,85,244,128,195,11,128].pack('C*')],
[:Ed448ph, [47,115,118,232,157,225,157,238,6,59,179,43,222,238,46,205,232,149,147,185,62,48,65,183,162,148,151,232,100,21,14,172,187,179,84,42,155,173,147,74,147,40,85,156,191,99,10,101,26,20,169,202,73,90,242,224,90,117,40,65,240,171,206,111,179,237,230,25,214,13,79,112,91,254,3,18,33,242,21,124,118,88,29,55,108,82,208,120,1,23,225,126,211,23,78,67,99,141,125,107,46,76,32,92,106,190,24,136,210,239,38,190,39,128].pack('C*')],
[:Ed448ph, [117,40,65,240,171,206,111,179,237,230,25,214,13,79,112,91,254,3,18,33,242,21,124,118,88,29,55,108,82,208,120,1,23,225,126,211,23,78,67,99,141,125,107,46,76,32,92,106,190,24,136,210,239,38,190,39,128].pack('C*')],
[:X25519, [96,217,201,235,198,232,54,173,154,12,17,116,68,172,135,50,63,55,187,138,174,19,134,205,121,137,69,151,134,129,133,113,28,243,136,7,83,100,35,65,114,23,222,151,25,105,72,233,121,149,26,16,131,149,59,96,153,132,101,23,61,57,89,26].pack('C*')],
[:X25519, [28,243,136,7,83,100,35,65,114,23,222,151,25,105,72,233,121,149,26,16,131,149,59,96,153,132,101,23,61,57,89,26].pack('C*')],
[:X448, [100,115,156,9,104,108,224,186,141,185,206,67,92,151,50,45,2,245,87,45,212,135,87,145,46,223,1,116,107,241,220,141,177,140,119,228,43,145,168,135,198,232,51,204,211,54,246,74,36,152,213,235,93,185,167,234,251,10,12,119,252,249,184,211,222,195,81,107,102,81,174,50,241,30,16,14,22,210,15,190,220,14,53,42,181,96,115,39,108,157,58,218,129,206,147,141,103,64,162,240,177,150,44,63,82,69,190,181,200,157,191,82].pack('C*')],
[:X448, [251,10,12,119,252,249,184,211,222,195,81,107,102,81,174,50,241,30,16,14,22,210,15,190,220,14,53,42,181,96,115,39,108,157,58,218,129,206,147,141,103,64,162,240,177,150,44,63,82,69,190,181,200,157,191,82].pack('C*')]
]
jwk_vectors = [
"{\"crv\":\"Ed25519\",\"d\":\"TTeRgaW74o-8jD1oV8mRhf2BOfPyw5bUZzyjO9yclWw\",\"kty\":\"OKP\",\"x\":\"DrL17Du8wimLlAJ9G_yuhl0M5d3TKukwoudG5D4u8JU\"}",
"{\"crv\":\"Ed25519\",\"kty\":\"OKP\",\"x\":\"DrL17Du8wimLlAJ9G_yuhl0M5d3TKukwoudG5D4u8JU\"}",
"{\"crv\":\"Ed25519ph\",\"d\":\"QlfDWvDKKKHz6YegDs8NkDy9sPQwbNsXQlN06_uB6vo\",\"kty\":\"OKP\",\"x\":\"MuunZN3BNHbtL_VloQDJ5ff6t-6_DdLzfwpJA-RyBUs\"}",
"{\"crv\":\"Ed25519ph\",\"kty\":\"OKP\",\"x\":\"MuunZN3BNHbtL_VloQDJ5ff6t-6_DdLzfwpJA-RyBUs\"}",
"{\"crv\":\"Ed448\",\"d\":\"fp2guKEpQgfCKlam-BTSJDTXnNywEHkbpNlXk2-fnen1gRPASbx-ZS4NO8-RWZBpC9gtmK1ZwrH0\",\"kty\":\"OKP\",\"x\":\"YC-_EnbJXvR92NiDUwXDF2Q_K2Sz1O_I54tB44pg5hXlXcz9dKGRN7i6rwIUuBNexSg1VfSAwwuA\"}",
"{\"crv\":\"Ed448\",\"kty\":\"OKP\",\"x\":\"YC-_EnbJXvR92NiDUwXDF2Q_K2Sz1O_I54tB44pg5hXlXcz9dKGRN7i6rwIUuBNexSg1VfSAwwuA\"}",
"{\"crv\":\"Ed448ph\",\"d\":\"L3N26J3hne4GO7Mr3u4uzeiVk7k-MEG3opSX6GQVDqy7s1Qqm62TSpMoVZy_YwplGhSpykla8uBa\",\"kty\":\"OKP\",\"x\":\"dShB8KvOb7Pt5hnWDU9wW_4DEiHyFXx2WB03bFLQeAEX4X7TF05DY419ay5MIFxqvhiI0u8mvieA\"}",
"{\"crv\":\"Ed448ph\",\"kty\":\"OKP\",\"x\":\"dShB8KvOb7Pt5hnWDU9wW_4DEiHyFXx2WB03bFLQeAEX4X7TF05DY419ay5MIFxqvhiI0u8mvieA\"}",
"{\"crv\":\"X25519\",\"d\":\"YNnJ68boNq2aDBF0RKyHMj83u4quE4bNeYlFl4aBhXE\",\"kty\":\"OKP\",\"x\":\"HPOIB1NkI0FyF96XGWlI6XmVGhCDlTtgmYRlFz05WRo\"}",
"{\"crv\":\"X25519\",\"kty\":\"OKP\",\"x\":\"HPOIB1NkI0FyF96XGWlI6XmVGhCDlTtgmYRlFz05WRo\"}",
"{\"crv\":\"X448\",\"d\":\"ZHOcCWhs4LqNuc5DXJcyLQL1Vy3Uh1eRLt8BdGvx3I2xjHfkK5Goh8boM8zTNvZKJJjV6125p-o\",\"kty\":\"OKP\",\"x\":\"-woMd_z5uNPew1FrZlGuMvEeEA4W0g--3A41KrVgcydsnTragc6TjWdAovCxliw_UkW-tcidv1I\"}",
"{\"crv\":\"X448\",\"kty\":\"OKP\",\"x\":\"-woMd_z5uNPew1FrZlGuMvEeEA4W0g--3A41KrVgcydsnTragc6TjWdAovCxliw_UkW-tcidv1I\"}"
]
okp_vectors.each_with_index do |okp, index|
jwk = JOSE::JWK.from(jwk_vectors[index])
assert_equal jwk, JOSE::JWK.from_okp(okp), "from_okp failed on test vector ##{index + 1}"
assert_equal okp, JOSE::JWK.to_okp(jwk), "to_okp failed on test vector ##{index + 1}"
end
end

end

0 comments on commit 4dde75f

Please sign in to comment.