class GostMagma::MagmaCbc

Public Class Methods

new(key, iv) click to toggle source
# File lib/gost_magma/magma_cbc.rb, line 3
def initialize(key, iv)
  @key = key.dup.force_encoding('BINARY')
  @keys = []
  (0...8).each do |i|
    @keys << self.class.uint8ToUint32(@key[i*4...(i+1)*4].reverse)
  end
  
  @ctxR = iv.dup.force_encoding('BINARY')
end

Public Instance Methods

decrypt(data) click to toggle source
# File lib/gost_magma/magma_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, @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_magma/magma_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, @keys)
    outdata += encr_block
    @ctxR = @ctxR[BlockLengthInBytes..-1] + encr_block  
  end
  outdata
end