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

aes-gcm, encryption, openssl, ruby, security

Solution

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.

Problem

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?

Original source