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