package com.bao.examples.security;
import java.io.*;
import java.security.*;
//http://docs.oracle.com/javase/tutorial/security/apisign/index.html
//http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/security/apisign/examples/GenSig.java
class GenSig
{
public static void main(String[] args)
{
/* Generate a DSA signature */
if(args.length != 1)
{
System.out.println("Usage: GenSig nameOfFileToSign");
}
else
try
{
/* Generate a key pair */
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
/*
* Create a Signature object and initialize it with the private
* key
*/
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
dsa.initSign(priv);
/* Update and sign the data */
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bufin = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while(bufin.available() != 0)
{
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
}
;
bufin.close();
/*
* Now that all the data to be signed has been read in, generate
* a signature for it
*/
byte[] realSig = dsa.sign();
/* Save the signature in a file */
FileOutputStream sigfos = new FileOutputStream("sig");
sigfos.write(realSig);
sigfos.close();
/* Save the public key in a file */
byte[] key = pub.getEncoded();
FileOutputStream keyfos = new FileOutputStream("suepk");
keyfos.write(key);
keyfos.close();
}
catch(Exception e)
{
System.err.println("Caught exception " + e.toString());
}
};
}