Sha256: 1550444c0eddba86cc6d7e2c85c4e51e77a9619a3db3f21b6445603d6031f9ca

Contents?: true

Size: 822 Bytes

Versions: 5

Compression:

Stored size: 822 Bytes

Contents

class RC4

  def initialize(str)
    begin
      raise SyntaxError, "RC4: Key supplied is blank"  if str.eql?('')

      @q1, @q2 = 0, 0
      @key = []
      str.each_byte {|elem| @key << elem} while @key.size < 256
      @key.slice!(256..@key.size-1) if @key.size >= 256
      @s = (0..255).to_a
      j = 0 
      0.upto(255) do |i| 
        j = (j + @s[i] + @key[i] )%256
        @s[i], @s[j] = @s[j], @s[i]
      end    
    end
  end
  
  def encrypt!(text)
    process text
  end  
  
  def encrypt(text)
    process text.dup
  end 

  alias_method :decrypt, :encrypt
  
  private

  def process(text)
    text.unpack("C*").map { |c| c ^ round }.pack("C*")
  end
  
  def round
    @q1 = (@q1 + 1)%256
    @q2 = (@q2 + @s[@q1])%256
    @s[@q1], @s[@q2] = @s[@q2], @s[@q1]
    @s[(@s[@q1]+@s[@q2])%256]  
  end

end

Version data entries

5 entries across 4 versions & 2 rubygems

Version Path
embulk-input-druginfo_interview_form-0.1.0 vendor/bundle/ruby/2.4.0/gems/ruby-rc4-0.1.5/lib/rc4.rb
embulk-input-druginfo_interview_form-0.1.0 vendor/bundle/ruby/2.5.0/gems/ruby-rc4-0.1.5/lib/rc4.rb
ruby-rc4-0.1.5 lib/rc4.rb
ruby-rc4-0.1.4 lib/rc4.rb
ruby-rc4-0.1.3 lib/rc4.rb