Октябрь 2019
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

Календарь Календарь

Последние темы
» Новинки. Книги. Часть 1.
автор Viktor2312 Сегодня в 09:55

» Упрощаем схему Микро-80 и исправляем косяки. И собираем по технологиям 80-х годов.
автор Microsha Вчера в 23:02

» AVR AY плеер
автор Microsha Вчера в 17:55

» Микроконтроллеры STM32G0
автор Viktor2312 Вчера в 14:38

» SINOVATE (SIN). Криптовалюта Синовэйт.
автор Viktor2312 Вчера в 12:10

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 Вчера в 09:11

» Усилитель на 6ф5п
автор freddy Ср Окт 16 2019, 16:07

» "Python". Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Окт 15 2019, 21:18

» Анти Радио-86РК
автор freddy Вт Окт 15 2019, 16:38

» Конверсия atx бп
автор freddy Вт Окт 15 2019, 15:48

» Источники питания. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Окт 15 2019, 04:08

» Радио-86РК: внешние видео-адаптеры
автор freddy Вс Окт 13 2019, 19:28

» Изучаем основы VHDL, ISE, ПЛИС Xilinx.
автор Viktor2312 Сб Окт 12 2019, 11:20

» Электроника. Статьи, заметки, очерки, разное...
автор Viktor2312 Пт Окт 11 2019, 13:00

» Радио-86РК: Разное
автор barsik Чт Окт 10 2019, 15:36

» Общие вопросы по ПЭВМ Ириша
автор barsik Вс Окт 06 2019, 07:01

» ПО. ПЭВМ "Ириша". Текстовый редактор "WORDSTAR".
автор barsik Сб Окт 05 2019, 18:28

» Расширение ОЗУ в ИРИШЕ
автор Viktor2312 Пт Окт 04 2019, 17:27

» Радио РК-86: ПЭВМ с процессором 1821ВМ85
автор Viktor2312 Пт Окт 04 2019, 12:28

» Другой микропроцессор в ИРИШЕ
автор barsik Чт Окт 03 2019, 18:16

» Флейм касающийся ПЭВМ "Ириша".
автор barsik Чт Окт 03 2019, 07:31

» Модуль контроллера графического дисплея (МКГД).
автор Viktor2312 Ср Окт 02 2019, 00:50

» Новости. Xilinx.
автор Viktor2312 Вт Окт 01 2019, 12:07

» ПО. ПЭВМ "Ириша". Текстовый редактор "ИРИТЕКСТ".
автор Viktor2312 Сб Сен 28 2019, 00:34

» Криптовалюта — словарь терминов и определений.
автор Viktor2312 Пт Сен 27 2019, 23:00

Самые активные пользователи за месяц
Viktor2312
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
barsik
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
freddy
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
Microsha
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
leoperetz
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Личная тех. тема.

Перейти вниз

Личная тех. тема. Empty Личная тех. тема.

Сообщение  Viktor2312 в Сб Июл 06 2019, 13:06

1
Данную тему можете не читать, она для разработки устройства, просто так удобно и наглядно, хранить мне данные...

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Сб Июл 06 2019, 13:36

2
.
1. Создаём 8 шт. ПЗУ с организацией 1х32 для хранения начальных значений переменных h0 - h7. С одним адресным входом ADDRESS_h0 - ADDRESS_h7, дополнительным входным портом ENEBLE_h0 - ENEBLE_h7 и выходным портом DATA_OUT_h0 - DATA_OUT_h7 (31 downto 0). Описание с использованием оператора if и case. В виде отдельных компонентов, каждое ПЗУ должно быть независимым устройством на кристалле для полного распараллеливания.

Начальные значения:
h0 := 0x6A09E667 (0110 1010 0000 1001 1110 0110 0110 0111)
h1 := 0xBB67AE85 (1011 1011 0110 0111 1010 1110 1000 0101)
h2 := 0x3C6EF372 (0011 0011 0110 1110 1111 0011 0111 0010)
h3 := 0xA54FF53A (1010 0101 0100 1111 1111 0101 0011 1010)
h4 := 0x510E527F (0101 0001 0000 1110 0101 0010 0111 1111)
h5 := 0x9B05688C (1001 1011 0000 0101 0110 1000 1000 1100)
h6 := 0x1F83D9AB (0001 1111 1000 0011 1101 1001 1010 1011)
h7 := 0x5BE0CD19 (0101 1011 1110 0000 1100 1101 0001 1001)

