otp.h revision 1.1.1.2
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 44enum {OTPKEYSIZE = 8}; 45 46typedef 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 57typedef enum { OTP_ALG_MD4, OTP_ALG_MD5, OTP_ALG_SHA } OtpAlgID; 58 59#define OTP_ALG_DEFAULT "md5" 60 61typedef 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 70typedef 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 81OtpAlgorithm *otp_find_alg (char *); 82void otp_print_stddict (OtpKey, char *, size_t); 83void otp_print_hex (OtpKey, char *, size_t); 84void otp_print_stddict_extended (OtpKey, char *, size_t); 85void otp_print_hex_extended (OtpKey, char *, size_t); 86unsigned otp_checksum (OtpKey); 87int otp_parse_hex (OtpKey, const char *); 88int otp_parse_stddict (OtpKey, const char *); 89int otp_parse_altdict (OtpKey, const char *, OtpAlgorithm *); 90int otp_parse (OtpKey, const char *, OtpAlgorithm *); 91int otp_challenge (OtpContext *, char *, char *, size_t); 92int otp_verify_user (OtpContext *, const char *); 93int otp_verify_user_1 (OtpContext *, const char *); 94char *otp_error (OtpContext *); 95 96void *otp_db_open (void); 97void otp_db_close (void *); 98int otp_put (void *, OtpContext *); 99int otp_get (void *, OtpContext *); 100int otp_simple_get (void *, OtpContext *); 101int otp_delete (void *, OtpContext *); 102 103#endif /* _OTP_H */ 104