The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

losetup & DES (loop patch des)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: loop, patch, des,  (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Solar Designer 2:5020/400 10 Oct 98 12:18:38 Subj : Re: losetup & DES ________________________________________________________________________________ From: Solar Designer <solar@cannabis.dataforce.net> Alex Korchmar <alx@corbina.net> wrote: > P.S. можешь поискать loopencrypt - он заменяет изрядный кусок loop.c, добавляя > idea помимо des'а. Правда, по-моему, тоже с багами. > Вдобавок, это был патч к очень старому ядру, к новому он прикладывается > только с ручной правкой, да еще и не собирается модулем. Все немного проще. Берется мой _мелкий_ патч для loop.c, а из Berkeley'вых патчей берется только часть собственно с куском от libdes (там это в отдельном diff'е, под еще 2.0.11, но т.к. он только создает новые файлы, то без проблем apply'ится на новые ядра). Далее, losetup и mount можно не трогать, а можно и пропатчить, чтобы IV не спрашивали (просто загнать его в 0 и все, толку-то мало), и таймаут забытый от времен flock'а снять перед запросом пароля. Получается вполне нормальная реализация DES в CBC режиме. - --- loop.c.orig Wed Apr 22 02:42:31 1998 +++ loop.c Wed May 6 21:23:58 1998 @@ -98,22 +98,22 @@ x1 = lo->lo_des_init[1]; while (size) { if (cmd == READ) { - tmp[0] = (p0 = ((unsigned long *) raw_buf)[0])^x0; - tmp[1] = (p1 = ((unsigned long *) raw_buf)[1])^x1; - des_ecb_encrypt((des_cblock *) tmp,(des_cblock *) - loop_buf,lo->lo_des_key,DES_ENCRYPT); - x0 = p0^((unsigned long *) loop_buf)[0]; - x1 = p1^((unsigned long *) loop_buf)[1]; + p0 = ((unsigned long *) raw_buf)[0]; + p1 = ((unsigned long *) raw_buf)[1]; + des_ecb_encrypt((des_cblock *) raw_buf,(des_cblock *) + loop_buf,lo->lo_des_key,DES_DECRYPT); + ((unsigned long *) loop_buf)[0] ^= x0; + ((unsigned long *) loop_buf)[1] ^= x1; + x0 = p0; + x1 = p1; } else { - p0 = ((unsigned long *) loop_buf)[0]; - p1 = ((unsigned long *) loop_buf)[1]; - des_ecb_encrypt((des_cblock *) loop_buf,(des_cblock *) - raw_buf,lo->lo_des_key,DES_DECRYPT); - ((unsigned long *) raw_buf)[0] ^= x0; - ((unsigned long *) raw_buf)[1] ^= x1; - x0 = p0^((unsigned long *) raw_buf)[0]; - x1 = p1^((unsigned long *) raw_buf)[1]; + tmp[0] = (p0 = ((unsigned long *) loop_buf)[0])^x0; + tmp[1] = (p1 = ((unsigned long *) loop_buf)[1])^x1; + des_ecb_encrypt((des_cblock *) tmp,(des_cblock *) + raw_buf,lo->lo_des_key,DES_ENCRYPT); + x0 = ((unsigned long *) raw_buf)[0]; + x1 = ((unsigned long *) raw_buf)[1]; } size -= 8; raw_buf += 8; @@ -372,8 +372,28 @@ case LO_CRYPT_DES: if (info.lo_encrypt_key_size != 8) return -EINVAL; - des_set_key((des_cblock *) lo->lo_encrypt_key, - lo->lo_des_key); + { + char key[8]; + char *ptr; + int i, value, count; + + ptr = info.lo_encrypt_key; + for (i = 0; i < 8; i++) { + if ((key[i] = value = *ptr)) ptr++; + + count = 0; + if (value) + do { + count++; + } while ((value &= value - 1)); + + if (count & 1) + key[i] &= ~0x80; + else + key[i] |= 0x80; + } + des_set_key((des_cblock *) key, lo->lo_des_key); + } memcpy(lo->lo_des_init,info.lo_init,8); break; #endif -- /sd --- ifmail v.2.14dev2 * Origin: DataForce ISP (2:5020/400@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру