summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libskey/Makefile13
-rw-r--r--lib/libskey/skey.3392
2 files changed, 403 insertions, 2 deletions
diff --git a/lib/libskey/Makefile b/lib/libskey/Makefile
index 714b31da9c1..d86337fdf79 100644
--- a/lib/libskey/Makefile
+++ b/lib/libskey/Makefile
@@ -1,9 +1,18 @@
-# $OpenBSD: Makefile,v 1.5 2000/03/02 00:29:51 todd Exp $
+# $OpenBSD: Makefile,v 1.6 2001/06/23 21:34:40 millert Exp $
LIB= skey
SRCS= skeylogin.c skeysubr.c put.c
HDRS= skey.h
-#CFLAGS+= -DSKEY_MDX_DEFAULT=4
+MAN+= skey.3
+MLINKS+=skey.3 atob8.3 skey.3 backspace.3 skey.3 btoa8.3 skey.3 btoe.3 \
+ skey.3 etob.3 skey.3 f.3 skey.3 htoi.3 skey.3 keycrunch.3 \
+ skey.3 put8.3 skey.3 readpass.3 skey.3 readskey.3 skey.3 rip.3 \
+ skey.3 sevenbit.3 skey.3 skey_authenticate.3 \
+ skey.3 skey_get_algorithm.3 skey.3 skey_haskey.3 skey.3 skey_keyinfo.3 \
+ skey.3 skey_passcheck.3 skey.3 skey_set_algorithm.3 \
+ skey.3 skey_unlock.3 skey.3 skeychallenge.3 skey.3 skeygetnext.3 \
+ skey.3 skeylookup.3 skey.3 skeyverify.3 skey.3 skeyzero.3 \
+ skey.3 skipspace.3
includes:
@cd ${.CURDIR}; for i in $(HDRS); do \
diff --git a/lib/libskey/skey.3 b/lib/libskey/skey.3
new file mode 100644
index 00000000000..6960a2b0baf
--- /dev/null
+++ b/lib/libskey/skey.3
@@ -0,0 +1,392 @@
+.\" $OpenBSD: skey.3,v 1.1 2001/06/23 21:34:40 millert Exp $
+.\"
+.\" Copyright (c) 2001 Todd C. Miller <Todd.Miller@courtesan.com>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd June 21, 2001
+.Dt SKEY 3
+.Os
+.Sh NAME
+.Nm atob8,
+.Nm backspace,
+.Nm btoa8,
+.Nm btoe,
+.Nm etob,
+.Nm f,
+.Nm htoi,
+.Nm keycrunch,
+.Nm put8,
+.Nm readpass,
+.Nm readskey,
+.Nm rip,
+.Nm sevenbit,
+.Nm skey_authenticate,
+.Nm skey_get_algorithm
+.Nm skey_haskey,
+.Nm skey_keyinfo,
+.Nm skey_passcheck,
+.Nm skey_set_algorithm,
+.Nm skey_unlock,
+.Nm skeychallenge,
+.Nm skeygetnext,
+.Nm skeylookup,
+.Nm skeyverify,
+.Nm skeyzero,
+.Nm skipspace
+.Nd S/Key library functions
+.Sh SYNOPSIS
+.Fd #include <skey.h>
+.Ft int
+.Fn atob8 "char *out" "char *in"
+.Ft void
+.Fn backspace "char *buf"
+.Ft int
+.Fn btoa8 "char *out" "char *in"
+.Ft char *
+.Fn btoe "char *engout" "char *c"
+.Ft int
+.Fn etob "char *out" "char *e"
+.Ft void
+.Fn f "char *x"
+.Ft int
+.Fn htoi "int h"
+.Ft int
+.Fn keycrunch "char *result" "char *seed" "char *passwd"
+.Ft char *
+.Fn put8 "char *out" "char *s"
+.Ft char *
+.Fn readpass "char *buf" "int n"
+.Ft char *
+.Fn readskey "char *buf" "int n"
+.Ft void
+.Fn rip "char *buf"
+.Ft void
+.Fn sevenbit "char *s"
+.Ft int
+.Fn skey_authenticate "char *user"
+.Ft const char *
+.Fn skey_get_algorithm "void"
+.Ft int
+.Fn skey_haskey "char *user"
+.Ft char *
+.Fn skey_keyinfo "char *user"
+.Ft int
+.Fn skey_passcheck "char *user" "char *passwd"
+.Ft char *
+.Fn skey_set_algorithm "char *new"
+.Ft int
+.Fn skey_unlock "struct skey *rec"
+.Ft int
+.Fn skeychallenge "struct skey *rec" "char *user" "char *buf"
+.Ft int
+.Fn skeygetnext "struct skey *rec"
+.Ft int
+.Fn skeylookup "struct skey *rec" "char *user"
+.Ft int
+.Fn skeyverify "struct skey *rec" "char *response"
+.Ft int
+.Fn skeyzero "struct skey *" "char *user"
+.Ft char *
+.Fn skipspace "char *"
+.Sh DESCRIPTION
+These functions implement the S/Key one time password authentication
+mechanism.
+.Pp
+The
+.Fn atob8
+function converts the 16-byte hex string
+.Fa in
+to an 8-byte binary array stored in
+.Fa out .
+The
+.Fn atob8
+function returns 0 on success and -1 if an invalid hex character is encountered.
+.Pp
+The
+.Fn backspace
+function removes backspaced over characters from
+.Fa buf .
+Note that
+.Fn backspace
+assumes the actual backspace character is 0x8 (^H).
+.Pp
+The
+.Fn btoa8
+function converts the 8-byte binary array
+.Fa in
+to a 16-byte string of hex digits stored in
+.Fa out .
+The
+.Fn btoa8
+function returns 0 on success and -1 if an error occurred.
+.Pp
+The
+.Fn btoe
+function encodes the 8 bytes in
+.Fa c
+into a string of 6 english words, stored in
+.Fa engout .
+The caller must supply enough space (30 bytes including the final NUL)
+to store the words.
+The
+.Fn btoe
+function returns
+.Fa engout .
+.Pp
+The
+.Fn etob
+function converts the 6 english words in
+.Fa e
+into an 8-byte binary representation.
+The
+.Fn etob
+function returns 1 if the words are all in the database and parity is correct,
+0 if a word is not in the database, -1 if the number of words is incorrect,
+or -2 if there is a parity error.
+.Pp
+The
+.Fn f
+function is a one-way hash that overwrites the 8-byte input buffer
+.Fa x
+with the hashed result.
+.Pp
+The
+.Fn htoi
+function converts a single hex digit
+.Fa h
+to an integer.
+The
+.Fn htoi
+function returns the converted integer on success or -1 if
+.Fa h
+not a valid hex digit.
+.Pp
+The
+.Fn keycrunch
+function concatenates the
+.Fa seed
+and
+.Fa passwd ,
+runs them through a hash function and collapses the
+.Fa result
+to 64 bits.
+The
+.Fn keycrunch
+function returns 0 on success or -1 if there is a memory allocation failure.
+.Pp
+The
+.Fn put8
+function converts the 8 bytes stored in
+.Fa s
+into a series of 4 16-bit hex digit stored in
+.Fa out .
+There must be at least 20 bytes (including the NUL) in the output buffer,
+.Fa out .
+The
+.Fn put8
+function returns
+.Fa out .
+.Pp
+The
+.Fn readpass
+function reads up to
+.Fa n
+characters from standard input with echo turned off, converting the
+resulting string to 7 bits, storing the result in
+.Fa buf .
+The
+.Fn readpass
+function returns
+.Fa buf .
+.Pp
+The
+.Fn readskey
+function reads up to
+.Fa n
+characters from standard input with echo turned on, converting the
+resulting string to 7 bits, storing the result in
+.Fa buf .
+The
+.Fn readskey
+function returns
+.Fa buf .
+.Pp
+The
+.Fn rip
+function strips trailing linefeeds and carriage returns from
+.Fa buf .
+.Pp
+The
+.Fn sevenbit
+function strips the high bit from each character in
+.Fa s ,
+converting the characters to seven bit
+.Tn ASCII .
+.Pp
+The
+.Fn skey_authenticate
+function presents the
+.Fa user
+with an S/Key challenge and authenticates the response.
+The
+.Fn skey_authenticate
+function returns 0 if authentication is successful or -1 if not.
+.Pp
+The
+.Fn skey_get_algorithm
+function returns a string corresponding to the hash algorithm for
+the current user.
+The default algorithm is
+.Dq md5 .
+.Pp
+The
+.Fn skey_haskey
+function returns 0 if the
+.Fa user
+exists in the S/Key database, 1 if the user does not exist, or -1
+if there was an error reading the database.
+.Pp
+The
+.Fn skey_keyinfo
+function returns a string containing the current sequence number and seed for
+.Fa user .
+The returned string points to internal static storage that will be
+overwritten by subsequent calls to
+.Fn skey_keyinfo .
+.Pp
+The
+.Fn skey_passcheck
+function check a
+.Fa user
+and
+.Fa passwd
+pair against the S/Key database.
+It returns 0 on successful authentication or -1 on failure.
+.Pp
+The
+.Fn skey_set_algorithm
+function sets the user's hash algorithm based on the string
+.Fa new .
+The
+.Fn skey_set_algorithm
+function returns the specified algorithm if it is supported,
+or the null pointer if the hash algorithm is not supported.
+.Pp
+The
+.Fn skey_unlock
+function unlocks the record in the S/Key database specified by
+.Fa rec .
+The
+.Fn skey_unlock
+function returns 0 on success or -1 on failure.
+Either way, the S/Key database is not closed nor is the database
+file pointer affected.
+.Pp
+The
+.Fn skeychallenge
+function stores the (potentially fake) S/Key challenge for
+.Fa user
+in
+.Fa buf .
+It also fills in the skey struct
+.Fa rec
+and locks the user's record in the S/Key database.
+The
+.Fn skeychallenge
+function returns 0 on success or -1 on failure.
+On success the S/Key database remains open and the read/write file
+pointer is set to the beginning of the record.
+.Pp
+The
+.Fn skeygetnext
+function stores the next record in the S/Key database in
+.Fa rec
+and locks that record in the S/Key database.
+The
+.Fn skeygetnext
+function returns 0 on success, 1 if there are no more entries,
+or -1 if there was an error accessing the S/Key database.
+The S/Key database remains open after a call to
+.Fn skeygetnext .
+If no error was encountered accessing the S/Key database, the read/write
+file pointer is set to the beginning of the record or at EOF if
+there are no more records.
+.Pp
+The
+.Fn skeylookup
+function looks up the specified
+.Fa user
+in the S/Key database then fills in the skey struct
+.Fa rec
+and locks the user's record in the database.
+The
+.Fn skeylookup
+function returns 0 on success, 1 if
+.Fa user
+was not found, or -1 if there was an error accessing the S/Key database.
+If no error was encountered accessing the S/Key database, the read/write
+file pointer is set to the beginning of the record.
+.Pp
+The
+.Fn skeyverify
+function verifies the user's
+.Fa response
+based on the S/Key record
+.Fa rec .
+It returns 0 on success (updating the database), 1 on failure, or
+-1 if there was an error accessing the database.
+The database is always closed by a call to
+.Fn skeyverify .
+.Pp
+The
+.Fn skeyzero
+function zeroes out the entry in the S/Key database specified by
+.Fa rec
+and
+.Fa user .
+The
+.Fn skeyzero
+function returns 0 on success and -1 if there was an error updating
+the database.
+The database is always closed by a call to
+.Fn skeyzero .
+.Sh SEE ALSO
+.Xr skey 1 ,
+.Xr skeyinit 1
+.Sh STANDARDS
+There is no standard API for S/Key.
+The de facto standard is the free S/Key distribution released by Bellcore.
+.Pp
+The following functions are extensions and do not appear in
+the original Bellcore S/Key distribution:
+.Fn readskey ,
+.Fn skey_authenticate ,
+.Fn skey_get_algorithm ,
+.Fn skey_haskey ,
+.Fn skey_keyinfo ,
+.Fn skey_passcheck ,
+.Fn skey_set_algorithm ,
+.Fn skey_unlock ,
+.Fn skeyzero .