]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/testUtils/ConfiguredTest.java
a6bbed85be7c6684a6dfabeaaa3370f952aecd96
[gigi.git] / tests / org / cacert / gigi / testUtils / ConfiguredTest.java
1 package org.cacert.gigi.testUtils;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.ObjectInputStream;
8 import java.io.ObjectOutputStream;
9 import java.security.GeneralSecurityException;
10 import java.security.KeyPair;
11 import java.security.KeyPairGenerator;
12 import java.security.Signature;
13 import java.util.Properties;
14
15 import org.cacert.gigi.database.DatabaseConnection;
16 import org.cacert.gigi.util.PEM;
17 import org.junit.BeforeClass;
18
19 import sun.security.pkcs10.PKCS10;
20 import sun.security.pkcs10.PKCS10Attributes;
21 import sun.security.x509.X500Name;
22
23 public class ConfiguredTest {
24
25     static Properties testProps = new Properties();
26
27     public static Properties getTestProps() {
28         return testProps;
29     }
30
31     private static boolean envInited = false;
32
33     @BeforeClass
34     public static void initEnvironment() throws IOException {
35         if (envInited) {
36             return;
37         }
38         envInited = true;
39         testProps.load(new FileInputStream("config/test.properties"));
40         if ( !DatabaseConnection.isInited()) {
41             DatabaseConnection.init(testProps);
42         }
43     }
44
45     public static KeyPair generateKeypair() throws GeneralSecurityException {
46         KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
47         kpg.initialize(4096);
48         KeyPair keyPair = null;
49         File f = new File("testKeypair");
50         if (f.exists()) {
51             try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f))) {
52                 keyPair = (KeyPair) ois.readObject();
53             } catch (ClassNotFoundException e) {
54                 e.printStackTrace();
55             } catch (IOException e) {
56                 e.printStackTrace();
57             }
58         } else {
59             keyPair = kpg.generateKeyPair();
60             try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {
61                 oos.writeObject(keyPair);
62                 oos.close();
63             } catch (IOException e) {
64                 e.printStackTrace();
65             }
66         }
67         return keyPair;
68     }
69
70     public static String generatePEMCSR(KeyPair kp, String dn) throws GeneralSecurityException, IOException {
71         return generatePEMCSR(kp, dn, new PKCS10Attributes());
72     }
73
74     public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts) throws GeneralSecurityException, IOException {
75         return generatePEMCSR(kp, dn, atts, "SHA256WithRSA");
76     }
77
78     public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts, String signature) throws GeneralSecurityException, IOException {
79         PKCS10 p10 = new PKCS10(kp.getPublic(), atts);
80         Signature s = Signature.getInstance(signature);
81         s.initSign(kp.getPrivate());
82         p10.encodeAndSign(new X500Name(dn), s);
83         return PEM.encode("CERTIFICATE REQUEST", p10.getEncoded());
84     }
85
86     static int count = 0;
87
88     public static String createUniqueName() {
89         return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
90     }
91
92 }