class Stribog::ByteVector

byte_array

@author WildDima

Attributes

vector[R]

Public Class Methods

convert(vector) click to toggle source
# File lib/stribog/byte_vector.rb, line 10
def self.convert(vector)
  case vector
  when String
    new(vector.unpack('C*'))
  when Numeric
    # TODO: REFACTOR
    bin = vector.to_s(2)
    size = 2**Math.log2(vector.size * 8).ceil
    new(['0' * (size - bin.size) + bin].pack('B*').unpack('C*'))
  end
end
new(vector) click to toggle source
# File lib/stribog/byte_vector.rb, line 22
def initialize(vector)
  @vector = vector
end

Public Instance Methods

+(other) click to toggle source
# File lib/stribog/byte_vector.rb, line 32
def +(other)
  self.class.new vector + other.to_a
end
[](index) click to toggle source
# File lib/stribog/byte_vector.rb, line 73
def [](index)
  vector[index]
end
^(other) click to toggle source
# File lib/stribog/byte_vector.rb, line 26
def ^(other)
  vec = [other, self].sort_by(&:size).reverse.map(&:reverse)
  self.class.new vec[0].map
                       .with_index { |bit, index| bit ^ (vec[1][index] || 0) }.reverse
end
addition(size: 64) click to toggle source
# File lib/stribog/byte_vector.rb, line 36
def addition(size: 64)
  return self if vector.size >= size
  self.class.new(Array.new(size - vector.size, 0) + vector)
end
bit64() click to toggle source
# File lib/stribog/byte_vector.rb, line 51
def bit64
  @bit64 ||= byte8.map { |b| [b].pack('Q*').unpack('B*') }.flatten
end
byte8() click to toggle source
# File lib/stribog/byte_vector.rb, line 47
def byte8
  @byte8 ||= vector.pack('C*').unpack('Q*')
end
each() { |v| ... } click to toggle source
# File lib/stribog/byte_vector.rb, line 77
def each
  return vector.each unless block_given?
  vector.each do |v|
    yield(v)
  end
end
padding(size: 64) click to toggle source
# File lib/stribog/byte_vector.rb, line 41
def padding(size: 64)
  return self if vector.size >= size
  # (self.class.new([1]) + vector).addition_by_zeros(size: 512)
  self.class.new([1] + vector).addition(size: size)
end
reverse() click to toggle source
# File lib/stribog/byte_vector.rb, line 92
def reverse
  self.class.new vector.reverse
end
size() click to toggle source
# File lib/stribog/byte_vector.rb, line 69
def size
  @size ||= vector.size
end
to_a() click to toggle source
# File lib/stribog/byte_vector.rb, line 84
def to_a
  vector
end
to_dec() click to toggle source
# File lib/stribog/byte_vector.rb, line 55
def to_dec
  # to_s.to_i(2)
  vector.pack('C*').unpack('B*').first.to_i(2)
end
to_hex() click to toggle source
# File lib/stribog/byte_vector.rb, line 60
def to_hex
  to_s.to_i(2).to_s(16)
end
to_s() click to toggle source
# File lib/stribog/byte_vector.rb, line 64
def to_s
  # vector.pack('C*')
  vector
end
zero?() click to toggle source
# File lib/stribog/byte_vector.rb, line 88
def zero?
  vector.any?(&:zero?)
end