[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: passing via instance variable or regular ()

From: sam jam <lists@...>
Date: 2012-05-11 07:20:21 UTC
List: ruby-talk #395453
Using @ does have advantages as well though. Using () to pass variables
internally within the class leads to less readable code I think. For one
you need to pass variables down the chain even if you are not using them
at each point down the chain. That makes for very ugly code versus using
@ to leap frog methods.

I do see the benefit you mention about needing to call first before you
call last. In the following case

  def first
    name = "sam"
    last(name)
  end

   def last(first)
     name = first + " " + "jam"
   end

I could call last from some other class or method. But in some cases I
see no advantage here. Sometimes when I make classes they are for very
specific tasks, a bunch of methods that make up a larger system. The
steps for that system always need to be called in order. I suppose if I
wanted to reuse the steps in other places it would be best to use ().

I also noticed Robert mentioning that he would avoid using the name
variable as it is only used once. This brings me to a second question.
Sometimes I find that using variables in this way can improve code
readability as well. Perhaps I am writing a Feistel cipher and it makes
sense to name parts @l and @r during the encryption rounds. The
resulting cipher or plaintext is then @l + @r. I then need to remove the
padding from the resulting plaintext, so even though I pass @l and @r
only once to the remove padding method, it makes sense to say

ciphertext = @l + @r
remove_padding(ciphertext)

or is this needlessly cluttering my code with variables? I see a lot of
times in my code I use an = sign like this, to make it read more
clearly, but sometimes I also find myself doing it needlessly. How do
you feel about this?

Also in my code I did this instead

@ciphertext = @l + @r
remove_padding(@ciphertext)

I find that using instance variables helped me make the following code
look nicer

[code]

require 'openssl'
require 'narray'


class Lioness

  def initialize
    @block_size_in_kb = 100
    @hash_algorithm = OpenSSL::Digest::SHA256.new
  end

  def xor_strings(string1, string2)
    string1 = NArray.to_na(string1, "byte")
    string2 = NArray.to_na(string2, "byte")
    (string1 ^ string2).to_s
  end

  def generate_subkeys(key)

    @subkeys = Hash.new

    4.times do |i|
      @subkeys.store("key#{i}", @hash_algorithm.digest("#{i} #{key}"))
      @hash_algorithm.reset

    end
  end


  def pad_message(message)

    if message.bytesize == (@block_size_in_kb * 1000) then
    @padded_plaintext = message
    else
    bytes_to_pad = (@block_size_in_kb * 1000) - message.bytesize
    @padded_plaintext = message + 128.chr + ("\0" * (bytes_to_pad - 1))
    end
  end

  def remove_padding(message)
    if message.index("#{128.chr}") then
    padding_starts = message.index("#{128.chr}")
    @plaintext = message.byteslice(0...padding_starts)
    else
    @plaintext = message
    end
  end

  def encrypt(plaintext, key)

    if plaintext.bytesize > (@block_size_in_kb * 1000) then
    puts "Message size must be below #{@block_size_in_kb} kilobytes"
    end


    if plaintext.bytesize <= (@block_size_in_kb * 1000) then

    pad_message(plaintext)
    generate_subkeys(key)

    @l, @r = @padded_plaintext.byteslice(0..(@sha256.digest_length -
1)), @padded_plaintext.byteslice(@sha256.digest_length..-1)

    r_operation(@subkeys["key0"])
    l_operation(@subkeys["key1"])
    r_operation(@subkeys["key2"])
    l_operation(@subkeys["key3"])

    @ciphertext = @l + @r
    end
  end

  def decrypt(plaintext, key)

    generate_subkeys(key)
    @l, @r = plaintext.byteslice(0..(@hash_algorithm.digest_length -
1)), plaintext.byteslice(@hash_algorithm.digest_length..-1)

    l_operation(@subkeys["key3"])
    r_operation(@subkeys["key2"])
    l_operation(@subkeys["key1"])
    r_operation(@subkeys["key0"])

    padded_plaintext = @l + @r
    remove_padding(padded_plaintext)
  end

  def r_operation(subkey)
    cipher = OpenSSL::Cipher::Cipher.new 'AES-256-CTR'
    cipher.encrypt
    cipher.key = xor_strings(@l, subkey)
    ciphertext = cipher.update(@r)
    ciphertext << cipher.final
    @r = ciphertext
  end

  def l_operation(subkey)
    @l = xor_strings(@l, @hash_algorithm.digest(subkey + @r + subkey))
    @hash_algorithm.reset
  end

end
[/code]

-- 
Posted via http://www.ruby-forum.com/.

In This Thread