diff options
author | Stephen Touset <stephen@squareup.com> | 2017-02-23 14:41:40 -0800 |
---|---|---|
committer | Stephen Touset <stephen@squareup.com> | 2017-03-01 14:54:34 -0800 |
commit | 6aa6f9ae44ed999e972a58f729bdc5b2fcdc127b (patch) | |
tree | a16ecd4f51bdf20b88c566cb4aebe0bf3ae8cf88 /railties/lib | |
parent | 771637269dca82782b30e0ef0ef96b5428c6defb (diff) | |
download | rails-6aa6f9ae44ed999e972a58f729bdc5b2fcdc127b.tar.gz rails-6aa6f9ae44ed999e972a58f729bdc5b2fcdc127b.tar.bz2 rails-6aa6f9ae44ed999e972a58f729bdc5b2fcdc127b.zip |
Default Secrets to AES-128-GCM, using ActiveSupport::MessageEncryptor
Fixes #28135.
Diffstat (limited to 'railties/lib')
-rw-r--r-- | railties/lib/rails/secrets.rb | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/railties/lib/rails/secrets.rb b/railties/lib/rails/secrets.rb index a083914109..3d68e30d1d 100644 --- a/railties/lib/rails/secrets.rb +++ b/railties/lib/rails/secrets.rb @@ -1,4 +1,4 @@ -require "yaml" +require "active_support/message_encryptor" module Rails # Greatly inspired by Ara T. Howard's magnificent sekrets gem. 😘 @@ -12,6 +12,8 @@ module Rails end end + CIPHER = "aes-128-gcm" + @read_encrypted_secrets = false @root = File # Wonky, but ensures `join` uses the current directory. @@ -30,20 +32,22 @@ module Rails end def generate_key - cipher = new_cipher - SecureRandom.hex(cipher.key_len)[0, cipher.key_len] + SecureRandom.hex( + OpenSSL::Cipher.new(CIPHER).key_len + ) end def key - ENV["RAILS_MASTER_KEY"] || read_key_file || handle_missing_key + [(ENV["RAILS_MASTER_KEY"] || read_key_file || handle_missing_key)] + .pack("H*") end - def encrypt(text) - cipher(:encrypt, text) + def encrypt(data) + encryptor.encrypt_and_sign(data) end def decrypt(data) - cipher(:decrypt, data) + encryptor.decrypt_and_verify(data) end def read @@ -97,14 +101,8 @@ module Rails end end - def new_cipher - OpenSSL::Cipher.new("aes-256-cbc") - end - - def cipher(mode, data) - cipher = new_cipher.public_send(mode) - cipher.key = key - cipher.update(data) << cipher.final + def encryptor + @encryptor ||= ActiveSupport::MessageEncryptor.new(key, cipher: CIPHER) end end end |