]> WPIA git - gigi.git/blob - tests/club/wpia/gigi/crypto/key/KeyCheckPublicKeyFormatTest.java
Merge "add: show more certificates on the "roots" page"
[gigi.git] / tests / club / wpia / gigi / crypto / key / KeyCheckPublicKeyFormatTest.java
1 package club.wpia.gigi.crypto.key;
2
3 import static org.junit.Assert.*;
4 import static org.junit.Assume.*;
5
6 import java.io.IOException;
7 import java.security.GeneralSecurityException;
8 import java.security.PublicKey;
9
10 import org.junit.Test;
11
12 import club.wpia.gigi.GigiApiException;
13
14 public class KeyCheckPublicKeyFormatTest {
15
16     @Test
17     public void testFormatRSA() throws GeneralSecurityException, IOException {
18
19         // openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048
20         // -pkeyopt rsa_keygen_pubexp:7331 2>/dev/null |
21         // openssl pkey -pubout -outform pem
22         String sfk = "-----BEGIN PUBLIC KEY-----\n" + //
23                 "MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQEArcAPmy3RnXdwyFg3V9k1\n" + //
24                 "RaFR/peHa3hLsmh25BInRVArbaMctSBaJBVZwQIgBdqjyITQQZP38i6k+WdsETn9\n" + //
25                 "J491UDLKU3E3UG60ZS3BzcJllNdpn4g0IZROxmmUz2JlAXkGtIglmWWDx14qHSNj\n" + //
26                 "ON58mc3ihfn/oWkPk2hk/csDxGQq5jSaBUwa9THBg9UQHHBqQbhp2nGfa5a5VRlI\n" + //
27                 "0QeIy+8GmKlXYMchReUI25ksLOzaqETD0UXiAPyt+vpvkKCDjWGc3kjabn6OkuTt\n" + //
28                 "na7N/52qrEC2ImuanYlzR5gv9jkbFF2PiMIEBD+3B0842rLx0X/lbXhRr1MtuHtN\n" + //
29                 "tQICHKM=\n" + //
30                 "-----END PUBLIC KEY-----\n";
31
32         PublicKey pk = KeyCheckTest.pkFromString(sfk);
33         try {
34             KeyCheck c = new KeyCheckPublicKeyFormat();
35             c.check(pk);
36         } catch (GigiApiException gae) {
37             throw new Error("Valid key (RSA Public Key) rejected.", gae);
38         }
39
40     }
41
42     @Test
43     public void testFormatDSA() throws GeneralSecurityException, IOException {
44
45         // DSA (using OpenSSH)
46         String sfk = "-----BEGIN PUBLIC KEY-----\n" + //
47                 "MIIBtzCCASsGByqGSM44BAEwggEeAoGBAJpcf099rROPSjbJ5KWk5RF1ngRqXSo7\n" + //
48                 "cmKin9QPxIg0tXmxMGVS2sdtXYtmSJ9fewSAx0vHbojysEGY9ASXEoFpzDye4BbK\n" + //
49                 "yog9oHaUUEjxkSTwKcipu5BgM9b/nvigw/bs4dlEM+egdzf36lXXXJgvaTeXSpu9\n" + //
50                 "gKrKXTSi0jcvAhUAoH2Nbl6mRgAX4l6U5EXeg0zts3MCgYAW16cPIxLzmvrajRVR\n" + //
51                 "aIzAWpN1ApE/kx4CbtWZCdNttHu3c8D6qSnVrWpxY6FzrpeFniwg4vu73Ykh3crH\n" + //
52                 "0rVa20lrdRUAYGzbgInS+GLoPDGu1LukF0evJYZwyt6qsaFkQ54h4StSK+oM/mOi\n" + //
53                 "haLI45Rvlmade3KRQ/7YkV7DZQOBhQACgYEAjVGvOHImKynxgBl+eHeN2Ddqgj1+\n" + //
54                 "AKEOFKuFuedG9tKHtZXx04j982kaDnNc5cZY1KPFPYlS7jVJwcFPuf9Hi1/Aqq+3\n" + //
55                 "GnqaPl+tJtSpY2Chu8iIHIi5OXiwQC9ImtIEASZkkO+RIPLpzgb3GTn306NtMxae\n" + //
56                 "e+mhIx1IrbzMxSA=\n" + //
57                 "-----END PUBLIC KEY-----\n";
58
59         PublicKey pk = KeyCheckTest.pkFromString(sfk);
60         try {
61             KeyCheck c = new KeyCheckPublicKeyFormat();
62             c.check(pk);
63         } catch (GigiApiException gae) {
64             throw new Error("Valid key (DSA Public Key) rejected.", gae);
65         }
66
67     }
68
69     @Test
70     public void testFormatECDSA() throws GeneralSecurityException, IOException {
71
72         // ECDSA (secp256r1 / P-256)
73         String sfk = "-----BEGIN PUBLIC KEY-----\n" + //
74                 "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIQeJlVJLBpevYZjGWPPkD6hSrUEI\n" + //
75                 "G86i9e2p2QGCanQzNNM8Dkqv5Oa13qjxhRZNo2w+lVOBkAZyAptNKKT5Kw==\n" + //
76                 "-----END PUBLIC KEY-----\n";
77
78         PublicKey pk = KeyCheckTest.pkFromString(sfk);
79         try {
80             KeyCheck c = new KeyCheckPublicKeyFormat();
81             c.check(pk);
82         } catch (GigiApiException gae) {
83             throw new Error("Valid key (ECDSA Public Key on P-256) rejected.", gae);
84         }
85
86     }
87
88     @Test
89     public void testFormatGOST() throws GeneralSecurityException, IOException {
90
91         // GOST R 34.10-2001 (256 bits)
92         // https://lib.void.so/an-example-of-using-openssl-gost-engine-in-cc/
93         String sfk = "-----BEGIN PUBLIC KEY-----\n" + //
94                 "MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQDv/qpUxeRWXnyF8\n" + //
95                 "YwSUq7qQsL6MtD42GxLxqzLGx3NmpD4rHRay4xgQp91oTtqJjnybsplij0haRq7i\n" + //
96                 "Nf7QEdY=\n" + //
97                 "-----END PUBLIC KEY-----";
98
99         final PublicKey pk;
100         try {
101             pk = KeyCheckTest.pkFromString(sfk);
102         } catch (GeneralSecurityException gse) {
103             assumeTrue("Could not load the GOST key due to lack of support", false);
104             return;
105         }
106
107         try {
108             KeyCheck c = new KeyCheckPublicKeyFormat();
109             c.check(pk);
110             fail("Unsupported key (GOST Public Key) accepted.");
111         } catch (GigiApiException gae) {
112             // expected
113         }
114
115     }
116
117 }