Module: PCO::URL::Encryption
- Defined in:
- lib/pco/url/encryption.rb
Defined Under Namespace
Classes: Chunk, DecryptError, MissingKeyError
Constant Summary
collapse
- TABLE =
avoid vowels to not generate four-letter words, etc. this is important because those words can trigger spam filters when URLs are used in emails
"1bcd2fgh3jklmn4pqrstAvwxyz567890".freeze
Class Method Summary
collapse
Class Method Details
.decrypt(data, key: @default_key) ⇒ Object
76
77
78
79
80
81
82
83
|
# File 'lib/pco/url/encryption.rb', line 76
def decrypt(data, key: @default_key)
raise MissingKeyError, "default key or key: argument must be set" if key.nil?
iv, encrypted = case_corrected(data).split("Z").map { |part| decode(part) }
raise DecryptError, "not a valid string to decrypt" unless iv && encrypted
decrypter = cipher(:decrypt, key: key)
decrypter.iv = iv
decrypter.update(encrypted) + decrypter.final
end
|
.default_key=(key) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/pco/url/encryption.rb', line 63
def default_key=(key)
raise(<<~ERR) if defined?(@default_key) && @default_key != key
Don't change the default_key during the life of a process.
This configuration variable is meant to be set once on boot and not
touched again.
If your app needs to use multiple keys, pass them in explicitly to `encrypt`
and `decrypt`
ERR
@default_key = key
end
|
.encrypt(data, key: @default_key) ⇒ Object
85
86
87
88
89
90
|
# File 'lib/pco/url/encryption.rb', line 85
def encrypt(data, key: @default_key)
raise MissingKeyError, "default key or key: argument must be set" if key.nil?
crypter = cipher(:encrypt, key: key)
crypter.iv = iv = crypter.random_iv
"#{encode(iv)}Z#{encode(crypter.update(data) + crypter.final)}"
end
|