Page 1 of 1

libcrash -- cryptographic hash (and other) functions

Posted: Sun Dec 16, 2012 11:18 am
by dunkaist
Выбирал название между libcrypto и libhash, в итоге получилось libcrash.

Из реализованного crc32, md4, md5, sha1, sha2 (224, 256, 384, 512).

В sha2 работа с 64-битными числами идёт через mmx регистры.

Пример прилагается.

Осторожно, GPL3+. Я вас предупреждал.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Sun Dec 16, 2012 12:16 pm
by SoUrcerer
Почему не LGPL, если не секрет?
В любом случае, использование данной библиотеки требует кода программ под лицензией GPLv3. Не уверен насчет лицензии библиотек, которые "поставляются" с C--, что может вызвать определенные проблемы.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Sun Dec 16, 2012 2:03 pm
by dunkaist
Всё просто: если я делюсь с человеком, то хочу, чтобы и он со мной поделился в ответ. А если человек изначально не намерен делиться со мной, то почему я должен делиться с ним? Иными словами, как вы ко мне, так и я к вам.

Насколько я понял из этой картинки, использование других LGPL библиотек допустимо. В частности libs-dev (libini, libimg, ...) распространяются под LGPL2.1+.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Sun Dec 16, 2012 6:01 pm
by SoUrcerer
Я не знаю, насколько хорошо отнесутся авторы библиотек к обновлению лизцензии с GPLv2 до GPLv3. В остальном мне твой подход нравится :)

Re: libcrash -- криптографические хэш функции и проч.

Posted: Sun Dec 16, 2012 6:25 pm
by dunkaist
Если ты линкуешь программу П с библиотеками Б1(LGPL*) и Б2(GPL3+), то единственное условие -- GPL3+ для П.

Менять лицензию libs-dev не нужно, они ведь под LGPL, а не GPL. Проблемы только с GPLv2 only.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri May 24, 2013 6:36 pm
by dunkaist
Добавил хэши sha3 (keccak).

Пример crashtest.asm с svn, вычисляющий всевозможные хэши самого себя:
Image

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri May 24, 2013 7:33 pm
by SoUrcerer
Супер, поздравляю, молодец!

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri May 24, 2013 7:49 pm
by dunkaist
Спасибо. Но там ещё много работы: скорости бы добавить. Начиная с sha384 идёт работа с 64-битными числами, и на ней мой код даже с mmx в разы сливает 64-битному сишному, у которого в распоряжении 64-разрядные регистры общего назначения с нативными rol, например, и прибавлением регистра к памяти.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri Apr 18, 2014 10:02 pm
by Wildwest

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri Apr 18, 2014 10:14 pm
by 0CodErr
Куча "cld" ни одного "std"
#
and eax, edi ; ( state[i*8+k] & (1<<(7-j) )
#
cmp eax, 0 ; if ((state[i*8+k] & (1<<(7-j))) != 0) v ^= A[k*8+j] ???
#
jz .next_ji
#
jb .next_j
#
jmp .next_ki
#
align 4
#
.next_ki:
#
jb .next_i
#
jmp .end
#
.end:
ну и т.п.

Вывод: "нинужно", любой вменяемый компилятор сделает лучше.

Re: libcrash -- криптографические хэш функции и проч.

Posted: Fri Oct 15, 2021 4:27 am
by dunkaist
A quite big update has arrived in #9216.

Current state:
  • hashes: crc32 (still here), md4, md5, sha1, sha2 (224, 256, 384, 512), sha3 (224, 256, 384, 512).
  • macs: poly1305, hmac (sha2_256, sha2_512).
  • ciphers: chacha20, aes256ctr, aes256cbc (with and without pkcs#5 padding).
  • A relatively high-level and more low-level APIs (there are some comments in libcrash.asm).
  • Now it's GPL2+, not GPL3+ (who cares but still).
As always, there are still a lot of things to improve (not mentioning speed, haha), but functionally it should be correct.