KeyExpansion Псевдокод -> asm

Тема в разделе "WASM.A&O", создана пользователем EvilsInterrupt, 21 окт 2004.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    В теме wasm.cryptography Володя дал ссылку на хороший ресурс по

    алгоритму Rijndael следуя этой ссылке я скачал себе главу 3.

    В этой главе описано как из ключа шифрования получать расширен-

    ный ключ и написано в виде функции на псевдокоде:



    KeyExpansion(byte key[4*Nk],word w[Nb*(Nr+1)],Nk)

    begin

    word temp

    i = 0



    while (i<Nk)



    w = word (key[4*i],key[4*i+1],key[4*i+2],key[4*i+2],key[4*i+3])

    i = i+1



    end while



    i = Nk



    while(i<Nb*(Nr+1))

    temp = w[i-1]



    if (i mod Nk = 0)

    temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]

    else if (Nk>6 and i mod Nk=4)

    temp = SubWord(temp)

    end if

    w = w[i=Nk] xor temp

    i = i+1



    end while



    end

    \\\\\\\\\\

    также он сказал следующее:



    "Rcon[] - массив 32 битных раундовых констант;

    RotWord() - операция циклической перестановки входного 4-

    байтного слова в выходное по сдедующему правилу [a0,a1,a2,a3]->

    ->[a1,a2,a3,a0]

    SubWord - операция замены в 4-байтном слове с помощью S-box каж-

    дого байта"





    1. Для первого цикла я написал:

    mov cx,Nk

    round:

    mov eax,dword ptr[esi]

    mov dword ptr[edi],eax

    add esi

    loop round

    Все верно?



    2. Каким второй цикл представить на ассемблере?