com.sshtools.ssh.components.jce.AbstractDigest Maven / Gradle / Ivy
The newest version!
/**
* Copyright 2003-2016 SSHTOOLS Limited. All Rights Reserved.
*
* For product documentation visit https://www.sshtools.com/
*
* This file is part of J2SSH Maverick.
*
* J2SSH Maverick is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* J2SSH Maverick 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 J2SSH Maverick. If not, see .
*/
package com.sshtools.ssh.components.jce;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.sshtools.ssh.components.Digest;
import com.sshtools.util.ByteArrayWriter;
/**
* An abstract class that implements the
* {@link com.sshtools.ssh.components.Digest} interface to provide support for
* JCE based digests.
*
* @author Lee David Painter
*
*/
public class AbstractDigest implements Digest {
MessageDigest digest;
String jceAlgorithm;
public AbstractDigest(String jceAlgorithm) throws NoSuchAlgorithmException {
digest = JCEProvider.getProviderForAlgorithm(jceAlgorithm) == null ? MessageDigest
.getInstance(jceAlgorithm) : MessageDigest
.getInstance(jceAlgorithm,
JCEProvider.getProviderForAlgorithm(jceAlgorithm));
}
public byte[] doFinal() {
return digest.digest();
}
public void putBigInteger(BigInteger bi) {
byte[] data = bi.toByteArray();
putInt(data.length);
putBytes(data);
}
public void putByte(byte b) {
digest.update(b);
}
public void putBytes(byte[] data) {
digest.update(data, 0, data.length);
}
public void putBytes(byte[] data, int offset, int len) {
digest.update(data, offset, len);
}
public void putInt(int i) {
putBytes(ByteArrayWriter.encodeInt(i));
}
public void putString(String str) {
putInt(str.length());
putBytes(str.getBytes());
}
public void reset() {
digest.reset();
}
public String getProvider() {
return digest.getProvider().getName();
}
}