I'm getting the error:
unsupported cipher algorithm (AES-256-GCM) (RuntimeError)
But I seem to have all the requirements:
Ruby version:
$ ruby --version
ruby 2.1.2p95
OpenSSL does list gcm:
$ openssl enc -help 2>&1 | grep gcm
-aes-128-ecb -aes-128-gcm -aes-128-ofb
-aes-192-ecb -aes-192-gcm -aes-192-ofb
-aes-256-ecb -aes-256-gcm -aes-256-ofb
Ruby interpreter:
$ irb
2.1.2 :001 > require 'openssl'; puts OpenSSL::VERSION
1.1.0
=> nil
2.1.2 :002 > OpenSSL::Cipher.ciphers.include? "aes-128-gcm"
=> true
And yet I'm getting errors running this code:
2.1.2 :001 > require 'openssl'
=> true
2.1.2 :002 > cipher = OpenSSL::Cipher::AES.new(128, :GCM)
RuntimeError: unsupported cipher algorithm (AES-128-GCM)
from /home/m/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/cipher.rb:27:in `initialize'
from /home/m/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/cipher.rb:27:in `block (3 levels) in <class:Cipher>'
from (irb):2:in `new'
from (irb):2
from /home/m/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'
How do I get GCM to work in ruby?
What works for me is
OpenSSL::Cipher.new('aes-128-gcm')
I am not sure why you get an error with your approach.
Edit:
It might be a upper/lower case issue. This might be an actual bug.
The following works:
OpenSSL::Cipher::AES.new(128, :CBC)
because we find "AES-128-CBC"
(all upper case) in OpenSSL::Cipher::AES.ciphers
. AES.new
seems to search its ciphers with upper case characters.
Thus, the following does not work:
OpenSSL::Cipher::AES.new(128, :GCM)
because it is "aes-128-gcm"
in the ciphers list.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With