org.python.modules.MD5Object Maven / Gradle / Ivy
Go to download
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
// Copyright (c) Corporation for National Research Initiatives
package org.python.modules;
import org.python.core.*;
// Implementation of the MD5 object as returned from md5.new()
public class MD5Object extends PyObject
{
private String data;
public int digest_size = 16;
public MD5Object(String s) {
data = s;
}
public MD5Object(PyObject arg) {
this("");
update(arg);
}
public PyObject update(PyObject arg) {
if (!(arg instanceof PyString))
// TBD: this should be able to call safeRepr() on the arg, but
// I can't currently do this because safeRepr is protected so
// that it's not accessible from Python. This is bogus;
// arbitrary Java code should be able to get safeRepr but we
// still want to hide it from Python. There should be another
// way to hide Java methods from Python.
throw Py.TypeError("argument 1 expected string");
data += arg.toString();
return Py.None;
}
public PyObject digest() {
md md5obj = md.new_md5(data);
md5obj.calc();
// this is for compatibility with CPython's output
String s = md5obj.toString();
char[] x = new char[s.length() / 2];
for (int i=0, j=0; i < s.length(); i+=2, j++) {
String chr = s.substring(i, i+2);
x[j] = (char)java.lang.Integer.parseInt(chr, 16);
}
return new PyString(new String(x));
}
public PyObject hexdigest() {
md md5obj = md.new_md5(data);
md5obj.calc();
// this is for compatibility with CPython's output
return new PyString(md5obj.toString());
}
public PyObject copy() {
return new MD5Object(data);
}
}