1 package club.wpia.gigi.crypto.key;
3 import static org.junit.Assert.*;
4 import static org.junit.Assume.*;
6 import java.io.IOException;
7 import java.security.GeneralSecurityException;
8 import java.security.PublicKey;
10 import org.junit.Test;
12 import club.wpia.gigi.GigiApiException;
14 public class KeyCheckPublicKeyFormatTest {
17 public void testFormatRSA() throws GeneralSecurityException, IOException {
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" + //
30 "-----END PUBLIC KEY-----\n";
32 PublicKey pk = KeyCheckTest.pkFromString(sfk);
34 KeyCheck c = new KeyCheckPublicKeyFormat();
36 } catch (GigiApiException gae) {
37 throw new Error("Valid key (RSA Public Key) rejected.", gae);
43 public void testFormatDSA() throws GeneralSecurityException, IOException {
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";
59 PublicKey pk = KeyCheckTest.pkFromString(sfk);
61 KeyCheck c = new KeyCheckPublicKeyFormat();
63 } catch (GigiApiException gae) {
64 throw new Error("Valid key (DSA Public Key) rejected.", gae);
70 public void testFormatECDSA() throws GeneralSecurityException, IOException {
72 // ECDSA (secp256r1 / P-256)
73 String sfk = "-----BEGIN PUBLIC KEY-----\n" + //
74 "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIQeJlVJLBpevYZjGWPPkD6hSrUEI\n" + //
75 "G86i9e2p2QGCanQzNNM8Dkqv5Oa13qjxhRZNo2w+lVOBkAZyAptNKKT5Kw==\n" + //
76 "-----END PUBLIC KEY-----\n";
78 PublicKey pk = KeyCheckTest.pkFromString(sfk);
80 KeyCheck c = new KeyCheckPublicKeyFormat();
82 } catch (GigiApiException gae) {
83 throw new Error("Valid key (ECDSA Public Key on P-256) rejected.", gae);
89 public void testFormatGOST() throws GeneralSecurityException, IOException {
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" + //
97 "-----END PUBLIC KEY-----";
101 pk = KeyCheckTest.pkFromString(sfk);
102 } catch (GeneralSecurityException gse) {
103 assumeTrue("Could not load the GOST key due to lack of support", false);
108 KeyCheck c = new KeyCheckPublicKeyFormat();
110 fail("Unsupported key (GOST Public Key) accepted.");
111 } catch (GigiApiException gae) {