1 /* 2 * pppcrypt.c - PPP/DES linkage for MS-CHAP and EAP SRP-SHA1 3 * 4 * Extracted from chap_ms.c by James Carlson. 5 * 6 * Copyright (c) 1995 Eric Rosenquist. 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 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * 3. The name(s) of the authors of this software must not be used to 21 * endorse or promote products derived from this software without 22 * prior written permission. 23 * 24 * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO 25 * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 26 * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY 27 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 28 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 29 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 30 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 31 */ 32 33 #include "netif/ppp/ppp_opts.h" 34 #if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not necessary */ 35 36 #include "netif/ppp/ppp_impl.h" 37 38 #include "netif/ppp/pppcrypt.h" 39 40 41 static u_char pppcrypt_get_7bits(u_char *input, int startBit) { 42 unsigned int word; 43 44 word = (unsigned)input[startBit / 8] << 8; 45 word |= (unsigned)input[startBit / 8 + 1]; 46 47 word >>= 15 - (startBit % 8 + 7); 48 49 return word & 0xFE; 50 } 51 52 /* IN 56 bit DES key missing parity bits 53 * OUT 64 bit DES key with parity bits added 54 */ 55 void pppcrypt_56_to_64_bit_key(u_char *key, u_char * des_key) { 56 des_key[0] = pppcrypt_get_7bits(key, 0); 57 des_key[1] = pppcrypt_get_7bits(key, 7); 58 des_key[2] = pppcrypt_get_7bits(key, 14); 59 des_key[3] = pppcrypt_get_7bits(key, 21); 60 des_key[4] = pppcrypt_get_7bits(key, 28); 61 des_key[5] = pppcrypt_get_7bits(key, 35); 62 des_key[6] = pppcrypt_get_7bits(key, 42); 63 des_key[7] = pppcrypt_get_7bits(key, 49); 64 } 65 66 #endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ 67