/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.core.db.ant;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.rhq.core.util.Base64;
/**
* Encrypts a string. You can optionally have it base64 encode the MD5 string (which is the default). Set the "base64"
* attribute to "false" if you do not want the string base64 encoded.
*/
public class MD5Task extends Task {
private String value;
private String property;
private boolean base64 = true;
public void setValue(String s) {
value = s;
}
public void setProperty(String s) {
property = s;
}
public void setBase64(boolean b) {
base64 = b;
}
/**
* @see org.apache.tools.ant.Task#execute()
*/
public void execute() throws BuildException {
validateAttributes();
MessageDigest message_digest;
try {
message_digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new BuildException(e); // should never occur; this would be bad - JRE has this builtin
}
byte[] md5_bytes = message_digest.digest(value.getBytes());
String md5;
if (base64) {
md5 = Base64.encode(md5_bytes);
} else {
// put the md5 bytes in string form
StringBuilder md5_string = new StringBuilder(md5_bytes.length * 2);
for (byte md5_byte : md5_bytes) {
int hi = (md5_byte >> 4) & 0xf;
int lo = md5_byte & 0xf;
md5_string.append(Character.forDigit(hi, 16));
md5_string.append(Character.forDigit(lo, 16));
}
md5 = md5_string.toString();
}
Project this_project = getProject();
this_project.setNewProperty(property, md5);
return;
}
private void validateAttributes() throws BuildException {
if (value == null) {
throw new BuildException("value==null");
}
if (property == null) {
throw new BuildException("property==null");
}
}
}