diff --git a/3rd_party/libsrp6a-sha512/t_conv.c b/3rd_party/libsrp6a-sha512/t_conv.c
index f7f50e2..76d4e58 100644
--- a/3rd_party/libsrp6a-sha512/t_conv.c
+++ b/3rd_party/libsrp6a-sha512/t_conv.c
@@ -33,8 +33,7 @@
 #include "cstr.h"
 
 static int
-hexDigitToInt(c)
-     char c;
+hexDigitToInt(char c)
 {
   if(c >= '0' && c <= '9')
     return c - '0';
@@ -50,9 +49,7 @@
  * Convert a hex string to a string of bytes; return size of dst
  */
 _TYPE( int )
-t_fromhex(dst, src)
-     char * dst;
-     const char * src;
+t_fromhex(char *dst, const char *src)
 {
   register char *chp = dst;
   register unsigned size = strlen(src);
@@ -76,10 +73,7 @@
  * Convert a string of bytes to their hex representation
  */
 _TYPE( char * )
-t_tohex(dst, src, size)
-     char * dst;
-     const char * src;
-     unsigned size;
+t_tohex(char *dst, const char *src, unsigned size)
 {
    int notleading = 0;
 
@@ -103,10 +97,7 @@
 }
 
 _TYPE( char * )
-t_tohexcstr(dst, src, size)
-     cstr * dst;
-     const char * src;
-     unsigned size;
+t_tohexcstr(cstr *dst, const char *src, unsigned size)
 {
   cstr_set_length(dst, 2 * size + 1);
   return t_tohex(dst->data, src, size);
@@ -119,9 +110,7 @@
  * Convert a base64 string into raw byte array representation.
  */
 _TYPE( int )
-t_fromb64(dst, src)
-     char * dst;
-     const char * src;
+t_fromb64(char *dst, const char *src)
 {
   unsigned char *a;
   char *loc;
@@ -179,9 +168,7 @@
 }
 
 _TYPE( int )
-t_cstrfromb64(dst, src)
-     cstr * dst;
-     const char * src;
+t_cstrfromb64(cstr *dst, const char *src)
 {
   int len;
   cstr_set_length(dst, (strlen(src) * 6 + 7) / 8);
@@ -194,10 +181,7 @@
  * Convert a raw byte string into a null-terminated base64 ASCII string.
  */
 _TYPE( char * )
-t_tob64(dst, src, size)
-     char * dst;
-     const char * src;
-     unsigned size;
+t_tob64(char *dst, const char *src, unsigned size)
 {
   int c, pos = size % 3;
   unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
@@ -248,10 +232,7 @@
 }
 
 _TYPE( char * )
-t_tob64cstr(dst, src, sz)
-     cstr * dst;
-     const char * src;
-     unsigned int sz;
+t_tob64cstr(cstr *dst, const char *src, unsigned int sz)
 {
   cstr_set_length(dst, (sz * 8 + 5) / 6 + 1);
   return t_tob64(dst->data, src, sz);
diff --git a/3rd_party/libsrp6a-sha512/t_math.c b/3rd_party/libsrp6a-sha512/t_math.c
index e655daa..166ee4c 100644
--- a/3rd_party/libsrp6a-sha512/t_math.c
+++ b/3rd_party/libsrp6a-sha512/t_math.c
@@ -99,8 +99,7 @@
 /* Math library interface stubs */
 
 BigInteger
-BigIntegerFromInt(n)
-     unsigned int n;
+BigIntegerFromInt(unsigned int n)
 {
 #ifdef OPENSSL
   BIGNUM * a = BN_new();
@@ -136,9 +135,7 @@
 }
 
 BigInteger
-BigIntegerFromBytes(bytes, length)
-     const unsigned char * bytes;
-     int length;
+BigIntegerFromBytes(const unsigned char *bytes, int length)
 {
 #ifdef OPENSSL
   BIGNUM * a = BN_new();
@@ -206,10 +203,7 @@
 }
 
 int
-BigIntegerToBytes(src, dest, destlen)
-     BigInteger src;
-     unsigned char * dest;
-     int destlen;
+BigIntegerToBytes(BigInteger src, unsigned char *dest, int destlen)
 {
 #ifdef OPENSSL
   return BN_bn2bin(src, dest);
@@ -290,10 +284,7 @@
 }
 
 BigIntegerResult
-BigIntegerToHex(src, dest, destlen)
-     BigInteger src;
-     char * dest;
-     int destlen;
+BigIntegerToHex(BigInteger src, char *dest, int destlen)
 {
 #ifdef OPENSSL
   strncpy(dest, BN_bn2hex(src), destlen);
@@ -317,11 +308,7 @@
   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
 
 BigIntegerResult
-BigIntegerToString(src, dest, destlen, radix)
-     BigInteger src;
-     char * dest;
-     int destlen;
-     unsigned int radix;
+BigIntegerToString(BigInteger src, char *dest, int destlen, unsigned int radix)
 {
   BigInteger t = BigIntegerFromInt(0);
   char * p = dest;
@@ -345,8 +332,7 @@
 }
 
 int
-BigIntegerBitLen(b)
-     BigInteger b;
+BigIntegerBitLen(BigInteger b)
 {
 #ifdef OPENSSL
   return BN_num_bits(b);
@@ -364,8 +350,7 @@
 }
 
 int
-BigIntegerCmp(c1, c2)
-     BigInteger c1, c2;
+BigIntegerCmp(BigInteger c1, BigInteger c2)
 {
 #ifdef OPENSSL
   return BN_cmp(c1, c2);
@@ -383,9 +368,7 @@
 }
 
 int
-BigIntegerCmpInt(c1, c2)
-     BigInteger c1;
-     unsigned int c2;
+BigIntegerCmpInt(BigInteger c1, unsigned int c2)
 {
 #ifdef OPENSSL
   BigInteger bc2 = BigIntegerFromInt(c2);
@@ -414,9 +397,7 @@
 }
 
 BigIntegerResult
-BigIntegerLShift(result, x, bits)
-     BigInteger result, x;
-     unsigned int bits;
+BigIntegerLShift(BigInteger result, BigInteger x, unsigned int bits)
 {
 #ifdef OPENSSL
   BN_lshift(result, x, bits);
@@ -436,8 +417,7 @@
 }
 
 BigIntegerResult
-BigIntegerAdd(result, a1, a2)
-     BigInteger result, a1, a2;
+BigIntegerAdd(BigInteger result, BigInteger a1, BigInteger a2)
 {
 #ifdef OPENSSL
   BN_add(result, a1, a2);
@@ -456,9 +436,7 @@
 }
 
 BigIntegerResult
-BigIntegerAddInt(result, a1, a2)
-     BigInteger result, a1;
-     unsigned int a2;
+BigIntegerAddInt(BigInteger result, BigInteger a1, unsigned int a2)
 {
 #ifdef OPENSSL
   if(result != a1)
@@ -483,8 +461,7 @@
 }
 
 BigIntegerResult
-BigIntegerSub(result, s1, s2)
-     BigInteger result, s1, s2;
+BigIntegerSub(BigInteger result, BigInteger s1, BigInteger s2)
 {
 #ifdef OPENSSL
   BN_sub(result, s1, s2);
@@ -503,9 +480,7 @@
 }
 
 BigIntegerResult
-BigIntegerSubInt(result, s1, s2)
-     BigInteger result, s1;
-     unsigned int s2;
+BigIntegerSubInt(BigInteger result, BigInteger s1, unsigned int s2)
 {
 #ifdef OPENSSL
   if(result != s1)
@@ -530,9 +505,7 @@
 }
 
 BigIntegerResult
-BigIntegerMul(result, m1, m2, c)
-     BigInteger result, m1, m2;
-     BigIntegerCtx c;
+BigIntegerMul(BigInteger result, BigInteger m1, BigInteger m2, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   BN_CTX * ctx = NULL;
@@ -556,10 +529,7 @@
 }
 
 BigIntegerResult
-BigIntegerMulInt(result, m1, m2, c)
-     BigInteger result, m1;
-     unsigned int m2;
-     BigIntegerCtx c;
+BigIntegerMulInt(BigInteger result, BigInteger m1, unsigned int m2, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   if(result != m1)
@@ -584,10 +554,7 @@
 }
 
 BigIntegerResult
-BigIntegerDivInt(result, d, m, c)
-     BigInteger result, d;
-     unsigned int m;
-     BigIntegerCtx c;
+BigIntegerDivInt(BigInteger result, BigInteger d, unsigned int m, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   if(result != d)
@@ -624,9 +591,7 @@
 }
 
 BigIntegerResult
-BigIntegerMod(result, d, m, c)
-     BigInteger result, d, m;
-     BigIntegerCtx c;
+BigIntegerMod(BigInteger result, BigInteger d, BigInteger m, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   BN_CTX * ctx = NULL;
@@ -650,10 +615,7 @@
 }
 
 unsigned int
-BigIntegerModInt(d, m, c)
-     BigInteger d;
-     unsigned int m;
-     BigIntegerCtx c;
+BigIntegerModInt(BigInteger d, unsigned int m, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   return BN_mod_word(d, m);
@@ -711,9 +673,7 @@
 }
 
 BigIntegerResult
-BigIntegerModMul(r, m1, m2, modulus, c)
-     BigInteger r, m1, m2, modulus;
-     BigIntegerCtx c;
+BigIntegerModMul(BigInteger r, BigInteger m1, BigInteger m2, BigInteger modulus, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   BN_CTX * ctx = NULL;
@@ -743,10 +703,7 @@
 }
 
 BigIntegerResult
-BigIntegerModExp(r, b, e, m, c, a)
-     BigInteger r, b, e, m;
-     BigIntegerCtx c;
-     BigIntegerModAccel a;
+BigIntegerModExp(BigInteger r, BigInteger b, BigInteger e, BigInteger m, BigIntegerCtx c, BigIntegerModAccel a)
 {
 #ifdef OPENSSL
 #if OPENSSL_VERSION_NUMBER >= 0x00906000
@@ -793,9 +750,7 @@
 #endif
 
 int
-BigIntegerCheckPrime(n, c)
-     BigInteger n;
-     BigIntegerCtx c;
+BigIntegerCheckPrime(BigInteger n, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   int rv;
@@ -846,8 +801,7 @@
 }
 
 BigIntegerResult
-BigIntegerFree(b)
-     BigInteger b;
+BigIntegerFree(BigInteger b)
 {
 #ifdef OPENSSL
   BN_free(b);
@@ -869,8 +823,7 @@
 }
 
 BigIntegerResult
-BigIntegerClearFree(b)
-     BigInteger b;
+BigIntegerClearFree(BigInteger b)
 {
 #ifdef OPENSSL
   BN_clear_free(b);
@@ -906,8 +859,7 @@
 }
 
 BigIntegerResult
-BigIntegerCtxFree(ctx)
-     BigIntegerCtx ctx;
+BigIntegerCtxFree(BigIntegerCtx ctx)
 {
 #ifdef OPENSSL
   if(ctx)
@@ -917,9 +869,7 @@
 }
 
 BigIntegerModAccel
-BigIntegerModAccelNew(m, c)
-     BigInteger m;
-     BigIntegerCtx c;
+BigIntegerModAccelNew(BigInteger m, BigIntegerCtx c)
 {
 #ifdef OPENSSL
   BN_CTX * ctx = NULL;
@@ -939,8 +889,7 @@
 }
 
 BigIntegerResult
-BigIntegerModAccelFree(accel)
-     BigIntegerModAccel accel;
+BigIntegerModAccelFree(BigIntegerModAccel accel)
 {
 #ifdef OPENSSL
   if(accel)
diff --git a/3rd_party/libsrp6a-sha512/t_misc.c b/3rd_party/libsrp6a-sha512/t_misc.c
index 3053358..3a2cda1 100644
--- a/3rd_party/libsrp6a-sha512/t_misc.c
+++ b/3rd_party/libsrp6a-sha512/t_misc.c
@@ -80,8 +80,7 @@
 extern char ** environ;
 
 static void
-t_envhash(out)
-     unsigned char * out;
+t_envhash(unsigned char * out)
 {
   char ** ptr;
   char ebuf[256];
@@ -115,8 +114,7 @@
  * The entire buffer is run once through SHA to obtain the final result.
  */
 static void
-t_fshash(out)
-     unsigned char * out;
+t_fshash(unsigned char * out)
 {
   char dotpath[128];
   struct stat st;
@@ -317,9 +315,7 @@
  * Each cycle generates 20 bytes of new output.
  */
 _TYPE( void )
-t_random(data, size)
-     unsigned char * data;
-     unsigned size;
+t_random(unsigned char * data, unsigned size)
 {
   if(!initialized)
     t_initrand();
@@ -369,10 +365,7 @@
  * single 320-bit value.
  */
 _TYPE( unsigned char * )
-t_sessionkey(key, sk, sklen)
-     unsigned char * key;
-     unsigned char * sk;
-     unsigned sklen;
+t_sessionkey(unsigned char * key, unsigned char * sk, unsigned sklen)
 {
   unsigned i, klen;
   unsigned char * hbuf;
@@ -411,11 +404,7 @@
 }
 
 _TYPE( void )
-t_mgf1(mask, masklen, seed, seedlen)
-     unsigned char * mask;
-     unsigned masklen;
-     const unsigned char * seed;
-     unsigned seedlen;
+t_mgf1(unsigned char * mask, unsigned masklen, const unsigned char * seed, unsigned seedlen)
 {
   SHA1_CTX ctxt;
   unsigned i = 0;
diff --git a/3rd_party/libsrp6a-sha512/t_truerand.c b/3rd_party/libsrp6a-sha512/t_truerand.c
index 4a4c3d2..f995ed7 100644
--- a/3rd_party/libsrp6a-sha512/t_truerand.c
+++ b/3rd_party/libsrp6a-sha512/t_truerand.c
@@ -227,8 +227,7 @@
 }
 
 int
-raw_n_truerand(n)
-int n;
+raw_n_truerand(int n)
 {
 	int slop, v;
 
