]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
* x86/machine.m4 (AES_ROUND): New macro.
authorNiels Möller <nisse@lysator.liu.se>
Tue, 14 May 2002 18:16:38 +0000 (20:16 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Tue, 14 May 2002 18:16:38 +0000 (20:16 +0200)
Rev: src/nettle/x86/machine.m4:1.5

x86/machine.m4

index dac44cdd7de65b7304c7d2b3600fc67760e38238..d7bccadebecd61ea1768a409af50f80193359f28 100644 (file)
@@ -1,19 +1,3 @@
-dnl AES_LAST_ROUND(a, b, c, d)
-dnl Leaves result in %edi
-dnl Note that we have to quote $ in constants.
-define(<AES_LAST_ROUND>, <
-       movl    %e<>$1<>x,%edi
-       andl    <$>0x000000ff,%edi
-       movl    %e<>$2<>x,%ebp
-       andl    <$>0x0000ff00,%ebp
-       orl     %ebp,%edi
-       movl    %e<>$3<>x,%ebp
-       andl    <$>0x00ff0000,%ebp
-       orl     %ebp,%edi
-       movl    %e<>$4<>x,%ebp
-       andl    <$>0xff000000,%ebp
-       orl     %ebp,%edi>)dnl
-
 dnl AES_LOAD(key, src)
 dnl Loads the next block of data from src, and add the subkey pointed
 dnl to by key.
@@ -45,3 +29,40 @@ define(<AES_STORE>, <
        movl    %ebx,4($2)
        movl    %ecx,8($2)
        movl    %edx,12($2)>)dnl
+
+dnl AES_ROUND(table,a,b,c,d)
+dnl Computes one word of the AES round. Leaves result in %edi.
+define(<AES_ROUND>, <
+       movl    %e<>$2<>x, %esi
+       andl    <$>0xff, %esi
+       shll    <$>2,%esi               C  index in table
+       movl    AES_TABLE0 + $1 (%esi),%edi
+       movl    %e<>$3<>x, %esi
+       shrl    <$>6,%esi
+       andl    <$>0x000003fc,%esi C  clear all but offset bytes
+       xorl    AES_TABLE1 + $1 (%esi),%edi
+       movl    %e<>$4<>x,%esi  C  third one
+       shrl    <$>14,%esi
+       andl    <$>0x000003fc,%esi
+       xorl    AES_TABLE2 + $1 (%esi),%edi
+       movl    %e<>$5<>x,%esi  C  fourth one
+       shrl    <$>22,%esi
+       andl    <$>0x000003fc,%esi
+       xorl    AES_TABLE3 + $1 (%esi),%edi>)dnl
+
+dnl AES_LAST_ROUND(a, b, c, d)
+dnl Computes one word of the final round. Leaves result in %edi.
+dnl Note that we have to quote $ in constants.
+define(<AES_LAST_ROUND>, <
+       movl    %e<>$1<>x,%edi
+       andl    <$>0x000000ff,%edi
+       movl    %e<>$2<>x,%ebp
+       andl    <$>0x0000ff00,%ebp
+       orl     %ebp,%edi
+       movl    %e<>$3<>x,%ebp
+       andl    <$>0x00ff0000,%ebp
+       orl     %ebp,%edi
+       movl    %e<>$4<>x,%ebp
+       andl    <$>0xff000000,%ebp
+       orl     %ebp,%edi>)dnl
+