#include <haproxy/base64.h>
#include <haproxy/chunk.h>
+#include <haproxy/init.h>
#include <haproxy/openssl-compat.h>
#if defined(HAVE_JWS)
return ret;
}
+int jwk_debug(int argc, char **argv)
+{
+ FILE *f = NULL;
+ EVP_PKEY *pkey = NULL;
+ char msg[1024];
+ int ret = 1;
+ const char *filename;
+
+ if (argc < 1)
+ goto out;
+
+ filename = argv[1];
+
+ if ((f = fopen(filename, "r")) == NULL) {
+ fprintf(stderr, "fopen!\n");
+ goto out;
+ }
+ if ((pkey = PEM_read_PrivateKey(f, NULL, NULL, NULL)) == NULL) {
+ fprintf(stderr, "PEM_read_PrivateKey!\n");
+ goto out;
+ }
+
+ ret = !EVP_PKEY_to_pub_jwk(pkey, msg, sizeof(msg));
+ fprintf(stdout, "%s\n", msg);
+
+ EVP_PKEY_free(pkey);
+out:
+
+ return ret;
+}
+
+static void __jws_init(void)
+{
+ hap_register_unittest("jwk", jwk_debug);
+}
+
+
+INITCALL0(STG_REGISTER, __jws_init);
+
#endif /* HAVE_JWS */
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDZMkuztqaUgCAC9/7P
+CsmlC2ac7rWerq5+NKbP0Cz1+mao6+F5Hc8DKNXHgi5GPr2hZANiAAQc00b9lK5L
+sJe8vTfJ79j4uladfzXyadiTGpRB0U7Y3UI7SnqRIgwevMxAhF6/f6PaDp2sp6Ew
+aMGZ5knCxsPqdjJQ7XP7Qxq1blSJMxYWY+ri/TxMMO13yw1xaCxJatM=
+-----END PRIVATE KEY-----
--- /dev/null
+{
+ "kty": "EC",
+ "crv": "P-384",
+ "x": "HNNG_ZSuS7CXvL03ye_Y-LpWnX818mnYkxqUQdFO2N1CO0p6kSIMHrzMQIRev3-j",
+ "y": "2g6drKehMGjBmeZJwsbD6nYyUO1z-0MatW5UiTMWFmPq4v08TDDtd8sNcWgsSWrT"
+}
+
--- /dev/null
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA3fgUyE3616u0t/nSFAZVxHTSl2T6ksIXIK4lTbw4btEJwW4q
+jFfejIhLWvja1r1ct1WONWNKbw0tT61rJwpQTHQRXT5CEaQMdtHM9zOJQQ4v6deJ
+viW2L7FYSxg6MzBG2jsTEnonUxQx0Ku5NG9LDDLydr9PUbz2g8rVmkbQtO51ZWT1
+NHz0AksN6GX9SvbvW3W7jCTnjtg9Pz13s21q3Yt/lbmiuO3vtQYo4ekJvLg/H+0k
+ShhZtukJFfO8ClsPMYT52S9TzVskDXwMxkH+rI6ZmoYc/i72t8sG7+V2lKfKI4MO
+Czq89X7wvHQ4/cFYNdyYVoZsCwv+cxuXmNy7mQIDAQABAoIBAAtHSbcLz00aGmqm
+tPfzgnQjA3hR1zGRzx8H+jlC8RMgaAB+GodbB6HYYwvSTTxQDt/55unri6Ks5rp/
+s0weiAn6c89rFGxVC5UV//YnljfKAsE9BHC29dTii/v01TA4qcD483Ui49Ci3A0g
+TJ7PcN7Dz/IcsmkS0uvLaKMYKg6nXu9UnKkLBqThTiLA5I+eZZ4zX862Yurku8NI
+HwbMtBsICbe1H0Ebdc/PPAShB8pvV3nQMGFjADOEYolaByQAltolADmIc5K9E6wL
+SsHzAjGTjarSYdqjZRuoEtQrWQTG1fnvJZBXB8L1Brv9RbrPWN2TW/A1uhUR4qYd
+wuxB1mkCgYEA9ao05RsJzDVc4qLBvDXuqo1WapwnYUyc8Jeq+r5l67Ota1ykQyiQ
+BJZDM/mdFRzZZjMAAMN9cxsDdY7gp0ebN190F443tSxjvlVOGJ/e8UJ+Au+9WEYM
+xZQo5VquU8XlxfwFYtYANMvr7DB8yEr25S7S2v3jZ70NZQDDR6G+5L8CgYEA506s
+JJM/NfP82e6JtSB9fOEcjEeddPCdf2RkB+E3Ppt7AQX5Aje/8VOSiZkIbOap9oLc
+rBd9GrER2m2pahd9DFkSs1td70IM5CwwgYIKyWkCCkLXyMrLpelFEqZsFvWD14Go
+c29NSDOpVfVJkPr46Gym6dBvy1rCMh+/ZrgsPacCgYAXFU0vEeFTzNfTe9OUacTp
+RaqPDektXVOJz9aDBQzynsl2wxe0L8WIiM37vkKiTzmmPriLWdMZ07n5e9lkHnhZ
+NaDk7boSTf95TO6vpaX/KW5JvFkgSES+8/L7yg+DU58JgWrIJK+URmz+nne7IkAc
+vM+XQC/z+XGewfmXa31SZQKBgGSDpHyUXBCXARa2+LJz9vQQYrZ23G6XrOlR98IQ
+1U/ogrA0JzwWe9tjxLb0gFvKdKtBvKEv59Z0gdyYcNlAcb+u6Vh1aMFyw2VX6pAs
+sYFKl29cEqcXsR1c2/45wZjMgclhd5EKGdw5TumimKBe31Eo/fN29024F9FuSF9b
+wyXbAoGBALGIKzPgV7Tt6SbzcCjJGQHlH/RKBcuFJjJS+Qph3w7K3L5b6Y35zPOY
+3+FxT2Z5wAlOGYeF9Qa8K3/VX1l7Vhktu9EcTqM59fMGuTM0mEgwwdFM4oFgRIau
+wmlIuAFmo7OwlsggHuHJ7lDk+r7AoNVW7l7Gd1JnG4CasvymVc3N
+-----END RSA PRIVATE KEY-----
--- /dev/null
+{
+ "kty": "RSA",
+ "n": "3fgUyE3616u0t_nSFAZVxHTSl2T6ksIXIK4lTbw4btEJwW4qjFfejIhLWvja1r1ct1WONWNKbw0tT61rJwpQTHQRXT5CEaQMdtHM9zOJQQ4v6deJviW2L7FYSxg6MzBG2jsTEnonUxQx0Ku5NG9LDDLydr9PUbz2g8rVmkbQtO51ZWT1NHz0AksN6GX9SvbvW3W7jCTnjtg9Pz13s21q3Yt_lbmiuO3vtQYo4ekJvLg_H-0kShhZtukJFfO8ClsPMYT52S9TzVskDXwMxkH-rI6ZmoYc_i72t8sG7-V2lKfKI4MOCzq89X7wvHQ4_cFYNdyYVoZsCwv-cxuXmNy7mQ",
+ "e": "AQAB"
+}
+
--- /dev/null
+#!/bin/sh
+
+check() {
+ ${HAPROXY_PROGRAM} -vv | grep -E '^Unit tests list :' | grep -q "jwk"
+}
+
+run() {
+ FILE1=$(mktemp)
+ ${HAPROXY_PROGRAM} -U jwk ${TESTDIR}/ecdsa.key > "${FILE1}"
+ diff -Naurp ${TESTDIR}/ecdsa.pub.jwk "${FILE1}"
+ rm "${FILE1}"
+
+ FILE2=$(mktemp)
+ ${HAPROXY_PROGRAM} -U jwk ${TESTDIR}/rsa.key > "${FILE2}"
+ diff -Naurp ${TESTDIR}/rsa.pub.jwk "${FILE2}"
+ rm "${FILE2}"
+}
+
+case "$1" in
+ "check")
+ check
+ ;;
+ "run")
+ run
+ ;;
+esac