Личная тех. тема. A_aa_v10____Личная тех. тема. A_aa_v11

Личная тех. тема. A_aa_v12____Личная тех. тема. A_aa_v13

Личная тех. тема. A_aa_v14____Личная тех. тема. A_aa_v15

Личная тех. тема. A_aa_v16____Личная тех. тема. A_aa_v17

____Создаём восемь таких элементов с соответствующими именами. Все входные порты ADDRESS_h0 - ADDRESS_h7 будут соединяться с сигналом ADDRESS_0 и изначально присваиваться значение лог.1, а порты ENEBLE_h0 - ENEBLE_h7 объединяются соединяясь с общим сигналом ENEBLE_0, который в последствии будет использоваться для включения.
____Пишем код далее:

Личная тех. тема. A_aa_v18

Личная тех. тема. A_aa_v19

Личная тех. тема. A_aa_v20

Личная тех. тема. A_aa_v21

Личная тех. тема. A_aa_v22

Личная тех. тема. A_aa_v23

Личная тех. тема. A_aa_v24

Личная тех. тема. A_aa_v25

____Добавляем в основной проект два сигнала ADDRESS_0 и ENEBLE_0, присвоив сигналу ADDRESS_0 начальное значение '1'.

Личная тех. тема. A_aa_v26

____Создаём семь 32-разрядных вектора сигналов ROM_OUT_h0 - ROM_OUT_h7.

Личная тех. тема. A_aa_v27

____Добавляем в основной проект данные сигналы ROM_OUT_h0 - ROM_OUT_h7.

Личная тех. тема. A_aa_v28

____Объявляем созданные компоненты ROM_h0 - ROM_h7 в основном проекте.

Личная тех. тема. A_aa_v29

Личная тех. тема. A_aa_v30

____Далее, реализуем наши компоненты и определим межкомпонентные связи в основном проекте.

Личная тех. тема. A_aa_v31

____Теперь необходимо будет создать 64 шт. ПЗУ с организацией 1х32 для хранения значений констант k0 - k63. Также с одним адресным входом ADDRESS_k0 - ADDRESS_k63, дополнительным входным портом ENEBLE_k0 - ENEBLE_k63 и выходным портом DATA_OUT_k0 - DATA_OUT_k63 (31 downto 0). Описание с использованием оператора if и case. В виде отдельных компонентов, каждое ПЗУ должно быть независимым устройством на кристалле для полного распараллеливания.






.
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Вс Июл 07 2019, 11:17

3
.
2. Создать ПЗУ 1х32 64 шт. Подготавливаем содержимое всех ПЗУ.

2.0 (k0 - k7) Для того, чтобы не ошибиться, разобьём процесс на 8 частей по 8 шт. ПЗУ, в виду убогости человеческого мозга, сделаем это поэтапно, для исключения ошибок:

k0 := 0x428A2F98 (0100 0010 1000 1010 0010 1111 1001 1000)
k1 := 0x71374491 (0111 0001 0011 0111 0100 0100 1001 0001)
k2 := 0xB5C0FBCF (1011 0101 1100 0000 1111 1011 1100 1111)
k3 := 0xE9B5DBA5 (1110 1001 1011 0101 1101 1011 1010 0101)
k4 := 0x3956C25B (0011 1001 0101 0110 1100 0010 0101 1011)
k5 := 0x59F111F1 (0101 1001 1111 0001 0001 0001 1111 0001)
k6 := 0x923F82A4 (1001 0010 0011 1111 1000 0010 1010 0100)
k7 := 0xAB1C5ED5 (1010 1011 0001 1100 0101 1110 1101 0101)

____Каждое ПЗУ имеет вход ENEBLE_k0 - ENEBLE_k63 в данном случае эти входы не объединяются, а каждый выходит на свой отдельный сигнал ENEBLE_1 - ENEBLE_64. Для того, чтобы можно было включать каждое ПЗУ по отдельности, в нужные моменты времени. Данные сигналы временные, на данном этапе проектирования, в последствии они могут остаться, либо будут заменены на другие, с соответствующей перенумерацией.

Личная тех. тема. A_aa_v45

____Далее создаём субпроекты данных ПЗУ.

Личная тех. тема. A_aa_v33

Личная тех. тема. A_aa_v34

Личная тех. тема. A_aa_v35

Личная тех. тема. A_aa_v36

Личная тех. тема. A_aa_v37

Личная тех. тема. A_aa_v38

Личная тех. тема. A_aa_v39

