using Mconn; void test_generate () { string key_path = "/tmp/test-key-vala.pem"; string cert_path = "/tmp/test-cert-vala.pem"; FileUtils.remove (key_path); FileUtils.remove (cert_path); assert (FileUtils.test (key_path, FileTest.EXISTS) == false); try { Crypt.generate_key_cert (key_path, cert_path, "foo"); } catch (Error e) { warning ("generate failed: %s", e.message); Test.fail (); } assert (FileUtils.test (key_path, FileTest.EXISTS) == true); assert (FileUtils.test (cert_path, FileTest.EXISTS) == true); } void test_generate_load () { string key_path = "/tmp/test-key-vala.pem"; string cert_path = "/tmp/test-cert-vala.pem"; FileUtils.remove (key_path); FileUtils.remove (cert_path); try { Crypt.generate_key_cert (key_path, cert_path, "bar"); } catch (Error e) { warning ("generate failed: %s", e.message); Test.fail (); } try { new TlsCertificate.from_files (cert_path, key_path); } catch (Error e) { warning ("load from files failed: %s", e.message); Test.fail (); } } void test_custom_cn () { string key_path = "/tmp/test-key-vala.pem"; string cert_path = "/tmp/test-cert-vala.pem"; FileUtils.remove (key_path); FileUtils.remove (cert_path); try { Crypt.generate_key_cert (key_path, cert_path, "custom-cn"); } catch (Error e) { warning ("generate failed: %s", e.message); Test.fail (); } uint8[] data; try { File.new_for_path (cert_path).load_contents (null, out data, null); } catch (Error e) { warning ("load contents failed: %s", e.message); Test.fail (); } var datum = GnuTLS.Datum () { data = data, size = data.length }; var cert = GnuTLS.X509.Certificate.create (); var res = cert.import (ref datum, GnuTLS.X509.CertificateFormat.PEM); assert (res == GnuTLS.ErrorCode.SUCCESS); // verify DN var dn = new uint8[1024]; size_t sz = dn.length; cert.get_dn (dn, ref sz); debug ("dn: %s\n", (string) dn); var issuer_dn = new uint8[1024]; sz = issuer_dn.length; cert.get_issuer_dn (issuer_dn, ref sz); debug ("dn: %s\n", (string) issuer_dn); var subject = (string) dn; var issuer = (string) issuer_dn; // verify that the certificate is self signed assert (subject == issuer); // assert ("CN=custom-cn" in subject); } void test_fingerprint () { var pem = """-----BEGIN CERTIFICATE----- MIIC8jCCAdoCAQowDQYJKoZIhvcNAQEFBQAwPzERMA8GA1UEChMIbWNvbm5lY3Qx ETAPBgNVBAsTCG1jb25uZWN0MRcwFQYDVQQDDA5tYWNpZWtAY29yc2FpcjAeFw0x NzA5MjQxOTU3NDVaFw0yNzA5MjQxOTU3NDVaMD8xETAPBgNVBAoTCG1jb25uZWN0 MREwDwYDVQQLEwhtY29ubmVjdDEXMBUGA1UEAwwObWFjaWVrQGNvcnNhaXIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBWMM09dCCGXjY1aZ261nCa8+q 3ejDOHf21+Mt6yJnoWjPGvTK21MbRFPkeQe62FJHF3q8iXe3sSEdFk/f56G8ZZ4t Qw/ST//kxtf/CKHPuoZeAFgQpYEKE3GVUX5M3b8+4YSKSRXs3FE4D5awQVdstI31 N53plyOLdJe5IeK1kESsT0UgVo2RTHCOByel9WB2zcalQVTl8UxGKJcgrSuXj2f2 1SBxHupOX0Ej7vTr+gIBNBRbwbVdsafEW/gRngyCWIO30cPKoaUSkoCppXQ+6hYd /aOt+6/bBOISGJdy6uyM74jqoEbEMdhUXHfPFNCelIABxUMez0SNrRmdag2VAgMB AAEwDQYJKoZIhvcNAQEFBQADggEBAEnJ+IsjGvBmlWAg5vlmWUY0OVMJa8Gl9ept HWLIjK16XARAOwIcePNfDPyITWaxT5YV+MZotm1m6HkY5rPCeOjV7nzHrHjTjZqO sCmsSGcb9ZkEQfRNGTmFFthkcnfTU9mKh8oGc/a9r0DDgYcPSCgqERt2fgiBrt85 85PVl16fCSObVwOu5u5TtrfWkHpEHbjBU9AX52+IOYg7RsM7I4OnH+5svhmWqAxW /PXFBB3q2nX2XXqFRhqeN9eOlHBQ5EoZh8GUp7vJyxp5eAS9g2KVtCBwTDElQt4D 4hu+QuzzEmoWY9w1R+hblNu/37mWkzFFrLqYlkNU2vbKkuWMOTg= -----END CERTIFICATE-----"""; var expected = "eb2611a447085322b206fa61d4bc5869b4a55657"; var fingerprint = Crypt.fingerprint_certificate (pem); // SHA1 assert (fingerprint.length == 20); var sb = new StringBuilder.sized (20 * 2); foreach (var b in fingerprint) { sb.append_printf ("%02x", b); } assert (sb.str == expected); } public static void main (string[] args) { Test.init (ref args); Test.add_func ("/mconn-crypt-vala/generated", test_generate); Test.add_func ("/mconn-crypt-vala/load", test_generate_load); Test.add_func ("/mconn-crypt-vala/verify-cn", test_custom_cn); Test.add_func ("/mconn-crypt-vala/fingerprint", test_fingerprint); Test.run (); }