TESTS: jws: register a unittest for jwk
Add a way to test the jwk converter in the unit test system $ make TARGET=linux-glibc USE_OPENSSL=1 CFLAGS="-DDEBUG_UNIT=1" $ ./haproxy -U jwk foobar.pem.rsa { "kty": "RSA", "n": "...", "e": "AQAB" } $ ./haproxy -U jwk foobar.pem.ecdsa { "kty": "EC", "crv": "P-384", "x": "...", "y": "..." } This is then tested by a shell script: $ HAPROXY_PROGRAM=${PWD}/haproxy tests/unit/jwk/test.sh + readlink -f tests/unit/jwk/test.sh + BASENAME=/haproxy/tests/unit/jwk/test.sh + dirname /haproxy/tests/unit/jwk/test.sh + TESTDIR=/haproxy/tests/unit/jwk + HAPROXY_PROGRAM=/haproxy/haproxy + mktemp + FILE1=/tmp/tmp.iEICxC5yNK + /haproxy/haproxy -U jwk /haproxy/tests/unit/jwk/ecdsa.key + diff -Naurp /haproxy/tests/unit/jwk/ecdsa.pub.jwk /tmp/tmp.iEICxC5yNK + rm /tmp/tmp.iEICxC5yNK + mktemp + FILE2=/tmp/tmp.EIrGZGaCDi + /haproxy/haproxy -U jwk /haproxy/tests/unit/jwk/rsa.key + diff -Naurp /haproxy/tests/unit/jwk/rsa.pub.jwk /tmp/tmp.EIrGZGaCDi + rm /tmp/tmp.EIrGZGaCDi $ echo $? 0
This commit is contained in:
parent
1e7478bb4e
commit
09457111bb
40
src/jws.c
40
src/jws.c
@ -4,6 +4,7 @@
|
||||
|
||||
#include <haproxy/base64.h>
|
||||
#include <haproxy/chunk.h>
|
||||
#include <haproxy/init.h>
|
||||
#include <haproxy/openssl-compat.h>
|
||||
|
||||
#if defined(HAVE_JWS)
|
||||
@ -194,5 +195,44 @@ int EVP_PKEY_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
|
||||
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 */
|
||||
|
||||
|
6
tests/unit/jwk/ecdsa.key
Normal file
6
tests/unit/jwk/ecdsa.key
Normal file
@ -0,0 +1,6 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDZMkuztqaUgCAC9/7P
|
||||
CsmlC2ac7rWerq5+NKbP0Cz1+mao6+F5Hc8DKNXHgi5GPr2hZANiAAQc00b9lK5L
|
||||
sJe8vTfJ79j4uladfzXyadiTGpRB0U7Y3UI7SnqRIgwevMxAhF6/f6PaDp2sp6Ew
|
||||
aMGZ5knCxsPqdjJQ7XP7Qxq1blSJMxYWY+ri/TxMMO13yw1xaCxJatM=
|
||||
-----END PRIVATE KEY-----
|
7
tests/unit/jwk/ecdsa.pub.jwk
Normal file
7
tests/unit/jwk/ecdsa.pub.jwk
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"kty": "EC",
|
||||
"crv": "P-384",
|
||||
"x": "HNNG_ZSuS7CXvL03ye_Y-LpWnX818mnYkxqUQdFO2N1CO0p6kSIMHrzMQIRev3-j",
|
||||
"y": "2g6drKehMGjBmeZJwsbD6nYyUO1z-0MatW5UiTMWFmPq4v08TDDtd8sNcWgsSWrT"
|
||||
}
|
||||
|
27
tests/unit/jwk/rsa.key
Normal file
27
tests/unit/jwk/rsa.key
Normal file
@ -0,0 +1,27 @@
|
||||
-----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-----
|
6
tests/unit/jwk/rsa.pub.jwk
Normal file
6
tests/unit/jwk/rsa.pub.jwk
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"kty": "RSA",
|
||||
"n": "3fgUyE3616u0t_nSFAZVxHTSl2T6ksIXIK4lTbw4btEJwW4qjFfejIhLWvja1r1ct1WONWNKbw0tT61rJwpQTHQRXT5CEaQMdtHM9zOJQQ4v6deJviW2L7FYSxg6MzBG2jsTEnonUxQx0Ku5NG9LDDLydr9PUbz2g8rVmkbQtO51ZWT1NHz0AksN6GX9SvbvW3W7jCTnjtg9Pz13s21q3Yt_lbmiuO3vtQYo4ekJvLg_H-0kShhZtukJFfO8ClsPMYT52S9TzVskDXwMxkH-rI6ZmoYc_i72t8sG7-V2lKfKI4MOCzq89X7wvHQ4_cFYNdyYVoZsCwv-cxuXmNy7mQ",
|
||||
"e": "AQAB"
|
||||
}
|
||||
|
26
tests/unit/jwk/test.sh
Executable file
26
tests/unit/jwk/test.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#!/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
|
Loading…
x
Reference in New Issue
Block a user