Личная тех. тема. A_aa_v40

____Добавляем в основной проект сигналы ENEBLE_1 - ENEBLE_7.

Личная тех. тема. A_aa_v41

____Объявляем созданные компоненты:

Личная тех. тема. A_aa_v42

Личная тех. тема. A_aa_v43

____Добавляем сигналы ROM_OUT_k0 - ROM_OUT_k7 в основной проект.

Личная тех. тема. A_aa_v44

____Далее, реализуем наши компоненты и определим межкомпонентные связи в основном проекте.

Личная тех. тема. A_aa_v46


Личная тех. тема. A_aa_v47

____Теперь можно приступать к созданию следующих 8 шт. ПЗУ ROM_k8 - ROM_k15...





.
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty Re: Личная тех. тема.

Сообщение  Viktor2312 в Вс Июл 07 2019, 18:40

4
.
2.1 (k8 - k15) Создаём следующие 8 шт. ПЗУ:

k8 := 0xD807AA98 (1101 1000 0000 0111 1010 1010 1001 1000)
k9 := 0x12835B01 (0001 0010 1000 0011 0101 1011 0000 0001)
k10 := 0x243185BE (0010 0100 0011 0001 1000 0101 1011 1110)
k11 := 0x550C7DC3 (0101 0101 0000 1100 0111 1101 1100 0011)
k12 := 0x72BE5D74 (0111 0010 1011 1110 0101 1101 0111 0111)
k13 := 0x80DEB1FE (1000 0000 1101 1110 1011 0001 1111 1110)
k14 := 0x9BDC06A7 (1001 1011 1101 1100 0000 0110 1010 0111)
k15 := 0xC19BF174 (1100 0001 1001 1011 1111 0001 0111 0100)

Личная тех. тема. A_aa_v48

____Создаём субпроекты.


Личная тех. тема. A_aa_v49

Личная тех. тема. A_aa_v50


Стоп. Всё придётся удалить и переделать, это не самое оптимальное решение. Создавая такие ПЗУ выходит, что оно содержит 2 32-разрядные ячейки, первая с нулями, а вторая с нужным числом. То есть по сути 50 % элементов просто не используются. Оптимальнее будет применить, например 32 элемента И (and) входы которых подключить к лог.1 или лог.0 в зависимости от требуемого значения в конкретном бите.






.
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Пн Июл 15 2019, 17:07

5
Итак, в виду того, что:

Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]):

h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19

Мы имеем начальные фиксированные значения для слов в первой итерации, пардон, в нулевой итерации...

a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7

Мы не будем это всё реализовывать в железе и тратить на это "железо", деньги и время, время на вычисления, каждый раз...

Так как:

Основной цикл:

для i от 0 до 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)

Для 0-й итерации, мы это сделаем в "уме", получив и b и Σ0...

Личная тех. тема. 66672510

В виндоусовском калькуляторе можно проверить, всё совпадает, и "исключающее ИЛИ" (XOR) посчитано, процесс идёт...

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Сб Авг 10 2019, 22:20

6
SHA-2 хеш алгоритм.

____В 1993 году NIST впервые опубликовал Стандарт Безопасного Хеша (SHA). В 1995 году этот алгоритм был пересмотрен с целью устранения некоторых начальных недостатков, а в 2001 году были предложены новые алгоритмы хеширования. Это новое семейство алгоритмов хеширования, известное как SHA-2, использует большие дайджест-сообщения, делая их более устойчивыми к возможным атакам и позволяя использовать их с большими блоками данных, вплоть до 2128 бит, например, в случае SHA512. Алгоритм хеширования SHA-2 одинаков для хэш-функций SHA256, SHA224, SHA384 и SHA512, различаясь только размером операндов, векторами инициализации и размером окончательного дайджест-сообщения.
____Далее описывается алгоритм SHA-2, применяемый к хеш-функции SHA256, после чего следует описание хеш-функции SHA512, которая отличается в основном размером операндов, используя 64-битные слова вместо 32-битных. Обратите внимание, что SHA224 и SHA384 вычисляются как SHA256 и SHA512, соответственно, с окончательным значением хеш-функции, усеченным до соответствующего размера, вектор инициализации также отличается.

Личная тех. тема. _aaau_11

