diff options
author | Tom Yu <tlyu@mit.edu> | 1998-11-02 20:40:55 +0000 |
---|---|---|
committer | Tom Yu <tlyu@mit.edu> | 1998-11-02 20:40:55 +0000 |
commit | 29e7d86639c0f939b3b0f84286a3ea2d551a976a (patch) | |
tree | a7b6bced99c4d04279e5ad833c175eed7a8744bf /src/lib/crypto/enc_provider | |
parent | 4f48a6df86ec7a84e2dc2bedb0966d06a00bdd64 (diff) | |
download | krb5-29e7d86639c0f939b3b0f84286a3ea2d551a976a.zip krb5-29e7d86639c0f939b3b0f84286a3ea2d551a976a.tar.gz krb5-29e7d86639c0f939b3b0f84286a3ea2d551a976a.tar.bz2 |
ressurect files missed by merge
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@11006 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/crypto/enc_provider')
-rw-r--r-- | src/lib/crypto/enc_provider/Makefile.in | 29 | ||||
-rw-r--r-- | src/lib/crypto/enc_provider/des.c | 128 | ||||
-rw-r--r-- | src/lib/crypto/enc_provider/des3.c | 136 | ||||
-rw-r--r-- | src/lib/crypto/enc_provider/enc_provider.h | 32 |
4 files changed, 325 insertions, 0 deletions
diff --git a/src/lib/crypto/enc_provider/Makefile.in b/src/lib/crypto/enc_provider/Makefile.in new file mode 100644 index 0000000..ebb5f5c --- /dev/null +++ b/src/lib/crypto/enc_provider/Makefile.in @@ -0,0 +1,29 @@ +thisconfigdir=./.. +BUILDTOP=$(REL)$(U)$(S)$(U)$(S)$(U) +CFLAGS = $(CCOPTS) $(DEFS) -I$(srcdir)/../des + +##DOS##BUILDTOP = ..\..\.. +##DOS##PREFIXDIR=enc_provider +##DOS##OBJFILE=..\enc_prov.lst +##WIN16##LIBNAME=..\crypto.lib + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf + +STLIBOBJS= des.o des3.o + +OBJS= des.$(OBJEXT) des3.$(OBJEXT) + +SRCS= $(srcdir)/des.c $(srcdir)/des3.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs diff --git a/src/lib/crypto/enc_provider/des.c b/src/lib/crypto/enc_provider/des.c new file mode 100644 index 0000000..68c4e5b --- /dev/null +++ b/src/lib/crypto/enc_provider/des.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "k5-int.h" +#include "des_int.h" +#include "enc_provider.h" + +static mit_des_cblock mit_des_zeroblock[8] = {0,0,0,0,0,0,0,0}; + +static void +k5_des_block_size(size_t *blocksize) +{ + *blocksize = 8; +} + +static void +k5_des_keysize(size_t *keybytes, size_t *keylength) +{ + *keybytes = 7; + *keylength = 8; +} + +static krb5_error_code +k5_des_docrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output, int encrypt) +{ + mit_des_key_schedule schedule; + int ret; + + /* key->enctype was checked by the caller */ + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if ((input->length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + if (input->length != output->length) + return(KRB5_BAD_MSIZE); + + switch (ret = mit_des_key_sched(key->contents, schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + + /* this has a return value, but the code always returns zero */ + + mit_des_cbc_encrypt((krb5_pointer) input->data, + (krb5_pointer) output->data, input->length, + schedule, ivec?ivec->data:(char *)mit_des_zeroblock, + encrypt); + + memset(schedule, 0, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des_encrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output) +{ + return(k5_des_docrypt(key, ivec, input, output, 1)); +} + +static krb5_error_code +k5_des_decrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output) +{ + return(k5_des_docrypt(key, ivec, input, output, 0)); +} + +static krb5_error_code +k5_des_make_key(krb5_const krb5_data *randombits, krb5_keyblock *key) +{ + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != 7) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + key->length = 8; + + /* take the seven bytes, move them around into the top 7 bits of the + 8 key bytes, then compute the parity bits */ + + memcpy(key->contents, randombits->data, randombits->length); + key->contents[7] = (((key->contents[0]&1)<<1) | ((key->contents[1]&1)<<2) | + ((key->contents[2]&1)<<3) | ((key->contents[3]&1)<<4) | + ((key->contents[4]&1)<<5) | ((key->contents[5]&1)<<6) | + ((key->contents[6]&1)<<7)); + + mit_des_fixup_key_parity(key->contents); + + return(0); +} + +struct krb5_enc_provider krb5_enc_des = { + k5_des_block_size, + k5_des_keysize, + k5_des_encrypt, + k5_des_decrypt, + k5_des_make_key +}; diff --git a/src/lib/crypto/enc_provider/des3.c b/src/lib/crypto/enc_provider/des3.c new file mode 100644 index 0000000..a27a4d4 --- /dev/null +++ b/src/lib/crypto/enc_provider/des3.c @@ -0,0 +1,136 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "k5-int.h" +#include "des_int.h" + +static mit_des_cblock mit_des_zeroblock[8] = {0,0,0,0,0,0,0,0}; + +static void +k5_des3_block_size(size_t *blocksize) +{ + *blocksize = 8; +} + +static void +k5_des3_keysize(size_t *keybytes, size_t *keylength) +{ + *keybytes = 21; + *keylength = 24; +} + +static krb5_error_code +k5_des3_docrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output, int encrypt) +{ + mit_des3_key_schedule schedule; + int ret; + + /* key->enctype was checked by the caller */ + + if (key->length != 24) + return(KRB5_BAD_KEYSIZE); + if ((input->length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + if (input->length != output->length) + return(KRB5_BAD_MSIZE); + + switch (ret = mit_des3_key_sched(*(mit_des3_cblock *)key->contents, + schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + + /* this has a return value, but the code always returns zero */ + + mit_des3_cbc_encrypt((krb5_pointer) input->data, + (krb5_pointer) output->data, input->length, + schedule[0], schedule[1], schedule[2], + ivec?ivec->data:(char *)mit_des_zeroblock, + encrypt); + + memset(schedule, 0, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des3_encrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output) +{ + return(k5_des3_docrypt(key, ivec, input, output, 1)); +} + +static krb5_error_code +k5_des3_decrypt(krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec, + krb5_const krb5_data *input, krb5_data *output) +{ + return(k5_des3_docrypt(key, ivec, input, output, 0)); +} + +static krb5_error_code +k5_des3_make_key(krb5_const krb5_data *randombits, krb5_keyblock *key) +{ + int i; + + if (key->length != 24) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != 21) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + key->length = 24; + + /* take the seven bytes, move them around into the top 7 bits of the + 8 key bytes, then compute the parity bits. Do this three times. */ + + for (i=0; i<3; i++) { + memcpy(key->contents+i*8, randombits->data+i*7, 7); + key->contents[i*8+7] = (((key->contents[i*8]&1)<<1) | + ((key->contents[i*8+1]&1)<<2) | + ((key->contents[i*8+2]&1)<<3) | + ((key->contents[i*8+3]&1)<<4) | + ((key->contents[i*8+4]&1)<<5) | + ((key->contents[i*8+5]&1)<<6) | + ((key->contents[i*8+6]&1)<<7)); + + mit_des_fixup_key_parity(key->contents+i*8); + } + + return(0); +} + +struct krb5_enc_provider krb5_enc_des3 = { + k5_des3_block_size, + k5_des3_keysize, + k5_des3_encrypt, + k5_des3_decrypt, + k5_des3_make_key +}; diff --git a/src/lib/crypto/enc_provider/enc_provider.h b/src/lib/crypto/enc_provider/enc_provider.h new file mode 100644 index 0000000..1488112 --- /dev/null +++ b/src/lib/crypto/enc_provider/enc_provider.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "k5-int.h" + +extern struct krb5_enc_provider krb5_enc_des; +extern struct krb5_enc_provider krb5_enc_des3; + + |