By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,818 Members | 1,223 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,818 IT Pros & Developers. It's quick & easy.

help tranlating perl expressions

P: n/a
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 --
Sep 28 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a

"David Bear" <da********@asu.eduwrote 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
Sep 28 '06 #2

P: n/a
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>

Sep 28 '06 #3

P: n/a
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 --
Sep 28 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.