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