1 /* $NetBSD: otp.h,v 1.1.1.2 2011/04/14 14:09:28 elric Exp $ */ 2 3 /* 4 * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan 5 * (Royal Institute of Technology, Stockholm, Sweden). 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * 3. Neither the name of the Institute nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 /* Id */ 37 38 #ifndef _OTP_H 39 #define _OTP_H 40 41 #include <stdlib.h> 42 #include <time.h> 43 44 enum {OTPKEYSIZE = 8}; 45 46 typedef unsigned char OtpKey[OTPKEYSIZE]; 47 48 #define OTP_MIN_PASSPHRASE 10 49 #define OTP_MAX_PASSPHRASE 63 50 51 #define OTP_USER_TIMEOUT 120 52 #define OTP_DB_TIMEOUT 60 53 54 #define OTP_HEXPREFIX "hex:" 55 #define OTP_WORDPREFIX "word:" 56 57 typedef enum { OTP_ALG_MD4, OTP_ALG_MD5, OTP_ALG_SHA } OtpAlgID; 58 59 #define OTP_ALG_DEFAULT "md5" 60 61 typedef struct { 62 OtpAlgID id; 63 char *name; 64 int hashsize; 65 int (*hash)(const char *, size_t, unsigned char *); 66 int (*init)(OtpKey, const char *, const char *); 67 int (*next)(OtpKey); 68 } OtpAlgorithm; 69 70 typedef struct { 71 char *user; 72 OtpAlgorithm *alg; 73 unsigned n; 74 char seed[17]; 75 OtpKey key; 76 int challengep; 77 time_t lock_time; 78 char *err; 79 } OtpContext; 80 81 OtpAlgorithm *otp_find_alg (char *); 82 void otp_print_stddict (OtpKey, char *, size_t); 83 void otp_print_hex (OtpKey, char *, size_t); 84 void otp_print_stddict_extended (OtpKey, char *, size_t); 85 void otp_print_hex_extended (OtpKey, char *, size_t); 86 unsigned otp_checksum (OtpKey); 87 int otp_parse_hex (OtpKey, const char *); 88 int otp_parse_stddict (OtpKey, const char *); 89 int otp_parse_altdict (OtpKey, const char *, OtpAlgorithm *); 90 int otp_parse (OtpKey, const char *, OtpAlgorithm *); 91 int otp_challenge (OtpContext *, char *, char *, size_t); 92 int otp_verify_user (OtpContext *, const char *); 93 int otp_verify_user_1 (OtpContext *, const char *); 94 char *otp_error (OtpContext *); 95 96 void *otp_db_open (void); 97 void otp_db_close (void *); 98 int otp_put (void *, OtpContext *); 99 int otp_get (void *, OtpContext *); 100 int otp_simple_get (void *, OtpContext *); 101 int otp_delete (void *, OtpContext *); 102 103 #endif /* _OTP_H */ 104