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