package edu.pdx.cs410J.security;
import java.io.*;
import java.security.*;
import java.security.spec.*;
/**
* This program verifies that a given message was signed by the person
* with a given public key.
*/
public class VerifyMessage {
public static void main(String[] args) {
String fileName = args[0];
String digestName = args[1];
String message = args[2];
try {
// Read in key from file
FileInputStream fis = new FileInputStream(fileName);
byte[] encodedKey = new byte[fis.available()];
fis.read(encodedKey);
fis.close();
X509EncodedKeySpec spec =
new X509EncodedKeySpec(encodedKey);
KeyFactory factory =
KeyFactory.getInstance("DSA", "SUN");
PublicKey publicKey = factory.generatePublic(spec);
// Read the digest
fis = new FileInputStream(digestName);
byte[] digest = new byte[fis.available()];
fis.read(digest);
fis.close();
// Compute DSA signature
Signature sig = Signature.getInstance("DSA");
sig.initVerify(publicKey);
sig.update(message.getBytes());
if (sig.verify(digest)) {
System.out.println("Success");
} else {
System.out.println("Failure");
}
return;
} catch (IOException ex) {
ex.printStackTrace(System.err);
} catch (NoSuchProviderException ex) {
ex.printStackTrace(System.err);
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace(System.err);
} catch (InvalidKeySpecException ex) {
ex.printStackTrace(System.err);
} catch (SignatureException ex) {
ex.printStackTrace(System.err);
} catch (InvalidKeyException ex) {
ex.printStackTrace(System.err);
}
System.exit(1);
}
}