Спасибо за файл! Но если не сложно и сможете ответить на несколько вопросов был бы вам очень благодарен. Итак начнем с начала... Стандарт FIPS-180-3 нам говорит о том, что нужно произвести предварительную подготовку, а именно дополнить значение до 512 бит, разделить сообщение на 8 32-х разрядных значений и проинициализировать начальное значение хэша. Если я все правильно понял первые два пункта нас не особо заботят, а полученные 512 бит записываются в строке
unsigned int hash[8] {0xdc6a3b8d,0x0c69421a,0xcb1a5434,0xe536f7d5,0xc3c1b9e4,0x4cbb9b8f,0x95f0172e, 0xfc48d2df};
Далее необходимо подготовить последовательность блоков данных согласно формуле Wt. Насколько я понял за это отвечают строки
for (i = 0; i < 16; i++)
M[i] = 0;
M[0] = BSWAP32(0x871714dc);
M[1] = BSWAP32(0x53058b35);
M[2] = BSWAP32(0x19015f53);
M[3] = BSWAP32(0x33087548);
M[4] = 0x80000000;
M[15] = 0x00000280;
и вот здесь уже начинаются вопросы: почему они рассчитываются практически в конце выполнения алгоритма, а не после первоначальной инициализации для получения Wt? И почему они проинициализированы значениями 0x871714dc ..... Чуть выше по тексту в комментариях они присутствуют и на сколько я понял являются первыми значениями выполнения функции SHA256_Update? Что тоже не особо понятно
SHA256_Update(&sha256_pass1, ((unsigned char*)&header)+64, sizeof(block_header)-64);
/*
data
[0x0] 0x871714dc unsigned int - header.merkle_root, "871714dc...
[0x1] 0x53058b35 unsigned int - header.timestamp = 0x53058b35;
[0x2] 0x19015f53 unsigned int - header.bits = 0x19015f53;
[0x3] 0x33087548 unsigned int - header.nonce = 856192328;
*/
Сообщение отредактировал RamZoom - Jul 4 2017, 20:58
Эскизы прикрепленных изображений