/* * SignHandler.java * * Created on den 9 januari 2005, 15:49 */ import java.security.*; import java.io.*; /** * * @author Henrik Johansson */ public class SignHandler { private String keystoreName; private String keystorepw; private String alias; private String keypw; private String dataName; private String certificateName; private String signatureName; private String signatureAlgorithm = "SHA1withDSA"; private int bufSize = 1024; /** Creates a new instance of SignHandler */ public SignHandler() { } /** Creates a new instance of SignHandler */ public SignHandler(String keystoreName, String keystorepw, String alias, String keypw, String dataName, String certificateName, String signatureName) { this.setKeystoreName(keystoreName); this.setKeystorepw(keystorepw); this.setAlias(alias); this.setKeypw(keypw); this.setDataName(dataName); this.setCertificateName(certificateName); this.setSignatureName(signatureName); } public void createSignature() { try { // ladda keystore KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream ksfis = new FileInputStream(getKeystoreName()); ks.load(ksfis, getKeystorepw().toCharArray()); ksfis.close(); // ladda privata nyckeln KeyStore.PasswordProtection pw = new KeyStore.PasswordProtection(getKeypw().toCharArray()); PrivateKey pk = ((KeyStore.PrivateKeyEntry) ks.getEntry(getAlias(), pw)).getPrivateKey(); // skapa signatur Signature s = Signature.getInstance(getSignatureAlgorithm()); s.initSign(pk); FileInputStream input = new FileInputStream(getDataName()); byte[] buf = new byte[getBufSize()]; int count = 0; while((count = input.read(buf, 0, getBufSize())) != -1) { s.update(buf, 0, count); } input.close(); byte[] signature = s.sign(); // spara signaturen FileOutputStream out = new FileOutputStream(getSignatureName()); out.write(signature); out.close(); // spara certifikat java.security.cert.Certificate c = ks.getCertificate(getAlias()); FileOutputStream certfos = new FileOutputStream(getCertificateName()); ObjectOutputStream cert = new ObjectOutputStream(certfos); cert.writeObject(c); cert.close(); certfos.close(); } catch(Exception e) { e.printStackTrace(); } } /** * @param args the command line arguments */ public static void main(String[] args) { if(args.length != 7) { System.err.println("SignHandler måste anropas med sju argument, ."); System.exit(1); } SignHandler sh = new SignHandler(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); sh.createSignature(); } public String getKeystoreName() { return keystoreName; } public void setKeystoreName(String keystoreName) { this.keystoreName = keystoreName; } public String getKeystorepw() { return keystorepw; } public void setKeystorepw(String keystorepw) { this.keystorepw = keystorepw; } public String getAlias() { return alias; } public void setAlias(String alias) { this.alias = alias; } public String getKeypw() { return keypw; } public void setKeypw(String keypw) { this.keypw = keypw; } public String getDataName() { return dataName; } public void setDataName(String dataName) { this.dataName = dataName; } public String getCertificateName() { return certificateName; } public void setCertificateName(String certificateName) { this.certificateName = certificateName; } public String getSignatureName() { return signatureName; } public void setSignatureName(String signatureName) { this.signatureName = signatureName; } public String getSignatureAlgorithm() { return signatureAlgorithm; } public void setSignatureAlgorithm(String signatureAlgorithm) { this.signatureAlgorithm = signatureAlgorithm; } public int getBufSize() { return bufSize; } public void setBufSize(int bufSize) { this.bufSize = bufSize; } }