Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 101 additions & 53 deletions src/org/jdamico/bc/openpgp/tests/TestBCOpenPGP.java
Original file line number Diff line number Diff line change
@@ -1,90 +1,138 @@
package org.jdamico.bc.openpgp.tests;


import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.Base64;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import java.security.SignatureException;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openpgp.PGPException;
import org.jdamico.bc.openpgp.utils.PgpHelper;
import org.jdamico.bc.openpgp.utils.RSAKeyPairGenerator;
import org.junit.Test;


public class TestBCOpenPGP {

private boolean isArmored = false;
private String id = "damico";
private String passwd = "******";
private boolean integrityCheck = true;
private boolean isArmored = true;
private String id = "damico";
private String passwd = "******";
private boolean integrityCheck = true;


private String pubKeyFile = "test_out/pub.asc";
private String privKeyFile = "test_out/secret.asc";

private String plainTextFile = "test_out/plain-text.txt";
private String cipherTextFile = "test_out/cypher-text.asc";
private String decPlainTextFile = "test_out/dec-plain-text.txt";
private String signatureFile = "test_out/signature.txt";

@Before
public void setUp() throws Exception {
if (Files.notExists(Paths.get("test_out"))) {
Files.createDirectory(Paths.get("test_out"));
}

if (Files.notExists(Paths.get(plainTextFile))) {
byte[] rand = new byte[819200];
new SecureRandom().nextBytes(rand);
Files.write(Paths.get(plainTextFile), Base64.getEncoder().encode(rand));
}
}

@Test
public void genKeyPair() throws InvalidKeyException, NoSuchProviderException, SignatureException, IOException, PGPException, NoSuchAlgorithmException {

RSAKeyPairGenerator rkpg = new RSAKeyPairGenerator();

Security.addProvider(new BouncyCastleProvider());

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC");

kpg.initialize(1024);

KeyPair kp = kpg.generateKeyPair();

FileOutputStream out1 = new FileOutputStream(privKeyFile);
FileOutputStream out2 = new FileOutputStream(pubKeyFile);

rkpg.exportKeyPair(out1, out2, kp.getPublic(), kp.getPrivate(), id, passwd.toCharArray(), isArmored);
}

@Test
public void encrypt() throws NoSuchProviderException, IOException, PGPException {
long start = System.currentTimeMillis();

private String pubKeyFile = "/tmp/pub.dat";
private String privKeyFile = "/tmp/secret.dat";
FileInputStream pubKeyIs = new FileInputStream(pubKeyFile);
FileOutputStream cipheredFileIs = new FileOutputStream(cipherTextFile);
PgpHelper.getInstance().encryptFile(cipheredFileIs, plainTextFile, PgpHelper.getInstance().readPublicKey(pubKeyIs), isArmored, integrityCheck);
cipheredFileIs.close();
pubKeyIs.close();

private String plainTextFile = "/tmp/plain-text.txt"; //create a text file to be encripted, before run the tests
private String cipherTextFile = "/tmp/cypher-text.dat";
private String decPlainTextFile = "/tmp/dec-plain-text.txt";
private String signatureFile = "/tmp/signature.txt";
System.out.println("encrypt() takes " + (int) ((System.currentTimeMillis() - start) / 1000) + " seconds.");

@Test
public void genKeyPair() throws InvalidKeyException, NoSuchProviderException, SignatureException, IOException, PGPException, NoSuchAlgorithmException {
byte[] orgF = Files.readAllBytes(Paths.get(plainTextFile));
byte[] newF = Files.readAllBytes(Paths.get(cipherTextFile));

RSAKeyPairGenerator rkpg = new RSAKeyPairGenerator();
assertNotEquals(Arrays.toString(orgF), Arrays.toString(newF));
}

Security.addProvider(new BouncyCastleProvider());
@Test
public void decrypt() throws Exception {
long start = System.currentTimeMillis();

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC");
FileInputStream cipheredFileIs = new FileInputStream(cipherTextFile);
FileInputStream privKeyIn = new FileInputStream(privKeyFile);
FileOutputStream plainTextFileIs = new FileOutputStream(decPlainTextFile);
PgpHelper.getInstance().decryptFile(cipheredFileIs, plainTextFileIs, privKeyIn, passwd.toCharArray());
cipheredFileIs.close();
plainTextFileIs.close();
privKeyIn.close();

kpg.initialize(1024);
System.out.println("decrypt() takes " + (int) ((System.currentTimeMillis() - start) / 1000) + " seconds.");

KeyPair kp = kpg.generateKeyPair();
byte[] orgF = Files.readAllBytes(Paths.get(plainTextFile));
byte[] newF = Files.readAllBytes(Paths.get(decPlainTextFile));

FileOutputStream out1 = new FileOutputStream(privKeyFile);
FileOutputStream out2 = new FileOutputStream(pubKeyFile);
assertArrayEquals(orgF, newF);
}

rkpg.exportKeyPair(out1, out2, kp.getPublic(), kp.getPrivate(), id, passwd.toCharArray(), isArmored);
@Test
public void signAndVerify() throws Exception {
long start = System.currentTimeMillis();

FileInputStream privKeyIn = new FileInputStream(privKeyFile);
FileInputStream pubKeyIs = new FileInputStream(pubKeyFile);
FileInputStream plainTextInput = new FileInputStream(plainTextFile);
FileOutputStream signatureOut = new FileOutputStream(signatureFile);

}
// todo: remove that?
// byte[] bIn = PgpHelper.getInstance().inputStreamToByteArray(plainTextInput);

@Test
public void encrypt() throws NoSuchProviderException, IOException, PGPException{
FileInputStream pubKeyIs = new FileInputStream(pubKeyFile);
FileOutputStream cipheredFileIs = new FileOutputStream(cipherTextFile);
PgpHelper.getInstance().encryptFile(cipheredFileIs, plainTextFile, PgpHelper.getInstance().readPublicKey(pubKeyIs), isArmored, integrityCheck);
cipheredFileIs.close();
pubKeyIs.close();
}
byte[] sig = PgpHelper.getInstance().createSignature(plainTextFile, privKeyIn, signatureOut, passwd.toCharArray(), true);

@Test
public void decrypt() throws Exception{
boolean res = PgpHelper.getInstance().verifySignature(plainTextFile, sig, pubKeyIs);

FileInputStream cipheredFileIs = new FileInputStream(cipherTextFile);
FileInputStream privKeyIn = new FileInputStream(privKeyFile);
FileOutputStream plainTextFileIs = new FileOutputStream(decPlainTextFile);
PgpHelper.getInstance().decryptFile(cipheredFileIs, plainTextFileIs, privKeyIn, passwd.toCharArray());
cipheredFileIs.close();
plainTextFileIs.close();
privKeyIn.close();
}
System.out.println("signAndVerify() takes " + (int) ((System.currentTimeMillis() - start) / 1000) + " seconds.");

@Test
public void signAndVerify() throws Exception{
FileInputStream privKeyIn = new FileInputStream(privKeyFile);
FileInputStream pubKeyIs = new FileInputStream(pubKeyFile);
FileInputStream plainTextInput = new FileInputStream(plainTextFile);
FileOutputStream signatureOut = new FileOutputStream(signatureFile);

byte[] bIn = PgpHelper.getInstance().inputStreamToByteArray(plainTextInput);
byte[] sig = PgpHelper.getInstance().createSignature(plainTextFile, privKeyIn, signatureOut, passwd.toCharArray(), true);
PgpHelper.getInstance().verifySignature(plainTextFile, sig, pubKeyIs);
}
assertTrue(res);
}

}
}
Loading