class MessageVerifier::Verifier

Defined in:

message_verifier/verifier.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(secret : String, digest : OpenSSL::Algorithm = OpenSSL::Algorithm::SHA1) #

[View source]

Instance Method Detail

def generate(message : String, expires_at : Time | Nil = nil, expires_in : Int64 | Nil = nil, purpose : String | Symbol | Nil = nil) #

Generates a signed message for the provided value.

The message is signed with the +MessageVerifier+'s secret. Without knowing the secret, the original value cannot be extracted from the message.

verifier = MessageVerifier::Verifier.new 's3Krit' verifier.generate 'a private message' # => "BAhJIhRwcml2YXRlLW1lc3NhZ2UGOgZFVA==--e2d724331ebdee96a10fb99b089508d1c72bd772"


[View source]
def valid_message?(signed_message : String) #

Checks if a signed message could have been generated by signing an object with the +MessageVerifier+'s secret.

verifier = MessageVerifier::Verifier.new 's3Krit' signed_message = verifier.generate 'a private message' verifier.valid_message?(signed_message) # => true

tampered_message = signed_message.chop # editing the message invalidates the signature verifier.valid_message?(tampered_message) # => false


[View source]
def verified(signed_message, purpose : String | Symbol | Nil = nil, parser : Nil | Symbol = :JSON) #

Decodes the signed message using the +MessageVerifier+'s secret.

verifier = MessageVerifier::Verifier.new 's3Krit'

signed_message = verifier.generate 'a private message' verifier.verified(signed_message) # => 'a private message'

Returns +nil+ if the message was not signed with the same secret.

other_verifier = MessageVerifier::Verifier.new 'd1ff3r3nt-s3Krit' other_verifier.verified(signed_message) # => nil

Returns +nil+ if the message is not Base64-encoded.

invalid_message = "f--46a0120593880c733a53b6dad75b42ddc1c8996d" verifier.verified(invalid_message) # => nil


[View source]
def verified!(signed_message, purpose : String | Symbol | Nil = nil, parser : Nil | Symbol = :JSON) #

Same as #verify, however it raises an exception instead of returning nil


[View source]
def verify(signed_message : String, purpose : String | Symbol | Nil = nil, parser : Nil | Symbol = :JSON) #

Decodes the signed message using the +MessageVerifier+'s secret.

verifier = MessageVerifier::Verifier.new 's3Krit' signed_message = verifier.generate 'a private message'

verifier.verify(signed_message) # => 'a private message'

Raises +InvalidSignature+ if the message was not signed with the same secret or has expired

other_verifier = MessageVerifier::Verifier.new 'd1ff3r3nt-s3Krit' other_verifier.verify(signed_message) # => ActiveSupport::MessageVerifier::InvalidSignature


[View source]