Skip to content

Instantly share code, notes, and snippets.

@nexces
Created December 11, 2012 13:01
Show Gist options
  • Save nexces/4258402 to your computer and use it in GitHub Desktop.
Save nexces/4258402 to your computer and use it in GitHub Desktop.
# CFB ENCRYPT
# 1. przygotować IV do ECB
# 2. zaszyfrować IV w trybie ECB
# 3. zabrać z wyjścia (2) z ECB [feedbackSize] bajtów z początku
# 4. StringXor [feedbackSize] bajtów wejścia z [feedbackSize] bajtami wyjścia ECB
# 5. Efekt (4) dodać do szyfrogramu
# 6. Efekt (4) wstawić na koniec IV do ECB z (1)
# 7. Usunąć [feedbackSize] bajtów z -początku- IV do ECB z (1)
require 'openssl'
input = 'abcdefghijklmnopqrstuwvxyz'
puts 'RUBY :: CFB from ECB'
puts ' IN: ' + input.bytesize.to_s + ' :: ' + input
for feedbackSize in 1..8
c = OpenSSL::Cipher.new('bf-ecb')
c.encrypt
c.key = '1234567890123456'
block = '00000000'
enc = c.update(block);
out = ''
pos = 0
# LOOP
while block = input.byteslice(pos, feedbackSize)
pos += feedbackSize
feedback = enc.byteslice(0, feedbackSize) # 3
enc = enc.byteslice(feedbackSize..8) # 7
sub = (block ^ feedback) # 4
out += sub # 5
block = enc + sub # 6
enc = c.update(block); # 2!!
end
# ENDLOOP
puts ' CFB OUT: ' + out.bytesize.to_s + ' :: ' + out.unpack('h*')[0] + ' :: feedbackSize: ' + feedbackSize.to_s
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment