sandal 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,9 +14,9 @@ module Sandal
14
14
  @sha_size = aes_size * 2 # TODO: Any smarter way to do this?
15
15
  @name = "A#{aes_size}CBC+HS#{@sha_size}"
16
16
  @alg_name = "RSA1_5" # TODO: From key?
17
- @cipher_name = "AES-#{aes_size}-CBC"
17
+ @cipher_name = "aes-#{aes_size}-cbc"
18
18
  @key = key
19
- @digest = OpenSSL::Digest.new("SHA#{@sha_size}")
19
+ @digest = OpenSSL::Digest.new("sha#{@sha_size}")
20
20
  end
21
21
 
22
22
  def encrypt(header, payload)
data/lib/sandal/sig/es.rb CHANGED
@@ -11,7 +11,7 @@ module Sandal
11
11
  def initialize(sha_size, key)
12
12
  throw ArgumentError.new('A key is required.') unless key
13
13
  @name = "ES#{sha_size}"
14
- @digest = OpenSSL::Digest.new("SHA#{sha_size}")
14
+ @digest = OpenSSL::Digest.new("sha#{sha_size}")
15
15
  @key = key
16
16
  end
17
17
 
@@ -28,7 +28,7 @@ module Sandal
28
28
  hash = @digest.digest(payload)
29
29
  r, s = self.class.decode_jws_signature(signature)
30
30
  asn1_sig = self.class.encode_asn1_signature(r, s)
31
- @key.dsa_verify_asn1(hash, asn1_sig)
31
+ result = @key.dsa_verify_asn1(hash, asn1_sig)
32
32
  end
33
33
 
34
34
  # Decodes an ASN1 signature into a pair of BNs.
@@ -45,17 +45,22 @@ module Sandal
45
45
 
46
46
  # Decodes a JWS signature into a pair of BNs.
47
47
  def self.decode_jws_signature(signature)
48
- hex_string = Sandal::Util.base64_decode(signature)
49
- coord_length = hex_string.length / 2
50
- r = OpenSSL::BN.new(hex_string[0..(coord_length - 1)].unpack('H*')[0], 16)
51
- s = OpenSSL::BN.new(hex_string[coord_length..-1].unpack('H*')[0], 16)
48
+ binary_string = Sandal::Util.base64_decode(signature)
49
+ coord_length = binary_string.length / 2
50
+ r = OpenSSL::BN.new(binary_string[0..(coord_length - 1)].unpack('H*')[0], 16)
51
+ s = OpenSSL::BN.new(binary_string[coord_length..-1].unpack('H*')[0], 16)
52
52
  return r, s
53
53
  end
54
54
 
55
55
  # Encodes a pair of BNs into a JWS signature.
56
- def self.encode_jws_signature(r, s)
57
- hex_string = [r.to_s(16) + s.to_s(16)].pack('H*')
58
- Sandal::Util.base64_encode(hex_string)
56
+ def self.encode_jws_signature(r, s)
57
+ # TODO: Is there a better way to convert these to a binary string?
58
+ r_str = [r.to_s(16)].pack('H*')
59
+ r_str = "\x00" + r_str if r_str.length % 2 != 0
60
+ s_str = [s.to_s(16)].pack('H*')
61
+ s_str = "\x00" + s_str if s_str.length % 2 != 0
62
+ binary_string = r_str + s_str
63
+ Sandal::Util.base64_encode(binary_string)
59
64
  end
60
65
 
61
66
  end
data/lib/sandal/sig/hs.rb CHANGED
@@ -11,7 +11,7 @@ module Sandal
11
11
  def initialize(sha_size, key)
12
12
  throw ArgumentError.new('A key is required.') unless key
13
13
  @name = "HS#{sha_size}"
14
- @digest = OpenSSL::Digest.new("SHA#{sha_size}")
14
+ @digest = OpenSSL::Digest.new("sha#{sha_size}")
15
15
  @key = key
16
16
  end
17
17
 
data/lib/sandal/sig/rs.rb CHANGED
@@ -14,7 +14,7 @@ module Sandal
14
14
  def initialize(sha_size, key)
15
15
  throw ArgumentError.new('A key is required.') unless key
16
16
  @name = "RS#{sha_size}"
17
- @digest = OpenSSL::Digest.new("SHA#{sha_size}")
17
+ @digest = OpenSSL::Digest.new("sha#{sha_size}")
18
18
  @key = key
19
19
  end
20
20
 
@@ -1,4 +1,4 @@
1
1
  module Sandal
2
2
  # The semantic version of the library.
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sandal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-25 00:00:00.000000000 Z
12
+ date: 2013-03-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A ruby library for creating and reading JSON Web Tokens (JWT), supporting
15
15
  JSON Web Signatures (JWS) and JSON Web Encryption (JWE).