Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Wim Lewis
nettle
Commits
5c4ca294
Commit
5c4ca294
authored
May 20, 2013
by
Niels Möller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x86_64: Adapted aes assembly to new interrface.
parent
614a672e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
69 additions
and
55 deletions
+69
-55
ChangeLog
ChangeLog
+6
-0
x86_64/aes-decrypt-internal.asm
x86_64/aes-decrypt-internal.asm
+32
-28
x86_64/aes-encrypt-internal.asm
x86_64/aes-encrypt-internal.asm
+31
-27
No files found.
ChangeLog
View file @
5c4ca294
2013-05-20 Niels Möller <nisse@lysator.liu.se>
* x86_64/aes-decrypt-internal.asm: Likewise.
* x86_64/aes-encrypt-internal.asm: Adapted to new interface.
2013-05-17 Niels Möller <nisse@lysator.liu.se>
2013-05-17 Niels Möller <nisse@lysator.liu.se>
* aes.h (struct aes_ctx): Renamed nrounds to rounds, and moved
* aes.h (struct aes_ctx): Renamed nrounds to rounds, and moved
...
...
x86_64/aes-decrypt-internal.asm
View file @
5c4ca294
C
nettle
,
low
-
level
cryptographics
library
C
nettle
,
low
-
level
cryptographics
library
C
C
C
Copyright
(
C
)
2001
,
2002
,
2005
,
2008
Rafael
R.
Sevilla
,
Niels
M
ö
ller
C
Copyright
(
C
)
2001
,
2002
,
2005
,
Rafael
R.
Sevilla
,
Niels
M
ö
ller
C
C
Copyright
(
C
)
2008
,
2013
Niels
M
ö
ller
C
C
The
nettle
library
is
free
software
; you can redistribute it and/or modify
C
The
nettle
library
is
free
software
; you can redistribute it and/or modify
C
it
under
the
terms
of
the
GNU
Lesser
General
Public
License
as
published
by
C
it
under
the
terms
of
the
GNU
Lesser
General
Public
License
as
published
by
C
the
Free
Software
Foundation
; either version 2.1 of the License, or (at your
C
the
Free
Software
Foundation
; either version 2.1 of the License, or (at your
...
@@ -31,16 +32,17 @@ define(<TA>,<%r10d>)
...
@@ -31,16 +32,17 @@ define(<TA>,<%r10d>)
define
(
<
TB
>
,
<%
r11d
>
)
define
(
<
TB
>
,
<%
r11d
>
)
define
(
<
TC
>
,
<%
r12d
>
)
define
(
<
TC
>
,
<%
r12d
>
)
define
(
<
CTX
>
,
<%
rdi
>
)
C
Input
argument
define
(
<
TABLE
>
,
<%
rsi
>
)
define
(
<
ROUNDS
>
,
<%
rdi
>
)
define
(
<
PARAM_LENGTH
>
,
<%
rdx
>
)
define
(
<
KEYS
>
,
<%
rsi
>
)
define
(
<
PARAM_DST
>
,
<%
rcx
>
)
define
(
<
PARAM_TABLE
>
,
<%
rdx
>
)
define
(
<
SRC
>
,
<%
r8
>
)
define
(
<
PARAM_LENGTH
>
,
<%
rcx
>
)
define
(
<
DS
T
>
,
<%
r8
>
)
define
(
<
SRC
>
,
<%
r9
>
)
define
(
<
DS
T
>
,
<%
r9
>
)
define
(
<
TABLE
>
,
<%
r13
>
)
define
(
<
KEY
>
,
<%
r14
>
)
define
(
<
LENGTH
>
,
<%
r14
>
)
define
(
<
COUNT
>
,
<%
r15d
>
)
define
(
<
KEY
>
,
<%
r15
>
)
define
(
<
BL
OCK_COUNT
>
,
<%
r13
>
)
C
Must
correspond
to
an
old
-
style
register
,
for
movzb
from
%
ah
--%
dh
to
C
Must
correspond
to
an
old
-
style
register
,
for
movzb
from
%
ah
--%
dh
to
C
work.
C
work.
...
@@ -48,14 +50,14 @@ define(<TMP>,<%rbp>)
...
@@ -48,14 +50,14 @@ define(<TMP>,<%rbp>)
.file
"
aes
-
decrypt
-
internal.asm
"
.file
"
aes
-
decrypt
-
internal.asm
"
C
_aes_decrypt
(
struct
aes_context
*
ctx
,
C
_aes_decrypt
(
unsigned
rounds
,
const
uint32_t
*
keys
,
C
const
struct
aes_table
*
T
,
C
const
struct
aes_table
*
T
,
C
si
ze_t
length
,
uint8_t
*
ds
t
,
C
si
ze_t
length
,
uint8_t
*
ds
t
,
C
uint8_t
*
src
)
C
uint8_t
*
src
)
.text
.text
ALIGN
(
16
)
ALIGN
(
16
)
PROLOGUE
(
_nettle_aes_decrypt
)
PROLOGUE
(
_nettle_aes_decrypt
)
W64_ENTRY
(
5
,
0
)
W64_ENTRY
(
6
,
0
)
test
PARAM_LENGTH
,
PARAM_LENGTH
test
PARAM_LENGTH
,
PARAM_LENGTH
jz
.Lend
jz
.Lend
...
@@ -67,20 +69,21 @@ PROLOGUE(_nettle_aes_decrypt)
...
@@ -67,20 +69,21 @@ PROLOGUE(_nettle_aes_decrypt)
push
%
r14
push
%
r14
push
%
r15
push
%
r15
mov
PARAM_DST
,
DS
T
subl
$
1
,
XREG
(
ROUNDS
)
mov
PARAM_LENGTH
,
BL
OCK_COUNT
push
ROUNDS
C
Rounds
at
(
%
rsp
)
shr
$
4
,
BL
OCK_COUNT
mov
PARAM_TABLE
,
TABLE
mov
PARAM_LENGTH
,
LENGTH
shr
$
4
,
LENGTH
.Lblock_loop:
.Lblock_loop:
mov
CTX
,
KEY
mov
KEYS
,
KEY
AES_LOAD
(
SA
,
SB
,
SC
,
SD
,
SRC
,
KEY
)
AES_LOAD
(
SA
,
SB
,
SC
,
SD
,
SRC
,
KEY
)
add
$
16
,
SRC
C
Increment
src
pointer
add
$
16
,
SRC
C
Increment
src
pointer
C
get
number
of
rounds
to
do
from
ctx
struct
movl
(
%
rsp
),
XREG
(
ROUNDS
)
movl
AES_NROUNDS
(
CTX
),
COUNT
subl
$
1
,
COUNT
add
$
16
,
KEY
C
point
to
next
key
add
$
16
,
KEY
C
point
to
next
key
ALIGN
(
16
)
ALIGN
(
16
)
.Lround_loop:
.Lround_loop:
AES_ROUND
(
TABLE
,
SA
,
SD
,
SC
,
SB
,
TA
,
TMP
)
AES_ROUND
(
TABLE
,
SA
,
SD
,
SC
,
SB
,
TA
,
TMP
)
...
@@ -97,8 +100,8 @@ PROLOGUE(_nettle_aes_decrypt)
...
@@ -97,8 +100,8 @@ PROLOGUE(_nettle_aes_decrypt)
xorl
8
(
KEY
),
SC
xorl
8
(
KEY
),
SC
xorl
12
(
KEY
),
SD
xorl
12
(
KEY
),
SD
add
$
16
,
KEY
C
point
to
next
key
add
$
16
,
KEY
C
point
to
next
key
decl
COUNT
decl
XREG
(
ROUNDS
)
jnz
.Lround_loop
jnz
.Lround_loop
C
last
round
C
last
round
...
@@ -108,28 +111,29 @@ PROLOGUE(_nettle_aes_decrypt)
...
@@ -108,28 +111,29 @@ PROLOGUE(_nettle_aes_decrypt)
AES_FINAL_ROUND
(
SD
,
SC
,
SB
,
SA
,
TABLE
,
SD
,
TMP
)
AES_FINAL_ROUND
(
SD
,
SC
,
SB
,
SA
,
TABLE
,
SD
,
TMP
)
C
Inverse
S
-
box
substitution
C
Inverse
S
-
box
substitution
mov
$
3
,
COUNT
mov
$
3
,
XREG
(
ROUNDS
)
.Lsubst:
.Lsubst:
AES_SUBST_BYTE
(
TA
,
TB
,
TC
,
SD
,
TABLE
,
TMP
)
AES_SUBST_BYTE
(
TA
,
TB
,
TC
,
SD
,
TABLE
,
TMP
)
decl
COUNT
decl
XREG
(
ROUNDS
)
jnz
.Lsubst
jnz
.Lsubst
C
Add
last
subkey
,
and
store
decrypted
data
C
Add
last
subkey
,
and
store
decrypted
data
AES_STORE
(
TA
,
TB
,
TC
,
SD
,
KEY
,
DS
T
)
AES_STORE
(
TA
,
TB
,
TC
,
SD
,
KEY
,
DS
T
)
add
$
16
,
DS
T
add
$
16
,
DS
T
dec
BL
OCK_COUNT
dec
LENGTH
jnz
.Lblock_loop
jnz
.Lblock_loop
pop
%
r15
lea
8
(
%
rsp
),
%
rsp
C
Drop
ROUNDS
pop
%
r15
pop
%
r14
pop
%
r14
pop
%
r13
pop
%
r13
pop
%
r12
pop
%
r12
pop
%
rbp
pop
%
rbp
pop
%
rbx
pop
%
rbx
.Lend:
.Lend:
W64_EXIT
(
5
,
0
)
W64_EXIT
(
6
,
0
)
ret
ret
EPILOGUE
(
_nettle_aes_decrypt
)
EPILOGUE
(
_nettle_aes_decrypt
)
x86_64/aes-encrypt-internal.asm
View file @
5c4ca294
C
nettle
,
low
-
level
cryptographics
library
C
nettle
,
low
-
level
cryptographics
library
C
C
C
Copyright
(
C
)
2001
,
2002
,
2005
,
2008
Rafael
R.
Sevilla
,
Niels
M
ö
ller
C
Copyright
(
C
)
2001
,
2002
,
2005
,
Rafael
R.
Sevilla
,
Niels
M
ö
ller
C
Copyright
(
C
)
2008
,
2013
Niels
M
ö
ller
C
C
C
The
nettle
library
is
free
software
; you can redistribute it and/or modify
C
The
nettle
library
is
free
software
; you can redistribute it and/or modify
C
it
under
the
terms
of
the
GNU
Lesser
General
Public
License
as
published
by
C
it
under
the
terms
of
the
GNU
Lesser
General
Public
License
as
published
by
...
@@ -31,16 +32,17 @@ define(<TA>,<%r10d>)
...
@@ -31,16 +32,17 @@ define(<TA>,<%r10d>)
define
(
<
TB
>
,
<%
r11d
>
)
define
(
<
TB
>
,
<%
r11d
>
)
define
(
<
TC
>
,
<%
r12d
>
)
define
(
<
TC
>
,
<%
r12d
>
)
define
(
<
CTX
>
,
<%
rdi
>
)
C
Input
argument
define
(
<
TABLE
>
,
<%
rsi
>
)
define
(
<
ROUNDS
>
,
<%
rdi
>
)
define
(
<
PARAM_LENGTH
>
,
<%
rdx
>
)
define
(
<
KEYS
>
,
<%
rsi
>
)
define
(
<
PARAM_DST
>
,
<%
rcx
>
)
define
(
<
PARAM_TABLE
>
,
<%
rdx
>
)
define
(
<
SRC
>
,
<%
r8
>
)
define
(
<
PARAM_LENGTH
>
,
<%
rcx
>
)
define
(
<
DS
T
>
,
<%
r8
>
)
define
(
<
SRC
>
,
<%
r9
>
)
define
(
<
DS
T
>
,
<%
r9
>
)
define
(
<
TABLE
>
,
<%
r13
>
)
define
(
<
KEY
>
,
<%
r14
>
)
define
(
<
LENGTH
>
,
<%
r14
>
)
define
(
<
COUNT
>
,
<%
r15d
>
)
define
(
<
KEY
>
,
<%
r15
>
)
define
(
<
BL
OCK_COUNT
>
,
<%
r13
>
)
C
Must
correspond
to
an
old
-
style
register
,
for
movzb
from
%
ah
--%
dh
to
C
Must
correspond
to
an
old
-
style
register
,
for
movzb
from
%
ah
--%
dh
to
C
work.
C
work.
...
@@ -48,14 +50,14 @@ define(<TMP>,<%rbp>)
...
@@ -48,14 +50,14 @@ define(<TMP>,<%rbp>)
.file
"
aes
-
encrypt
-
internal.asm
"
.file
"
aes
-
encrypt
-
internal.asm
"
C
_aes_encrypt
(
struct
aes_context
*
ctx
,
C
_aes_encrypt
(
unsigned
rounds
,
const
uint32_t
*
keys
,
C
const
struct
aes_table
*
T
,
C
const
struct
aes_table
*
T
,
C
si
ze_t
length
,
uint8_t
*
ds
t
,
C
si
ze_t
length
,
uint8_t
*
ds
t
,
C
uint8_t
*
src
)
C
uint8_t
*
src
)
.text
.text
ALIGN
(
16
)
ALIGN
(
16
)
PROLOGUE
(
_nettle_aes_encrypt
)
PROLOGUE
(
_nettle_aes_encrypt
)
W64_ENTRY
(
5
,
0
)
W64_ENTRY
(
6
,
0
)
test
PARAM_LENGTH
,
PARAM_LENGTH
test
PARAM_LENGTH
,
PARAM_LENGTH
jz
.Lend
jz
.Lend
...
@@ -67,20 +69,21 @@ PROLOGUE(_nettle_aes_encrypt)
...
@@ -67,20 +69,21 @@ PROLOGUE(_nettle_aes_encrypt)
push
%
r14
push
%
r14
push
%
r15
push
%
r15
mov
PARAM_DST
,
DS
T
subl
$
1
,
XREG
(
ROUNDS
)
mov
PARAM_LENGTH
,
BL
OCK_COUNT
push
ROUNDS
C
Rounds
at
(
%
rsp
)
shr
$
4
,
BL
OCK_COUNT
mov
PARAM_TABLE
,
TABLE
mov
PARAM_LENGTH
,
LENGTH
shr
$
4
,
LENGTH
.Lblock_loop:
.Lblock_loop:
mov
CTX
,
KEY
mov
KEYS
,
KEY
AES_LOAD
(
SA
,
SB
,
SC
,
SD
,
SRC
,
KEY
)
AES_LOAD
(
SA
,
SB
,
SC
,
SD
,
SRC
,
KEY
)
add
$
16
,
SRC
C
Increment
src
pointer
add
$
16
,
SRC
C
Increment
src
pointer
C
get
number
of
rounds
to
do
from
ctx
struct
movl
(
%
rsp
),
XREG
(
ROUNDS
)
movl
AES_NROUNDS
(
CTX
),
COUNT
subl
$
1
,
COUNT
add
$
16
,
KEY
C
point
to
next
key
add
$
16
,
KEY
C
point
to
next
key
ALIGN
(
16
)
ALIGN
(
16
)
.Lround_loop:
.Lround_loop:
AES_ROUND
(
TABLE
,
SA
,
SB
,
SC
,
SD
,
TA
,
TMP
)
AES_ROUND
(
TABLE
,
SA
,
SB
,
SC
,
SD
,
TA
,
TMP
)
...
@@ -97,8 +100,8 @@ PROLOGUE(_nettle_aes_encrypt)
...
@@ -97,8 +100,8 @@ PROLOGUE(_nettle_aes_encrypt)
xorl
8
(
KEY
),
SC
xorl
8
(
KEY
),
SC
xorl
12
(
KEY
),
SD
xorl
12
(
KEY
),
SD
add
$
16
,
KEY
C
point
to
next
key
add
$
16
,
KEY
C
point
to
next
key
decl
COUNT
decl
XREG
(
ROUNDS
)
jnz
.Lround_loop
jnz
.Lround_loop
C
last
round
C
last
round
...
@@ -108,28 +111,29 @@ PROLOGUE(_nettle_aes_encrypt)
...
@@ -108,28 +111,29 @@ PROLOGUE(_nettle_aes_encrypt)
AES_FINAL_ROUND
(
SD
,
SA
,
SB
,
SC
,
TABLE
,
SD
,
TMP
)
AES_FINAL_ROUND
(
SD
,
SA
,
SB
,
SC
,
TABLE
,
SD
,
TMP
)
C
S
-
box
substitution
C
S
-
box
substitution
mov
$
3
,
COUNT
mov
$
3
,
XREG
(
ROUNDS
)
.Lsubst:
.Lsubst:
AES_SUBST_BYTE
(
TA
,
TB
,
TC
,
SD
,
TABLE
,
TMP
)
AES_SUBST_BYTE
(
TA
,
TB
,
TC
,
SD
,
TABLE
,
TMP
)
decl
COUNT
decl
XREG
(
ROUNDS
)
jnz
.Lsubst
jnz
.Lsubst
C
Add
last
subkey
,
and
store
encrypted
data
C
Add
last
subkey
,
and
store
encrypted
data
AES_STORE
(
TA
,
TB
,
TC
,
SD
,
KEY
,
DS
T
)
AES_STORE
(
TA
,
TB
,
TC
,
SD
,
KEY
,
DS
T
)
add
$
16
,
DS
T
add
$
16
,
DS
T
dec
BL
OCK_COUNT
dec
LENGTH
jnz
.Lblock_loop
jnz
.Lblock_loop
pop
%
r15
lea
8
(
%
rsp
),
%
rsp
C
Drop
ROUNDS
pop
%
r15
pop
%
r14
pop
%
r14
pop
%
r13
pop
%
r13
pop
%
r12
pop
%
r12
pop
%
rbp
pop
%
rbp
pop
%
rbx
pop
%
rbx
.Lend:
.Lend:
W64_EXIT
(
5
,
0
)
W64_EXIT
(
6
,
0
)
ret
ret
EPILOGUE
(
_nettle_aes_encrypt
)
EPILOGUE
(
_nettle_aes_encrypt
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment