help tranlating perl expressions

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • David Bear

    #1

    help tranlating perl expressions

    I am trying to translate some perl code to python and I need some advice on
    making fixed sized strings. The perl code creates a sha1 signatured using a
    key and a 'pad'. It creates fixed sized strings as follows:

    my $klen = length($key);
    my $blen = 64;
    my $ipad = chr(0x36)x$blen ;
    my $opad = chr(0x5c)x$blen ;

    I don't know if I ever seen any way in python of created a fixed size
    string. Can anyone show me how to implement the same statements in python?

    Next, it zero-fills a string to a certain size.

    if($klen <= $blen) {
    $key .= "\0"x($blen-length($key)); #zero-fill to blocksize
    } else {
    $key = sha1($key); #if longer, pre-hash key
    }

    Finally it concatenates and xors these strings together like this:

    return sha1($key^$opad . sha1($key^$ipad . $data));

    I when python XOR's strings, is it the same as when perl xor's them?

    --
    David Bear
    -- let me buy your intellectual property, I want to own your thoughts --
  • Erik Johnson

    #2
    Re: help tranlating perl expressions


    "David Bear" <david.bear@asu .eduwrote in message
    news:5452284.re Kt6RD0Uf@teancu m...
    my $klen = length($key);
    my $blen = 64;
    my $ipad = chr(0x36)x$blen ;
    my $opad = chr(0x5c)x$blen ;
    >
    I don't know if I ever seen any way in python of created a fixed size
    string. Can anyone show me how to implement the same statements in python?
    Certainly, you can create fixed-length strings in python:
    >>n = 7
    >>chr(0x36) * n
    '6666666'
    I when python XOR's strings, is it the same as when perl xor's them?
    No, XOR is a bitwise operation that does not apply to strings.
    >>5 ^ 0
    5
    >>5 ^ 0xF
    10
    >>'a' ^ 'b'
    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    TypeError: unsupported operand type(s) for ^: 'str' and 'str'

    See also the 'struct' module: http://docs.python.org/lib/module-struct.html


    Comment

    • Fredrik Lundh

      #3
      Re: help tranlating perl expressions

      David Bear wrote:
      I am trying to translate some perl code to python and I need some
      advice on making fixed sized strings.
      looks like you're reimplementing HMAC; there's no need to do that in
      Python, really, since it's part of the standard library:

      Source code: Lib/hmac.py This module implements the HMAC algorithm as described by RFC 2104. The interface allows to use any hash function with a fixed digest size. In particular, extendable output...


      pass in hashlib.sha1 instead of the default, and you're done.

      if you insist on doing it yourself, read on:
      my $ipad = chr(0x36)x$blen ;
      my $opad = chr(0x5c)x$blen ;
      >
      I don't know if I ever seen any way in python of created a fixed size
      string. Can anyone show me how to implement the same statements in python?
      just remove all the junk, and use multiply instead of "x":

      ipad = chr(0x36) * blen
      opad = chr(0x5c) * blen

      however, Python strings are not mutable, so to implement the rest of
      that algorithm, you probably want to use a list or array object instead.
      the md5-example-4.py script on this page shows one way to do that:



      to get a SHA-1 hmac, you have to replace "md5" with "sha".

      </F>

      Comment

      • David Bear

        #4
        Re: help tranlating perl expressions

        Fredrik Lundh wrote:
        David Bear wrote:
        >
        I am trying to translate some perl code to python and I need some
        advice on making fixed sized strings.
        >
        looks like you're reimplementing HMAC; there's no need to do that in
        Python, really, since it's part of the standard library:
        >
        Source code: Lib/hmac.py This module implements the HMAC algorithm as described by RFC 2104. The interface allows to use any hash function with a fixed digest size. In particular, extendable output...

        >
        pass in hashlib.sha1 instead of the default, and you're done.
        >
        if you insist on doing it yourself, read on:
        >
        > my $ipad = chr(0x36)x$blen ;
        > my $opad = chr(0x5c)x$blen ;
        >>
        >I don't know if I ever seen any way in python of created a fixed size
        >string. Can anyone show me how to implement the same statements in
        >python?
        >
        just remove all the junk, and use multiply instead of "x":
        >
        ipad = chr(0x36) * blen
        opad = chr(0x5c) * blen
        >
        however, Python strings are not mutable, so to implement the rest of
        that algorithm, you probably want to use a list or array object instead.
        the md5-example-4.py script on this page shows one way to do that:
        >

        >
        to get a SHA-1 hmac, you have to replace "md5" with "sha".
        >
        </F>
        Yes, this is what I am doing. Because I am using code sold to me by a vendor
        -- I was worried that they are doing something with it that had some
        dependencies on the way perl was making the digest. So I was trying to
        better understand the perl by doing it in python.

        --
        David Bear
        -- let me buy your intellectual property, I want to own your thoughts --

        Comment

        Working...