1/* keycrunch.c: The opiekeycrunch() library function. 2 3%%% copyright-cmetz-96 4This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. 5The Inner Net License Version 3 applies to this software. 6You should have received a copy of the license with this software. If 7you didn't get a copy, you may request one from <license@inner.net>. 8 9 History: 10 11 Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for arg. 12 Created by cmetz for OPIE 2.3 using the old keycrunch.c as a guide. 13*/ 14 15#include "opie_cfg.h" 16 17#if HAVE_STRING_H 18#include <string.h> 19#endif /* HAVE_STRING_H */ 20#if HAVE_STDLIB_H 21#include <stdlib.h> 22#endif /* HAVE_STDLIB_H */ 23#include <ctype.h> 24 25#include "opie.h" 26 27int opiekeycrunch FUNCTION((algorithm, result, seed, secret), int algorithm AND 28struct opie_otpkey *result AND char *seed AND char *secret) 29{ 30 int i, rval = -1; 31 char *c; 32 33 if (!result || !seed || !secret) 34 return 1; 35 36 i = strlen(seed) + strlen(secret); 37 if (!(c = malloc(i + 1))) 38 return -1; 39 40 { 41 char *c2 = c; 42 43 if (algorithm & 0x10) 44 while(*c2 = *(secret++)) c2++; 45 46 while(*seed) 47 if (isspace(*(c2++) = tolower(*(seed++)))) 48 goto kcret; 49 50 if (!(algorithm & 0x10)) 51 strcpy(c2, secret); 52 } 53 54 opiehashlen(algorithm & 0x0f, c, result, i); 55 rval = 0; 56 57kcret: 58 { 59 char *c2 = c; 60 while(*c2) 61 *(c2++) = 0; 62 } 63 64 free(c); 65 return rval; 66} 67