class GostKuznyechik::KuznyechikCbc

Public Class Methods

new(key, iv) click to toggle source
# File lib/gost_kuznyechik/kuznyechik_cbc.rb, line 3
def initialize(key, iv)
  @key = key.dup.force_encoding('BINARY')
  # @inkey => [4] uint_64, native-endian
  @inkey = self.class.keyToNumbers(@key)
  @ctxR = iv.dup.force_encoding('BINARY')
  # @keys => [10*2] uint_64, native-endian
  @encrypt_keys = self.class.expandEncryptKeys(@inkey)
  @decrypt_keys = self.class.expandDecryptKeys(@inkey)
end

Public Instance Methods

decrypt(data) click to toggle source
# File lib/gost_kuznyechik/kuznyechik_cbc.rb, line 28
def decrypt(data)
  data_len = data.length
  outdata = ''
  (0...(data_len / BlockLengthInBytes)).each do |i|
    encr_block = data[(i * BlockLengthInBytes)...((i+1) * BlockLengthInBytes)]
    decr_block = self.class.decryptBlock(encr_block, @decrypt_keys)
    (0...BlockLengthInBytes).each do |j|
      decr_block[j] = (@ctxR[j].ord ^ decr_block[j].ord).chr
    end
    outdata += decr_block
    @ctxR = @ctxR[BlockLengthInBytes..-1] + encr_block
  end
  outdata
end
encrypt(data) click to toggle source
# File lib/gost_kuznyechik/kuznyechik_cbc.rb, line 13
def encrypt(data)
  data_len = data.length
  outdata = ''
  (0...(data_len / BlockLengthInBytes)).each do |i|
    encr_block = data[(i * BlockLengthInBytes)...((i+1) * BlockLengthInBytes)]      
    (0...BlockLengthInBytes).each do |j|
      encr_block[j] = (@ctxR[j].ord ^ data[i * BlockLengthInBytes + j].ord).chr
    end
    encr_block = self.class.encryptBlock(encr_block, @encrypt_keys)
    outdata += encr_block
    @ctxR = @ctxR[BlockLengthInBytes..-1] + encr_block  
  end
  outdata
end