Newer
Older
cmd5apoppw / ht.c
@yuuji yuuji on 27 Oct 2014 923 bytes Support Solaris/Sparc(bigendian).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include "md5.h"
#include "base64.h"


#ifndef	_PASSWORD_LEN
#define	_PASSWORD_LEN	128
#endif
#define L	(_PASSWORD_LEN+256)
int main(int argc, char *argv[])
{
  char *digest;
  char d_str[L];
  char b6[L*2];
  char *pw, *p;
  memset(b6, 0, sizeof b6);
  if (argc != 3) {
    printf("Usage: ht UserName ChallengeInBase64\n");
    exit(1);
  }
  pw = getpass("SMTP-AUTH Password: ");
  b64_pton(argv[2], (u_char*)b6, L*2);

  //fprintf(stderr, "b6=[%s](%d), pw=[%s](%d)\n", b6, strlen(b6), pw, strlen(pw));
  digest = hmac_md5(b6, strlen(b6), pw, strlen(pw));
  snprintf(d_str, sizeof d_str, "%s ", argv[1]);
  p = d_str+strlen(d_str);
  sprintf(p, "%s", digest);
  printf("%s\n", d_str);
  b64_ntop((u_char*)d_str, strlen(d_str), b6, L*2);
  printf("%s\n", b6);
  memset(pw, 0, strlen(pw));
  return 0;
}