=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/des.c,v retrieving revision 1.2 retrieving revision 1.6 diff -u -p -r1.2 -r1.6 --- OpenXM_contrib2/asir2000/io/des.c 2000/08/21 08:31:38 1.2 +++ OpenXM_contrib2/asir2000/io/des.c 2001/10/09 01:36:20 1.6 @@ -1,55 +1,9 @@ -/* - * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED - * All rights reserved. - * - * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited, - * non-exclusive and royalty-free license to use, copy, modify and - * redistribute, solely for non-commercial and non-profit purposes, the - * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and - * conditions of this Agreement. For the avoidance of doubt, you acquire - * only a limited right to use the SOFTWARE hereunder, and FLL or any - * third party developer retains all rights, including but not limited to - * copyrights, in and to the SOFTWARE. - * - * (1) FLL does not grant you a license in any way for commercial - * purposes. You may use the SOFTWARE only for non-commercial and - * non-profit purposes only, such as academic, research and internal - * business use. - * (2) The SOFTWARE is protected by the Copyright Law of Japan and - * international copyright treaties. If you make copies of the SOFTWARE, - * with or without modification, as permitted hereunder, you shall affix - * to all such copies of the SOFTWARE the above copyright notice. - * (3) An explicit reference to this SOFTWARE and its copyright owner - * shall be made on your publication or presentation in any form of the - * results obtained by use of the SOFTWARE. - * (4) In the event that you modify the SOFTWARE, you shall notify FLL by - * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification - * for such modification or the source code of the modified part of the - * SOFTWARE. - * - * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL - * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND - * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES' - * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY - * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY. - * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, - * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL - * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES - * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES - * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY - * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF - * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART - * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY - * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, - * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - /* $OpenXM: OpenXM_contrib2/asir2000/io/des.c,v 1.1.1.1 1999/12/03 07:39:11 noro Exp $ -*/ +/* $OpenXM: OpenXM_contrib2/asir2000/io/des.c,v 1.5 2000/12/05 09:06:03 noro Exp $ */ /* Copyright (C) 1996 S.Amada */ #include #include +#include #define ROUND 16 /* 段数 */ @@ -63,6 +17,7 @@ void des_enc(ULONG *, UCHAR *, ULONG *); ULONG round_func(ULONG , UCHAR *); ULONG s_box_func(UCHAR *); void des_dec(ULONG *, UCHAR *, ULONG *); +void key_schedule(UCHAR *,UCHAR *); /* 鍵の縮約型転置 PC-1 */ static USHORT pc_1[56] = { @@ -219,7 +174,7 @@ UCHAR *r_key; /* 拡大鍵(48 * 16 bit) */ ULONG *cipher; /* 暗号文(64 bit) */ { ULONG l_text,r_text, - l_work,r_work,tmp_text,c_text[2]; + l_work,r_work,tmp_text; int loop; @@ -410,115 +365,115 @@ UCHAR *i_data; for(loop = 0;loop < 6;loop++,i_data++) work[loop] = *i_data; /* S1 */ - s_work[0] = (work[0] >> 2) & 0x3fL; - val = (s_work[0] >> 1) & 0x0fL; + s_work[0] = (work[0] >> 2) & 0x3f; + val = (s_work[0] >> 1) & 0x0f; if(s_work[0] & 0x20L) { - if(s_work[0] & 0x01L) s_work[0] = s_1[val+48]; - else s_work[0] = s_1[val+32]; + if(s_work[0] & 0x01L) s_work[0] = (UCHAR)s_1[val+48]; + else s_work[0] = (UCHAR)s_1[val+32]; } else { - if(s_work[0] & 0x01L) s_work[0] = s_1[val+16]; - else s_work[0] = s_1[val]; + if(s_work[0] & 0x01L) s_work[0] = (UCHAR)s_1[val+16]; + else s_work[0] = (UCHAR)s_1[val]; } /* S2 */ - s_work[1] = ((work[0] << 4) | (work[1] >> 4)) & 0x3fL; - val = (s_work[1] >> 1) & 0x0fL; + s_work[1] = ((work[0] << 4) | (work[1] >> 4)) & 0x3f; + val = (s_work[1] >> 1) & 0x0f; if(s_work[1] & 0x20L) { - if(s_work[1] & 0x01L) s_work[1] = s_2[val+48]; - else s_work[1] = s_2[val+32]; + if(s_work[1] & 0x01L) s_work[1] = (UCHAR)s_2[val+48]; + else s_work[1] = (UCHAR)s_2[val+32]; } else { - if(s_work[1] & 0x01L) s_work[1] = s_2[val+16]; - else s_work[1] = s_2[val]; + if(s_work[1] & 0x01L) s_work[1] = (UCHAR)s_2[val+16]; + else s_work[1] = (UCHAR)s_2[val]; } /* S3 */ - s_work[2] = ((work[1] << 2) | (work[2] >> 6)) & 0x3fL; - val = (s_work[2] >> 1) & 0x0fL; + s_work[2] = ((work[1] << 2) | (work[2] >> 6)) & 0x3f; + val = (s_work[2] >> 1) & 0x0f; if(s_work[2] & 0x20L) { - if(s_work[2] & 0x01L) s_work[2] = s_3[val+48]; - else s_work[2] = s_3[val+32]; + if(s_work[2] & 0x01L) s_work[2] = (UCHAR)s_3[val+48]; + else s_work[2] = (UCHAR)s_3[val+32]; } else { - if(s_work[2] & 0x01L) s_work[2] = s_3[val+16]; - else s_work[2] = s_3[val]; + if(s_work[2] & 0x01L) s_work[2] = (UCHAR)s_3[val+16]; + else s_work[2] = (UCHAR)s_3[val]; } /* S4 */ - s_work[3] = work[2] & 0x3fL; - val = (s_work[3] >> 1) & 0x0fL; + s_work[3] = work[2] & 0x3f; + val = (s_work[3] >> 1) & 0x0f; if(s_work[3] & 0x20L) { - if(s_work[3] & 0x01L) s_work[3] = s_4[val+48]; - else s_work[3] = s_4[val+32]; + if(s_work[3] & 0x01L) s_work[3] = (UCHAR)s_4[val+48]; + else s_work[3] = (UCHAR)s_4[val+32]; } else { - if(s_work[3] & 0x01L) s_work[3] = s_4[val+16]; - else s_work[3] = s_4[val]; + if(s_work[3] & 0x01L) s_work[3] = (UCHAR)s_4[val+16]; + else s_work[3] = (UCHAR)s_4[val]; } /* S5 */ - s_work[4] = (work[3] >> 2) & 0x3fL; - val = (s_work[4] >> 1) & 0x0fL; + s_work[4] = (work[3] >> 2) & 0x3f; + val = (s_work[4] >> 1) & 0x0f; if(s_work[4] & 0x20L) { - if(s_work[4] & 0x01L) s_work[4] = s_5[val+48]; - else s_work[4] = s_5[val+32]; + if(s_work[4] & 0x01L) s_work[4] = (UCHAR)s_5[val+48]; + else s_work[4] = (UCHAR)s_5[val+32]; } else { - if(s_work[4] & 0x01L) s_work[4] = s_5[val+16]; - else s_work[4] = s_5[val]; + if(s_work[4] & 0x01L) s_work[4] = (UCHAR)s_5[val+16]; + else s_work[4] = (UCHAR)s_5[val]; } /* S6 */ - s_work[5] = ((work[3] << 4) | (work[4] >> 4)) & 0x3fL; - val = (s_work[5] >> 1) & 0x0fL; + s_work[5] = ((work[3] << 4) | (work[4] >> 4)) & 0x3f; + val = (s_work[5] >> 1) & 0x0f; if(s_work[5] & 0x20L) { - if(s_work[5] & 0x01L) s_work[5] = s_6[val+48]; - else s_work[5] = s_6[val+32]; + if(s_work[5] & 0x01L) s_work[5] = (UCHAR)s_6[val+48]; + else s_work[5] = (UCHAR)s_6[val+32]; } else { - if(s_work[5] & 0x01L) s_work[5] = s_6[val+16]; - else s_work[5] = s_6[val]; + if(s_work[5] & 0x01L) s_work[5] = (UCHAR)s_6[val+16]; + else s_work[5] = (UCHAR)s_6[val]; } /* S7 */ - s_work[6] = ((work[4] << 2) | (work[5] >> 6)) & 0x3fL; - val = (s_work[6] >> 1) & 0x0fL; + s_work[6] = ((work[4] << 2) | (work[5] >> 6)) & 0x3f; + val = (s_work[6] >> 1) & 0x0f; if(s_work[6] & 0x20L) { - if(s_work[6] & 0x01L) s_work[6] = s_7[val+48]; - else s_work[6] = s_7[val+32]; + if(s_work[6] & 0x01L) s_work[6] = (UCHAR)s_7[val+48]; + else s_work[6] = (UCHAR)s_7[val+32]; } else { - if(s_work[6] & 0x01L) s_work[6] = s_7[val+16]; - else s_work[6] = s_7[val]; + if(s_work[6] & 0x01L) s_work[6] = (UCHAR)s_7[val+16]; + else s_work[6] = (UCHAR)s_7[val]; } /* S8 */ - s_work[7] = work[5] & 0x3fL; - val = (s_work[7] >> 1) & 0x0fL; + s_work[7] = work[5] & 0x3f; + val = (s_work[7] >> 1) & 0x0f; if(s_work[7] & 0x20L) { - if(s_work[7] & 0x01L) s_work[7] = s_8[val+48]; - else s_work[7] = s_8[val+32]; + if(s_work[7] & 0x01L) s_work[7] = (UCHAR)s_8[val+48]; + else s_work[7] = (UCHAR)s_8[val+32]; } else { - if(s_work[7] & 0x01L) s_work[7] = s_8[val+16]; - else s_work[7] = s_8[val]; + if(s_work[7] & 0x01L) s_work[7] = (UCHAR)s_8[val+16]; + else s_work[7] = (UCHAR)s_8[val]; } fval = (s_work[0] << 28) | (s_work[1] << 24) @@ -670,7 +625,7 @@ UCHAR *key,*ex_key; ULONG k_work1,k_work2, c_key,d_key, c_tmp,d_tmp; - int loop,loop2,len,strcnt; + int loop,loop2; k_work1 = 0x00000000L;