Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby - unsupported cipher algorithm (AES-256-GCM)

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?

like image 855
user3813959 Avatar asked Jul 07 '14 20:07

user3813959


1 Answers

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.

like image 77
tessi Avatar answered Oct 13 '22 20:10

tessi