diff options
author | Kevin Coffman <kwc@citi.umich.edu> | 2006-11-17 19:48:17 +0000 |
---|---|---|
committer | Kevin Coffman <kwc@citi.umich.edu> | 2006-11-17 19:48:17 +0000 |
commit | e91c20fb8b51c22f8a81ebd8f81343f4bd1d0896 (patch) | |
tree | 6e12ff022f4a51b58ace620c2e1315c1809e21c1 /src/lib/crypto/keylengths.c | |
parent | f893735bf76cee0a7fea6bb092e4ee4bc84eac9c (diff) | |
download | krb5-e91c20fb8b51c22f8a81ebd8f81343f4bd1d0896.tar.gz krb5-e91c20fb8b51c22f8a81ebd8f81343f4bd1d0896.tar.xz krb5-e91c20fb8b51c22f8a81ebd8f81343f4bd1d0896.zip |
update krb5_c_keylength function, create krb5_c_random_to_key function
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.
ticket: new
Target_Version: 1.6
Tags: pullup
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18836 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/crypto/keylengths.c')
-rw-r--r-- | src/lib/crypto/keylengths.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/lib/crypto/keylengths.c b/src/lib/crypto/keylengths.c new file mode 100644 index 000000000..acd1da81b --- /dev/null +++ b/src/lib/crypto/keylengths.c @@ -0,0 +1,61 @@ +/* + * 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. + */ + +#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_keylengths(krb5_context context, krb5_enctype enctype, + size_t *keybytes, size_t *keylength) +{ + int i; + + if (keybytes == NULL && keylength == 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); + + if (keybytes) + *keybytes = krb5_enctypes_list[i].enc->keybytes; + if (keylength) + *keylength = krb5_enctypes_list[i].enc->keylength; + + return(0); +} |