#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include "hmac_md5.h"
#include "base64.h"
#define L (_PASSWORD_LEN+256)
int main(int argc, char *argv[])
{
unsigned char digest[16];
char d_str[L];
char b6[L*2];
char *pw, *p;
int i;
if (argc != 3) {
printf("Usage: ht UserName ChallengeInBase64\n");
exit(1);
}
pw = getpass("SMTP-AUTH Password: ");
b64_pton(argv[2], b6, L*2);
hmac_md5(b6, strlen(b6), pw, strlen(pw), digest);
memset(pw, 0, strlen(pw));
snprintf(d_str, sizeof d_str, "%s ", argv[1]);
p = d_str+strlen(d_str);
for (i=0; i<16 && p<d_str+sizeof d_str; i++, p+=2)
sprintf(p, "%02x", digest[i]);
*p = '\0';
printf("%s\n", d_str);
b64_ntop(d_str, strlen(d_str), b6, L*2);
printf("%s\n", b6);
}