From 975bf61ddfc43e20e1ed3c0f4d183c97d5695905 Mon Sep 17 00:00:00 2001 From: Dan Milne Date: Fri, 2 Dec 2011 14:07:48 +1100 Subject: [PATCH] Keep the lib directory clean. --- lib/hsmr/component.rb | 38 +++++++++++++++++++++++++++++ lib/hsmr/key.rb | 56 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 lib/hsmr/component.rb create mode 100644 lib/hsmr/key.rb diff --git a/lib/hsmr/component.rb b/lib/hsmr/component.rb new file mode 100644 index 0000000..bd97c43 --- /dev/null +++ b/lib/hsmr/component.rb @@ -0,0 +1,38 @@ +module HSMR + class Component + include HSMR + attr_reader :key + attr_reader :length + + def component + @key + end + + def initialize(key=nil, length=DOUBLE) + ## Should check for odd parity + if key.nil? + key = generate(length) + else + key=key.gsub(/ /,'') + #raise TypeError, "Component argument expected" unless other.is_a? Component + end + @key = key.unpack('a2'*(key.length/2)).map{|x| x.hex}.pack('c'*(key.length/2)) + @length = @key.length + @key = @key + end + +# def xor(other) +# other = Component.new(other) unless other.is_a? Component +# raise TypeError, "Component argument expected" unless other.is_a? Component +# +# @a = @key.unpack('C2'*(@key.length/2)) +# @b = other.component.unpack('C2'*(other.component.length/2)) +# +# #result = @a.zip(@b).map {|x,y| x^y}.map {|z| z.to_s(16) }.join.upcase +# result = @a.zip(@b).map {|x,y| x^y}.map {|z| z.to_s(16) }.map {|c| c.length == 1 ? '0'+c : c }.join.upcase +# +# Key.new(result) +# end + + end +end diff --git a/lib/hsmr/key.rb b/lib/hsmr/key.rb new file mode 100644 index 0000000..4920a87 --- /dev/null +++ b/lib/hsmr/key.rb @@ -0,0 +1,56 @@ +module HSMR + class Key + include HSMR + + attr_reader :key + attr_reader :length + + def initialize(init=nil, length=DOUBLE) + return nil if (init.is_a? Array ) && (init.length == 0) + + init = init.first if (init.is_a? Array) && (init.length == 1) + + if init.is_a? Array + init.collect! {|c| ( (c.is_a? HSMR::Component) ? c : HSMR::Component.new(c) ) } + + raise TypeError, "Component argument expected" unless init.first.is_a? Component + + @key=HSMR::xor(init.pop, init).key + + elsif init.is_a? Component + @key = init.component + elsif init.is_a? String + key=init.gsub(/ /,'') + @key = key.unpack('a2'*(key.length/2)).map{|x| x.hex}.pack('c'*(key.length/2)) + elsif key.nil? + key = generate(length) + @key = key.unpack('a2'*(key.length/2)).map{|x| x.hex}.pack('c'*(key.length/2)) + end + @length = @key.length + end + + #def xor(other) + # other=Component.new(other) if other.is_a? String + # other=Component.new(other.to_s) if other.is_a? Key +# +# puts "other is #{other.class} - #{other.key}" +# +# raise TypeError, "Component argument expected" unless other.is_a? Component +# +# @a = @key.unpack('C2'*(@key.length/2)) +# @b = other.component.unpack('C2'*(other.length/2)) +# +# resultant = Key.new( @a.zip(@b). +# map {|x,y| x^y}. +# map {|z| z.to_s(16) }. +# map {|c| c.length == 1 ? '0'+c : c }. +# join.upcase ) +# resultant +# end +# +# def xor!(_key) +# @key = xor(_key).key +# end + + end +end