____Функция хеширования SHA256: Функция хеширования SHA256 создает окончательное дайджест-сообщение из 256 битов, которое зависит от входного сообщения и состоит из нескольких блоков по 512 бит в каждом. Этот входной блок расширяется и подается на 64 цикла функции SHA256 в словах по 32 бита каждый (обозначается Wt). В каждом цикле или цикле алгоритма SHA-2 введенные данные смешиваются с текущим состоянием. Это скремблирование данных выполняется с помощью сложений и логических операций, таких как побитовые логические операции и побитовые вращения. Вычислительная структура каждого раунда этого алгоритма изображена на рисунке 1. Несколько функций, представленных на этом рисунке, описаны в Приложении I. Значение Wt является 32-разрядным словом данных для раунда t, а значение Kt представляет 32-битная константа, которая также зависит от раунда.
____32-битные значения переменных от A до H обновляются в каждом раунде, а новые значения используются в следующем раунде. Начальные значения этих переменных задаются 256-битным постоянным значением, указанным в [10], это значение устанавливается только для первого блока данных. В последовательных блоках данных используется промежуточное хеш-значение, вычисленное для предыдущего блока данных. Каждый блок 512 данных обрабатывается в течение 64 циклов, после чего значения переменных от A до H добавляются в предыдущее дайджест-сообщение для получения частичного Дайджест сообщения. Чтобы лучше проиллюстрировать этот алгоритм, представление псевдокода изображено на рисунке 2. Окончательное дайджест-сообщение (DM) для данного потока данных дается результатом последнего блока данных.

Личная тех. тема. Fig_210

____В некоторых приложениях более высокого уровня, таких как эффективная реализация кода аутентификации хеш-сообщения с ключом (HMAC) [11] или когда сообщение фрагментировано, начальное значение хеш-функции (IV) может отличаться от константы, указанной в [10]. В этих случаях переменные от A до H инициализируются переменным вектором инициализации (IV).
____Хеш-функция SHA512: вычисление хеш-функции SHA512 идентично вычислению хеш-функции SHA256, отличающейся размером операндов, которые имеют 64 бита, а не 32 бита, как для SHA256, размера дайджест-сообщения, которое имеет удвоенный размер, составляющий 512 бит, и в функциях, описанных в Приложении I. В этом Приложении также описаны функции, используемые в расписании сообщений. Значения Wt и Kt имеют 64 бита, и каждый блок данных состоит из 16 64-битных слов, имеющих в общей сложности 1024 бита.
____Расписание сообщений: В алгоритме SHA-2 вычисления, описанные на рисунке 1, выполняются для 64 раундов для SHA256 (80 раундов для SHA512), в каждом раунде 32-битное слово (или 64 бита для SHA512), полученное из промежуточного слова. используется хэш-значение Однако каждый блок данных имеет только 16 32-битных слов для SHA256 или 16 64-битных слов для SHA512, что приводит к необходимости расширения исходного блока данных для получения оставшихся слов. Это расширение выполняется вычислением, описанным в (1), где M(i)t обозначает первые 16 слов i-го блока данных.

Личная тех. тема. Iaa_110

____Заполнение сообщения: чтобы гарантировать, что входное сообщение кратно 512 битам, как того требует хеш-функция SHA256, или 1024 для хеш-функции SHA512, необходимо дополнить исходное сообщение. Дополненное сообщение состоит из сообщения, с ничего не значащими данными, и присоединённым к нему оригинальным сообщением. Эта операция может быть эффективно реализована в программном обеспечении с минимальными затратами.

Proposed Design.

____В алгоритме SHA-2 операции, которые должны быть выполнены, просты, однако зависимость этого алгоритма от данных не допускает большого распараллеливания. Каждый раунд алгоритма может быть вычислен только после того, как были вычислены значения от A до H предыдущего раунда (см. Рисунок 2), что накладывает последовательность на вычисление. Следует отметить, что в каждом раунде вычисление требуется только для вычисления значений A и E, поскольку остальные значения получаются непосредственно из значений предыдущего раунда, как показано в псевдокоде на рис.2.
____Перепланирование операций: в нашем предложении мы определили часть вычисления данного раунда t, которая может быть вычислена заранее в предыдущем раунде t − 1. Только значения, которые не зависят от значений, вычисленных в предыдущем раунде, могут быть вычислены заранее. В отличие от метода перепланирования, предложенного в [12] для алгоритма SHA1, где взаимная зависимость данных является низкой, в алгоритме SHA-2 зависимость данных является более сложной, как показано на рисунке 1. Хотя переменные B, C, D , F, G и H получены непосредственно из значений раунда, не требующих каких-либо вычислений, значения A и E требуют вычислений и зависят от всех значений. Другими словами, значения A и E для раунда t не могут быть вычислены до тех пор, пока значения для тех же переменных не будут вычислены в предыдущем раунде, как показано в (2).

