Module: Blowfish::Padding

Defined in:
lib/blowfish/padding.rb

Constant Summary collapse

MODES =
[:none, :spaces, :ansi_x923]

Class Method Summary collapse

Class Method Details

.pad(s, mode = nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/blowfish/padding.rb', line 7

def self.pad(s, mode = nil)
  mode ||= :ansi_x923
  unless MODES.include?(mode)
    fail UnknownPaddingModeError, 'Invalid padding mode'
  end

  l = 8 - (s.bytes.count % 8)
  case mode
  when :none
    if s.bytes.count % 8 != 0
      fail InvalidDataSizeError, 'Data size should be divisible by 8'
    end
  when :ansi_x923
    s += 0.chr * (l - 1) + l.chr
  when :spaces
    s += ' ' * l
  end
  s
end

.unpad(s, mode = nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/blowfish/padding.rb', line 27

def self.unpad(s, mode = nil)
  mode ||= :ansi_x923
  sz = s.bytes.count

  unless MODES.include?(mode)
    fail UnknownPaddingModeError, 'Invalid padding mode'
  end

  fail InvalidDataSizeError, 'Invalid cipher text size' if sz % 8 != 0

  case mode
  when :ansi_x923
    last = s[-1].bytes.to_a[-1]
    s = s.byteslice(0, sz - last)
  when :spaces
    s = s.byteslice(0, sz - 8) + s.byteslice(sz - 8, 8).rstrip
  end
  s
end