import eu.tpmusielak.bouncy.tsp.TSPException;
import eu.tpmusielak.bouncy.tsp.TimeStampResponse;
import eu.tpmusielak.securephoto.container.SPImage;
import eu.tpmusielak.securephoto.verification.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* Created by IntelliJ IDEA.
* User: Tomasz P. Musielak
* Date: 09.02.12
* Time: 12:11
*/
public class VerifierPrototype {
private List<Verifier> verifiers;
public VerifierPrototype() {
verifiers = new ArrayList<Verifier>();
verifiers.add(new RFC3161Timestamp("http://www.cryptopro.ru/tsp/tsp.srf"));
verifiers.add(new DummyVerifier());
}
public SPImage makeSPI(String inputFilename) throws IOException {
File file = new File(inputFilename);
InputStream inputStream = new FileInputStream(file);
int fileSize = (int) file.length();
int bytesRead = 0;
byte[] imageData = new byte[fileSize];
bytesRead = inputStream.read(imageData);
System.out.println(String.format("Bytes read: %d, file size: %d", bytesRead, fileSize));
SPImage spImage = SPImage.getInstance(imageData, verifiers);
inputStream.close();
return spImage;
}
public void saveSPI(SPImage image, String filename) throws IOException {
File file = new File(filename);
OutputStream outputStream = new FileOutputStream(file);
outputStream.write(image.toByteArray());
outputStream.close();
}
public SPImage openSPI(String filename) throws IOException, ClassNotFoundException {
File file = new File(filename);
InputStream inputStream = new FileInputStream(file);
int fileSize = (int) file.length();
int bytesRead = 0;
byte[] SPIData = new byte[fileSize];
bytesRead = inputStream.read(SPIData);
return SPImage.fromBytes(SPIData);
}
public void extractTimestampData(SPImage image) throws TSPException, IOException {
Map<Class<Verifier>, VerificationFactorData> verificationFactorData = image.getVerificationFactorData();
Class<RFC3161Timestamp> timestampDataClass = RFC3161Timestamp.class;
TimestampData timestampData = (TimestampData) verificationFactorData.get(timestampDataClass);
TimeStampResponse tsr = new TimeStampResponse(timestampData.getResponse());
System.out.println(tsr.getTimeStampToken().getTimeStampInfo().getGenTime());
}
public void printVerificationFactors(SPImage image) {
List<Class<Verifier>> verificationFactors = image.getVerificationFactors();
System.out.println("Verification factors:");
for (Class<Verifier> factorClass : verificationFactors) {
System.out.println(factorClass.getCanonicalName());
}
}
public void printVerifierData(SPImage image) {
Map<Class<Verifier>, VerificationFactorData> verificationFactorData = image.getVerificationFactorData();
for (VerificationFactorData data : verificationFactorData.values()) {
System.out.println(data.toString());
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, TSPException {
Scanner scanner = new Scanner(System.in);
String filename = scanner.next();
VerifierPrototype vp = new VerifierPrototype();
// SPImage image = vp.makeSPI("./SecurePhotoPrototype/res/picture.jpg");
// vp.saveSPI(image, "./SecurePhotoPrototype/pic3.spi");
// SPImage img = vp.openSPI("./SecurePhotoPrototype/SCIMG_20120209_174216.spi");
SPImage img = vp.openSPI(String.format("./SecurePhotoPrototype/%s", filename));
// vp.extractTimestampData(img);
vp.printVerificationFactors(img);
vp.printVerifierData(img);
}
}