X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=hmac.c;h=af0d11968e64bca065d1212d05118a0621453792;hb=af0db9ea252f39372633225c6844350bc1f8a984;hp=372921d7a096a8786e3e652b9c988f574ace53c2;hpb=c7eea28ff1214ea7c198be1bda5638e1df314ab1;p=xonotic%2Fdarkplaces.git diff --git a/hmac.c b/hmac.c index 372921d7..af0d1196 100644 --- a/hmac.c +++ b/hmac.c @@ -1,29 +1,29 @@ #include "quakedef.h" #include "hmac.h" -void hmac( +qboolean hmac( hashfunc_t hfunc, int hlen, int hblock, unsigned char *out, - unsigned char *in, int n, - unsigned char *key, int k + const unsigned char *in, int n, + const unsigned char *key, int k ) { - unsigned char hashbuf[32]; - unsigned char k_xor_ipad[128]; - unsigned char k_xor_opad[128]; - unsigned char catbuf[256]; + static unsigned char hashbuf[32]; + static unsigned char k_xor_ipad[128]; + static unsigned char k_xor_opad[128]; + static unsigned char catbuf[65600]; // 65535 bytes max quake packet size + 64 for the hash int i; if(sizeof(hashbuf) < (size_t) hlen) - Host_Error("Invalid hash function used for HMAC - too long hash length"); + return false; if(sizeof(k_xor_ipad) < (size_t) hblock) - Host_Error("Invalid hash function used for HMAC - too long hash block length"); + return false; if(sizeof(k_xor_ipad) < (size_t) hlen) - Host_Error("Invalid hash function used for HMAC - too long hash length"); + return false; if(sizeof(catbuf) < (size_t) hblock + (size_t) hlen) - Host_Error("Invalid hash function used for HMAC - too long hash block length"); + return false; if(sizeof(catbuf) < (size_t) hblock + (size_t) n) - Host_Error("Invalid hash function used for HMAC - too long message length"); + return false; if(k > hblock) { @@ -56,4 +56,5 @@ void hmac( memcpy(catbuf, k_xor_opad, hblock); memcpy(catbuf + hblock, hashbuf, hlen); hfunc(out, catbuf, hblock + hlen); + return true; }