Class: Itsdangerousr::Signer
- Inherits:
-
Object
- Object
- Itsdangerousr::Signer
- Defined in:
- lib/itsdangerousr.rb
Direct Known Subclasses
Instance Method Summary collapse
- #derive_key ⇒ Object
- #get_signature(value) ⇒ Object
-
#initialize(secret_key, options = {}) ⇒ Signer
constructor
A new instance of Signer.
- #sign(value) ⇒ Object
- #unsign(signed_value) ⇒ Object
- #validate(signed_value) ⇒ Object
- #verify_signature(value, sig) ⇒ Object
Constructor Details
#initialize(secret_key, options = {}) ⇒ Signer
Returns a new instance of Signer.
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/itsdangerousr.rb', line 53 def initialize(secret_key, ={}) defaults = {:salt => 'itsdangerous.Signer', :sep => '.', :key_derivation => 'django-concat', :digest_method => OpenSSL::Digest::SHA1, :algorithm => HMACAlgorithm.new()} = defaults.merge() @secret_key = secret_key @sep = [:sep] @salt = [:salt] @key_derivation = [:key_derivation] @digest_method = [:digest_method] @algorithm = [:algorithm] end |
Instance Method Details
#derive_key ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/itsdangerousr.rb', line 77 def derive_key case @key_derivation when 'concat' @digest_method.digest(@salt + @secret_key) when 'django-concat' @digest_method.digest(@salt + 'signer' + @secret_key) when 'hmac' hmac = OpenSSL::HMAC.new(@secret_key, @digest_method) hmac.update(@salt) hmac.digest() when 'none' @secret_key else raise TypeError, 'Unknown key derivation method' end end |
#get_signature(value) ⇒ Object
67 68 69 70 71 |
# File 'lib/itsdangerousr.rb', line 67 def get_signature(value) key = derive_key() sig = @algorithm.get_signature(key, value) Itsdangerousr.base64_encode(sig) end |
#sign(value) ⇒ Object
73 74 75 |
# File 'lib/itsdangerousr.rb', line 73 def sign(value) value + @sep + get_signature(value) end |
#unsign(signed_value) ⇒ Object
103 104 105 106 107 108 109 110 111 112 |
# File 'lib/itsdangerousr.rb', line 103 def unsign(signed_value) unless signed_value.include?('.') raise BadSignature, "No #{@sep} found in signed value" end value, _, sig = signed_value.rpartition(@sep) unless verify_signature(value, sig) raise BadSignature.new("Signature #{sig} does not match", value) end value end |
#validate(signed_value) ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'lib/itsdangerousr.rb', line 94 def validate(signed_value) begin unsign(signed_value) true rescue BadSignature false end end |
#verify_signature(value, sig) ⇒ Object
114 115 116 117 118 |
# File 'lib/itsdangerousr.rb', line 114 def verify_signature(value, sig) key = derive_key() sig = Itsdangerousr.base64_decode(sig) @algorithm.verify_signature(key, value, sig) end |