Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
lwc
/
candidates
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
727508dc
authored
Nov 18, 2020
by
Wentao Zhang
Committed by
Sebastian Renner
Nov 18, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
knot
parent
20add87b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
78 changed files
with
1624 additions
and
2186 deletions
+1624
-2186
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.c
+30
-89
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h
+28
-14
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c
+13
-7
knot/Implementations/crypto_aead/knot128v2/armcortexm_3/auxFormat.h
+81
-99
knot/Implementations/crypto_aead/knot128v2/armcortexm_3/encrypt.c
+69
-115
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.c
+30
-90
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.h
+26
-17
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/encrypt.c
+13
-7
knot/Implementations/crypto_aead/knot128v2/armcortexm_5/auxFormat.c
+30
-51
knot/Implementations/crypto_aead/knot128v2/armcortexm_5/auxFormat.h
+18
-12
knot/Implementations/crypto_aead/knot128v2/armcortexm_6/auxFormat.c
+30
-51
knot/Implementations/crypto_aead/knot128v2/armcortexm_6/auxFormat.h
+20
-16
knot/Implementations/crypto_aead/knot128v2/opt_1/encrypt.c
+1
-0
knot/Implementations/crypto_aead/knot128v2/opt_3_ARR/encrypt.c
+1
-0
knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.c
+32
-78
knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.h
+16
-19
knot/Implementations/crypto_aead/knot192/armcortexm_2/encrypt.c
+20
-7
knot/Implementations/crypto_aead/knot192/armcortexm_3/auxFormat.h
+69
-82
knot/Implementations/crypto_aead/knot192/armcortexm_3/encrypt.c
+57
-81
knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.c
+30
-78
knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.h
+24
-22
knot/Implementations/crypto_aead/knot192/armcortexm_4/encrypt.c
+25
-9
knot/Implementations/crypto_aead/knot192/armcortexm_5/auxFormat.c
+55
-79
knot/Implementations/crypto_aead/knot192/armcortexm_5/auxFormat.h
+23
-39
knot/Implementations/crypto_aead/knot192/armcortexm_5/encrypt.c
+10
-36
knot/Implementations/crypto_aead/knot192/armcortexm_6/auxFormat.c
+29
-71
knot/Implementations/crypto_aead/knot192/armcortexm_6/auxFormat.h
+21
-13
knot/Implementations/crypto_aead/knot192/opt_1/encrypt.c
+1
-0
knot/Implementations/crypto_aead/knot192/opt_2/encrypt.c
+1
-0
knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.c
+27
-41
knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.h
+28
-21
knot/Implementations/crypto_aead/knot256/armcortexm_2/encrypt.c
+30
-6
knot/Implementations/crypto_aead/knot256/armcortexm_3/auxFormat.h
+45
-57
knot/Implementations/crypto_aead/knot256/armcortexm_3/encrypt.c
+93
-217
knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.c
+8
-18
knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.h
+24
-15
knot/Implementations/crypto_aead/knot256/armcortexm_4/encrypt.c
+25
-6
knot/Implementations/crypto_aead/knot256/armcortexm_5/auxFormat.c
+9
-31
knot/Implementations/crypto_aead/knot256/armcortexm_5/auxFormat.h
+19
-11
knot/Implementations/crypto_aead/knot256/armcortexm_6/auxFormat.c
+10
-31
knot/Implementations/crypto_aead/knot256/armcortexm_6/auxFormat.h
+19
-11
knot/Implementations/crypto_hash/knot256v1/LWC_HASH_KAT_256.txt
+1
-0
knot/Implementations/crypto_hash/knot256v2/armcortexm_2/auxFormat.c
+70
-75
knot/Implementations/crypto_hash/knot256v2/armcortexm_2/auxFormat.h
+16
-12
knot/Implementations/crypto_hash/knot256v2/armcortexm_3/auxFormat.h
+61
-80
knot/Implementations/crypto_hash/knot256v2/armcortexm_3/hash.c
+3
-2
knot/Implementations/crypto_hash/knot256v2/armcortexm_4/auxFormat.c
+74
-81
knot/Implementations/crypto_hash/knot256v2/armcortexm_4/auxFormat.h
+16
-12
knot/Implementations/crypto_hash/knot256v2/armcortexm_4/hash.c
+3
-2
knot/Implementations/crypto_hash/knot256v2/armcortexm_5/auxFormat.c
+70
-77
knot/Implementations/crypto_hash/knot256v2/armcortexm_5/auxFormat.h
+16
-12
knot/Implementations/crypto_hash/knot256v2/armcortexm_6/auxFormat.c
+45
-63
knot/Implementations/crypto_hash/knot256v2/armcortexm_6/auxFormat.h
+16
-12
knot/Implementations/crypto_hash/knot256v2/opt_1/hash.c
+1
-0
knot/Implementations/crypto_hash/knot384/LWC_HASH_KAT_384.txt
+2
-0
knot/Implementations/crypto_hash/knot384/armcortexm_2/auxFormat.c
+29
-44
knot/Implementations/crypto_hash/knot384/armcortexm_2/auxFormat.h
+16
-12
knot/Implementations/crypto_hash/knot384/armcortexm_3/auxFormat.h
+45
-55
knot/Implementations/crypto_hash/knot384/armcortexm_3/hash.c
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_4/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_4/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_4/hash.c
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_5/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_5/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_6/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot384/armcortexm_6/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/LWC_HASH_KAT_512.txt
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_2/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_2/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_3/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_4/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_4/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_5/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_5/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_6/auxFormat.c
+0
-0
knot/Implementations/crypto_hash/knot512/armcortexm_6/auxFormat.h
+0
-0
knot/Implementations/crypto_hash/knot512/opt_1/hash.c
+0
-0
knot/Implementations/crypto_hash/knot512/opt_SSE/hash.c
+0
-0
No files found.
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.c
View file @
727508dc
#include"auxFormat.h"
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t0
=
U32BIG
(((
u32
*
)
in
)[
0
]),
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]),
t2
=
U32BIG
(((
u32
*
)
in
)[
2
]);
\
puckU32ToThree_3
(
t0
);
\
puckU32ToThree_3
(
t1
);
\
puckU32ToThree_3
(
t2
);
\
//puck begin//
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
temp0
[
3
]
=
{
0
};
u32
temp1
[
3
]
=
{
0
};
u32
temp2
[
3
]
=
{
0
};
u32
t1_32
,
t2_64
,
t2_65
;
u32
t
[
3
]
=
{
0
};
temp0
[
0
]
=
in
[
0
]
&
0xffe00000
;
temp1
[
0
]
=
(
in
[
0
]
&
0x001ffc00
)
<<
11
;
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
temp0
[
1
]
=
in
[
1
]
&
0xffe00000
;
temp1
[
1
]
=
(
in
[
1
]
&
0x001ff800
)
<<
11
;
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
temp0
[
2
]
=
in
[
2
]
&
0xffc00000
;
t1_32
=
((
in
[
2
]
&
0x00200000
)
<<
10
);
temp1
[
2
]
=
(
in
[
2
]
&
0x001ff800
)
<<
11
;
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
unpuckU32ToThree
(
temp0
[
0
]);
unpuckU32ToThree
(
temp0
[
1
]);
unpuckU32ToThree
(
temp0
[
2
]);
t
[
2
]
=
temp0
[
0
]
|
temp0
[
1
]
>>
1
|
temp0
[
2
]
>>
2
;
unpuckU32ToThree
(
temp1
[
0
]);
unpuckU32ToThree
(
temp1
[
1
]);
unpuckU32ToThree
(
temp1
[
2
]);
t
[
1
]
=
t1_32
|
((
temp1
[
0
]
|
temp1
[
1
]
>>
1
|
temp1
[
2
]
>>
2
)
>>
1
);
unpuckU32ToThree
(
temp2
[
0
]);
unpuckU32ToThree
(
temp2
[
1
]);
unpuckU32ToThree
(
temp2
[
2
]);
t
[
0
]
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
memcpy
(
out
,
t
,
12
*
sizeof
(
unsigned
char
));
out
[
0
]
=
((((
t2
>>
21
)
&
0x400
)
|
(((
t2
>>
18
)
&
0x300
))
|
((
t2
&
0xff00
)
>>
8
))
<<
21
)
|
((((
t1
>>
20
)
&
0x400
)
|
((
t1
>>
16
)
&
0x300
)
|
(
t1
&
0xff
))
<<
10
)
|
(((
t0
>>
20
)
&
0x300
)
|
((
t0
&
0xff0000
)
>>
16
));
out
[
1
]
=
((((
t2
>>
20
)
&
0x400
)
|
((
t2
>>
16
)
&
0x300
)
|
(
t2
&
0xff
))
<<
21
)
|
((((
t1
>>
20
)
&
0x300
)
|
((
t1
&
0xff0000
)
>>
16
))
<<
11
)
|
(((
t0
>>
21
)
&
0x400
)
|
((
t0
>>
18
)
&
0x300
)
|
((
t0
&
0xff00
)
>>
8
));
out
[
2
]
=
((((
t2
>>
20
)
&
0x300
)
|
((
t2
&
0xff0000
)
>>
16
))
<<
22
)
|
((((
t1
>>
21
)
&
0x400
)
|
((
t1
>>
18
)
&
0x300
)
|
((
t1
&
0xff00
)
>>
8
))
<<
11
)
|
(((
t0
>>
20
)
&
0x400
)
|
((
t0
>>
16
)
&
0x300
)
|
(
t0
&
0xff
));
}
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t0
=
U32BIG
(((
u32
*
)
in
)[
2
]);
u32
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]);
u32
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
u32
temp0
[
3
]
=
{
0
};
u32
temp1
[
3
]
=
{
0
};
u32
temp2
[
3
]
=
{
0
};
u8
t1_32
=
(
in
[
7
]
&
0x80
)
>>
7
,
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
t1
=
t1
<<
1
;
t2
=
t2
<<
2
;
temp0
[
0
]
=
t0
;
temp0
[
1
]
=
t0
<<
1
;
temp0
[
2
]
=
t0
<<
2
;
puckU32ToThree
(
temp0
[
0
]);
puckU32ToThree
(
temp0
[
1
]);
puckU32ToThree
(
temp0
[
2
]);
temp1
[
0
]
=
t1
;
temp1
[
1
]
=
t1
<<
1
;
temp1
[
2
]
=
t1
<<
2
;
puckU32ToThree
(
temp1
[
0
]);
puckU32ToThree
(
temp1
[
1
]);
puckU32ToThree
(
temp1
[
2
]);
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
puckU32ToThree
(
temp2
[
0
]);
puckU32ToThree
(
temp2
[
1
]);
puckU32ToThree
(
temp2
[
2
]);
out
[
0
]
=
(
temp0
[
0
])
|
(
temp1
[
0
]
>>
11
)
|
(
temp2
[
0
]
>>
22
);
out
[
1
]
=
(
temp0
[
1
])
|
(
temp1
[
1
]
>>
11
)
|
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
out
[
2
]
=
(
temp0
[
2
])
|
(((
u32
)
t1_32
)
<<
21
)
|
(
temp1
[
2
]
>>
11
)
|
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
}
void
packU32FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
u32
temp2
[
3
]
=
{
0
};
u8
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
t2
=
t2
<<
2
;
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
puckU32ToThree
(
temp2
[
0
]);
puckU32ToThree
(
temp2
[
1
]);
puckU32ToThree
(
temp2
[
2
]);
out
[
0
]
=
(
temp2
[
0
]
>>
22
);
out
[
1
]
=
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
out
[
2
]
=
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
}
void
unpackU32FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
temp2
[
3
]
=
{
0
};
u32
t2_64
,
t2_65
;
u32
t2
;
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
unpuckU32ToThree
(
temp2
[
0
]);
unpuckU32ToThree
(
temp2
[
1
]);
unpuckU32ToThree
(
temp2
[
2
]);
t2
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
*
(
u32
*
)(
out
)
=
U32BIG
(
t2
);
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
t
[
3
]
=
{
0
}
;
\
u32
t0
=
in
[
0
],
t1
=
in
[
1
],
t2
=
in
[
2
];
\
t
[
0
]
=
((
t1
&
0x400
)
<<
21
)
|
((
t2
&
0x400
)
<<
20
)
|
\
((
t0
&
0x300
)
<<
20
)
|
((
t1
&
0x300
)
<<
18
)
|
((
t2
&
0x300
)
<<
16
)
|
\
((
t0
&
0xff
)
<<
16
)
|
((
t1
&
0xff
)
<<
8
)
|
(
t2
&
0xff
);
\
t
[
1
]
=
((
t2
&
0x200000
)
<<
10
)
|
((
t0
&
0x100000
)
<<
10
)
|
((
t1
&
0x180000
)
<<
9
)
|
((
t2
&
0x180000
)
<<
7
)
|
\
((
t0
&
0xc0000
)
<<
6
)
|
((
t1
&
0x7f800
)
<<
5
)
|
((
t2
&
0x7f800
)
>>
3
)
|
\
((
t0
&
0x3fc00
)
>>
10
);
\
t
[
2
]
=
((
t0
&
0x80000000
))
|
((
t1
&
0x80000000
)
>>
1
)
|
((
t2
&
0xc0000000
)
>>
2
)
|
\
((
t0
&
0x60000000
)
>>
3
)
|
((
t1
&
0x60000000
)
>>
5
)
|
((
t2
&
0x3fc00000
)
>>
6
)
|
\
((
t0
&
0x1fe00000
)
>>
13
)
|
((
t1
&
0x1fe00000
)
>>
21
);
\
unpuckU32ToThree_3
(
t
[
0
]);
\
unpuckU32ToThree_3
(
t
[
1
]);
\
unpuckU32ToThree_3
(
t
[
2
]);
\
memcpy
(
out
,
t
,
12
*
sizeof
(
unsigned
char
));
\
}
void
P384
(
unsigned
int
*
s
,
unsigned
char
*
round
,
unsigned
char
lunNum
)
{
u32
rci
,
t1
,
t2
;
...
...
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h
View file @
727508dc
...
...
@@ -14,26 +14,40 @@ typedef unsigned long long u64;
#define PR0_ROUNDS 76
#define PR_ROUNDS 28
#define PRF_ROUNDS 32
/*
#define PR0_ROUNDS 76
#define PR_ROUNDS 40
#define PRF_ROUNDS 44
#define PR0_ROUNDS 76
#define PR_ROUNDS 28
#define PRF_ROUNDS 32
* */
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n))))
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
);
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
);
void
P384
(
unsigned
int
*
s
,
unsigned
char
*
round
,
unsigned
char
lunNum
);
//////////////////puck begin
//&:5 <<:4 |:4
#define puckU32ToThree(x){
\
x
&=
0x92492492
;
\
x
=
(
x
|
(
x
<<
2
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
<<
4
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
<<
8
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
<<
16
))
&
0xfff00000
;
\
#define puckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
)
;
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
)
;
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
)
;
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
)
;
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
)
;
\
}
#define unpuckU32ToThree(x){\
x
&=
0xfff00000
;
\
x
=
(
x
|
(
x
>>
16
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
>>
8
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
>>
4
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
>>
2
))
&
0x92492492
;
\
#define unpuckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
);
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
);
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
);
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
);
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
}
unsigned
char
constant7Format
[
80
];
...
...
knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c
View file @
727508dc
...
...
@@ -96,7 +96,7 @@ void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigne
{
u32
dataFormat
[
12
]
=
{
0
};
u32
dataFormat_1
[
12
]
=
{
0
};
u8
tempU8
[
24
]
=
{
0
},
i
;
u8
tempU8
[
24
]
=
{
0
},
tempData
[
24
]
=
{
0
}
;
if
(
clen
)
{
while
(
clen
>=
aead_RATE
)
{
packU96FormatToThreePacket
(
dataFormat
,
c
);
...
...
@@ -123,12 +123,18 @@ void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigne
}
unpackU96FormatToThreePacket
(
tempU8
,
s
);
unpackU96FormatToThreePacket
(
tempU8
+
12
,
s
+
3
);
for
(
i
=
0
;
i
<
clen
;
++
i
,
++
m
,
++
c
)
{
*
m
=
tempU8
[
i
]
^
*
c
;
tempU8
[
i
]
=
*
c
;
}
tempU8
[
i
]
^=
0x01
;
memset
(
tempData
,
0
,
sizeof
(
tempData
));
memcpy
(
tempData
,
c
,
clen
*
sizeof
(
unsigned
char
));
tempData
[
clen
]
=
0x01
;
U32BIG
(((
u32
*
)
tempU8
)[
0
])
^=
U32BIG
(((
u32
*
)
tempData
)[
0
]);
U32BIG
(((
u32
*
)
tempU8
)[
1
])
^=
U32BIG
(((
u32
*
)
tempData
)[
1
]);
U32BIG
(((
u32
*
)
tempU8
)[
2
])
^=
U32BIG
(((
u32
*
)
tempData
)[
2
]);
U32BIG
(((
u32
*
)
tempU8
)[
3
])
^=
U32BIG
(((
u32
*
)
tempData
)[
3
]);
U32BIG
(((
u32
*
)
tempU8
)[
4
])
^=
U32BIG
(((
u32
*
)
tempData
)[
4
]);
U32BIG
(((
u32
*
)
tempU8
)[
5
])
^=
U32BIG
(((
u32
*
)
tempData
)[
5
]);
memcpy
(
m
,
tempU8
,
clen
*
sizeof
(
unsigned
char
));
memcpy
(
tempU8
,
tempData
,
clen
*
sizeof
(
unsigned
char
));
c
+=
clen
;
packU96FormatToThreePacket
(
s
,
tempU8
);
packU96FormatToThreePacket
(
s
+
3
,
tempU8
+
12
);
}
...
...
knot/Implementations/crypto_aead/knot128v2/armcortexm_3/auxFormat.h
View file @
727508dc
...
...
@@ -12,99 +12,6 @@ typedef unsigned long long u64;
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n))))
#define puckU32ToThree(x){\
x
&=
0x92492492
;
\
x
=
(
x
|
(
x
<<
2
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
<<
4
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
<<
8
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
<<
16
))
&
0xfff00000
;
\
}
#define unpuckU32ToThree(x){\
x
&=
0xfff00000
;
\
x
=
(
x
|
(
x
>>
16
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
>>
8
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
>>
4
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
>>
2
))
&
0x92492492
;
\
}
#define packU32FormatToThreePacket( out, in) {\
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
\
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
\
t2
=
t2
<<
2
;
\
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
\
puckU32ToThree
(
temp2
[
0
]);
\
puckU32ToThree
(
temp2
[
1
]);
\
puckU32ToThree
(
temp2
[
2
]);
\
out
[
0
]
=
(
temp2
[
0
]
>>
22
);
\
out
[
1
]
=
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
\
out
[
2
]
=
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
\
}
#define packU96FormatToThreePacket(out, in) {\
t9
=
U32BIG
(((
u32
*
)
in
)[
2
]);
\
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]);
\
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
\
t1_32
=
(
in
[
7
]
&
0x80
)
>>
7
,
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
\
t1
=
t1
<<
1
;
\
t2
=
t2
<<
2
;
\
temp0
[
0
]
=
t9
;
temp0
[
1
]
=
t9
<<
1
;
temp0
[
2
]
=
t9
<<
2
;
\
puckU32ToThree
(
temp0
[
0
]);
\
puckU32ToThree
(
temp0
[
1
]);
\
puckU32ToThree
(
temp0
[
2
]);
\
temp1
[
0
]
=
t1
;
temp1
[
1
]
=
t1
<<
1
;
temp1
[
2
]
=
t1
<<
2
;
\
puckU32ToThree
(
temp1
[
0
]);
\
puckU32ToThree
(
temp1
[
1
]);
\
puckU32ToThree
(
temp1
[
2
]);
\
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
\
puckU32ToThree
(
temp2
[
0
]);
\
puckU32ToThree
(
temp2
[
1
]);
\
puckU32ToThree
(
temp2
[
2
]);
\
out
[
0
]
=
(
temp0
[
0
])
|
(
temp1
[
0
]
>>
11
)
|
(
temp2
[
0
]
>>
22
);
\
out
[
1
]
=
(
temp0
[
1
])
|
(
temp1
[
1
]
>>
11
)
|
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
\
out
[
2
]
=
(
temp0
[
2
])
|
(((
u32
)
t1_32
)
<<
21
)
|
(
temp1
[
2
]
>>
11
)
|
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
\
}
#define unpackU32FormatToThreePacket(out, in) {\
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
\
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
\
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
\
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
\
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
\
unpuckU32ToThree
(
temp2
[
0
]);
\
unpuckU32ToThree
(
temp2
[
1
]);
\
unpuckU32ToThree
(
temp2
[
2
]);
\
t2
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
\
*
(
u32
*
)(
out
)
=
U32BIG
(
t2
);
\
}
#define unpackU96FormatToThreePacket( out, in) {\
temp0
[
0
]
=
in
[
0
]
&
0xffe00000
;
\
temp1
[
0
]
=
(
in
[
0
]
&
0x001ffc00
)
<<
11
;
\
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
\
temp0
[
1
]
=
in
[
1
]
&
0xffe00000
;
\
temp1
[
1
]
=
(
in
[
1
]
&
0x001ff800
)
<<
11
;
\
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
\
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
\
temp0
[
2
]
=
in
[
2
]
&
0xffc00000
;
\
t1_32
=
((
in
[
2
]
&
0x00200000
)
<<
10
);
\
temp1
[
2
]
=
(
in
[
2
]
&
0x001ff800
)
<<
11
;
\
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
\
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
\
unpuckU32ToThree
(
temp0
[
0
]);
\
unpuckU32ToThree
(
temp0
[
1
]);
\
unpuckU32ToThree
(
temp0
[
2
]);
\
t9
=
temp0
[
0
]
|
temp0
[
1
]
>>
1
|
temp0
[
2
]
>>
2
;
\
unpuckU32ToThree
(
temp1
[
0
]);
\
unpuckU32ToThree
(
temp1
[
1
]);
\
unpuckU32ToThree
(
temp1
[
2
]);
\
t1
=
t1_32
|
((
temp1
[
0
]
|
temp1
[
1
]
>>
1
|
temp1
[
2
]
>>
2
)
>>
1
);
\
unpuckU32ToThree
(
temp2
[
0
]);
\
unpuckU32ToThree
(
temp2
[
1
]);
\
unpuckU32ToThree
(
temp2
[
2
]);
\
t2
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
\
*
(
u32
*
)(
out
)
=
U32BIG
(
t2
);
\
*
(
u32
*
)(
out
+
4
)
=
U32BIG
(
t1
);
\
*
(
u32
*
)(
out
+
8
)
=
U32BIG
(
t9
);
\
}
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define sbox(a, b, c, d, f, g, h) \
{
\
t1
=
~
a
;
t2
=
b
&
t1
;
t3
=
c
^
t2
;
h
=
d
^
t3
;
t5
=
b
|
c
;
t6
=
d
^
t1
;
g
=
t5
^
t6
;
t8
=
b
^
d
;
t9
=
t3
&
t6
;
a
=
t8
^
t9
;
t11
=
g
&
t8
;
f
=
t3
^
t11
;
\
...
...
@@ -120,11 +27,86 @@ t3= LOTR32(t1, 18); \
t4
=
LOTR32
(
t2
,
18
);
\
t5
=
LOTR32
(
t0
,
19
);
\
}
/*
s0 s1 s2
s3 s4 s5
s6 s7 s8
s9 s10 s11
*/
#define ROUND384(lunNum) {\
s
[
0
]
^=
(
constant7Format
[
lunNum
]
>>
6
)
&
0x3
;
\
s
[
1
]
^=
(
constant7Format
[
lunNum
]
>>
3
)
&
0x7
;
\
s
[
2
]
^=
constant7Format
[
lunNum
]
&
0x7
;
\
sbox
(
s
[
0
],
s
[
3
],
s
[
6
],
s
[
9
]
,
s_temp
[
3
],
s_temp
[
6
],
s_temp
[
9
]);
\
sbox
(
s
[
1
],
s
[
4
],
s
[
7
],
s
[
10
],
s
[
3
]
,
s_temp
[
7
],
s_temp
[
10
]);
\
sbox
(
s
[
2
],
s
[
5
],
s
[
8
],
s
[
11
],
s
[
4
]
,
s_temp
[
8
],
s_temp
[
11
]);
\
s
[
5
]
=
LOTR32
(
s_temp
[
3
],
1
);
\
U96_BIT_LOTR32_8
(
s_temp
[
6
],
s_temp
[
7
],
s_temp
[
8
],
s
[
6
],
s
[
7
],
s
[
8
]);
\
U96_BIT_LOTR32_55
(
s_temp
[
9
],
s_temp
[
10
],
s_temp
[
11
],
s
[
9
],
s
[
10
],
s
[
11
]);
\
}
//Processing_Data:
#define Processing_Data(data) \
do
{
\
packU96FormatToThreePacket
(
dataFormat
,
data
);
\
s
[
0
]
^=
dataFormat
[
0
];
\
s
[
1
]
^=
dataFormat
[
1
];
\
s
[
2
]
^=
dataFormat
[
2
];
\
packU96FormatToThreePacket
((
dataFormat
+
3
),
(
data
+
12
));
\
s
[
3
]
^=
dataFormat
[
3
];
\
s
[
4
]
^=
dataFormat
[
4
];
\
s
[
5
]
^=
dataFormat
[
5
];
\
}
while
(
0
)
#define puckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
);
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
);
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
);
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
);
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
);
\
}
#define unpuckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
);
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
);
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
);
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
);
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
}
#define packU96FormatToThreePacket( out, in) { \
u32
t0
=
U32BIG
(((
u32
*
)
in
)[
0
]),
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]),
t2
=
U32BIG
(((
u32
*
)
in
)[
2
]);
\
puckU32ToThree_3
(
t0
);
\
puckU32ToThree_3
(
t1
);
\
puckU32ToThree_3
(
t2
);
\
out
[
0
]
=
((((
t2
>>
21
)
&
0x400
)
|
(((
t2
>>
18
)
&
0x300
))
|
((
t2
&
0xff00
)
>>
8
))
<<
21
)
|
\
((((
t1
>>
20
)
&
0x400
)
|
((
t1
>>
16
)
&
0x300
)
|
(
t1
&
0xff
))
<<
10
)
|
\
(((
t0
>>
20
)
&
0x300
)
|
((
t0
&
0xff0000
)
>>
16
));
\
out
[
1
]
=
((((
t2
>>
20
)
&
0x400
)
|
((
t2
>>
16
)
&
0x300
)
|
(
t2
&
0xff
))
<<
21
)
|
\
((((
t1
>>
20
)
&
0x300
)
|
((
t1
&
0xff0000
)
>>
16
))
<<
11
)
|
\
(((
t0
>>
21
)
&
0x400
)
|
((
t0
>>
18
)
&
0x300
)
|
((
t0
&
0xff00
)
>>
8
));
\
out
[
2
]
=
((((
t2
>>
20
)
&
0x300
)
|
((
t2
&
0xff0000
)
>>
16
))
<<
22
)
|
\
((((
t1
>>
21
)
&
0x400
)
|
((
t1
>>
18
)
&
0x300
)
|
((
t1
&
0xff00
)
>>
8
))
<<
11
)
|
\
(((
t0
>>
20
)
&
0x400
)
|
((
t0
>>
16
)
&
0x300
)
|
(
t0
&
0xff
));
\
}
#define unpackU96FormatToThreePacket( out, in) {\
u32
t
[
3
]
=
{
0
};
\
u32
t0
=
in
[
0
],
t1
=
in
[
1
],
t2
=
in
[
2
];
\
t
[
0
]
=
((
t1
&
0x400
)
<<
21
)
|
((
t2
&
0x400
)
<<
20
)
|
\
((
t0
&
0x300
)
<<
20
)
|
((
t1
&
0x300
)
<<
18
)
|
((
t2
&
0x300
)
<<
16
)
|
\
((
t0
&
0xff
)
<<
16
)
|
((
t1
&
0xff
)
<<
8
)
|
(
t2
&
0xff
);
\
t
[
1
]
=
((
t2
&
0x200000
)
<<
10
)
|
((
t0
&
0x100000
)
<<
10
)
|
((
t1
&
0x180000
)
<<
9
)
|
((
t2
&
0x180000
)
<<
7
)
|
\
((
t0
&
0xc0000
)
<<
6
)
|
((
t1
&
0x7f800
)
<<
5
)
|
((
t2
&
0x7f800
)
>>
3
)
|
\
((
t0
&
0x3fc00
)
>>
10
);
\
t
[
2
]
=
((
t0
&
0x80000000
))
|
((
t1
&
0x80000000
)
>>
1
)
|
((
t2
&
0xc0000000
)
>>
2
)
|
\
((
t0
&
0x60000000
)
>>
3
)
|
((
t1
&
0x60000000
)
>>
5
)
|
((
t2
&
0x3fc00000
)
>>
6
)
|
\
((
t0
&
0x1fe00000
)
>>
13
)
|
((
t1
&
0x1fe00000
)
>>
21
);
\
unpuckU32ToThree_3
(
t
[
0
]);
\
unpuckU32ToThree_3
(
t
[
1
]);
\
unpuckU32ToThree_3
(
t
[
2
]);
\
memcpy
(
out
,
t
,
12
*
sizeof
(
unsigned
char
));
\
}
knot/Implementations/crypto_aead/knot128v2/armcortexm_3/encrypt.c
View file @
727508dc
This diff is collapsed.
Click to expand it.
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.c
View file @
727508dc
#include"auxFormat.h"
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t0
=
U32BIG
(((
u32
*
)
in
)[
0
]),
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]),
t2
=
U32BIG
(((
u32
*
)
in
)[
2
]);
\
puckU32ToThree_3
(
t0
);
\
puckU32ToThree_3
(
t1
);
\
puckU32ToThree_3
(
t2
);
\
out
[
0
]
=
((((
t2
>>
21
)
&
0x400
)
|
(((
t2
>>
18
)
&
0x300
))
|
((
t2
&
0xff00
)
>>
8
))
<<
21
)
|
\
((((
t1
>>
20
)
&
0x400
)
|
((
t1
>>
16
)
&
0x300
)
|
(
t1
&
0xff
))
<<
10
)
|
\
(((
t0
>>
20
)
&
0x300
)
|
((
t0
&
0xff0000
)
>>
16
));
\
out
[
1
]
=
((((
t2
>>
20
)
&
0x400
)
|
((
t2
>>
16
)
&
0x300
)
|
(
t2
&
0xff
))
<<
21
)
|
\
((((
t1
>>
20
)
&
0x300
)
|
((
t1
&
0xff0000
)
>>
16
))
<<
11
)
|
\
(((
t0
>>
21
)
&
0x400
)
|
((
t0
>>
18
)
&
0x300
)
|
((
t0
&
0xff00
)
>>
8
));
\
out
[
2
]
=
((((
t2
>>
20
)
&
0x300
)
|
((
t2
&
0xff0000
)
>>
16
))
<<
22
)
|
\
((((
t1
>>
21
)
&
0x400
)
|
((
t1
>>
18
)
&
0x300
)
|
((
t1
&
0xff00
)
>>
8
))
<<
11
)
|
\
(((
t0
>>
20
)
&
0x400
)
|
((
t0
>>
16
)
&
0x300
)
|
(
t0
&
0xff
));
\
//puck begin//
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
temp0
[
3
]
=
{
0
};
u32
temp1
[
3
]
=
{
0
};
u32
temp2
[
3
]
=
{
0
};
u32
t1_32
,
t2_64
,
t2_65
;
u32
t
[
3
]
=
{
0
};
temp0
[
0
]
=
in
[
0
]
&
0xffe00000
;
temp1
[
0
]
=
(
in
[
0
]
&
0x001ffc00
)
<<
11
;
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
temp0
[
1
]
=
in
[
1
]
&
0xffe00000
;
temp1
[
1
]
=
(
in
[
1
]
&
0x001ff800
)
<<
11
;
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
temp0
[
2
]
=
in
[
2
]
&
0xffc00000
;
t1_32
=
((
in
[
2
]
&
0x00200000
)
<<
10
);
temp1
[
2
]
=
(
in
[
2
]
&
0x001ff800
)
<<
11
;
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
unpuckU32ToThree
(
temp0
[
0
]);
unpuckU32ToThree
(
temp0
[
1
]);
unpuckU32ToThree
(
temp0
[
2
]);
t
[
2
]
=
temp0
[
0
]
|
temp0
[
1
]
>>
1
|
temp0
[
2
]
>>
2
;
unpuckU32ToThree
(
temp1
[
0
]);
unpuckU32ToThree
(
temp1
[
1
]);
unpuckU32ToThree
(
temp1
[
2
]);
t
[
1
]
=
t1_32
|
((
temp1
[
0
]
|
temp1
[
1
]
>>
1
|
temp1
[
2
]
>>
2
)
>>
1
);
unpuckU32ToThree
(
temp2
[
0
]);
unpuckU32ToThree
(
temp2
[
1
]);
unpuckU32ToThree
(
temp2
[
2
]);
t
[
0
]
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
memcpy
(
out
,
t
,
12
*
sizeof
(
unsigned
char
));
}
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t0
=
U32BIG
(((
u32
*
)
in
)[
2
]);
u32
t1
=
U32BIG
(((
u32
*
)
in
)[
1
]);
u32
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
u32
temp0
[
3
]
=
{
0
};
u32
temp1
[
3
]
=
{
0
};
u32
temp2
[
3
]
=
{
0
};
u8
t1_32
=
(
in
[
7
]
&
0x80
)
>>
7
,
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
t1
=
t1
<<
1
;
t2
=
t2
<<
2
;
temp0
[
0
]
=
t0
;
temp0
[
1
]
=
t0
<<
1
;
temp0
[
2
]
=
t0
<<
2
;
puckU32ToThree
(
temp0
[
0
]);
puckU32ToThree
(
temp0
[
1
]);
puckU32ToThree
(
temp0
[
2
]);
temp1
[
0
]
=
t1
;
temp1
[
1
]
=
t1
<<
1
;
temp1
[
2
]
=
t1
<<
2
;
puckU32ToThree
(
temp1
[
0
]);
puckU32ToThree
(
temp1
[
1
]);
puckU32ToThree
(
temp1
[
2
]);
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
puckU32ToThree
(
temp2
[
0
]);
puckU32ToThree
(
temp2
[
1
]);
puckU32ToThree
(
temp2
[
2
]);
out
[
0
]
=
(
temp0
[
0
])
|
(
temp1
[
0
]
>>
11
)
|
(
temp2
[
0
]
>>
22
);
out
[
1
]
=
(
temp0
[
1
])
|
(
temp1
[
1
]
>>
11
)
|
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
out
[
2
]
=
(
temp0
[
2
])
|
(((
u32
)
t1_32
)
<<
21
)
|
(
temp1
[
2
]
>>
11
)
|
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
}
void
packU32FormatToThreePacket
(
u32
*
out
,
u8
*
in
)
{
u32
t2
=
U32BIG
(((
u32
*
)
in
)[
0
]);
u32
temp2
[
3
]
=
{
0
};
u8
t2_64
=
(
in
[
3
]
&
0x80
)
>>
7
,
t2_65
=
(
in
[
3
]
&
0x40
)
>>
6
;
t2
=
t2
<<
2
;
temp2
[
0
]
=
t2
;
temp2
[
1
]
=
t2
<<
1
;
temp2
[
2
]
=
t2
<<
2
;
puckU32ToThree
(
temp2
[
0
]);
puckU32ToThree
(
temp2
[
1
]);
puckU32ToThree
(
temp2
[
2
]);
out
[
0
]
=
(
temp2
[
0
]
>>
22
);
out
[
1
]
=
(((
u32
)
t2_64
)
<<
10
)
|
(
temp2
[
1
]
>>
22
);
out
[
2
]
=
(((
u32
)
t2_65
)
<<
10
)
|
(
temp2
[
2
]
>>
22
);
}
void
unpackU32FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
temp2
[
3
]
=
{
0
};
u32
t2_64
,
t2_65
;
u32
t2
;
temp2
[
0
]
=
(
in
[
0
]
&
0x000003ff
)
<<
22
;
t2_64
=
((
in
[
1
]
&
0x00000400
)
<<
21
);
temp2
[
1
]
=
(
in
[
1
]
&
0x000003ff
)
<<
22
;
t2_65
=
((
in
[
2
]
&
0x00000400
)
<<
20
);
temp2
[
2
]
=
(
in
[
2
]
&
0x000003ff
)
<<
22
;
unpuckU32ToThree
(
temp2
[
0
]);
unpuckU32ToThree
(
temp2
[
1
]);
unpuckU32ToThree
(
temp2
[
2
]);
t2
=
t2_65
|
t2_64
|
((
temp2
[
0
]
|
temp2
[
1
]
>>
1
|
temp2
[
2
]
>>
2
)
>>
2
);
*
(
u32
*
)(
out
)
=
U32BIG
(
t2
);
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
)
{
u32
t
[
3
]
=
{
0
}
;
\
u32
t0
=
in
[
0
],
t1
=
in
[
1
],
t2
=
in
[
2
];
\
t
[
0
]
=
((
t1
&
0x400
)
<<
21
)
|
((
t2
&
0x400
)
<<
20
)
|
\
((
t0
&
0x300
)
<<
20
)
|
((
t1
&
0x300
)
<<
18
)
|
((
t2
&
0x300
)
<<
16
)
|
\
((
t0
&
0xff
)
<<
16
)
|
((
t1
&
0xff
)
<<
8
)
|
(
t2
&
0xff
);
\
t
[
1
]
=
((
t2
&
0x200000
)
<<
10
)
|
((
t0
&
0x100000
)
<<
10
)
|
((
t1
&
0x180000
)
<<
9
)
|
((
t2
&
0x180000
)
<<
7
)
|
\
((
t0
&
0xc0000
)
<<
6
)
|
((
t1
&
0x7f800
)
<<
5
)
|
((
t2
&
0x7f800
)
>>
3
)
|
\
((
t0
&
0x3fc00
)
>>
10
);
\
t
[
2
]
=
((
t0
&
0x80000000
))
|
((
t1
&
0x80000000
)
>>
1
)
|
((
t2
&
0xc0000000
)
>>
2
)
|
\
((
t0
&
0x60000000
)
>>
3
)
|
((
t1
&
0x60000000
)
>>
5
)
|
((
t2
&
0x3fc00000
)
>>
6
)
|
\
((
t0
&
0x1fe00000
)
>>
13
)
|
((
t1
&
0x1fe00000
)
>>
21
);
\
unpuckU32ToThree_3
(
t
[
0
]);
\
unpuckU32ToThree_3
(
t
[
1
]);
\
unpuckU32ToThree_3
(
t
[
2
]);
\
memcpy
(
out
,
t
,
12
*
sizeof
(
unsigned
char
));
\
}
void
P384
(
unsigned
int
*
s
,
unsigned
char
*
round
,
unsigned
char
lunNum
)
{
u32
s_temp
[
12
]
=
{
0
};
...
...
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.h
View file @
727508dc
...
...
@@ -14,7 +14,14 @@ typedef unsigned long long u64;
#define PR0_ROUNDS 76
#define PR_ROUNDS 28
#define PRF_ROUNDS 32
/*
#define PR0_ROUNDS 76
#define PR_ROUNDS 40
#define PRF_ROUNDS 44
* */
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n))))
...
...
@@ -35,24 +42,26 @@ t4 = LOTR32(t2, 18);\
t5
=
LOTR32
(
t0
,
19
);
\
}
//////////////////puck begin
//&:5 <<:4 |:4
#define puckU32ToThree(x){\
x
&=
0x92492492
;
\
x
=
(
x
|
(
x
<<
2
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
<<
4
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
<<
8
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
<<
16
))
&
0xfff00000
;
\
}
#define unpuckU32ToThree(x){\
x
&=
0xfff00000
;
\
x
=
(
x
|
(
x
>>
16
))
&
0xff0000ff
;
\
x
=
(
x
|
(
x
>>
8
))
&
0xf00f00f0
;
\
x
=
(
x
|
(
x
>>
4
))
&
0xc30c30c3
;
\
x
=
(
x
|
(
x
>>
2
))
&
0x92492492
;
\
}
void
packU96FormatToThreePacket
(
u32
*
out
,
u8
*
in
);
void
unpackU96FormatToThreePacket
(
u8
*
out
,
u32
*
in
);
unsigned
char
constant7Format
[
80
];
#define puckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
);
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
);
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
);
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
);
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
);
\
}
#define unpuckU32ToThree_3(lo){\
u32
r0
;
\
r0
=
(
lo
^
(
lo
<<
12
))
&
0x000f0000
,
lo
^=
r0
^
(
r0
>>
12
);
\
r0
=
(
lo
^
(
lo
<<
4
))
&
0x000f0f00
,
lo
^=
r0
^
(
r0
>>
4
);
\
r0
=
(
lo
^
(
lo
<<
6
))
&
0x00300300
,
lo
^=
r0
^
(
r0
>>
6
);
\
r0
=
(
lo
^
(
lo
<<
2
))
&
0x00330330
,
lo
^=
r0
^
(
r0
>>
2
);
\
r0
=
(
lo
^
(
lo
<<
3
))
&
0x10410410
,
lo
^=
r0
^
(
r0
>>
3
);
\
r0
=
(
lo
^
(
lo
<<
1
))
&
0x14514514
,
lo
^=
r0
^
(
r0
>>
1
);
\
}
knot/Implementations/crypto_aead/knot128v2/armcortexm_4/encrypt.c
View file @
727508dc
...
...
@@ -96,7 +96,7 @@ void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigne
{
u32
dataFormat
[
12
]
=
{
0
};
u32
dataFormat_1
[
12
]
=
{
0
};
u8
tempU8
[
24
]
=
{
0
},
i
;
u8
tempU8
[
24
]
=
{
0
},
tempData
[
24
]
=
{
0
}
;
if
(
clen
)
{