Личная тех. тема. Iaa_210

____Принимая во внимание, что значение Ht + 1 задается непосредственно через Gt, которое, в свою очередь, задается посредством Ft-1, предварительный расчет H, таким образом, может быть задан как Ht + 1 = Ft-1. Поскольку значения Kt и Wt можно предварительно рассчитать и просто использовать в каждом раунде, (2) можно переписать как:

Личная тех. тема. Iaa_310

где значение δt рассчитывается в предыдущем раунде. Значение δt + 1 может быть результатом полного сложения или векторов переноса и сохранения из сложения переноса. С этим вычислительным разделением вычисление алгоритма SHA-2 может быть разделено на две части, что позволяет переназначить вычисление δ на предыдущий тактовый цикл, изображенный серой областью на рисунке 3. Таким образом, критический путь результирующего оборудования реализация может быть уменьшена. Поскольку вычисление теперь разделено на этап конвейера, вычисление SHA-2 требует дополнительного тактового цикла для выполнения всех циклов. В случае хэш-функции SHA256 необходимо 65 тактов для расчета 64 раундов. Как указано в алгоритме SHA-2 и изображено на рисунке 2, после вычисления всех циклов внутренние переменные (от A до H) должны быть добавлены к предыдущему дайджест-сообщению.
____

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Вс Авг 25 2019, 09:54

7
Псевдокод.

____Алгоритм использует следующие битовые операции:

ǁ — конкатенация,

+ — сложение,

and — побитовое «И»,

xor — исключающее «ИЛИ»,

shr (shift right) — логический сдвиг вправо,

rotr (rotate right) — циклический сдвиг вправо.

Пояснения:
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232
message — исходное двоичное сообщение
m — преобразованное сообщение


Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]):


h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19

Таблица констант
(первые 32 бита дробных частей кубических корней первых 64 простых чисел [от 2 до 311]):


k[0..63] :=
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2

Предварительная обработка:

m := message ǁ [единичный бит]
m := m ǁ [k нулевых бит],

где k — наименьшее неотрицательное число, такое что
(L + 1 + K) mod 512 = 448, где L — число бит в сообщении (сравнима по модулю 512 c 448)


m := m ǁ Длина(message)

- длина исходного сообщения в битах в виде 64-битного числа с порядком байтов от старшего к младшему

Далее сообщение обрабатывается последовательными порциями по 512 бит:
разбить сообщение на куски по 512 бит
для каждого куска разбить кусок на 16 слов длиной 32 бита (с порядком байтов от старшего к младшему внутри слова): w[0..15]

Сгенерировать дополнительные 48 слов:

для i от 16 до 63
s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3)
s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10)
w[i] := w[i-16] + s0 + w[i-7] + s1

Инициализация вспомогательных переменных:

a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7

Основной цикл:

для i от 0 до 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma := (a and b) xor (a and c) xor (b and c)
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e and f) xor ((not e) and g)
t1 := h + Σ1 + Ch + k[i] + w[i]

h := g
g := f
f := e
e := d + t1
d := c
c := b
b := a
a := t1 + t2

Добавить полученные значения к ранее вычисленному результату:

h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h

Получить итоговое значение хеша:

digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в Пт Сен 20 2019, 22:13

8
для i от 16 до 63
s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3)
s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10)
w[i] := w[i-16] + s0 + w[i-7] + s1



i = 16

s0 = (w[16-15] rotr 7) xor (w[16-15] rotr 18) xor (w[16-15] shr 3)
s0 = (w[1] rotr 7) xor (w[1] rotr 18) xor (w[1] shr 3)

s1 = (w[16-2] rotr 17) xor (w[16-2] rotr 19) xor (w[16-2] shr 10)
s1 = (w[14] rotr 17) xor (w[14] rotr 19) xor (w[14] shr 10)

w[16] = w[16-16] + s0 + w[16-7] + s1
w[16] = w[0] + s0 + w[9] +s1

Входные слова: w[0], w[1], w[9], w[14]
Выходное слово: w[16]

Личная тех. тема. Rotr_710

Личная тех. тема. Rotr_110

Личная тех. тема. S0-w1-10


.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty Re: Личная тех. тема.

Сообщение  Спонсируемый контент

9

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения