void checker(char *key, char *lock) { char *rawkey, *rawlock; char keytype[BUFFSIZE], locktype[BUFFSIZE]; printf("L %s K %s ", lock, key); rawkey = lock_strip_alpha(key, keytype); rawlock = lock_strip_alpha(lock, locktype); if (!strcmp(keytype, locktype)) { if (!strcmp(keytype, "sha1")) { if (!sha_verify(rawkey, rawlock)) printf("sha1 OK\n"); else printf("sha1 no\n"); } else printf("unknown\n"); } else printf("Mismatch %s %s\n", keytype, locktype); }
/* * Generate an MD5 cancel lock. */ unsigned char * md5_lock(char *secret, int seclen, char *message, int msglen) { unsigned char *cankey, *canlock; unsigned char hmacbuff[MD5_LENGTH]; unsigned char junk[MD5_LENGTH]; MD5_CTX hash_ctx; cankey = lock_strip_alpha(md5_key(secret, seclen, message, msglen), junk); canlock = (char *) malloc(BUFFSIZE); MD5Init(&hash_ctx); MD5Update(&hash_ctx, cankey, strlen(cankey)); MD5Final(hmacbuff, &hash_ctx); strcpy(canlock, "md5:"); (void) b64_ntop(hmacbuff, MD5_LENGTH, canlock + 4, BUFFSIZE); return (canlock); }
/* * Return a stripped cancel lock, that is, with the xx: prefix * removed, else NULL on failure. * type is set to the lock type, else zero on failure. */ unsigned char * lock_strip(unsigned char *key, char *type) { return (lock_strip_alpha(key, type)); }