Sha256: 532328946e7d439d50072bc94c07a1421415e3c42a52cac6f814d92938b86195

Contents?: true

Size: 1.08 KB

Versions: 5

Compression:

Stored size: 1.08 KB

Contents

require 'openssl'
require 'base64'

module Nexus
  class Cipher

    def initialize( pass, token = nil )
      @token = Base64.strict_decode64( token ) if token
      @token ||= OpenSSL::Random.random_bytes( 32 )

      iter = 20000
      key_len = 32
      @key = OpenSSL::PKCS5.pbkdf2_hmac_sha1( pass,
                                              @token,
                                              iter,
                                              key_len )
    end
    
    def cipher
      @c ||= OpenSSL::Cipher::AES.new( 256, :CBC )
    end
    private :cipher

    def token
      Base64.strict_encode64( @token ) 
    end

    def iv
      Base64.strict_encode64( @iv ) if @iv
    end

    def iv=( iv )
      @iv = Base64.strict_decode64( iv )
    end

    def encrypt( data )
      c = cipher
      c.encrypt
      c.key = @key
      @iv = c.random_iv
      Base64.strict_encode64( c.update( data ) + c.final )
    end

    def decrypt( data )
      c = cipher
      c.decrypt
      c.key = @key
      c.iv = @iv
      c.update( Base64.strict_decode64( data ) ) + c.final
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
nexus-1.4.0 lib/nexus/cipher.rb
nexus-1.3.0 lib/nexus/cipher.rb
nexus-1.2.3 lib/nexus/cipher.rb
nexus-1.2.1 lib/nexus/cipher.rb
nexus-1.2.0 lib/nexus/cipher.rb