File tree 4 files changed +21
-14
lines changed
test/json_web_token/algorithm
4 files changed +21
-14
lines changed Original file line number Diff line number Diff line change @@ -43,17 +43,25 @@ defmodule JsonWebToken.Algorithm.Rsa do
43
43
end
44
44
45
45
@ doc "RSA key modulus, n"
46
- def modulus ( key ) , do: :crypto . mpint ( Enum . at key , 1 )
46
+ def modulus ( [ _exponent , modulus | _rest ] ) do
47
+ bytes_list = Integer . digits ( modulus , 256 )
48
+ :erlang . list_to_binary ( bytes_list )
49
+ end
47
50
48
51
defp validate_params ( sha_bits , key ) do
49
52
Common . validate_bits ( sha_bits )
50
53
validate_key_size ( key )
51
54
end
52
55
53
56
# http://tools.ietf.org/html/rfc7518#section-3.3
54
- defp validate_key_size ( a_key ) do
55
- key = Util . validate_present ( a_key )
56
- weak_key ( bit_size ( modulus key ) < @ key_bits_min )
57
+ defp validate_key_size ( key ) when is_list ( key ) do
58
+ key = Util . validate_present ( key ) |> modulus ( )
59
+ weak_key ( bit_size ( key ) < @ key_bits_min )
60
+ end
61
+
62
+ defp validate_key_size ( key ) do
63
+ key = Util . validate_present ( key )
64
+ weak_key ( bit_size ( key ) < @ key_bits_min )
57
65
end
58
66
59
67
defp weak_key ( true ) , do: raise "RSA modulus too short"
Original file line number Diff line number Diff line change @@ -26,15 +26,13 @@ defmodule JsonWebToken.Util do
26
26
defp arithmetic_compare ( "" , "" , acc ) , do: acc
27
27
28
28
@ doc """
29
- Return the string passed in, unless it is nil or an empty string
29
+ Return the parameter passed in, unless it is nil or an empty string
30
30
31
31
## Example
32
32
iex> JsonWebToken.Util.validate_present("a")
33
33
"a"
34
34
"""
35
- def validate_present ( param ) , do: validate_present ( param , param == "" )
36
-
37
- defp validate_present ( nil , _ ) , do: raise "Param nil"
38
- defp validate_present ( _ , true ) , do: raise "Param blank"
39
- defp validate_present ( param , _ ) , do: param
35
+ def validate_present ( nil ) , do: raise "Param nil"
36
+ def validate_present ( "" ) , do: raise "Param blank"
37
+ def validate_present ( param ) , do: param
40
38
end
Original file line number Diff line number Diff line change @@ -59,8 +59,9 @@ defmodule JsonWebToken.Algorithm.RsaTest do
59
59
end
60
60
61
61
test "sign/3 w private_key size < key_bits_min raises" do
62
+ # private_key_weak.pem holds a 2000-bit key
62
63
private_key = RsaUtil . private_key ( @ path_to_keys , "private_key_weak.pem" )
63
- assert byte_size ( Rsa . modulus private_key ) == 255
64
+ assert byte_size ( Rsa . modulus private_key ) == 250
64
65
invalid_key ( private_key , "RSA modulus too short" )
65
66
end
66
67
Original file line number Diff line number Diff line change @@ -9,19 +9,19 @@ defmodule JsonWebToken.Algorithm.RsaUtilTest do
9
9
test "private_key" do
10
10
key = RsaUtil . private_key ( @ path_to_keys , "private_key.pem" )
11
11
assert length ( key ) == 3
12
- assert byte_size ( Rsa . modulus key ) == 261
12
+ assert byte_size ( Rsa . modulus key ) == 256
13
13
end
14
14
15
15
test "public_key" do
16
16
key = RsaUtil . public_key ( @ path_to_keys , "public_key.pem" )
17
17
assert length ( key ) == 2
18
- assert byte_size ( Rsa . modulus key ) == 261
18
+ assert byte_size ( Rsa . modulus key ) == 256
19
19
end
20
20
21
21
test "private key with ASN.1 header" do
22
22
key = RsaUtil . private_key ( @ path_to_keys , "private_key_asn1_header.pem" )
23
23
assert length ( key ) == 3
24
- assert byte_size ( Rsa . modulus key ) == 261
24
+ assert byte_size ( Rsa . modulus key ) == 256
25
25
end
26
26
27
27
test "private key passed in directly" do
You can’t perform that action at this time.
0 commit comments