yesterday,we talked about missing md5 module.
first,I found RC1 without md5 module,
second,I found md5.py that be provide by
Seo(http://sparcs.kaist.ac.kr/~tinuviel/fepy/lib/) is not working .
so,I write a builtin module ,put it into source,and compile it.
md5 module can work !
below is md5 module's code:
=======================================
using System;
using System.Collections.Generic;
using System.Text;
using IronPython.Runtime;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
[assembly: PythonModule("md5", typeof(IronPython.Modules.PythonMD5))]
namespace IronPython.Modules
{
[PythonType("md5")]
public class PythonMD5
{
private MD5 _provider;
private readonly Encoding raw = Encoding.GetEncoding("iso-8859-1");
private byte[] empty;
public PythonMD5()
{
_provider = MD5.Create();
empty = raw.GetBytes("");
}
public PythonMD5(string arg)
: this()
{
this.Update(arg);
}
internal PythonMD5(MD5 provider)
: this()
{
_provider = provider;
}
[PythonName("new")]
public static PythonMD5
PythonNew([DefaultParameterValue(null)] string arg)
{
PythonMD5 obj;
if (arg == null)
obj = new PythonMD5();
else
obj = new PythonMD5(arg);
return obj;
}
[PythonName("md5")]
public static PythonMD5
PythonNew2([DefaultParameterValue(null)] string arg)
{
return PythonMD5.PythonNew(arg);
}
[PythonName("update")]
public void Update(string arg)
{
byte[] bytes = raw.GetBytes(arg);
_provider.TransformBlock(bytes, 0, bytes.Length, bytes, 0);
}
[PythonName("digest")]
public string Digest()
{
_provider.TransformFinalBlock(empty, 0, 0);
return raw.GetString(_provider.Hash);
}
[PythonName("hexdigest")]
public string HexDigest()
{
_provider.TransformFinalBlock(empty, 0, 0);
string hexString = "";
foreach (byte b in empty)
{
hexString += b.ToString("X2");
}
return hexString;
}
[PythonName("copy")]
public PythonMD5 Clone()
{
PythonMD5 obj = new PythonMD5(this._provider);
return obj;
}
}
}
===================================
I test it using example in Python Library Reference,
test code is:
===================================
For example, to obtain the digest of the string 'Nobody inspects the
spammish repetition':
>>> import md5
>>> m = md5.new()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
More condensed:
>>> md5.new("Nobody inspects the spammish repetition").digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
======================================
a suggestion:
you should notice that I write a static method "PythonNew2",because I
would like to implement this:
md5( [arg])
For backward compatibility reasons, this is an alternative name for
the new() function.
therefore I have to write reduplicate method,but if PythonName
attribute can accept multi args,the problem can be solved easily.
--
Once in a Redmoon
_______________________________________________
users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com