Skip to content

Commit

Permalink
ticket: 4799
Browse files Browse the repository at this point in the history
version_fixed: 1.6

pull up r18836 from trunk

 r18836@cathode-dark-space:  coffman | 2006-11-17 14:48:17 -0500
 subject: update krb5_c_keylength function, create krb5_c_random_to_key function
 ticket: new
 Target_Version: 1.6
 Tags: pullup
 
 Modify the keylength function to return both keybytes and keylength.
 Change the name of the function and source file to reflect this.
 
 Add a function, krb5_c_random_to_key() that takes random input data
 of the right length (keybytes) and produce a valid key for a given
 enctype.
 



git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@18890 dc483132-0cff-0310-8789-dd5450dbe970
  • Loading branch information
tlyu committed Nov 30, 2006
1 parent 0abe18e commit 09d9d4f
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 10 deletions.
22 changes: 17 additions & 5 deletions src/lib/crypto/Makefile.in
Expand Up @@ -52,7 +52,7 @@ STLIBOBJS=\
keyblocks.o \
keyed_cksum.o \
keyed_checksum_types.o \
keylength.o \
keylengths.o \
make_checksum.o \
make_random_key.o \
mandatory_sumtype.o \
Expand All @@ -61,6 +61,7 @@ STLIBOBJS=\
pbkdf2.o \
prf.o \
prng.o \
random_to_key.o \
state.o \
string_to_cksumtype.o \
string_to_enctype.o \
Expand Down Expand Up @@ -88,7 +89,7 @@ OBJS=\
$(OUTPRE)keyblocks.$(OBJEXT) \
$(OUTPRE)keyed_cksum.$(OBJEXT) \
$(OUTPRE)keyed_checksum_types.$(OBJEXT) \
$(OUTPRE)keylength.$(OBJEXT) \
$(OUTPRE)keylengths.$(OBJEXT) \
$(OUTPRE)make_checksum.$(OBJEXT) \
$(OUTPRE)make_random_key.$(OBJEXT) \
$(OUTPRE)mandatory_sumtype.$(OBJEXT) \
Expand All @@ -97,6 +98,7 @@ OBJS=\
$(OUTPRE)pbkdf2.$(OBJEXT) \
$(OUTPRE)prf.$(OBJEXT) \
$(OUTPRE)prng.$(OBJEXT) \
$(OUTPRE)random_to_key.$(OBJEXT) \
$(OUTPRE)state.$(OBJEXT) \
$(OUTPRE)string_to_cksumtype.$(OBJEXT) \
$(OUTPRE)string_to_enctype.$(OBJEXT) \
Expand Down Expand Up @@ -124,7 +126,7 @@ SRCS=\
$(srcdir)/keyblocks.c \
$(srcdir)/keyed_cksum.c \
$(srcdir)/keyed_checksum_types.c\
$(srcdir)/keylength.c \
$(srcdir)/keylengths.c \
$(srcdir)/make_checksum.c \
$(srcdir)/make_random_key.c \
$(srcdir)/mandatory_sumtype.c \
Expand All @@ -133,6 +135,7 @@ SRCS=\
$(srcdir)/pbkdf2.c \
$(srcdir)/prf.c \
$(srcdir)/prng.c \
$(srcdir)/random_to_key.c \
$(srcdir)/state.c \
$(srcdir)/string_to_cksumtype.c \
$(srcdir)/string_to_enctype.c \
Expand Down Expand Up @@ -527,15 +530,15 @@ keyed_checksum_types.so keyed_checksum_types.po $(OUTPRE)keyed_checksum_types.$(
$(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \
$(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \
cksumtypes.h etypes.h keyed_checksum_types.c
keylength.so keylength.po $(OUTPRE)keylength.$(OBJEXT): \
keylengths.so keylengths.po $(OUTPRE)keylengths.$(OBJEXT): \
$(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
$(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
$(COM_ERR_DEPS) $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-int.h \
$(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \
$(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \
$(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \
$(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \
etypes.h keylength.c
etypes.h keylengths.c
make_checksum.so make_checksum.po $(OUTPRE)make_checksum.$(OBJEXT): \
$(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
$(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
Expand Down Expand Up @@ -608,6 +611,15 @@ prng.so prng.po $(OUTPRE)prng.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
$(srcdir)/sha1/shs.h $(srcdir)/yarrow/yarrow.h $(srcdir)/yarrow/ycipher.h \
$(srcdir)/yarrow/yhash.h $(srcdir)/yarrow/ytypes.h \
prng.c
random_to_key.so random_to_key.po $(OUTPRE)random_to_key.$(OBJEXT): \
$(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
$(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
$(COM_ERR_DEPS) $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-int.h \
$(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \
$(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \
$(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \
$(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \
etypes.h random_to_key.c
state.so state.po $(OUTPRE)state.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
$(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
$(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-err.h \
Expand Down
15 changes: 11 additions & 4 deletions src/lib/crypto/keylength.c → src/lib/crypto/keylengths.c
Expand Up @@ -31,13 +31,17 @@
#include "k5-int.h"
#include "etypes.h"

/*
* keybytes is the number of bytes required as input to make a key,
* keylength is the length of the final key in bytes
*/
krb5_error_code KRB5_CALLCONV
krb5_c_keylength(krb5_context context, krb5_enctype enctype,
size_t *keylength)
krb5_c_keylengths(krb5_context context, krb5_enctype enctype,
size_t *keybytes, size_t *keylength)
{
int i;

if (keylength == NULL)
if (keybytes == NULL && keylength == NULL)
return(EINVAL);

for (i=0; i<krb5_enctypes_length; i++) {
Expand All @@ -48,7 +52,10 @@ krb5_c_keylength(krb5_context context, krb5_enctype enctype,
if (i == krb5_enctypes_length)
return(KRB5_BAD_ENCTYPE);

*keylength = krb5_enctypes_list[i].enc->keylength;
if (keybytes)
*keybytes = krb5_enctypes_list[i].enc->keybytes;
if (keylength)
*keylength = krb5_enctypes_list[i].enc->keylength;

return(0);
}
3 changes: 2 additions & 1 deletion src/lib/crypto/libk5crypto.exports
Expand Up @@ -23,7 +23,7 @@ krb5_c_init_state
krb5_c_is_coll_proof_cksum
krb5_c_is_keyed_cksum
krb5_c_keyed_checksum_types
krb5_c_keylength
krb5_c_keylengths
krb5_c_make_checksum
krb5_c_make_random_key
krb5_c_prf
Expand All @@ -32,6 +32,7 @@ krb5_c_random_add_entropy
krb5_c_random_make_octets
krb5_c_random_os_entropy
krb5_c_random_seed
krb5_c_random_to_key
krb5_c_string_to_key
krb5_c_string_to_key_with_params
krb5_c_valid_cksumtype
Expand Down
73 changes: 73 additions & 0 deletions src/lib/crypto/random_to_key.c
@@ -0,0 +1,73 @@
/*
* COPYRIGHT (c) 2006
* The Regents of the University of Michigan
* ALL RIGHTS RESERVED
*
* Permission is granted to use, copy, create derivative works
* and redistribute this software and such derivative works
* for any purpose, so long as the name of The University of
* Michigan is not used in any advertising or publicity
* pertaining to the use of distribution of this software
* without specific, written prior authorization. If the
* above copyright notice or any other identification of the
* University of Michigan is included in any copy of any
* portion of this software, then the disclaimer below must
* also be included.
*
* THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION
* FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY
* PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF
* MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
* WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
* REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE
* FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING
* OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
* IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGES.
*/

/*
* Create a key given random data. It is assumed that random_key has
* already been initialized and random_key->contents have been allocated
* with the correct length.
*/
#include "k5-int.h"
#include "etypes.h"

krb5_error_code KRB5_CALLCONV
krb5_c_random_to_key(krb5_context context, krb5_enctype enctype,
krb5_data *random_data, krb5_keyblock *random_key)
{
int i;
krb5_error_code ret;
const struct krb5_enc_provider *enc;

if (random_data == NULL || random_key == NULL)
return(EINVAL);

if (random_key->contents == NULL)
return(EINVAL);

for (i=0; i<krb5_enctypes_length; i++) {
if (krb5_enctypes_list[i].etype == enctype)
break;
}

if (i == krb5_enctypes_length)
return(KRB5_BAD_ENCTYPE);

enc = krb5_enctypes_list[i].enc;

if (random_key->length != enc->keylength)
return(KRB5_BAD_KEYSIZE);

ret = ((*(enc->make_key))(random_data, random_key));

if (ret) {
memset(random_key->contents, 0, random_key->length);
}

return(ret);
}

0 comments on commit 09d9d4f

Please sign in to comment.