diff --git a/programs/develop/libraries/crypt_des/trunk/Tupfile.lua b/programs/develop/libraries/crypt_des/Tupfile.lua similarity index 100% rename from programs/develop/libraries/crypt_des/trunk/Tupfile.lua rename to programs/develop/libraries/crypt_des/Tupfile.lua diff --git a/programs/develop/libraries/crypt_des/trunk/about.htm b/programs/develop/libraries/crypt_des/about.htm similarity index 100% rename from programs/develop/libraries/crypt_des/trunk/about.htm rename to programs/develop/libraries/crypt_des/about.htm diff --git a/programs/develop/libraries/crypt_des/trunk/crypt_des.asm b/programs/develop/libraries/crypt_des/crypt_des.asm similarity index 94% rename from programs/develop/libraries/crypt_des/trunk/crypt_des.asm rename to programs/develop/libraries/crypt_des/crypt_des.asm index 366c0692f..f71ea9947 100644 --- a/programs/develop/libraries/crypt_des/trunk/crypt_des.asm +++ b/programs/develop/libraries/crypt_des/crypt_des.asm @@ -1,460 +1,466 @@ -; -; библиотека для шифрования по алгоритму DES -; - -format MS COFF -public EXPORTS -section '.flat' code readable align 16 - -include '../../../../macros.inc' -include '../../../../proc32.inc' - -;description: -; функция шифрования файлов -;input: -; key - входной ключ 64 бит -; mem_keys - память для формирования ключей (размер 120 байт) -; block - указатель на первый шифруемый 8 байтный блок -; b_count - число блоков для шифрования -align 4 -proc des_encryption, key:dword, mem_keys:dword, block:dword, b_count:dword -locals - n dd ? ;переменная цикла -endl -pushad - stdcall encryption_key, [key],[mem_keys] - - ;начальная перестановка ip - mov ecx,[b_count] - cmp ecx,1 - jl .end_funct - mov edi,[block] - cld - @@: - mov esi,[mem_keys] - add esi,112 - stdcall fun_convert_bits, edi, esi, oper_ip, 64 - movsd - movsd - loop @b - - mov ecx,[b_count] - mov esi,[block] - ;cld - .cycle_3: - mov dword[n],0 - .funct_f: - mov edi,[mem_keys] - add edi,112 - ;переставляем блок R0(32) по матрице e - stdcall fun_convert_bits, esi, edi, oper_e, 48 - - ;edi - R0~e (48 бит) - ;esi - L0R0 (64 бита) - stdcall fun_r0xorki_si, edi,[mem_keys],[n] - - ;edi - (R0~e xor ki)~Si (32 бита) - ;перестановка p - mov eax,edi - add eax,4 - stdcall fun_convert_bits, edi, eax, oper_p, 32 - - ;пишем R0 в L0, и (L0 xor (R0~e xor ki)~Si) в R0 - mov edx,dword[esi+4] - mov ebx,dword[esi] - xor edx,dword[eax] - mov dword[esi],edx - mov dword[esi+4],ebx - - inc dword[n] - cmp dword[n],16 - jl .funct_f - - add esi,8 ;переход на следующий 64 битный шифруемый блок - loop .cycle_3 - - ;конечная перестановка ip_inv - mov ecx,[b_count] - mov edi,[block] - ;cld - @@: - mov esi,[mem_keys] - add esi,112 - stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64 - movsd - movsd - loop @b - - .end_funct: -popad - ret -endp - -;description: -; функция расшифрования файлов -;input: -; key - входной ключ 64 бит -; mem_keys - память для формирования ключей (размер 120 байт) -; block - указатель на первый расшифровываемый 8 байтный блок -; b_count - число блоков для расшифрования -align 4 -proc des_decryption, key:dword, mem_keys:dword, block:dword, b_count:dword -locals - n dd ? ;переменная цикла -endl -pushad - stdcall encryption_key, [key],[mem_keys] - - ;начальная перестановка ip - mov ecx,[b_count] - cmp ecx,1 - jl .end_funct - mov edi,[block] - cld - @@: - mov esi,[mem_keys] - add esi,112 - stdcall fun_convert_bits, edi, esi, oper_ip, 64 - movsd - movsd - loop @b - - mov ecx,[b_count] - mov esi,[block] - ;cld - .cycle_3: - mov dword[n],16 - .funct_f: - dec dword[n] - mov edi,[mem_keys] - add edi,112 - ;переставляем блок L0(32) по матрице e - add esi,4 - stdcall fun_convert_bits, esi, edi, oper_e, 48 - sub esi,4 - - ;edi - L0~e (48 бит) - ;esi - L0R0 (64 бита) - stdcall fun_r0xorki_si, edi,[mem_keys],[n] - - ;edi - (L0~e xor ki)~Si (32 бита) - ;перестановка p - mov eax,edi - add eax,4 - stdcall fun_convert_bits, edi, eax, oper_p, 32 - - ;пишем L0 в R0, и (R0 xor (L0~e xor ki)~Si) в L0 - mov edx,dword[esi] - mov ebx,dword[esi+4] - xor edx,dword[eax] - mov dword[esi+4],edx - mov dword[esi],ebx - - cmp dword[n],0 - jg .funct_f - - add esi,8 ;переход на следующий 64 битный шифруемый блок - loop .cycle_3 - - ;конечная перестановка ip_inv - mov ecx,[b_count] - mov edi,[block] - ;cld - @@: - mov esi,[mem_keys] - add esi,112 - stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64 - movsd - movsd - loop @b - - .end_funct: -popad - ret -endp - -;description: -; перестановка битов по укащанной матрице -;input: -; m_inp - память с исходными данными -; m_out - память для преобразованных данных -; c_tbl - таблица для перестановки -; tbl_s - размер таблицы для перестановки -align 4 -proc fun_convert_bits, m_inp:dword, m_out:dword, c_tbl:dword, tbl_s:dword -pushad - mov esi,[m_inp] - mov edi,[m_out] - mov eax,[c_tbl] - mov ecx,[tbl_s] - xor edx,edx - mov dword[edi],edx - cmp ecx,32 - jle @f - mov dword[edi+4],edx - @@: - inc edx - - cld - .cycle_0: - movzx ebx,byte[eax] - btr ebx,5 - jc .tbl_h - - bt dword[esi],ebx - jnc @f - or dword[edi],edx - @@: - jmp @f - .tbl_h: - bt dword[esi+4],ebx - jnc @f - or dword[edi],edx - @@: - - rol edx,1 - jnc @f - add edi,4 - @@: - inc eax - loop .cycle_0 -popad - ret -endp - -;description: -; сложение R0(48) xor Ki(48) и 8 преобразований по Si -;intput: -; data_r0 - R0 (48 бит) -; data_key - указатель на массив ключей (по 48 бит) -; n - номер ключа в массиве -;output: -; data_r0 - (R0 xor Ki)~Si (32 бита) -align 4 -proc fun_r0xorki_si, data_r0:dword, data_key:dword, n:dword -pushad - mov edi,[data_r0] - mov eax,[n] - imul eax,7 ;56 бит - расстояние между ключами (сами ключи 48 бит) - add eax,[data_key] - - mov ebx,dword[eax] - xor dword[edi],ebx - mov ebx,dword[eax+4] ;mov bx,word[eax+4] - xor dword[edi+4],ebx ;xor word[edi+4],bx - - ;edi - указатель на значение R0 xor Ki - mov eax,dword[edi] - mov ebx,dword[edi+4] - ;bx:eax - 48 бит значение R0 xor Ki - lea esi,[oper_s] ;выбираем таблицу S0 - mov ecx,8 - .cycle_0: - mov dl,al - and edx,31 - shr dl,1 - jnc @f - bts edx,4 - @@: - bt eax,5 - jnc @f - bts edx,5 - @@: - add edx,esi - mov dl,byte[edx] ;dl - 4 битное значение полученное из Si - - bt ecx,0 - jc @f - ;1) ecx - четный - mov byte[edi],dl - jmp .next - @@: - ;2) ecx - не четный - shl dl,4 - or byte[edi],dl - inc edi - .next: - - shr eax,6 - ror ebx,6 - mov edx,ebx - and edx,0xfc000000 - or eax,edx - ;или 6 раз: shr ebx,1 rcr eax,1 - add esi,64 ;переходим на следующую таблицу Si - loop .cycle_0 -popad - ret -endp - -;description: -; процедура формирования ключей для шифрования -;intput: -; key - входной ключ 64 бит -; key_b - 16 преобразованных ключей по 48 бит -; размер памяти key_b должен быть не меньше 120 байт -align 4 -proc encryption_key, key:dword, key_b:dword -pushad - mov esi,[key] - mov edi,[key_b] - - ;переставляем входной ключ по матрице - stdcall fun_convert_bits, esi, edi, oper_b, 56 - - ;в ebx находим C0 - mov ebx,dword[edi] - and ebx,0xfffffff - ;в edx находим D0 - mov edx,dword[edi+3] - shr edx,4 - - ;находим 16 подключей, длинной по 56 бит - ;;;mov edi,[key_b] - lea esi,[oper_r] - .cycle_1: - mov cl,byte[esi] - cmp cl,0 - je .cycle_end - shl ebx,cl - btr ebx,28 - jnc @f - or ebx,1 - @@: - btr ebx,29 - jnc @f - or ebx,2 - @@: - shl edx,cl - btr edx,28 - jnc @f - or edx,1 - @@: - btr edx,29 - jnc @f - or edx,2 - @@: - - mov dword[edi+3],0 - mov dword[edi],ebx - shl edx,4 - or dword[edi+3],edx - add edi,7 - shr edx,4 - inc esi - - jmp .cycle_1 - .cycle_end: - - ;сжатие ключей с 56 до 48 бит - mov edi,[key_b] - mov esi,edi - add esi,112 ;112 - адрес за пределами 16*7 - - mov ecx,16 - cld - @@: - stdcall fun_convert_bits, edi, esi, oper_c, 48 - movsd - movsw - mov byte[edi],0 ;обрезаем 7-й байт - inc edi - sub esi,6 - loop @b - -popad - ret -endp - -align 4 -oper_ip db 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,\ -61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,\ -56,48,40,32,24,16, 8, 0,58,50,42,34,26,18,10, 2,\ -60,52,44,36,28,20,12, 4,62,54,46,38,30,22,14, 6 - -align 4 -oper_ip_inv db 39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,\ -37, 5,45,13,53,21,61,29,36, 4,44,12,52,20,60,28,\ -35, 3,43,11,51,19,59,27,34, 2,42,10,50,18,58,26,\ -33, 1,41, 9,49,17,57,25,32, 0,40, 8,48,16,56,24 - -align 4 -oper_e db 31,0,1,2,3,4,\ - 3, 4, 5, 6, 7, 8,\ - 7, 8, 9,10,11,12,\ -11,12,13,14,15,16,\ -15,16,17,18,19,20,\ -19,20,21,22,23,24,\ -23,24,25,26,27,28,\ -27,28,29,30,31, 0 - -align 4 -oper_b db 56,48,40,32,24,16,8,\ - 0,57,49,41,33,25,17,\ - 9, 1,58,50,42,34,26,\ -18,10, 2,59,51,43,35,\ -62,54,46,38,30,22,14,\ - 6,61,53,45,37,29,21,\ -13, 5,60,52,44,36,28,\ -20,12, 4,27,19,11, 3 - -oper_r db 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,0 - -align 4 -oper_c db 13,16,10,23,0,4,\ - 2,27,14, 5,20, 9,\ -22,18,11, 3,25, 7,\ -15, 6,26,19,12, 1,\ -40,51,30,36,46,54,\ -29,39,50,44,32,47,\ -43,48,38,55,33,52,\ -45,41,49,35,28,31 - -align 4 -oper_s db 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,\ - 0,15, 7, 4,14, 2,13,1,10,6,12,11,9,5,3,8,\ - 4, 1,14, 8,13, 6,2,11,15,12,9,7,3,10,5,0,\ -15,12, 8, 2, 4, 9,1,7,5,11,3,14,10,0,6,13,\ -15, 1, 8,14, 6,11,3,4,9,7,2,13,12,0,5,10,\ - 3,13, 4, 7,15, 2,8,14,12,0,1,10,6,9,11,5,\ - 0,14, 7,11,10, 4,13,1,5,8,12,6,9,3,2,15,\ -13, 8,10, 1, 3,15,4,2,11,6,7,12,0,5,14,9,\ -10, 0, 9,14, 6, 3,15,5,1,13,12,7,11,4,2,8,\ -13, 7, 0, 9, 3, 4,6,10,2,8,5,14,12,11,15,1,\ -13, 6, 4, 9, 8,15,3,0,11,1,2,12,5,10,14,7,\ - 1,10,13, 0, 6, 9,8,7,4,15,14,3,11,5,2,12,\ - 7,13,14, 3, 0, 6,9,10,1,2,8,5,11,12,4,15,\ -13, 8,11, 5, 6,15,0,3,4,7,2,12,1,10,14,9,\ -10, 6, 9, 0,12,11,7,13,15,1,3,14,5,2,8,4,\ - 3,15, 0, 6,10, 1,13,8,9,4,5,11,12,7,2,14,\ - 2,12, 4, 1, 7,10,11,6,8,5,3,15,13,0,14,9,\ -14,11, 2,12, 4, 7,13,1,5,0,15,10,3,9,8,6,\ - 4, 2, 1,11,10,13,7,8,15,9,12,5,6,3,0,14,\ -11, 8,12, 7, 1,14,2,13,6,15,0,9,10,4,5,3,\ -12, 1,10,15, 9, 2,6,8,0,13,3,4,14,7,5,11,\ -10,15, 4, 2, 7,12,9,5,6,1,13,14,0,11,3,8,\ - 9,14,15, 5, 2, 8,12,3,7,0,4,10,1,13,11,6,\ - 4, 3, 2,12, 9, 5,15,10,11,14,1,7,6,0,8,13,\ - 4,11, 2,14,15, 0,8,13,3,12,9,7,5,10,6,1,\ -13, 0,11, 7, 4, 9,1,10,14,3,5,12,2,15,8,6,\ - 1, 4,11,13,12, 3,7,14,10,15,6,8,0,5,9,2,\ - 6,11,13, 8, 1, 4,10,7,9,5,0,15,14,2,3,12,\ -13, 2, 8, 4, 6,15,11,1,10,9,3,14,5,0,12,7,\ - 1,15,13, 8,10, 3,7,4,12,5,6,11,0,14,9,2,\ - 7,11, 4, 1, 9,12,14,2,0,6,10,13,15,3,5,8,\ - 2, 1,14, 7, 4,10,8,13,15,12,9,0,3,5,6,11 - -align 4 -oper_p db 15,6,19,20,28,11,27,16,\ - 0,14,22,25, 4,17,30, 9,\ - 1, 7,23,13,31,26, 2, 8,\ -18,12,29, 5,21,10, 3,24 - - -align 16 -EXPORTS: - dd sz_des_encryption, des_encryption - dd sz_des_decryption, des_decryption - dd 0,0 - sz_des_encryption db 'des_encryption',0 - sz_des_decryption db 'des_decryption',0 +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page Windows 1251 - Cyrillic + + +; +; библиотека для шифрования по алгоритму DES +; + +format MS COFF +public EXPORTS +section '.flat' code readable align 16 + +include '../../../macros.inc' +include '../../../proc32.inc' + +;description: +; функция шифрования файлов +;input: +; key - входной ключ 64 бит +; mem_keys - память для формирования ключей (размер 120 байт) +; block - указатель на первый шифруемый 8 байтный блок +; b_count - число блоков для шифрования +align 4 +proc des_encryption, key:dword, mem_keys:dword, block:dword, b_count:dword +locals + n dd ? ;переменная цикла +endl +pushad + stdcall encryption_key, [key],[mem_keys] + + ;начальная перестановка ip + mov ecx,[b_count] + cmp ecx,1 + jl .end_funct + mov edi,[block] + cld + @@: + mov esi,[mem_keys] + add esi,112 + stdcall fun_convert_bits, edi, esi, oper_ip, 64 + movsd + movsd + loop @b + + mov ecx,[b_count] + mov esi,[block] + ;cld + .cycle_3: + mov dword[n],0 + .funct_f: + mov edi,[mem_keys] + add edi,112 + ;переставляем блок R0(32) по матрице e + stdcall fun_convert_bits, esi, edi, oper_e, 48 + + ;edi - R0~e (48 бит) + ;esi - L0R0 (64 бита) + stdcall fun_r0xorki_si, edi,[mem_keys],[n] + + ;edi - (R0~e xor ki)~Si (32 бита) + ;перестановка p + mov eax,edi + add eax,4 + stdcall fun_convert_bits, edi, eax, oper_p, 32 + + ;пишем R0 в L0, и (L0 xor (R0~e xor ki)~Si) в R0 + mov edx,dword[esi+4] + mov ebx,dword[esi] + xor edx,dword[eax] + mov dword[esi],edx + mov dword[esi+4],ebx + + inc dword[n] + cmp dword[n],16 + jl .funct_f + + add esi,8 ;переход на следующий 64 битный шифруемый блок + loop .cycle_3 + + ;конечная перестановка ip_inv + mov ecx,[b_count] + mov edi,[block] + ;cld + @@: + mov esi,[mem_keys] + add esi,112 + stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64 + movsd + movsd + loop @b + + .end_funct: +popad + ret +endp + +;description: +; функция расшифрования файлов +;input: +; key - входной ключ 64 бит +; mem_keys - память для формирования ключей (размер 120 байт) +; block - указатель на первый расшифровываемый 8 байтный блок +; b_count - число блоков для расшифрования +align 4 +proc des_decryption, key:dword, mem_keys:dword, block:dword, b_count:dword +locals + n dd ? ;переменная цикла +endl +pushad + stdcall encryption_key, [key],[mem_keys] + + ;начальная перестановка ip + mov ecx,[b_count] + cmp ecx,1 + jl .end_funct + mov edi,[block] + cld + @@: + mov esi,[mem_keys] + add esi,112 + stdcall fun_convert_bits, edi, esi, oper_ip, 64 + movsd + movsd + loop @b + + mov ecx,[b_count] + mov esi,[block] + ;cld + .cycle_3: + mov dword[n],16 + .funct_f: + dec dword[n] + mov edi,[mem_keys] + add edi,112 + ;переставляем блок L0(32) по матрице e + add esi,4 + stdcall fun_convert_bits, esi, edi, oper_e, 48 + sub esi,4 + + ;edi - L0~e (48 бит) + ;esi - L0R0 (64 бита) + stdcall fun_r0xorki_si, edi,[mem_keys],[n] + + ;edi - (L0~e xor ki)~Si (32 бита) + ;перестановка p + mov eax,edi + add eax,4 + stdcall fun_convert_bits, edi, eax, oper_p, 32 + + ;пишем L0 в R0, и (R0 xor (L0~e xor ki)~Si) в L0 + mov edx,dword[esi] + mov ebx,dword[esi+4] + xor edx,dword[eax] + mov dword[esi+4],edx + mov dword[esi],ebx + + cmp dword[n],0 + jg .funct_f + + add esi,8 ;переход на следующий 64 битный шифруемый блок + loop .cycle_3 + + ;конечная перестановка ip_inv + mov ecx,[b_count] + mov edi,[block] + ;cld + @@: + mov esi,[mem_keys] + add esi,112 + stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64 + movsd + movsd + loop @b + + .end_funct: +popad + ret +endp + +;description: +; перестановка битов по укащанной матрице +;input: +; m_inp - память с исходными данными +; m_out - память для преобразованных данных +; c_tbl - таблица для перестановки +; tbl_s - размер таблицы для перестановки +align 4 +proc fun_convert_bits, m_inp:dword, m_out:dword, c_tbl:dword, tbl_s:dword +pushad + mov esi,[m_inp] + mov edi,[m_out] + mov eax,[c_tbl] + mov ecx,[tbl_s] + xor edx,edx + mov dword[edi],edx + cmp ecx,32 + jle @f + mov dword[edi+4],edx + @@: + inc edx + + cld + .cycle_0: + movzx ebx,byte[eax] + btr ebx,5 + jc .tbl_h + + bt dword[esi],ebx + jnc @f + or dword[edi],edx + @@: + jmp @f + .tbl_h: + bt dword[esi+4],ebx + jnc @f + or dword[edi],edx + @@: + + rol edx,1 + jnc @f + add edi,4 + @@: + inc eax + loop .cycle_0 +popad + ret +endp + +;description: +; сложение R0(48) xor Ki(48) и 8 преобразований по Si +;intput: +; data_r0 - R0 (48 бит) +; data_key - указатель на массив ключей (по 48 бит) +; n - номер ключа в массиве +;output: +; data_r0 - (R0 xor Ki)~Si (32 бита) +align 4 +proc fun_r0xorki_si, data_r0:dword, data_key:dword, n:dword +pushad + mov edi,[data_r0] + mov eax,[n] + imul eax,7 ;56 бит - расстояние между ключами (сами ключи 48 бит) + add eax,[data_key] + + mov ebx,dword[eax] + xor dword[edi],ebx + mov ebx,dword[eax+4] ;mov bx,word[eax+4] + xor dword[edi+4],ebx ;xor word[edi+4],bx + + ;edi - указатель на значение R0 xor Ki + mov eax,dword[edi] + mov ebx,dword[edi+4] + ;bx:eax - 48 бит значение R0 xor Ki + lea esi,[oper_s] ;выбираем таблицу S0 + mov ecx,8 + .cycle_0: + mov dl,al + and edx,31 + shr dl,1 + jnc @f + bts edx,4 + @@: + bt eax,5 + jnc @f + bts edx,5 + @@: + add edx,esi + mov dl,byte[edx] ;dl - 4 битное значение полученное из Si + + bt ecx,0 + jc @f + ;1) ecx - четный + mov byte[edi],dl + jmp .next + @@: + ;2) ecx - не четный + shl dl,4 + or byte[edi],dl + inc edi + .next: + + shr eax,6 + ror ebx,6 + mov edx,ebx + and edx,0xfc000000 + or eax,edx + ;или 6 раз: shr ebx,1 rcr eax,1 + add esi,64 ;переходим на следующую таблицу Si + loop .cycle_0 +popad + ret +endp + +;description: +; процедура формирования ключей для шифрования +;intput: +; key - входной ключ 64 бит +; key_b - 16 преобразованных ключей по 48 бит +; размер памяти key_b должен быть не меньше 120 байт +align 4 +proc encryption_key, key:dword, key_b:dword +pushad + mov esi,[key] + mov edi,[key_b] + + ;переставляем входной ключ по матрице + stdcall fun_convert_bits, esi, edi, oper_b, 56 + + ;в ebx находим C0 + mov ebx,dword[edi] + and ebx,0xfffffff + ;в edx находим D0 + mov edx,dword[edi+3] + shr edx,4 + + ;находим 16 подключей, длинной по 56 бит + ;;;mov edi,[key_b] + lea esi,[oper_r] + .cycle_1: + mov cl,byte[esi] + cmp cl,0 + je .cycle_end + shl ebx,cl + btr ebx,28 + jnc @f + or ebx,1 + @@: + btr ebx,29 + jnc @f + or ebx,2 + @@: + shl edx,cl + btr edx,28 + jnc @f + or edx,1 + @@: + btr edx,29 + jnc @f + or edx,2 + @@: + + mov dword[edi+3],0 + mov dword[edi],ebx + shl edx,4 + or dword[edi+3],edx + add edi,7 + shr edx,4 + inc esi + + jmp .cycle_1 + .cycle_end: + + ;сжатие ключей с 56 до 48 бит + mov edi,[key_b] + mov esi,edi + add esi,112 ;112 - адрес за пределами 16*7 + + mov ecx,16 + cld + @@: + stdcall fun_convert_bits, edi, esi, oper_c, 48 + movsd + movsw + mov byte[edi],0 ;обрезаем 7-й байт + inc edi + sub esi,6 + loop @b + +popad + ret +endp + +align 4 +oper_ip db 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,\ +61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,\ +56,48,40,32,24,16, 8, 0,58,50,42,34,26,18,10, 2,\ +60,52,44,36,28,20,12, 4,62,54,46,38,30,22,14, 6 + +align 4 +oper_ip_inv db 39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,\ +37, 5,45,13,53,21,61,29,36, 4,44,12,52,20,60,28,\ +35, 3,43,11,51,19,59,27,34, 2,42,10,50,18,58,26,\ +33, 1,41, 9,49,17,57,25,32, 0,40, 8,48,16,56,24 + +align 4 +oper_e db 31,0,1,2,3,4,\ + 3, 4, 5, 6, 7, 8,\ + 7, 8, 9,10,11,12,\ +11,12,13,14,15,16,\ +15,16,17,18,19,20,\ +19,20,21,22,23,24,\ +23,24,25,26,27,28,\ +27,28,29,30,31, 0 + +align 4 +oper_b db 56,48,40,32,24,16,8,\ + 0,57,49,41,33,25,17,\ + 9, 1,58,50,42,34,26,\ +18,10, 2,59,51,43,35,\ +62,54,46,38,30,22,14,\ + 6,61,53,45,37,29,21,\ +13, 5,60,52,44,36,28,\ +20,12, 4,27,19,11, 3 + +oper_r db 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,0 + +align 4 +oper_c db 13,16,10,23,0,4,\ + 2,27,14, 5,20, 9,\ +22,18,11, 3,25, 7,\ +15, 6,26,19,12, 1,\ +40,51,30,36,46,54,\ +29,39,50,44,32,47,\ +43,48,38,55,33,52,\ +45,41,49,35,28,31 + +align 4 +oper_s db 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,\ + 0,15, 7, 4,14, 2,13,1,10,6,12,11,9,5,3,8,\ + 4, 1,14, 8,13, 6,2,11,15,12,9,7,3,10,5,0,\ +15,12, 8, 2, 4, 9,1,7,5,11,3,14,10,0,6,13,\ +15, 1, 8,14, 6,11,3,4,9,7,2,13,12,0,5,10,\ + 3,13, 4, 7,15, 2,8,14,12,0,1,10,6,9,11,5,\ + 0,14, 7,11,10, 4,13,1,5,8,12,6,9,3,2,15,\ +13, 8,10, 1, 3,15,4,2,11,6,7,12,0,5,14,9,\ +10, 0, 9,14, 6, 3,15,5,1,13,12,7,11,4,2,8,\ +13, 7, 0, 9, 3, 4,6,10,2,8,5,14,12,11,15,1,\ +13, 6, 4, 9, 8,15,3,0,11,1,2,12,5,10,14,7,\ + 1,10,13, 0, 6, 9,8,7,4,15,14,3,11,5,2,12,\ + 7,13,14, 3, 0, 6,9,10,1,2,8,5,11,12,4,15,\ +13, 8,11, 5, 6,15,0,3,4,7,2,12,1,10,14,9,\ +10, 6, 9, 0,12,11,7,13,15,1,3,14,5,2,8,4,\ + 3,15, 0, 6,10, 1,13,8,9,4,5,11,12,7,2,14,\ + 2,12, 4, 1, 7,10,11,6,8,5,3,15,13,0,14,9,\ +14,11, 2,12, 4, 7,13,1,5,0,15,10,3,9,8,6,\ + 4, 2, 1,11,10,13,7,8,15,9,12,5,6,3,0,14,\ +11, 8,12, 7, 1,14,2,13,6,15,0,9,10,4,5,3,\ +12, 1,10,15, 9, 2,6,8,0,13,3,4,14,7,5,11,\ +10,15, 4, 2, 7,12,9,5,6,1,13,14,0,11,3,8,\ + 9,14,15, 5, 2, 8,12,3,7,0,4,10,1,13,11,6,\ + 4, 3, 2,12, 9, 5,15,10,11,14,1,7,6,0,8,13,\ + 4,11, 2,14,15, 0,8,13,3,12,9,7,5,10,6,1,\ +13, 0,11, 7, 4, 9,1,10,14,3,5,12,2,15,8,6,\ + 1, 4,11,13,12, 3,7,14,10,15,6,8,0,5,9,2,\ + 6,11,13, 8, 1, 4,10,7,9,5,0,15,14,2,3,12,\ +13, 2, 8, 4, 6,15,11,1,10,9,3,14,5,0,12,7,\ + 1,15,13, 8,10, 3,7,4,12,5,6,11,0,14,9,2,\ + 7,11, 4, 1, 9,12,14,2,0,6,10,13,15,3,5,8,\ + 2, 1,14, 7, 4,10,8,13,15,12,9,0,3,5,6,11 + +align 4 +oper_p db 15,6,19,20,28,11,27,16,\ + 0,14,22,25, 4,17,30, 9,\ + 1, 7,23,13,31,26, 2, 8,\ +18,12,29, 5,21,10, 3,24 + + +align 16 +EXPORTS: + dd sz_des_encryption, des_encryption + dd sz_des_decryption, des_decryption + dd 0,0 + sz_des_encryption db 'des_encryption',0 + sz_des_decryption db 'des_decryption',0 diff --git a/programs/develop/libraries/crypt_des/trunk/run.bat b/programs/develop/libraries/crypt_des/run.bat similarity index 100% rename from programs/develop/libraries/crypt_des/trunk/run.bat rename to programs/develop/libraries/crypt_des/run.bat