#!/bin/sh SPEEDTEST="ecdhx25519 ecdhp256" V="valgrind --log-file=xtest.valgrind.$$.%n.%p" # V= # faster option during development echo '===== compiling new provider' gcc -fPIC -c openssl_x25519_lib25519.c -g -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -O1 gcc -fPIC -shared -Wl,-soname,openssl_x25519_lib25519.so.1 -o openssl_x25519_lib25519.so.1 openssl_x25519_lib25519.o -l25519 rm -f openssl_x25519_lib25519.so ln -s openssl_x25519_lib25519.so.1 openssl_x25519_lib25519.so echo '===== setting up simple configuration for new provider' ( /bin/echo 'openssl_conf = openssl_init' /bin/echo '' /bin/echo '[openssl_init]' /bin/echo 'providers = provider_sect' /bin/echo 'alg_section = evp_properties' /bin/echo '' /bin/echo '[provider_sect]' /bin/echo 'default = default_sect' /bin/echo 'openssl_x25519_lib25519 = openssl_x25519_lib25519_sect' /bin/echo '' /bin/echo '[default_sect]' /bin/echo 'activate = 1' /bin/echo '' /bin/echo '[openssl_x25519_lib25519_sect]' /bin/echo 'activate = 1' /bin/echo '' /bin/echo '[evp_properties]' /bin/echo 'default_properties = ?provider=openssl_x25519_lib25519' ) > xtest.cnf echo '===== trying new provider (and default provider for comparison)' NEW="env OPENSSL_CONF=xtest.cnf OPENSSL_MODULES=." ( echo alice $NEW $V openssl echo bob $NEW $V openssl echo charlie openssl echo dave openssl ) | while read who what do $what genpkey -algorithm x25519 -out xtest.$who.pem $what pkey -in xtest.$who.pem -outform der > xtest.$who.der $what pkey -in xtest.$who.pem -outform pem | cmp - xtest.$who.pem $what pkey -in xtest.$who.der -outform der | cmp - xtest.$who.der $what pkey -in xtest.$who.der -outform pem | cmp - xtest.$who.pem $what pkey -in xtest.$who.pem -pubout -outform pem > xtest.$who.pub.pem $what pkey -in xtest.$who.pem -pubout -outform der > xtest.$who.pub.der $what pkey -pubin -in xtest.$who.pub.pem -outform der | cmp - xtest.$who.pub.der $what pkey -pubin -in xtest.$who.pub.pem -outform pem | cmp - xtest.$who.pub.pem $what pkey -pubin -in xtest.$who.pub.der -outform der | cmp - xtest.$who.pub.der $what pkey -pubin -in xtest.$who.pub.der -outform pem | cmp - xtest.$who.pub.pem done ( echo alice $NEW $V openssl echo bob $NEW $V openssl echo charlie openssl echo dave openssl ) | while read x what do for y in alice bob charlie dave do $what pkeyutl -derive -inkey xtest.$x.pem -peerkey xtest.$y.pub.pem > xtest.$x.$y done done for x in alice bob charlie dave do for y in alice bob charlie dave do cmp xtest.$x.$y xtest.$y.$x done done echo '===== checking speed with default provider' openssl speed -seconds +1 $SPEEDTEST echo '===== checking speed with new provider' $NEW openssl speed -seconds +1 $SPEEDTEST