POK
|
00001 /* 00002 * POK header 00003 * 00004 * The following file is a part of the POK project. Any modification should 00005 * made according to the POK licence. You CANNOT use this file or a part of 00006 * this file is this part of a file for your own project 00007 * 00008 * For more information on the POK licence, please see our LICENCE FILE 00009 * 00010 * Please follow the coding guidelines described in doc/CODING_GUIDELINES 00011 * 00012 * Copyright (c) 2007-2009 POK team 00013 * 00014 * Created by julien on Tue Dec 8 15:53:28 2009 00015 */ 00016 00017 /* crypto/des/set_key.c */ 00018 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 00019 * All rights reserved. 00020 * 00021 * This package is an SSL implementation written 00022 * by Eric Young (eay@cryptsoft.com). 00023 * The implementation was written so as to conform with Netscapes SSL. 00024 * 00025 * This library is free for commercial and non-commercial use as long as 00026 * the following conditions are aheared to. The following conditions 00027 * apply to all code found in this distribution, be it the RC4, RSA, 00028 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 00029 * included with this distribution is covered by the same copyright terms 00030 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 00031 * 00032 * Copyright remains Eric Young's, and as such any Copyright notices in 00033 * the code are not to be removed. 00034 * If this package is used in a product, Eric Young should be given attribution 00035 * as the author of the parts of the library used. 00036 * This can be in the form of a textual message at program startup or 00037 * in documentation (online or textual) provided with the package. 00038 * 00039 * Redistribution and use in source and binary forms, with or without 00040 * modification, are permitted provided that the following conditions 00041 * are met: 00042 * 1. Redistributions of source code must retain the copyright 00043 * notice, this list of conditions and the following disclaimer. 00044 * 2. Redistributions in binary form must reproduce the above copyright 00045 * notice, this list of conditions and the following disclaimer in the 00046 * documentation and/or other materials provided with the distribution. 00047 * 3. All advertising materials mentioning features or use of this software 00048 * must display the following acknowledgement: 00049 * "This product includes cryptographic software written by 00050 * Eric Young (eay@cryptsoft.com)" 00051 * The word 'cryptographic' can be left out if the rouines from the library 00052 * being used are not cryptographic related :-). 00053 * 4. If you include any Windows specific code (or a derivative thereof) from 00054 * the apps directory (application code) you must include an acknowledgement: 00055 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 00056 * 00057 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 00058 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00059 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00060 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 00061 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00062 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00063 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00064 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00065 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00066 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00067 * SUCH DAMAGE. 00068 * 00069 * The licence and distribution terms for any publically available version or 00070 * derivative of this code cannot be changed. i.e. this code cannot simply be 00071 * copied and put under another distribution licence 00072 * [including the GNU Public Licence.] 00073 */ 00074 00075 /* set_key.c v 1.4 eay 24/9/91 00076 * 1.4 Speed up by 400% :-) 00077 * 1.3 added register declarations. 00078 * 1.2 unrolled make_key_sched a bit more 00079 * 1.1 added norm_expand_bits 00080 * 1.0 First working version 00081 */ 00082 00083 00084 #ifdef POK_NEEDS_PROTOCOLS_DES 00085 00086 #include "des_locl.h" 00087 #ifdef OPENSSL_FIPS 00088 #include <openssl/fips.h> 00089 #endif 00090 00091 00092 OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */ 00093 00094 static const unsigned char odd_parity[256]={ 00095 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, 00096 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, 00097 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, 00098 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, 00099 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, 00100 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, 00101 97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110, 00102 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, 00103 128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143, 00104 145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158, 00105 161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174, 00106 176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191, 00107 193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206, 00108 208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223, 00109 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, 00110 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254}; 00111 00112 void DES_set_odd_parity(DES_cblock *key) 00113 { 00114 unsigned int i; 00115 00116 for (i=0; i<DES_KEY_SZ; i++) 00117 (*key)[i]=odd_parity[(*key)[i]]; 00118 } 00119 00120 int DES_check_key_parity(const_DES_cblock *key) 00121 { 00122 unsigned int i; 00123 00124 for (i=0; i<DES_KEY_SZ; i++) 00125 { 00126 if ((*key)[i] != odd_parity[(*key)[i]]) 00127 return(0); 00128 } 00129 return(1); 00130 } 00131 00132 /* Weak and semi week keys as take from 00133 * %A D.W. Davies 00134 * %A W.L. Price 00135 * %T Security for Computer Networks 00136 * %I John Wiley & Sons 00137 * %D 1984 00138 * Many thanks to smb@ulysses.att.com (Steven Bellovin) for the reference 00139 * (and actual cblock values). 00140 */ 00141 #define NUM_WEAK_KEY 16 00142 static const DES_cblock weak_keys[NUM_WEAK_KEY]={ 00143 /* weak keys */ 00144 {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, 00145 {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, 00146 {0x1F,0x1F,0x1F,0x1F,0x0E,0x0E,0x0E,0x0E}, 00147 {0xE0,0xE0,0xE0,0xE0,0xF1,0xF1,0xF1,0xF1}, 00148 /* semi-weak keys */ 00149 {0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, 00150 {0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01}, 00151 {0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1}, 00152 {0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E}, 00153 {0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1}, 00154 {0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01}, 00155 {0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE}, 00156 {0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E}, 00157 {0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E}, 00158 {0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01}, 00159 {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, 00160 {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}}; 00161 00162 int DES_is_weak_key(const_DES_cblock *key) 00163 { 00164 int i; 00165 00166 for (i=0; i<NUM_WEAK_KEY; i++) 00167 /* Added == 0 to comparison, I obviously don't run 00168 * this section very often :-(, thanks to 00169 * engineering@MorningStar.Com for the fix 00170 * eay 93/06/29 00171 * Another problem, I was comparing only the first 4 00172 * bytes, 97/03/18 */ 00173 if (memcmp(weak_keys[i],key,sizeof(DES_cblock)) == 0) return(1); 00174 return(0); 00175 } 00176 00177 /* NOW DEFINED IN des_local.h 00178 * See ecb_encrypt.c for a pseudo description of these macros. 00179 * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\ 00180 * (b)^=(t),\ 00181 * (a)=((a)^((t)<<(n)))) 00182 */ 00183 00184 #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\ 00185 (a)=(a)^(t)^(t>>(16-(n)))) 00186 00187 static const DES_LONG des_skb[8][64]={ 00188 { 00189 /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 00190 0x00000000L,0x00000010L,0x20000000L,0x20000010L, 00191 0x00010000L,0x00010010L,0x20010000L,0x20010010L, 00192 0x00000800L,0x00000810L,0x20000800L,0x20000810L, 00193 0x00010800L,0x00010810L,0x20010800L,0x20010810L, 00194 0x00000020L,0x00000030L,0x20000020L,0x20000030L, 00195 0x00010020L,0x00010030L,0x20010020L,0x20010030L, 00196 0x00000820L,0x00000830L,0x20000820L,0x20000830L, 00197 0x00010820L,0x00010830L,0x20010820L,0x20010830L, 00198 0x00080000L,0x00080010L,0x20080000L,0x20080010L, 00199 0x00090000L,0x00090010L,0x20090000L,0x20090010L, 00200 0x00080800L,0x00080810L,0x20080800L,0x20080810L, 00201 0x00090800L,0x00090810L,0x20090800L,0x20090810L, 00202 0x00080020L,0x00080030L,0x20080020L,0x20080030L, 00203 0x00090020L,0x00090030L,0x20090020L,0x20090030L, 00204 0x00080820L,0x00080830L,0x20080820L,0x20080830L, 00205 0x00090820L,0x00090830L,0x20090820L,0x20090830L, 00206 },{ 00207 /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */ 00208 0x00000000L,0x02000000L,0x00002000L,0x02002000L, 00209 0x00200000L,0x02200000L,0x00202000L,0x02202000L, 00210 0x00000004L,0x02000004L,0x00002004L,0x02002004L, 00211 0x00200004L,0x02200004L,0x00202004L,0x02202004L, 00212 0x00000400L,0x02000400L,0x00002400L,0x02002400L, 00213 0x00200400L,0x02200400L,0x00202400L,0x02202400L, 00214 0x00000404L,0x02000404L,0x00002404L,0x02002404L, 00215 0x00200404L,0x02200404L,0x00202404L,0x02202404L, 00216 0x10000000L,0x12000000L,0x10002000L,0x12002000L, 00217 0x10200000L,0x12200000L,0x10202000L,0x12202000L, 00218 0x10000004L,0x12000004L,0x10002004L,0x12002004L, 00219 0x10200004L,0x12200004L,0x10202004L,0x12202004L, 00220 0x10000400L,0x12000400L,0x10002400L,0x12002400L, 00221 0x10200400L,0x12200400L,0x10202400L,0x12202400L, 00222 0x10000404L,0x12000404L,0x10002404L,0x12002404L, 00223 0x10200404L,0x12200404L,0x10202404L,0x12202404L, 00224 },{ 00225 /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */ 00226 0x00000000L,0x00000001L,0x00040000L,0x00040001L, 00227 0x01000000L,0x01000001L,0x01040000L,0x01040001L, 00228 0x00000002L,0x00000003L,0x00040002L,0x00040003L, 00229 0x01000002L,0x01000003L,0x01040002L,0x01040003L, 00230 0x00000200L,0x00000201L,0x00040200L,0x00040201L, 00231 0x01000200L,0x01000201L,0x01040200L,0x01040201L, 00232 0x00000202L,0x00000203L,0x00040202L,0x00040203L, 00233 0x01000202L,0x01000203L,0x01040202L,0x01040203L, 00234 0x08000000L,0x08000001L,0x08040000L,0x08040001L, 00235 0x09000000L,0x09000001L,0x09040000L,0x09040001L, 00236 0x08000002L,0x08000003L,0x08040002L,0x08040003L, 00237 0x09000002L,0x09000003L,0x09040002L,0x09040003L, 00238 0x08000200L,0x08000201L,0x08040200L,0x08040201L, 00239 0x09000200L,0x09000201L,0x09040200L,0x09040201L, 00240 0x08000202L,0x08000203L,0x08040202L,0x08040203L, 00241 0x09000202L,0x09000203L,0x09040202L,0x09040203L, 00242 },{ 00243 /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */ 00244 0x00000000L,0x00100000L,0x00000100L,0x00100100L, 00245 0x00000008L,0x00100008L,0x00000108L,0x00100108L, 00246 0x00001000L,0x00101000L,0x00001100L,0x00101100L, 00247 0x00001008L,0x00101008L,0x00001108L,0x00101108L, 00248 0x04000000L,0x04100000L,0x04000100L,0x04100100L, 00249 0x04000008L,0x04100008L,0x04000108L,0x04100108L, 00250 0x04001000L,0x04101000L,0x04001100L,0x04101100L, 00251 0x04001008L,0x04101008L,0x04001108L,0x04101108L, 00252 0x00020000L,0x00120000L,0x00020100L,0x00120100L, 00253 0x00020008L,0x00120008L,0x00020108L,0x00120108L, 00254 0x00021000L,0x00121000L,0x00021100L,0x00121100L, 00255 0x00021008L,0x00121008L,0x00021108L,0x00121108L, 00256 0x04020000L,0x04120000L,0x04020100L,0x04120100L, 00257 0x04020008L,0x04120008L,0x04020108L,0x04120108L, 00258 0x04021000L,0x04121000L,0x04021100L,0x04121100L, 00259 0x04021008L,0x04121008L,0x04021108L,0x04121108L, 00260 },{ 00261 /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 00262 0x00000000L,0x10000000L,0x00010000L,0x10010000L, 00263 0x00000004L,0x10000004L,0x00010004L,0x10010004L, 00264 0x20000000L,0x30000000L,0x20010000L,0x30010000L, 00265 0x20000004L,0x30000004L,0x20010004L,0x30010004L, 00266 0x00100000L,0x10100000L,0x00110000L,0x10110000L, 00267 0x00100004L,0x10100004L,0x00110004L,0x10110004L, 00268 0x20100000L,0x30100000L,0x20110000L,0x30110000L, 00269 0x20100004L,0x30100004L,0x20110004L,0x30110004L, 00270 0x00001000L,0x10001000L,0x00011000L,0x10011000L, 00271 0x00001004L,0x10001004L,0x00011004L,0x10011004L, 00272 0x20001000L,0x30001000L,0x20011000L,0x30011000L, 00273 0x20001004L,0x30001004L,0x20011004L,0x30011004L, 00274 0x00101000L,0x10101000L,0x00111000L,0x10111000L, 00275 0x00101004L,0x10101004L,0x00111004L,0x10111004L, 00276 0x20101000L,0x30101000L,0x20111000L,0x30111000L, 00277 0x20101004L,0x30101004L,0x20111004L,0x30111004L, 00278 },{ 00279 /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */ 00280 0x00000000L,0x08000000L,0x00000008L,0x08000008L, 00281 0x00000400L,0x08000400L,0x00000408L,0x08000408L, 00282 0x00020000L,0x08020000L,0x00020008L,0x08020008L, 00283 0x00020400L,0x08020400L,0x00020408L,0x08020408L, 00284 0x00000001L,0x08000001L,0x00000009L,0x08000009L, 00285 0x00000401L,0x08000401L,0x00000409L,0x08000409L, 00286 0x00020001L,0x08020001L,0x00020009L,0x08020009L, 00287 0x00020401L,0x08020401L,0x00020409L,0x08020409L, 00288 0x02000000L,0x0A000000L,0x02000008L,0x0A000008L, 00289 0x02000400L,0x0A000400L,0x02000408L,0x0A000408L, 00290 0x02020000L,0x0A020000L,0x02020008L,0x0A020008L, 00291 0x02020400L,0x0A020400L,0x02020408L,0x0A020408L, 00292 0x02000001L,0x0A000001L,0x02000009L,0x0A000009L, 00293 0x02000401L,0x0A000401L,0x02000409L,0x0A000409L, 00294 0x02020001L,0x0A020001L,0x02020009L,0x0A020009L, 00295 0x02020401L,0x0A020401L,0x02020409L,0x0A020409L, 00296 },{ 00297 /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */ 00298 0x00000000L,0x00000100L,0x00080000L,0x00080100L, 00299 0x01000000L,0x01000100L,0x01080000L,0x01080100L, 00300 0x00000010L,0x00000110L,0x00080010L,0x00080110L, 00301 0x01000010L,0x01000110L,0x01080010L,0x01080110L, 00302 0x00200000L,0x00200100L,0x00280000L,0x00280100L, 00303 0x01200000L,0x01200100L,0x01280000L,0x01280100L, 00304 0x00200010L,0x00200110L,0x00280010L,0x00280110L, 00305 0x01200010L,0x01200110L,0x01280010L,0x01280110L, 00306 0x00000200L,0x00000300L,0x00080200L,0x00080300L, 00307 0x01000200L,0x01000300L,0x01080200L,0x01080300L, 00308 0x00000210L,0x00000310L,0x00080210L,0x00080310L, 00309 0x01000210L,0x01000310L,0x01080210L,0x01080310L, 00310 0x00200200L,0x00200300L,0x00280200L,0x00280300L, 00311 0x01200200L,0x01200300L,0x01280200L,0x01280300L, 00312 0x00200210L,0x00200310L,0x00280210L,0x00280310L, 00313 0x01200210L,0x01200310L,0x01280210L,0x01280310L, 00314 },{ 00315 /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */ 00316 0x00000000L,0x04000000L,0x00040000L,0x04040000L, 00317 0x00000002L,0x04000002L,0x00040002L,0x04040002L, 00318 0x00002000L,0x04002000L,0x00042000L,0x04042000L, 00319 0x00002002L,0x04002002L,0x00042002L,0x04042002L, 00320 0x00000020L,0x04000020L,0x00040020L,0x04040020L, 00321 0x00000022L,0x04000022L,0x00040022L,0x04040022L, 00322 0x00002020L,0x04002020L,0x00042020L,0x04042020L, 00323 0x00002022L,0x04002022L,0x00042022L,0x04042022L, 00324 0x00000800L,0x04000800L,0x00040800L,0x04040800L, 00325 0x00000802L,0x04000802L,0x00040802L,0x04040802L, 00326 0x00002800L,0x04002800L,0x00042800L,0x04042800L, 00327 0x00002802L,0x04002802L,0x00042802L,0x04042802L, 00328 0x00000820L,0x04000820L,0x00040820L,0x04040820L, 00329 0x00000822L,0x04000822L,0x00040822L,0x04040822L, 00330 0x00002820L,0x04002820L,0x00042820L,0x04042820L, 00331 0x00002822L,0x04002822L,0x00042822L,0x04042822L, 00332 }}; 00333 00334 int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule) 00335 { 00336 if (DES_check_key) 00337 { 00338 return DES_set_key_checked(key, schedule); 00339 } 00340 else 00341 { 00342 DES_set_key_unchecked(key, schedule); 00343 return 0; 00344 } 00345 } 00346 00347 /* return 0 if key parity is odd (correct), 00348 * return -1 if key parity error, 00349 * return -2 if illegal weak key. 00350 */ 00351 int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule) 00352 { 00353 if (!DES_check_key_parity(key)) 00354 return(-1); 00355 if (DES_is_weak_key(key)) 00356 return(-2); 00357 DES_set_key_unchecked(key, schedule); 00358 return 0; 00359 } 00360 00361 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule) 00362 { 00363 static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; 00364 register DES_LONG c,d,t,s,t2; 00365 register const unsigned char *in; 00366 register DES_LONG *k; 00367 register int i; 00368 00369 #ifdef OPENBSD_DEV_CRYPTO 00370 memcpy(schedule->key,key,sizeof schedule->key); 00371 schedule->session=NULL; 00372 #endif 00373 k = &schedule->ks->deslong[0]; 00374 in = &(*key)[0]; 00375 00376 #ifdef OPENSSL_FIPS 00377 FIPS_selftest_check(); 00378 #endif 00379 00380 c2l(in,c); 00381 c2l(in,d); 00382 00383 /* do PC1 in 47 simple operations :-) 00384 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov) 00385 * for the inspiration. :-) */ 00386 PERM_OP (d,c,t,4,0x0f0f0f0fL); 00387 HPERM_OP(c,t,-2,0xcccc0000L); 00388 HPERM_OP(d,t,-2,0xcccc0000L); 00389 PERM_OP (d,c,t,1,0x55555555L); 00390 PERM_OP (c,d,t,8,0x00ff00ffL); 00391 PERM_OP (d,c,t,1,0x55555555L); 00392 d= (((d&0x000000ffL)<<16L)| (d&0x0000ff00L) | 00393 ((d&0x00ff0000L)>>16L)|((c&0xf0000000L)>>4L)); 00394 c&=0x0fffffffL; 00395 00396 for (i=0; i<ITERATIONS; i++) 00397 { 00398 if (shifts2[i]) 00399 { c=((c>>2L)|(c<<26L)); d=((d>>2L)|(d<<26L)); } 00400 else 00401 { c=((c>>1L)|(c<<27L)); d=((d>>1L)|(d<<27L)); } 00402 c&=0x0fffffffL; 00403 d&=0x0fffffffL; 00404 /* could be a few less shifts but I am to lazy at this 00405 * point in time to investigate */ 00406 s= des_skb[0][ (c )&0x3f ]| 00407 des_skb[1][((c>> 6L)&0x03)|((c>> 7L)&0x3c)]| 00408 des_skb[2][((c>>13L)&0x0f)|((c>>14L)&0x30)]| 00409 des_skb[3][((c>>20L)&0x01)|((c>>21L)&0x06) | 00410 ((c>>22L)&0x38)]; 00411 t= des_skb[4][ (d )&0x3f ]| 00412 des_skb[5][((d>> 7L)&0x03)|((d>> 8L)&0x3c)]| 00413 des_skb[6][ (d>>15L)&0x3f ]| 00414 des_skb[7][((d>>21L)&0x0f)|((d>>22L)&0x30)]; 00415 00416 /* table contained 0213 4657 */ 00417 t2=((t<<16L)|(s&0x0000ffffL))&0xffffffffL; 00418 *(k++)=ROTATE(t2,30)&0xffffffffL; 00419 00420 t2=((s>>16L)|(t&0xffff0000L)); 00421 *(k++)=ROTATE(t2,26)&0xffffffffL; 00422 } 00423 } 00424 00425 int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule) 00426 { 00427 return(DES_set_key(key,schedule)); 00428 } 00429 /* 00430 #undef des_fixup_key_parity 00431 void des_fixup_key_parity(des_cblock *key) 00432 { 00433 des_set_odd_parity(key); 00434 } 00435 */ 00436 00437 #endif /* POK_NEEDS_ ...*/