qF – хэш на 256-512 бит, с шагом в 64 бит
Хотя faq и говорит, что не стоит придумывать свое, но всё же.
На пробу, хэш для генерации 256-512 бит, с шагом в 64 бита. Исходный код: https://yadi.sk/d/J3k__RJGkiTLV
Сам хеш выполняется за несколько шагов:
1. rtea подобным алгоритмом, генерируется промежуточный код Y
{
y.Q[n+1] =e->C[0] +=S(1) +e->Q.Q[n+1] +m->Q[n+1] +1; // +1 не трогать
2. выполняется хеш Y (salsa подобным алгоритмом)
{
G( 4,11, 2, 3,39);G( 5,12, 3, 4,35);G( 6,13, 4, 5,29);G( 7,14, 5, 6,23);
G( 8,15, 6, 7,35);G( 9, 0, 7, 8,29);G(10, 1, 8, 9,23);G(11, 2, 9,10,14);
G(12, 3,10,11,29);G(13, 4,11,12,23);G(14, 5,12,13,14);G(15, 6,13,14, 5);
3. завершение работы
{
e->Q.Q[n+1] += y.Q[n+1];
определения:
typedef union { word64_t Q[16]; byte_t B[128]; word32_t W[32]; } qFbyte_t;
typedef struct __ctqF_t
{
word64_t L,C[2]; //общая длина сообщения в байтах, +генератор
} ctqF_t;
#define S(x) (e->C[x]+<< 15)^(e->C[x] <!--escaped--><div class="center"> 10)<br />
#define L(x,n) </div><!--escaped--> (n|>> (64-(n)
#define G(a,b,c,d,r) y.Q[a]^=L((y.Q[b]+y.Q[c]+y.Q[d]), r)
* что то разметка портит определения, лучше глянуть код
Данная схема позволяет использовать внутреннее состояние любой размерности
и соответственно стоить хеши до размера в 1/2 от состояния.
комментариев: 511 документов: 2 редакций: 70
Если вы считаете, что несмотря на FAQ ваши изыскания полезны для криптографической науки, то выкладывайте их на IACR.org, публикуйте в тематических научных журналах и конференциях, а сюда, на форум, достаточно будет скинуть ссылку на ваши оформленные, как следует, труды. Начать придётся с того, что алгоритм записывается не в виде кода, а в виде последовательности математических преобразований — смотрите примеры в похожих статьях по крипто.