Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > help tranlating perl expressions

Reply
Thread Tools

help tranlating perl expressions

 
 
David Bear
Guest
Posts: n/a
 
      09-28-2006
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 --
 
Reply With Quote
 
 
 
 
Erik Johnson
Guest
Posts: n/a
 
      09-28-2006

"David Bear" <(E-Mail Removed)> wrote in message
news:5452284.reKt6RD0Uf@teancum...

> 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


 
Reply With Quote
 
 
 
 
Fredrik Lundh
Guest
Posts: n/a
 
      09-28-2006
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:

http://docs.python.org/lib/module-hmac.html

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:

http://effbot.org/librarybook/md5.htm

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

</F>

 
Reply With Quote
 
David Bear
Guest
Posts: n/a
 
      09-28-2006
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:
>
> http://docs.python.org/lib/module-hmac.html
>
> 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:
>
> http://effbot.org/librarybook/md5.htm
>
> 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 --
 
Reply With Quote
 
Dennis Lee Bieber
Guest
Posts: n/a
 
      09-28-2006
On Thu, 28 Sep 2006 10:57:19 -0700, David Bear <(E-Mail Removed)>
declaimed the following in comp.lang.python:

> 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.


For the most part, it looks like they were trying to preset the
result to some sort of padding, then modifying parts of that to contain
the real data.

Since Python strings are immutable, one way to produce a right
padded string is just to concatenate the data with padding, then
slice...

res = "".join([data, "pad"*lngth])[:lngth]

The XOR needs to be done piecewise...; presuming both sides (a and
b) are same length (which I presume the padding is meant to achieve)

res = "".join([chr(ord(a[i]) ^ ord(b[i]) for i in len(a)])
--
Wulfraed Dennis Lee Bieber KD6MOG
http://www.velocityreviews.com/forums/(E-Mail Removed) (E-Mail Removed)
HTTP://wlfraed.home.netcom.com/
(Bestiaria Support Staff: (E-Mail Removed))
HTTP://www.bestiaria.com/
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Tranlating VB code into Perl to utilise Outlook Redemption Graham Perl Misc 3 03-18-2006 10:47 PM
Perl regular expressions help Rumpa Perl Misc 3 08-27-2005 03:24 AM
Perl Help - Windows Perl script accessing a Unix perl Script dpackwood Perl 3 09-30-2003 02:56 AM
perl regular expressions return last matched occurence? Dustin D. Perl 1 08-28-2003 01:51 AM
Add custom regular expressions to the validation list of available expressions Jay Douglas ASP .Net 0 08-15-2003 10:19 PM



Advertisments