# frozen_string_literal: false
# = Ruby-space predefined Cipher subclasses
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
# This program is licensed under the same licence as Ruby.
# (See the file 'LICENCE'.)
%w(AES CAST5 BF DES IDEA RC2 RC4 RC5).each{|name|
klass = Class.new(Cipher){
define_method(:initialize){|*args|
cipher_name = args.inject(name){|n, arg| "#{n}-#{arg}" }
super(cipher_name.downcase)
%w(128 192 256).each{|keylen|
klass = Class.new(Cipher){
define_method(:initialize){|mode = "CBC"|
super("aes-#{keylen}-#{mode}".downcase)
const_set("AES#{keylen}", klass)
# cipher.random_key -> key
# Generate a random key with OpenSSL::Random.random_bytes and sets it to
# the cipher, and returns it.
# You must call #encrypt or #decrypt before calling this method.
str = OpenSSL::Random.random_bytes(self.key_len)
# Generate a random IV with OpenSSL::Random.random_bytes and sets it to the
# cipher, and returns it.
# You must call #encrypt or #decrypt before calling this method.
str = OpenSSL::Random.random_bytes(self.iv_len)
# This class is only provided for backwards compatibility.
class Cipher < Cipher; end
deprecate_constant :Cipher