Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
c41a3ca5
Commit
c41a3ca5
authored
Dec 29, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.6
into home.osdl.org:/home/torvalds/v2.5/linux
parents
7300a7e9
0bbe34be
Changes
26
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
2059 additions
and
4178 deletions
+2059
-4178
Documentation/networking/ip-sysctl.txt
Documentation/networking/ip-sysctl.txt
+19
-0
crypto/tcrypt.c
crypto/tcrypt.c
+408
-2331
crypto/tcrypt.h
crypto/tcrypt.h
+1350
-1709
include/linux/sysctl.h
include/linux/sysctl.h
+8
-0
include/net/ax25.h
include/net/ax25.h
+1
-2
include/net/pkt_cls.h
include/net/pkt_cls.h
+6
-1
net/ax25/af_ax25.c
net/ax25/af_ax25.c
+20
-35
net/ax25/ax25_in.c
net/ax25/ax25_in.c
+5
-8
net/bluetooth/af_bluetooth.c
net/bluetooth/af_bluetooth.c
+1
-0
net/bluetooth/bnep/core.c
net/bluetooth/bnep/core.c
+0
-1
net/bridge/br_netfilter.c
net/bridge/br_netfilter.c
+174
-35
net/core/neighbour.c
net/core/neighbour.c
+5
-5
net/ipv6/ndisc.c
net/ipv6/ndisc.c
+4
-6
net/netrom/af_netrom.c
net/netrom/af_netrom.c
+17
-5
net/netrom/nr_dev.c
net/netrom/nr_dev.c
+0
-1
net/packet/af_packet.c
net/packet/af_packet.c
+7
-0
net/rose/af_rose.c
net/rose/af_rose.c
+20
-18
net/sched/cls_api.c
net/sched/cls_api.c
+1
-4
net/sched/sch_atm.c
net/sched/sch_atm.c
+1
-1
net/sched/sch_cbq.c
net/sched/sch_cbq.c
+1
-1
net/sched/sch_csz.c
net/sched/sch_csz.c
+1
-1
net/sched/sch_dsmark.c
net/sched/sch_dsmark.c
+1
-1
net/sched/sch_htb.c
net/sched/sch_htb.c
+1
-1
net/sched/sch_ingress.c
net/sched/sch_ingress.c
+1
-1
net/sched/sch_prio.c
net/sched/sch_prio.c
+1
-1
net/sched/sch_tbf.c
net/sched/sch_tbf.c
+6
-10
No files found.
Documentation/networking/ip-sysctl.txt
View file @
c41a3ca5
...
...
@@ -678,4 +678,23 @@ IPv6 Update by:
Pekka Savola <pekkas@netcore.fi>
YOSHIFUJI Hideaki / USAGI Project <yoshfuji@linux-ipv6.org>
/proc/sys/net/bridge/* Variables:
bridge-nf-call-arptables - BOOLEAN
1 : pass bridged ARP traffic to arptables' FORWARD chain.
0 : disable this.
Default: 1
bridge-nf-call-iptables - BOOLEAN
1 : pass bridged IPv4 traffic to iptables' chains.
0 : disable this.
Default: 1
bridge-nf-filter-vlan-tagged - BOOLEAN
1 : pass bridged vlan-tagged ARP/IP traffic to arptables/iptables.
0 : disable this.
Default: 1
$Id: ip-sysctl.txt,v 1.20 2001/12/13 09:00:18 davem Exp $
crypto/tcrypt.c
View file @
c41a3ca5
...
...
@@ -12,2378 +12,403 @@
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* 14 - 09 - 2003
* Rewritten by Kartikey Mahendra Bhatt
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
#include <linux/string.h>
#include <linux/crypto.h>
#include <linux/highmem.h>
#include "tcrypt.h"
/*
* Need to kmalloc() memory for testing kmap().
*/
#define TVMEMSIZE 4096
#define XBUFSIZE 32768
/*
* Indexes into the xbuf to simulate cross-page access.
*/
#define IDX1 37
#define IDX2 32400
#define IDX3 1
#define IDX4 8193
#define IDX5 22222
#define IDX6 17101
#define IDX7 27333
#define IDX8 3000
static
int
mode
;
static
char
*
xbuf
;
static
char
*
tvmem
;
static
char
*
check
[]
=
{
"des"
,
"md5"
,
"des3_ede"
,
"rot13"
,
"sha1"
,
"sha256"
,
"blowfish"
,
"twofish"
,
"serpent"
,
"sha384"
,
"sha512"
,
"md4"
,
"aes"
,
"cast6"
,
"deflate"
,
NULL
};
static
void
hexdump
(
unsigned
char
*
buf
,
unsigned
int
len
)
{
while
(
len
--
)
printk
(
"%02x"
,
*
buf
++
);
printk
(
"
\n
"
);
}
static
void
test_md5
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
scatterlist
sg
[
2
];
char
result
[
128
];
struct
crypto_tfm
*
tfm
;
struct
md5_testvec
*
md5_tv
;
unsigned
int
tsize
;
printk
(
"
\n
testing md5
\n
"
);
tsize
=
sizeof
(
md5_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
md5_tv_template
,
tsize
);
md5_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"md5"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for md5
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
MD5_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
md5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
md5_tv
[
i
].
plaintext
);
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
md5_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing md5 across pages
\n
"
);
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
&
xbuf
[
IDX1
],
"abcdefghijklm"
,
13
);
memcpy
(
&
xbuf
[
IDX2
],
"nopqrstuvwxyz"
,
13
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
13
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
13
;
memset
(
result
,
0
,
sizeof
(
result
));
crypto_digest_digest
(
tfm
,
sg
,
2
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
md5_tv
[
4
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
crypto_free_tfm
(
tfm
);
}
#ifdef CONFIG_CRYPTO_HMAC
static
void
test_hmac_md5
(
void
)
{
char
*
p
;
unsigned
int
i
,
klen
;
struct
scatterlist
sg
[
2
];
char
result
[
128
];
struct
crypto_tfm
*
tfm
;
struct
hmac_md5_testvec
*
hmac_md5_tv
;
unsigned
int
tsize
;
tfm
=
crypto_alloc_tfm
(
"md5"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for md5
\n
"
);
return
;
}
printk
(
"
\n
testing hmac_md5
\n
"
);
tsize
=
sizeof
(
hmac_md5_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
hmac_md5_tv_template
,
tsize
);
hmac_md5_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
HMAC_MD5_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
hmac_md5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
hmac_md5_tv
[
i
].
plaintext
);
klen
=
strlen
(
hmac_md5_tv
[
i
].
key
);
crypto_hmac
(
tfm
,
hmac_md5_tv
[
i
].
key
,
&
klen
,
sg
,
1
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_md5_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing hmac_md5 across pages
\n
"
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
&
xbuf
[
IDX1
],
"what do ya want "
,
16
);
memcpy
(
&
xbuf
[
IDX2
],
"for nothing?"
,
12
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
16
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
12
;
memset
(
result
,
0
,
sizeof
(
result
));
klen
=
strlen
(
hmac_md5_tv
[
7
].
key
);
crypto_hmac
(
tfm
,
hmac_md5_tv
[
7
].
key
,
&
klen
,
sg
,
2
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_md5_tv
[
7
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
out:
crypto_free_tfm
(
tfm
);
}
static
void
test_hmac_sha1
(
void
)
{
char
*
p
;
unsigned
int
i
,
klen
;
struct
crypto_tfm
*
tfm
;
struct
hmac_sha1_testvec
*
hmac_sha1_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA1_DIGEST_SIZE
];
tfm
=
crypto_alloc_tfm
(
"sha1"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha1
\n
"
);
return
;
}
printk
(
"
\n
testing hmac_sha1
\n
"
);
tsize
=
sizeof
(
hmac_sha1_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
hmac_sha1_tv_template
,
tsize
);
hmac_sha1_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
HMAC_SHA1_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
hmac_sha1_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
hmac_sha1_tv
[
i
].
plaintext
);
klen
=
strlen
(
hmac_sha1_tv
[
i
].
key
);
crypto_hmac
(
tfm
,
hmac_sha1_tv
[
i
].
key
,
&
klen
,
sg
,
1
,
result
);
hexdump
(
result
,
sizeof
(
result
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_sha1_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing hmac_sha1 across pages
\n
"
);
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
&
xbuf
[
IDX1
],
"what do ya want "
,
16
);
memcpy
(
&
xbuf
[
IDX2
],
"for nothing?"
,
12
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
16
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
12
;
memset
(
result
,
0
,
sizeof
(
result
));
klen
=
strlen
(
hmac_sha1_tv
[
7
].
key
);
crypto_hmac
(
tfm
,
hmac_sha1_tv
[
7
].
key
,
&
klen
,
sg
,
2
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_sha1_tv
[
7
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
out:
crypto_free_tfm
(
tfm
);
}
static
void
test_hmac_sha256
(
void
)
{
char
*
p
;
unsigned
int
i
,
klen
;
struct
crypto_tfm
*
tfm
;
struct
hmac_sha256_testvec
*
hmac_sha256_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA256_DIGEST_SIZE
];
tfm
=
crypto_alloc_tfm
(
"sha256"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha256
\n
"
);
return
;
}
printk
(
"
\n
testing hmac_sha256
\n
"
);
tsize
=
sizeof
(
hmac_sha256_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
hmac_sha256_tv_template
,
tsize
);
hmac_sha256_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
HMAC_SHA256_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
hmac_sha256_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
hmac_sha256_tv
[
i
].
plaintext
);
klen
=
strlen
(
hmac_sha256_tv
[
i
].
key
);
hexdump
(
hmac_sha256_tv
[
i
].
key
,
strlen
(
hmac_sha256_tv
[
i
].
key
));
crypto_hmac
(
tfm
,
hmac_sha256_tv
[
i
].
key
,
&
klen
,
sg
,
1
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_sha256_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
#endif
/* CONFIG_CRYPTO_HMAC */
static
void
test_md4
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
scatterlist
sg
[
1
];
char
result
[
128
];
struct
crypto_tfm
*
tfm
;
struct
md4_testvec
*
md4_tv
;
unsigned
int
tsize
;
printk
(
"
\n
testing md4
\n
"
);
tsize
=
sizeof
(
md4_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
md4_tv_template
,
tsize
);
md4_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"md4"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for md4
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
MD4_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
md4_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
md4_tv
[
i
].
plaintext
);
crypto_digest_digest
(
tfm
,
sg
,
1
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
md4_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
}
static
void
test_sha1
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
crypto_tfm
*
tfm
;
struct
sha1_testvec
*
sha1_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA1_DIGEST_SIZE
];
printk
(
"
\n
testing sha1
\n
"
);
tsize
=
sizeof
(
sha1_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
sha1_tv_template
,
tsize
);
sha1_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"sha1"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha1
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
SHA1_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
sha1_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
sha1_tv
[
i
].
plaintext
);
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha1_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing sha1 across pages
\n
"
);
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
&
xbuf
[
IDX1
],
"abcdbcdecdefdefgefghfghighij"
,
28
);
memcpy
(
&
xbuf
[
IDX2
],
"hijkijkljklmklmnlmnomnopnopq"
,
28
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
28
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
28
;
memset
(
result
,
0
,
sizeof
(
result
));
crypto_digest_digest
(
tfm
,
sg
,
2
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha1_tv
[
1
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
crypto_free_tfm
(
tfm
);
}
static
void
test_sha256
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
crypto_tfm
*
tfm
;
struct
sha256_testvec
*
sha256_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA256_DIGEST_SIZE
];
printk
(
"
\n
testing sha256
\n
"
);
tsize
=
sizeof
(
sha256_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
sha256_tv_template
,
tsize
);
sha256_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"sha256"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha256
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
SHA256_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
sha256_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
sha256_tv
[
i
].
plaintext
);
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha256_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing sha256 across pages
\n
"
);
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
&
xbuf
[
IDX1
],
"abcdbcdecdefdefgefghfghighij"
,
28
);
memcpy
(
&
xbuf
[
IDX2
],
"hijkijkljklmklmnlmnomnopnopq"
,
28
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
28
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
28
;
memset
(
result
,
0
,
sizeof
(
result
));
crypto_digest_digest
(
tfm
,
sg
,
2
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha256_tv
[
1
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
crypto_free_tfm
(
tfm
);
}
static
void
test_sha384
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
crypto_tfm
*
tfm
;
struct
sha384_testvec
*
sha384_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA384_DIGEST_SIZE
];
printk
(
"
\n
testing sha384
\n
"
);
tsize
=
sizeof
(
sha384_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
sha384_tv_template
,
tsize
);
sha384_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"sha384"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha384
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
SHA384_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
sha384_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
sha384_tv
[
i
].
plaintext
);
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha384_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
}
static
void
test_sha512
(
void
)
{
char
*
p
;
unsigned
int
i
;
struct
crypto_tfm
*
tfm
;
struct
sha512_testvec
*
sha512_tv
;
struct
scatterlist
sg
[
2
];
unsigned
int
tsize
;
char
result
[
SHA512_DIGEST_SIZE
];
printk
(
"
\n
testing sha512
\n
"
);
tsize
=
sizeof
(
sha512_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
sha512_tv_template
,
tsize
);
sha512_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"sha512"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for sha512
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
SHA512_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
p
=
sha512_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
strlen
(
sha512_tv
[
i
].
plaintext
);
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
sha512_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
}
void
test_des
(
void
)
{
unsigned
int
ret
,
i
,
len
;
unsigned
int
tsize
;
char
*
p
,
*
q
;
struct
crypto_tfm
*
tfm
;
char
*
key
;
char
res
[
8
];
struct
des_tv
*
des_tv
;
struct
scatterlist
sg
[
8
];
printk
(
"
\n
testing des encryption
\n
"
);
tsize
=
sizeof
(
des_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des_enc_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"des"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for des (default ecb)
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
DES_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
|=
CRYPTO_TFM_REQ_WEAK_KEY
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
des_tv
[
i
].
fail
)
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
len
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing des ecb encryption across pages
\n
"
);
i
=
5
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
hexdump
(
key
,
8
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
memcpy
(
&
xbuf
[
IDX1
],
des_tv
[
i
].
plaintext
,
8
);
memcpy
(
&
xbuf
[
IDX2
],
des_tv
[
i
].
plaintext
+
8
,
8
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
8
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
8
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
16
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
8
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
8
,
8
)
?
"fail"
:
"pass"
);
printk
(
"
\n
testing des ecb encryption chunking scenario A
\n
"
);
/*
* Scenario A:
*
* F1 F2 F3
* [8 + 6] [2 + 8] [8]
* ^^^^^^ ^
* a b c
*
* Chunking should begin at a, then end with b, and
* continue encrypting at an offset of 2 until c.
*
*/
i
=
7
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
/* Frag 1: 8 + 6 */
memcpy
(
&
xbuf
[
IDX3
],
des_tv
[
i
].
plaintext
,
14
);
/* Frag 2: 2 + 8 */
memcpy
(
&
xbuf
[
IDX4
],
des_tv
[
i
].
plaintext
+
14
,
10
);
/* Frag 3: 8 */
memcpy
(
&
xbuf
[
IDX5
],
des_tv
[
i
].
plaintext
+
24
,
8
);
p
=
&
xbuf
[
IDX3
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
14
;
p
=
&
xbuf
[
IDX4
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
10
;
p
=
&
xbuf
[
IDX5
];
sg
[
2
].
page
=
virt_to_page
(
p
);
sg
[
2
].
offset
=
offset_in_page
(
p
);
sg
[
2
].
length
=
8
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
32
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
14
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
14
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
10
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
14
,
10
)
?
"fail"
:
"pass"
);
printk
(
"page 3
\n
"
);
q
=
kmap
(
sg
[
2
].
page
)
+
sg
[
2
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
24
,
8
)
?
"fail"
:
"pass"
);
printk
(
"
\n
testing des ecb encryption chunking scenario B
\n
"
);
/*
* Scenario B:
*
* F1 F2 F3 F4
* [2] [1] [3] [2 + 8 + 8]
*/
i
=
7
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
/* Frag 1: 2 */
memcpy
(
&
xbuf
[
IDX3
],
des_tv
[
i
].
plaintext
,
2
);
/* Frag 2: 1 */
memcpy
(
&
xbuf
[
IDX4
],
des_tv
[
i
].
plaintext
+
2
,
1
);
/* Frag 3: 3 */
memcpy
(
&
xbuf
[
IDX5
],
des_tv
[
i
].
plaintext
+
3
,
3
);
/* Frag 4: 2 + 8 + 8 */
memcpy
(
&
xbuf
[
IDX6
],
des_tv
[
i
].
plaintext
+
6
,
18
);
p
=
&
xbuf
[
IDX3
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
2
;
p
=
&
xbuf
[
IDX4
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
1
;
p
=
&
xbuf
[
IDX5
];
sg
[
2
].
page
=
virt_to_page
(
p
);
sg
[
2
].
offset
=
offset_in_page
(
p
);
sg
[
2
].
length
=
3
;
p
=
&
xbuf
[
IDX6
];
sg
[
3
].
page
=
virt_to_page
(
p
);
sg
[
3
].
offset
=
offset_in_page
(
p
);
sg
[
3
].
length
=
18
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
24
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
2
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
2
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
1
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
2
,
1
)
?
"fail"
:
"pass"
);
printk
(
"page 3
\n
"
);
q
=
kmap
(
sg
[
2
].
page
)
+
sg
[
2
].
offset
;
hexdump
(
q
,
3
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
3
,
3
)
?
"fail"
:
"pass"
);
printk
(
"page 4
\n
"
);
q
=
kmap
(
sg
[
3
].
page
)
+
sg
[
3
].
offset
;
hexdump
(
q
,
18
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
6
,
18
)
?
"fail"
:
"pass"
);
printk
(
"
\n
testing des ecb encryption chunking scenario C
\n
"
);
/*
* Scenario B:
*
* F1 F2 F3 F4 F5
* [2] [2] [2] [2] [8]
*/
i
=
7
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
/* Frag 1: 2 */
memcpy
(
&
xbuf
[
IDX3
],
des_tv
[
i
].
plaintext
,
2
);
/* Frag 2: 2 */
memcpy
(
&
xbuf
[
IDX4
],
des_tv
[
i
].
plaintext
+
2
,
2
);
/* Frag 3: 2 */
memcpy
(
&
xbuf
[
IDX5
],
des_tv
[
i
].
plaintext
+
4
,
2
);
/* Frag 4: 2 */
memcpy
(
&
xbuf
[
IDX6
],
des_tv
[
i
].
plaintext
+
6
,
2
);
/* Frag 5: 8 */
memcpy
(
&
xbuf
[
IDX7
],
des_tv
[
i
].
plaintext
+
8
,
8
);
p
=
&
xbuf
[
IDX3
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
2
;
p
=
&
xbuf
[
IDX4
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
2
;
p
=
&
xbuf
[
IDX5
];
sg
[
2
].
page
=
virt_to_page
(
p
);
sg
[
2
].
offset
=
offset_in_page
(
p
);
sg
[
2
].
length
=
2
;
p
=
&
xbuf
[
IDX6
];
sg
[
3
].
page
=
virt_to_page
(
p
);
sg
[
3
].
offset
=
offset_in_page
(
p
);
sg
[
3
].
length
=
2
;
p
=
&
xbuf
[
IDX7
];
sg
[
4
].
page
=
virt_to_page
(
p
);
sg
[
4
].
offset
=
offset_in_page
(
p
);
sg
[
4
].
length
=
8
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
16
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
2
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
2
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
2
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
2
,
2
)
?
"fail"
:
"pass"
);
printk
(
"page 3
\n
"
);
q
=
kmap
(
sg
[
2
].
page
)
+
sg
[
2
].
offset
;
hexdump
(
q
,
2
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
4
,
2
)
?
"fail"
:
"pass"
);
printk
(
"page 4
\n
"
);
q
=
kmap
(
sg
[
3
].
page
)
+
sg
[
3
].
offset
;
hexdump
(
q
,
2
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
6
,
2
)
?
"fail"
:
"pass"
);
printk
(
"page 5
\n
"
);
q
=
kmap
(
sg
[
4
].
page
)
+
sg
[
4
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
8
,
8
)
?
"fail"
:
"pass"
);
printk
(
"
\n
testing des ecb encryption chunking scenario D
\n
"
);
/*
* Scenario D, torture test, one byte per frag.
*/
i
=
7
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
xbuf
[
IDX1
]
=
des_tv
[
i
].
plaintext
[
0
];
xbuf
[
IDX2
]
=
des_tv
[
i
].
plaintext
[
1
];
xbuf
[
IDX3
]
=
des_tv
[
i
].
plaintext
[
2
];
xbuf
[
IDX4
]
=
des_tv
[
i
].
plaintext
[
3
];
xbuf
[
IDX5
]
=
des_tv
[
i
].
plaintext
[
4
];
xbuf
[
IDX6
]
=
des_tv
[
i
].
plaintext
[
5
];
xbuf
[
IDX7
]
=
des_tv
[
i
].
plaintext
[
6
];
xbuf
[
IDX8
]
=
des_tv
[
i
].
plaintext
[
7
];
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
1
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
1
;
p
=
&
xbuf
[
IDX3
];
sg
[
2
].
page
=
virt_to_page
(
p
);
sg
[
2
].
offset
=
offset_in_page
(
p
);
sg
[
2
].
length
=
1
;
p
=
&
xbuf
[
IDX4
];
sg
[
3
].
page
=
virt_to_page
(
p
);
sg
[
3
].
offset
=
offset_in_page
(
p
);
sg
[
3
].
length
=
1
;
p
=
&
xbuf
[
IDX5
];
sg
[
4
].
page
=
virt_to_page
(
p
);
sg
[
4
].
offset
=
offset_in_page
(
p
);
sg
[
4
].
length
=
1
;
p
=
&
xbuf
[
IDX6
];
sg
[
5
].
page
=
virt_to_page
(
p
);
sg
[
5
].
offset
=
offset_in_page
(
p
);
sg
[
5
].
length
=
1
;
p
=
&
xbuf
[
IDX7
];
sg
[
6
].
page
=
virt_to_page
(
p
);
sg
[
6
].
offset
=
offset_in_page
(
p
);
sg
[
6
].
length
=
1
;
p
=
&
xbuf
[
IDX8
];
sg
[
7
].
page
=
virt_to_page
(
p
);
sg
[
7
].
offset
=
offset_in_page
(
p
);
sg
[
7
].
length
=
1
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
8
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
for
(
i
=
0
;
i
<
8
;
i
++
)
res
[
i
]
=
*
(
char
*
)
(
kmap
(
sg
[
i
].
page
)
+
sg
[
i
].
offset
);
hexdump
(
res
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
res
,
des_tv
[
7
].
result
,
8
)
?
"fail"
:
"pass"
);
printk
(
"
\n
testing des decryption
\n
"
);
tsize
=
sizeof
(
des_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des_dec_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
DES_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"des_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing des ecb decryption across pages
\n
"
);
i
=
6
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
memcpy
(
&
xbuf
[
IDX1
],
des_tv
[
i
].
plaintext
,
8
);
memcpy
(
&
xbuf
[
IDX2
],
des_tv
[
i
].
plaintext
+
8
,
8
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
8
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
8
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
16
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
8
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
8
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
8
,
8
)
?
"fail"
:
"pass"
);
/*
* Scenario E:
*
* F1 F2 F3
* [3] [5 + 7] [1]
*
*/
printk
(
"
\n
testing des ecb decryption chunking scenario E
\n
"
);
i
=
2
;
key
=
des_tv
[
i
].
key
;
tfm
->
crt_flags
=
0
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
memcpy
(
&
xbuf
[
IDX1
],
des_tv
[
i
].
plaintext
,
3
);
memcpy
(
&
xbuf
[
IDX2
],
des_tv
[
i
].
plaintext
+
3
,
12
);
memcpy
(
&
xbuf
[
IDX3
],
des_tv
[
i
].
plaintext
+
15
,
1
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
3
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
12
;
p
=
&
xbuf
[
IDX3
];
sg
[
2
].
page
=
virt_to_page
(
p
);
sg
[
2
].
offset
=
offset_in_page
(
p
);
sg
[
2
].
length
=
1
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
16
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
3
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
3
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
12
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
3
,
12
)
?
"fail"
:
"pass"
);
printk
(
"page 3
\n
"
);
q
=
kmap
(
sg
[
2
].
page
)
+
sg
[
2
].
offset
;
hexdump
(
q
,
1
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
15
,
1
)
?
"fail"
:
"pass"
);
crypto_free_tfm
(
tfm
);
tfm
=
crypto_alloc_tfm
(
"des"
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for des cbc
\n
"
);
return
;
}
printk
(
"
\n
testing des cbc encryption
\n
"
);
tsize
=
sizeof
(
des_cbc_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des_cbc_enc_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
crypto_cipher_set_iv
(
tfm
,
des_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
crypto_cipher_get_iv
(
tfm
,
res
,
crypto_tfm_alg_ivsize
(
tfm
));
if
(
memcmp
(
res
,
des_tv
[
i
].
iv
,
sizeof
(
res
)))
{
printk
(
"crypto_cipher_[set|get]_iv() failed
\n
"
);
goto
out
;
}
for
(
i
=
0
;
i
<
DES_CBC_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
crypto_cipher_set_iv
(
tfm
,
des_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
len
);
if
(
ret
)
{
printk
(
"des_cbc_encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
/*
* Scenario F:
*
* F1 F2
* [8 + 5] [3 + 8]
*
*/
printk
(
"
\n
testing des cbc encryption chunking scenario F
\n
"
);
i
=
4
;
tfm
=
crypto_alloc_tfm
(
"des"
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for CRYPTO_ALG_DES_CCB
\n
"
);
return
;
}
tfm
->
crt_flags
=
0
;
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
memcpy
(
&
xbuf
[
IDX1
],
des_tv
[
i
].
plaintext
,
13
);
memcpy
(
&
xbuf
[
IDX2
],
des_tv
[
i
].
plaintext
+
13
,
11
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
13
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
11
;
crypto_cipher_set_iv
(
tfm
,
des_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
24
);
if
(
ret
)
{
printk
(
"des_cbc_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
13
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
13
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
11
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
13
,
11
)
?
"fail"
:
"pass"
);
tsize
=
sizeof
(
des_cbc_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des_cbc_dec_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
printk
(
"
\n
testing des cbc decryption
\n
"
);
for
(
i
=
0
;
i
<
DES_CBC_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
tfm
->
crt_flags
=
0
;
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
crypto_cipher_set_iv
(
tfm
,
des_tv
[
i
].
iv
,
crypto_tfm_alg_blocksize
(
tfm
));
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
len
);
if
(
ret
)
{
printk
(
"des_cbc_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
hexdump
(
tfm
->
crt_cipher
.
cit_iv
,
8
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
/*
* Scenario G:
*
* F1 F2
* [4] [4]
*
*/
printk
(
"
\n
testing des cbc decryption chunking scenario G
\n
"
);
i
=
3
;
tfm
->
crt_flags
=
0
;
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
8
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
sizeof
(
xbuf
));
memcpy
(
&
xbuf
[
IDX1
],
des_tv
[
i
].
plaintext
,
4
);
memcpy
(
&
xbuf
[
IDX2
],
des_tv
[
i
].
plaintext
+
4
,
4
);
p
=
&
xbuf
[
IDX1
];
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
4
;
p
=
&
xbuf
[
IDX2
];
sg
[
1
].
page
=
virt_to_page
(
p
);
sg
[
1
].
offset
=
offset_in_page
(
p
);
sg
[
1
].
length
=
4
;
crypto_cipher_set_iv
(
tfm
,
des_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
8
);
if
(
ret
)
{
printk
(
"des_cbc_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
printk
(
"page 1
\n
"
);
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
4
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
4
)
?
"fail"
:
"pass"
);
printk
(
"page 2
\n
"
);
q
=
kmap
(
sg
[
1
].
page
)
+
sg
[
1
].
offset
;
hexdump
(
q
,
4
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
+
4
,
4
)
?
"fail"
:
"pass"
);
out:
crypto_free_tfm
(
tfm
);
}
void
test_des3_ede
(
void
)
{
unsigned
int
ret
,
i
,
len
;
unsigned
int
tsize
;
char
*
p
,
*
q
;
struct
crypto_tfm
*
tfm
;
char
*
key
;
/*char res[8]; */
struct
des_tv
*
des_tv
;
struct
scatterlist
sg
[
8
];
printk
(
"
\n
testing des3 ede encryption
\n
"
);
tsize
=
sizeof
(
des3_ede_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des3_ede_enc_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"des3_ede"
,
CRYPTO_TFM_MODE_ECB
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for 3des ecb
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
DES3_EDE_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
24
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
des_tv
[
i
].
fail
)
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
len
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing des3 ede decryption
\n
"
);
tsize
=
sizeof
(
des3_ede_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
des3_ede_dec_tv_template
,
tsize
);
des_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
DES3_EDE_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
key
=
des_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
24
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
des_tv
[
i
].
fail
)
goto
out
;
}
len
=
des_tv
[
i
].
len
;
p
=
des_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
len
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
len
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
len
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
des_tv
[
i
].
result
,
len
)
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
void
test_blowfish
(
void
)
{
unsigned
int
ret
,
i
;
unsigned
int
tsize
;
char
*
p
,
*
q
;
struct
crypto_tfm
*
tfm
;
char
*
key
;
struct
bf_tv
*
bf_tv
;
struct
scatterlist
sg
[
1
];
printk
(
"
\n
testing blowfish encryption
\n
"
);
tsize
=
sizeof
(
bf_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
bf_enc_tv_template
,
tsize
);
bf_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"blowfish"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for blowfish (default ecb)
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
BF_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
bf_tv
[
i
].
keylen
*
8
);
key
=
bf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
bf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
bf_tv
[
i
].
fail
)
goto
out
;
}
p
=
bf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
bf_tv
[
i
].
plen
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
bf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
bf_tv
[
i
].
result
,
bf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing blowfish decryption
\n
"
);
tsize
=
sizeof
(
bf_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
bf_dec_tv_template
,
tsize
);
bf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
BF_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
bf_tv
[
i
].
keylen
*
8
);
key
=
bf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
bf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
bf_tv
[
i
].
fail
)
goto
out
;
}
p
=
bf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
bf_tv
[
i
].
plen
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
bf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
bf_tv
[
i
].
result
,
bf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
tfm
=
crypto_alloc_tfm
(
"blowfish"
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for blowfish cbc
\n
"
);
return
;
}
printk
(
"
\n
testing blowfish cbc encryption
\n
"
);
tsize
=
sizeof
(
bf_cbc_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
bf_cbc_enc_tv_template
,
tsize
);
bf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
BF_CBC_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
bf_tv
[
i
].
keylen
*
8
);
key
=
bf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
bf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
p
=
bf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
bf_tv
[
i
].
plen
;
crypto_cipher_set_iv
(
tfm
,
bf_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"blowfish_cbc_encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
bf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
bf_tv
[
i
].
result
,
bf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing blowfish cbc decryption
\n
"
);
tsize
=
sizeof
(
bf_cbc_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
bf_cbc_dec_tv_template
,
tsize
);
bf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
BF_CBC_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
bf_tv
[
i
].
keylen
*
8
);
key
=
bf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
bf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
p
=
bf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
bf_tv
[
i
].
plen
;
crypto_cipher_set_iv
(
tfm
,
bf_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"blowfish_cbc_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
bf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
bf_tv
[
i
].
result
,
bf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
void
test_twofish
(
void
)
{
unsigned
int
ret
,
i
;
unsigned
int
tsize
;
char
*
p
,
*
q
;
struct
crypto_tfm
*
tfm
;
char
*
key
;
struct
tf_tv
*
tf_tv
;
struct
scatterlist
sg
[
1
];
printk
(
"
\n
testing twofish encryption
\n
"
);
tsize
=
sizeof
(
tf_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
tf_enc_tv_template
,
tsize
);
tf_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"twofish"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for blowfish (default ecb)
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
TF_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
tf_tv
[
i
].
keylen
*
8
);
key
=
tf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
tf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
tf_tv
[
i
].
fail
)
goto
out
;
}
p
=
tf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
tf_tv
[
i
].
plen
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
tf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
tf_tv
[
i
].
result
,
tf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing twofish decryption
\n
"
);
tsize
=
sizeof
(
tf_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
tf_dec_tv_template
,
tsize
);
tf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
TF_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
tf_tv
[
i
].
keylen
*
8
);
key
=
tf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
tf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
tf_tv
[
i
].
fail
)
goto
out
;
}
p
=
tf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
tf_tv
[
i
].
plen
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
tf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
tf_tv
[
i
].
result
,
tf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
crypto_free_tfm
(
tfm
);
tfm
=
crypto_alloc_tfm
(
"twofish"
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for twofish cbc
\n
"
);
return
;
}
printk
(
"
\n
testing twofish cbc encryption
\n
"
);
tsize
=
sizeof
(
tf_cbc_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
tf_cbc_enc_tv_template
,
tsize
);
tf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
TF_CBC_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
tf_tv
[
i
].
keylen
*
8
);
key
=
tf_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
tf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
p
=
tf_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
tf_tv
[
i
].
plen
;
crypto_cipher_set_iv
(
tfm
,
tf_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"blowfish_cbc_encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
tf_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
tf_tv
[
i
].
result
,
tf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
printk
(
"
\n
testing twofish cbc decryption
\n
"
);
tsize
=
sizeof
(
tf_cbc_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
goto
out
;
}
memcpy
(
tvmem
,
tf_cbc_dec_tv_template
,
tsize
);
tf_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
TF_CBC_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
tf_tv
[
i
].
keylen
*
8
);
key
=
tf_tv
[
i
].
key
;
#include <linux/init.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
#include <linux/string.h>
#include <linux/crypto.h>
#include <linux/highmem.h>
#include "tcrypt.h"
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
tf_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
/*
* Need to kmalloc() memory for testing kmap().
*/
#define TVMEMSIZE 4096
#define XBUFSIZE 32768
p
=
tf_tv
[
i
].
plaintext
;
/*
* Indexes into the xbuf to simulate cross-page access.
*/
#define IDX1 37
#define IDX2 32400
#define IDX3 1
#define IDX4 8193
#define IDX5 22222
#define IDX6 17101
#define IDX7 27333
#define IDX8 3000
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
tf_tv
[
i
].
plen
;
/*
* Used by test_cipher()
*/
#define ENCRYPT 1
#define DECRYPT 0
#define MODE_ECB 1
#define MODE_CBC 0
crypto_cipher_set_iv
(
tfm
,
tf_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
static
unsigned
int
IDX
[
8
]
=
{
IDX1
,
IDX2
,
IDX3
,
IDX4
,
IDX5
,
IDX6
,
IDX7
,
IDX8
};
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"blowfish_cbc_decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
static
int
mode
;
static
char
*
xbuf
;
static
char
*
tvmem
;
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
tf_tv
[
i
].
rlen
);
static
char
*
check
[]
=
{
"des"
,
"md5"
,
"des3_ede"
,
"rot13"
,
"sha1"
,
"sha256"
,
"blowfish"
,
"twofish"
,
"serpent"
,
"sha384"
,
"sha512"
,
"md4"
,
"aes"
,
"cast6"
,
"deflate"
,
NULL
};
printk
(
"%s
\n
"
,
memcmp
(
q
,
tf_tv
[
i
].
result
,
tf_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
static
void
hexdump
(
unsigned
char
*
buf
,
unsigned
int
len
)
{
while
(
len
--
)
printk
(
"%02x"
,
*
buf
++
);
out:
crypto_free_tfm
(
tfm
);
printk
(
"
\n
"
);
}
void
test_
serpent
(
void
)
static
void
test_
hash
(
char
*
algo
,
struct
hash_testvec
*
template
,
unsigned
int
tcount
)
{
unsigned
int
ret
,
i
,
tsize
;
u8
*
p
,
*
q
,
*
key
;
char
*
p
;
unsigned
int
i
,
j
,
k
,
temp
;
struct
scatterlist
sg
[
8
];
char
result
[
64
];
struct
crypto_tfm
*
tfm
;
struct
serpent_tv
*
serp
_tv
;
struct
scatterlist
sg
[
1
]
;
struct
hash_testvec
*
hash
_tv
;
unsigned
int
tsize
;
printk
(
"
\n
testing serpent encryption
\n
"
);
printk
(
"
\n
testing %s
\n
"
,
algo
);
tfm
=
crypto_alloc_tfm
(
"serpent"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for serpent (default ecb)
\n
"
);
tsize
=
sizeof
(
struct
hash_testvec
);
tsize
*=
tcount
;
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
tsize
=
sizeof
(
serpent_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
memcpy
(
tvmem
,
template
,
tsize
);
hash_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for %s
\n
"
,
algo
);
return
;
}
memcpy
(
tvmem
,
serpent_enc_tv_template
,
tsize
);
serp_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
SERPENT_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
serp_tv
[
i
].
keylen
*
8
);
key
=
serp_tv
[
i
].
key
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
64
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
serp_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
p
=
hash_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
hash_tv
[
i
].
psize
;
if
(
!
serp_tv
[
i
].
fail
)
goto
out
;
}
crypto_digest_init
(
tfm
);
crypto_digest_update
(
tfm
,
sg
,
1
)
;
crypto_digest_final
(
tfm
,
result
);
p
=
serp_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
sizeof
(
serp_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
serp_tv
[
i
].
result
));
printk
(
"testing %s across pages
\n
"
,
algo
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
serp_tv
[
i
].
result
,
sizeof
(
serp_tv
[
i
].
result
))
?
"fail"
:
"pass"
);
}
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
printk
(
"
\n
testing serpent decryption
\n
"
);
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
hash_tv
[
i
].
np
)
{
j
++
;
printk
(
"test %u:
\n
"
,
j
);
memset
(
result
,
0
,
64
);
tsize
=
sizeof
(
serpent_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
temp
=
0
;
for
(
k
=
0
;
k
<
hash_tv
[
i
].
np
;
k
++
)
{
memcpy
(
&
xbuf
[
IDX
[
k
]],
hash_tv
[
i
].
plaintext
+
temp
,
hash_tv
[
i
].
tap
[
k
]);
temp
+=
hash_tv
[
i
].
tap
[
k
];
p
=
&
xbuf
[
IDX
[
k
]];
sg
[
k
].
page
=
virt_to_page
(
p
);
sg
[
k
].
offset
=
offset_in_page
(
p
);
sg
[
k
].
length
=
hash_tv
[
i
].
tap
[
k
];
}
memcpy
(
tvmem
,
serpent_dec_tv_template
,
tsize
);
serp_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
SERPENT_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
serp_tv
[
i
].
keylen
*
8
);
key
=
serp_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
serp_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
crypto_digest_digest
(
tfm
,
sg
,
hash_tv
[
i
].
np
,
result
);
if
(
!
serp_tv
[
i
].
fail
)
goto
out
;
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
p
=
serp_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
sizeof
(
serp_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
serp_tv
[
i
].
result
));
crypto_free_tfm
(
tfm
)
;
}
printk
(
"%s
\n
"
,
memcmp
(
q
,
serp_tv
[
i
].
result
,
sizeof
(
serp_tv
[
i
].
result
))
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
#ifdef CONFIG_CRYPTO_HMAC
static
void
test_
cast6
(
void
)
test_
hmac
(
char
*
algo
,
struct
hmac_testvec
*
template
,
unsigned
int
tcount
)
{
unsigned
int
ret
,
i
,
tsize
;
u8
*
p
,
*
q
,
*
key
;
char
*
p
;
unsigned
int
i
,
j
,
k
,
temp
;
struct
scatterlist
sg
[
8
];
char
result
[
64
];
struct
crypto_tfm
*
tfm
;
struct
cast6_tv
*
cast_tv
;
struct
scatterlist
sg
[
1
];
printk
(
"
\n
testing cast6 encryption
\n
"
);
struct
hmac_testvec
*
hmac_tv
;
unsigned
int
tsize
,
klen
;
tfm
=
crypto_alloc_tfm
(
"cast6"
,
0
);
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for
cast6 (default ecb)
\n
"
);
printk
(
"failed to load transform for
%s
\n
"
,
algo
);
return
;
}
tsize
=
sizeof
(
cast6_enc_tv_template
);
printk
(
"
\n
testing hmac_%s
\n
"
,
algo
);
tsize
=
sizeof
(
struct
hmac_testvec
);
tsize
*=
tcount
;
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
cast6_enc_tv_template
,
tsize
);
cast_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST6_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
cast_tv
[
i
].
keylen
*
8
);
key
=
cast_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
cast_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
cast_tv
[
i
].
fail
)
goto
out
;
}
p
=
cast_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
cast_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
memcpy
(
tvmem
,
template
,
tsize
);
hmac_tv
=
(
void
*
)
tvmem
;
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
cast_tv
[
i
].
result
));
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
cast_tv
[
i
].
result
,
sizeof
(
cast_tv
[
i
].
result
))
?
"fail"
:
"pass"
);
}
p
=
hmac_tv
[
i
].
plaintext
;
klen
=
hmac_tv
[
i
].
ksize
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
hmac_tv
[
i
].
psize
;
printk
(
"
\n
testing cast6 decryption
\n
"
);
crypto_hmac
(
tfm
,
hmac_tv
[
i
].
key
,
&
klen
,
sg
,
1
,
result
);
tsize
=
sizeof
(
cast6_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
)
);
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
)
;
}
memcpy
(
tvmem
,
cast6_dec_tv_template
,
tsize
);
cast_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST6_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
cast_tv
[
i
].
keylen
*
8
);
key
=
cast_tv
[
i
].
key
;
printk
(
"
\n
testing hmac_%s across pages
\n
"
,
algo
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
cast_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
if
(
!
cast_tv
[
i
].
fail
)
goto
out
;
}
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
hmac_tv
[
i
].
np
)
{
j
++
;
printk
(
"test %u:
\n
"
,
j
);
memset
(
result
,
0
,
64
);
temp
=
0
;
klen
=
hmac_tv
[
i
].
ksize
;
for
(
k
=
0
;
k
<
hmac_tv
[
i
].
np
;
k
++
)
{
memcpy
(
&
xbuf
[
IDX
[
k
]],
hmac_tv
[
i
].
plaintext
+
temp
,
hmac_tv
[
i
].
tap
[
k
]);
temp
+=
hmac_tv
[
i
].
tap
[
k
];
p
=
&
xbuf
[
IDX
[
k
]];
sg
[
k
].
page
=
virt_to_page
(
p
);
sg
[
k
].
offset
=
offset_in_page
(
p
);
sg
[
k
].
length
=
hmac_tv
[
i
].
tap
[
k
];
}
crypto_hmac
(
tfm
,
hmac_tv
[
i
].
key
,
&
klen
,
sg
,
hmac_tv
[
i
].
np
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
p
=
cast_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
cast_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
cast_tv
[
i
].
result
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
cast_tv
[
i
].
result
,
sizeof
(
cast_tv
[
i
].
result
))
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
#endif
/* CONFIG_CRYPTO_HMAC */
void
test_
aes
(
void
)
test_
cipher
(
char
*
algo
,
int
mode
,
int
enc
,
struct
cipher_testvec
*
template
,
unsigned
int
tcount
)
{
unsigned
int
ret
,
i
;
unsigned
int
ret
,
i
,
j
,
k
,
temp
;
unsigned
int
tsize
;
char
*
p
,
*
q
;
struct
crypto_tfm
*
tfm
;
char
*
key
;
struct
aes_tv
*
aes_tv
;
struct
scatterlist
sg
[
1
];
struct
cipher_testvec
*
cipher_tv
;
struct
scatterlist
sg
[
8
];
char
e
[
11
],
m
[
4
];
if
(
enc
==
ENCRYPT
)
strncpy
(
e
,
"encryption"
,
11
);
else
strncpy
(
e
,
"decryption"
,
11
);
if
(
mode
==
MODE_ECB
)
strncpy
(
m
,
"ECB"
,
4
);
else
strncpy
(
m
,
"CBC"
,
4
);
printk
(
"
\n
testing aes encryption
\n
"
);
printk
(
"
\n
testing %s %s %s
\n
"
,
algo
,
m
,
e
);
tsize
=
sizeof
(
struct
cipher_testvec
);
tsize
*=
tcount
;
tsize
=
sizeof
(
aes_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
aes_enc_tv_template
,
tsize
);
aes_tv
=
(
void
*
)
tvmem
;
memcpy
(
tvmem
,
template
,
tsize
);
cipher_tv
=
(
void
*
)
tvmem
;
if
(
mode
)
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
else
tfm
=
crypto_alloc_tfm
(
algo
,
CRYPTO_TFM_MODE_CBC
);
tfm
=
crypto_alloc_tfm
(
"aes"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for
aes (default ecb)
\n
"
);
printk
(
"failed to load transform for
%s %s
\n
"
,
algo
,
m
);
return
;
}
for
(
i
=
0
;
i
<
AES_ENC_TEST_VECTORS
;
i
++
)
{
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
!
(
cipher_tv
[
i
].
np
))
{
j
++
;
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
aes_tv
[
i
].
keylen
*
8
);
key
=
aes_tv
[
i
].
key
;
j
,
cipher_tv
[
i
].
klen
*
8
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
aes_tv
[
i
].
keylen
);
tfm
->
crt_flags
=
0
;
if
(
cipher_tv
[
i
].
wk
)
tfm
->
crt_flags
|=
CRYPTO_TFM_REQ_WEAK_KEY
;
key
=
cipher_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
cipher_tv
[
i
].
klen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
aes
_tv
[
i
].
fail
)
if
(
!
cipher
_tv
[
i
].
fail
)
goto
out
;
}
p
=
aes_tv
[
i
].
plaintex
t
;
p
=
cipher_tv
[
i
].
inpu
t
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
aes_tv
[
i
].
plen
;
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
aes_tv
[
i
].
rlen
);
sg
[
0
].
length
=
cipher_tv
[
i
].
ilen
;
printk
(
"%s
\n
"
,
memcmp
(
q
,
aes_tv
[
i
].
result
,
aes_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
if
(
!
mode
)
{
crypto_cipher_set_iv
(
tfm
,
cipher_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
}
printk
(
"
\n
testing aes decryption
\n
"
);
if
(
enc
)
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
cipher_tv
[
i
].
ilen
);
else
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
cipher_tv
[
i
].
ilen
);
tsize
=
sizeof
(
aes_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
aes_dec_tv_template
,
tsize
);
aes_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
AES_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
aes_tv
[
i
].
keylen
*
8
);
key
=
aes_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
aes_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
aes_tv
[
i
].
fail
)
goto
out
;
}
p
=
aes_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
aes_tv
[
i
].
plen
;
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
printk
(
"%s () failed flags=%x
\n
"
,
e
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
aes
_tv
[
i
].
rlen
);
hexdump
(
q
,
cipher
_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
aes_tv
[
i
].
result
,
aes_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
cipher_tv
[
i
].
result
,
cipher_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
void
test_cast5
(
void
)
{
unsigned
int
ret
,
i
,
tsize
;
u8
*
p
,
*
q
,
*
key
;
struct
crypto_tfm
*
tfm
;
struct
cast5_tv
*
c5_tv
;
struct
scatterlist
sg
[
1
];
printk
(
"
\n
testing cast5 encryption
\n
"
);
tfm
=
crypto_alloc_tfm
(
"cast5"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for cast5 (default ecb)
\n
"
);
return
;
}
tsize
=
sizeof
(
cast5_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
printk
(
"
\n
testing %s %s %s across pages (chunking)
\n
"
,
algo
,
m
,
e
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
memcpy
(
tvmem
,
cast5_enc_tv_template
,
tsize
);
c5_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST5_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
c5_tv
[
i
].
keylen
*
8
);
key
=
c5_tv
[
i
].
key
;
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
cipher_tv
[
i
].
np
)
{
j
++
;
printk
(
"test %u (%d bit key):
\n
"
,
j
,
cipher_tv
[
i
].
klen
*
8
);
tfm
->
crt_flags
=
0
;
if
(
cipher_tv
[
i
].
wk
)
tfm
->
crt_flags
|=
CRYPTO_TFM_REQ_WEAK_KEY
;
key
=
cipher_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
c5_tv
[
i
].
keylen
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
cipher_tv
[
i
].
klen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
c5
_tv
[
i
].
fail
)
if
(
!
cipher
_tv
[
i
].
fail
)
goto
out
;
}
p
=
c5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
c5_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
c5_tv
[
i
].
ciphertext
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
c5_tv
[
i
].
ciphertext
,
sizeof
(
c5_tv
[
i
].
ciphertext
))
?
"fail"
:
"pass"
);
temp
=
0
;
for
(
k
=
0
;
k
<
cipher_tv
[
i
].
np
;
k
++
)
{
memcpy
(
&
xbuf
[
IDX
[
k
]],
cipher_tv
[
i
].
input
+
temp
,
cipher_tv
[
i
].
tap
[
k
]);
temp
+=
cipher_tv
[
i
].
tap
[
k
];
p
=
&
xbuf
[
IDX
[
k
]];
sg
[
k
].
page
=
virt_to_page
(
p
);
sg
[
k
].
offset
=
offset_in_page
(
p
);
sg
[
k
].
length
=
cipher_tv
[
i
].
tap
[
k
];
}
tsize
=
sizeof
(
cast5_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
if
(
!
mode
)
{
crypto_cipher_set_iv
(
tfm
,
cipher_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
}
memcpy
(
tvmem
,
cast5_dec_tv_template
,
tsize
);
c5_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST5_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
c5_tv
[
i
].
keylen
*
8
);
key
=
c5_tv
[
i
].
key
;
if
(
enc
)
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
cipher_tv
[
i
].
ilen
);
else
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
cipher_tv
[
i
].
ilen
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
c5_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
c5_tv
[
i
].
fail
)
printk
(
"%s () failed flags=%x
\n
"
,
e
,
tfm
->
crt_flags
);
goto
out
;
}
p
=
c5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
c5_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
temp
=
0
;
for
(
k
=
0
;
k
<
cipher_tv
[
i
].
np
;
k
++
)
{
printk
(
"page %u
\n
"
,
k
);
q
=
kmap
(
sg
[
k
].
page
)
+
sg
[
k
].
offset
;
hexdump
(
q
,
cipher_tv
[
i
].
tap
[
k
]);
printk
(
"%s
\n
"
,
memcmp
(
q
,
cipher_tv
[
i
].
result
+
temp
,
cipher_tv
[
i
].
tap
[
k
])
?
"fail"
:
"pass"
);
temp
+=
cipher_tv
[
i
].
tap
[
k
];
}
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
c5_tv
[
i
].
ciphertext
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
c5_tv
[
i
].
ciphertext
,
sizeof
(
c5_tv
[
i
].
ciphertext
))
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
crypto_free_tfm
(
tfm
);
}
static
void
...
...
@@ -2485,75 +510,118 @@ do_test(void)
switch
(
mode
)
{
case
0
:
test_md5
();
test_sha1
();
test_des
();
test_des3_ede
();
test_md4
();
test_sha256
();
test_blowfish
();
test_twofish
();
test_serpent
();
test_cast6
();
test_aes
();
test_sha384
();
test_sha512
();
test_hash
(
"md5"
,
md5_tv_template
,
MD5_TEST_VECTORS
);
test_hash
(
"sha1"
,
sha1_tv_template
,
SHA1_TEST_VECTORS
);
//DES
test_cipher
(
"des"
,
MODE_ECB
,
ENCRYPT
,
des_enc_tv_template
,
DES_ENC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_ECB
,
DECRYPT
,
des_dec_tv_template
,
DES_DEC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_CBC
,
ENCRYPT
,
des_cbc_enc_tv_template
,
DES_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_CBC
,
DECRYPT
,
des_cbc_dec_tv_template
,
DES_CBC_DEC_TEST_VECTORS
);
//DES3_EDE
test_cipher
(
"des3_ede"
,
MODE_ECB
,
ENCRYPT
,
des3_ede_enc_tv_template
,
DES3_EDE_ENC_TEST_VECTORS
);
test_cipher
(
"des3_ede"
,
MODE_ECB
,
DECRYPT
,
des3_ede_dec_tv_template
,
DES3_EDE_DEC_TEST_VECTORS
);
test_hash
(
"md4"
,
md4_tv_template
,
MD4_TEST_VECTORS
);
test_hash
(
"sha256"
,
sha256_tv_template
,
SHA256_TEST_VECTORS
);
//BLOWFISH
test_cipher
(
"blowfish"
,
MODE_ECB
,
ENCRYPT
,
bf_enc_tv_template
,
BF_ENC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_ECB
,
DECRYPT
,
bf_dec_tv_template
,
BF_DEC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_CBC
,
ENCRYPT
,
bf_cbc_enc_tv_template
,
BF_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_CBC
,
DECRYPT
,
bf_cbc_dec_tv_template
,
BF_CBC_DEC_TEST_VECTORS
);
//TWOFISH
test_cipher
(
"twofish"
,
MODE_ECB
,
ENCRYPT
,
tf_enc_tv_template
,
TF_ENC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_ECB
,
DECRYPT
,
tf_dec_tv_template
,
TF_DEC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_CBC
,
ENCRYPT
,
tf_cbc_enc_tv_template
,
TF_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_CBC
,
DECRYPT
,
tf_cbc_dec_tv_template
,
TF_CBC_DEC_TEST_VECTORS
);
//SERPENT
test_cipher
(
"serpent"
,
MODE_ECB
,
ENCRYPT
,
serpent_enc_tv_template
,
SERPENT_ENC_TEST_VECTORS
);
test_cipher
(
"serpent"
,
MODE_ECB
,
DECRYPT
,
serpent_dec_tv_template
,
SERPENT_DEC_TEST_VECTORS
);
//AES
test_cipher
(
"aes"
,
MODE_ECB
,
ENCRYPT
,
aes_enc_tv_template
,
AES_ENC_TEST_VECTORS
);
test_cipher
(
"aes"
,
MODE_ECB
,
DECRYPT
,
aes_dec_tv_template
,
AES_DEC_TEST_VECTORS
);
//CAST5
test_cipher
(
"cast5"
,
MODE_ECB
,
ENCRYPT
,
cast5_enc_tv_template
,
CAST5_ENC_TEST_VECTORS
);
test_cipher
(
"cast5"
,
MODE_ECB
,
DECRYPT
,
cast5_dec_tv_template
,
CAST5_DEC_TEST_VECTORS
);
//CAST6
test_cipher
(
"cast6"
,
MODE_ECB
,
ENCRYPT
,
cast6_enc_tv_template
,
CAST6_ENC_TEST_VECTORS
);
test_cipher
(
"cast6"
,
MODE_ECB
,
DECRYPT
,
cast6_dec_tv_template
,
CAST6_DEC_TEST_VECTORS
);
test_hash
(
"sha384"
,
sha384_tv_template
,
SHA384_TEST_VECTORS
);
test_hash
(
"sha512"
,
sha512_tv_template
,
SHA512_TEST_VECTORS
);
test_deflate
();
test_cast5
();
test_cast6
();
#ifdef CONFIG_CRYPTO_HMAC
test_hmac
_md5
(
);
test_hmac
_sha1
();
test_hmac
_sha256
(
);
test_hmac
(
"md5"
,
hmac_md5_tv_template
,
HMAC_MD5_TEST_VECTORS
);
test_hmac
(
"sha1"
,
hmac_sha1_tv_template
,
HMAC_SHA1_TEST_VECTORS
);
test_hmac
(
"sha256"
,
hmac_sha256_tv_template
,
HMAC_SHA256_TEST_VECTORS
);
#endif
break
;
case
1
:
test_
md5
(
);
test_
hash
(
"md5"
,
md5_tv_template
,
MD5_TEST_VECTORS
);
break
;
case
2
:
test_
sha1
(
);
test_
hash
(
"sha1"
,
sha1_tv_template
,
SHA1_TEST_VECTORS
);
break
;
case
3
:
test_des
();
test_cipher
(
"des"
,
MODE_ECB
,
ENCRYPT
,
des_enc_tv_template
,
DES_ENC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_ECB
,
DECRYPT
,
des_dec_tv_template
,
DES_DEC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_CBC
,
ENCRYPT
,
des_cbc_enc_tv_template
,
DES_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"des"
,
MODE_CBC
,
DECRYPT
,
des_cbc_dec_tv_template
,
DES_CBC_DEC_TEST_VECTORS
);
break
;
case
4
:
test_des3_ede
();
test_cipher
(
"des3_ede"
,
MODE_ECB
,
ENCRYPT
,
des3_ede_enc_tv_template
,
DES3_EDE_ENC_TEST_VECTORS
);
test_cipher
(
"des3_ede"
,
MODE_ECB
,
DECRYPT
,
des3_ede_dec_tv_template
,
DES3_EDE_DEC_TEST_VECTORS
);
break
;
case
5
:
test_
md4
(
);
test_
hash
(
"md4"
,
md4_tv_template
,
MD4_TEST_VECTORS
);
break
;
case
6
:
test_
sha256
(
);
test_
hash
(
"sha256"
,
sha256_tv_template
,
SHA256_TEST_VECTORS
);
break
;
case
7
:
test_blowfish
();
test_cipher
(
"blowfish"
,
MODE_ECB
,
ENCRYPT
,
bf_enc_tv_template
,
BF_ENC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_ECB
,
DECRYPT
,
bf_dec_tv_template
,
BF_DEC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_CBC
,
ENCRYPT
,
bf_cbc_enc_tv_template
,
BF_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"blowfish"
,
MODE_CBC
,
DECRYPT
,
bf_cbc_dec_tv_template
,
BF_CBC_DEC_TEST_VECTORS
);
break
;
case
8
:
test_twofish
();
test_cipher
(
"twofish"
,
MODE_ECB
,
ENCRYPT
,
tf_enc_tv_template
,
TF_ENC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_ECB
,
DECRYPT
,
tf_dec_tv_template
,
TF_DEC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_CBC
,
ENCRYPT
,
tf_cbc_enc_tv_template
,
TF_CBC_ENC_TEST_VECTORS
);
test_cipher
(
"twofish"
,
MODE_CBC
,
DECRYPT
,
tf_cbc_dec_tv_template
,
TF_CBC_DEC_TEST_VECTORS
);
break
;
case
9
:
test_serpent
();
break
;
case
10
:
test_aes
();
test_cipher
(
"aes"
,
MODE_ECB
,
ENCRYPT
,
aes_enc_tv_template
,
AES_ENC_TEST_VECTORS
);
test_cipher
(
"aes"
,
MODE_ECB
,
DECRYPT
,
aes_dec_tv_template
,
AES_DEC_TEST_VECTORS
);
break
;
case
11
:
test_
sha384
(
);
test_
hash
(
"sha384"
,
sha384_tv_template
,
SHA384_TEST_VECTORS
);
break
;
case
12
:
test_
sha512
(
);
test_
hash
(
"sha512"
,
sha512_tv_template
,
SHA512_TEST_VECTORS
);
break
;
case
13
:
...
...
@@ -2561,24 +629,26 @@ do_test(void)
break
;
case
14
:
test_cast5
();
test_cipher
(
"cast5"
,
MODE_ECB
,
ENCRYPT
,
cast5_enc_tv_template
,
CAST5_ENC_TEST_VECTORS
);
test_cipher
(
"cast5"
,
MODE_ECB
,
DECRYPT
,
cast5_dec_tv_template
,
CAST5_DEC_TEST_VECTORS
);
break
;
case
15
:
test_cast6
();
test_cipher
(
"cast6"
,
MODE_ECB
,
ENCRYPT
,
cast6_enc_tv_template
,
CAST6_ENC_TEST_VECTORS
);
test_cipher
(
"cast6"
,
MODE_ECB
,
DECRYPT
,
cast6_dec_tv_template
,
CAST6_DEC_TEST_VECTORS
);
break
;
#ifdef CONFIG_CRYPTO_HMAC
case
100
:
test_hmac
_md5
(
);
test_hmac
(
"md5"
,
hmac_md5_tv_template
,
HMAC_MD5_TEST_VECTORS
);
break
;
case
101
:
test_hmac
_sha1
();
test_hmac
(
"sha1"
,
hmac_sha1_tv_template
,
HMAC_SHA1_TEST_VECTORS
);
break
;
case
102
:
test_hmac
_sha256
(
);
test_hmac
(
"sha256"
,
hmac_sha256_tv_template
,
HMAC_SHA256_TEST_VECTORS
);
break
;
#endif
...
...
@@ -2614,7 +684,14 @@ init(void)
return
0
;
}
/*
* If an init function is provided, an exit function must also be provided
* to allow module unload.
*/
static
void
__exit
fini
(
void
)
{
}
module_init
(
init
);
module_exit
(
fini
);
MODULE_PARM
(
mode
,
"i"
);
...
...
crypto/tcrypt.h
View file @
c41a3ca5
...
...
@@ -12,559 +12,159 @@
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* 14 - 09 - 2003 Changes by Kartikey Mahendra Bhatt
*
*/
#ifndef _CRYPTO_TCRYPT_H
#define _CRYPTO_TCRYPT_H
#define MD5_DIGEST_SIZE 16
#define MD4_DIGEST_SIZE 16
#define SHA1_DIGEST_SIZE 20
#define SHA256_DIGEST_SIZE 32
#define SHA384_DIGEST_SIZE 48
#define SHA512_DIGEST_SIZE 64
#define MAX_DIGEST_SIZE 64
#define MAX_TAP 8
/*
* MD4 test vectors from RFC1320
*/
#define MD4_TEST_VECTORS 7
#define MAX_KEYLEN 56
#define MAX_IVLEN 32
struct
md4
_testvec
{
struct
hash
_testvec
{
char
plaintext
[
128
];
char
digest
[
MD4_DIGEST_SIZE
];
}
md4_tv_template
[]
=
{
{
""
,
{
0x31
,
0xd6
,
0xcf
,
0xe0
,
0xd1
,
0x6a
,
0xe9
,
0x31
,
0xb7
,
0x3c
,
0x59
,
0xd7
,
0xe0
,
0xc0
,
0x89
,
0xc0
}
},
{
"a"
,
{
0xbd
,
0xe5
,
0x2c
,
0xb3
,
0x1d
,
0xe3
,
0x3e
,
0x46
,
0x24
,
0x5e
,
0x05
,
0xfb
,
0xdb
,
0xd6
,
0xfb
,
0x24
}
},
{
"abc"
,
{
0xa4
,
0x48
,
0x01
,
0x7a
,
0xaf
,
0x21
,
0xd8
,
0x52
,
0x5f
,
0xc1
,
0x0a
,
0xe8
,
0x7a
,
0xa6
,
0x72
,
0x9d
}
},
{
"message digest"
,
{
0xd9
,
0x13
,
0x0a
,
0x81
,
0x64
,
0x54
,
0x9f
,
0xe8
,
0x18
,
0x87
,
0x48
,
0x06
,
0xe1
,
0xc7
,
0x01
,
0x4b
}
},
{
"abcdefghijklmnopqrstuvwxyz"
,
{
0xd7
,
0x9e
,
0x1c
,
0x30
,
0x8a
,
0xa5
,
0xbb
,
0xcd
,
0xee
,
0xa8
,
0xed
,
0x63
,
0xdf
,
0x41
,
0x2d
,
0xa9
}
},
{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
,
{
0x04
,
0x3f
,
0x85
,
0x82
,
0xf2
,
0x41
,
0xdb
,
0x35
,
0x1c
,
0xe6
,
0x27
,
0xe1
,
0x53
,
0xe7
,
0xf0
,
0xe4
}
},
{
"123456789012345678901234567890123456789012345678901234567890123"
"45678901234567890"
,
{
0xe3
,
0x3b
,
0x4d
,
0xdc
,
0x9c
,
0x38
,
0xf2
,
0x19
,
0x9c
,
0x3e
,
0x7b
,
0x16
,
0x4f
,
0xcc
,
0x05
,
0x36
}
},
unsigned
char
psize
;
char
digest
[
MAX_DIGEST_SIZE
];
unsigned
char
np
;
unsigned
char
tap
[
MAX_TAP
];
};
/*
* MD5 test vectors from RFC1321
*/
#define MD5_TEST_VECTORS 7
struct
md5_testvec
{
char
plaintext
[
128
];
char
digest
[
MD5_DIGEST_SIZE
];
}
md5_tv_template
[]
=
{
{
""
,
{
0xd4
,
0x1d
,
0x8c
,
0xd9
,
0x8f
,
0x00
,
0xb2
,
0x04
,
0xe9
,
0x80
,
0x09
,
0x98
,
0xec
,
0xf8
,
0x42
,
0x7e
}
},
{
"a"
,
{
0x0c
,
0xc1
,
0x75
,
0xb9
,
0xc0
,
0xf1
,
0xb6
,
0xa8
,
0x31
,
0xc3
,
0x99
,
0xe2
,
0x69
,
0x77
,
0x26
,
0x61
}
},
{
"abc"
,
{
0x90
,
0x01
,
0x50
,
0x98
,
0x3c
,
0xd2
,
0x4f
,
0xb0
,
0xd6
,
0x96
,
0x3f
,
0x7d
,
0x28
,
0xe1
,
0x7f
,
0x72
}
},
{
"message digest"
,
{
0xf9
,
0x6b
,
0x69
,
0x7d
,
0x7c
,
0xb7
,
0x93
,
0x8d
,
0x52
,
0x5a
,
0x2f
,
0x31
,
0xaa
,
0xf1
,
0x61
,
0xd0
}
},
{
"abcdefghijklmnopqrstuvwxyz"
,
{
0xc3
,
0xfc
,
0xd3
,
0xd7
,
0x61
,
0x92
,
0xe4
,
0x00
,
0x7d
,
0xfb
,
0x49
,
0x6c
,
0xca
,
0x67
,
0xe1
,
0x3b
}
},
{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
,
{
0xd1
,
0x74
,
0xab
,
0x98
,
0xd2
,
0x77
,
0xd9
,
0xf5
,
0xa5
,
0x61
,
0x1c
,
0x2c
,
0x9f
,
0x41
,
0x9d
,
0x9f
}
},
{
"12345678901234567890123456789012345678901234567890123456789012"
"345678901234567890"
,
{
0x57
,
0xed
,
0xf4
,
0xa2
,
0x2b
,
0xe3
,
0xc9
,
0x55
,
0xac
,
0x49
,
0xda
,
0x2e
,
0x21
,
0x07
,
0xb6
,
0x7a
}
}
};
#ifdef CONFIG_CRYPTO_HMAC
/*
* HMAC-MD5 test vectors from RFC2202
* (These need to be fixed to not use strlen).
*/
#define HMAC_MD5_TEST_VECTORS 7
struct
hmac_md5_testvec
{
struct
hmac_testvec
{
char
key
[
128
];
unsigned
char
ksize
;
char
plaintext
[
128
];
char
digest
[
MD5_DIGEST_SIZE
];
unsigned
char
psize
;
char
digest
[
MAX_DIGEST_SIZE
];
unsigned
char
np
;
unsigned
char
tap
[
MAX_TAP
];
};
struct
hmac_md5_testvec
hmac_md5_tv_template
[]
=
{
{
{
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x00
},
"Hi There"
,
{
0x92
,
0x94
,
0x72
,
0x7a
,
0x36
,
0x38
,
0xbb
,
0x1c
,
0x13
,
0xf4
,
0x8e
,
0xf8
,
0x15
,
0x8b
,
0xfc
,
0x9d
}
},
{
{
'J'
,
'e'
,
'f'
,
'e'
,
0
},
"what do ya want for nothing?"
,
{
0x75
,
0x0c
,
0x78
,
0x3e
,
0x6a
,
0xb0
,
0xb5
,
0x03
,
0xea
,
0xa8
,
0x6e
,
0x31
,
0x0a
,
0x5d
,
0xb7
,
0x38
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
{
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0x00
},
{
0x56
,
0xbe
,
0x34
,
0x52
,
0x1d
,
0x14
,
0x4c
,
0x88
,
0xdb
,
0xb8
,
0xc7
,
0x33
,
0xf0
,
0xe8
,
0xb3
,
0xf6
}
},
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x00
},
{
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0x00
},
{
0x69
,
0x7e
,
0xaf
,
0x0a
,
0xca
,
0x3a
,
0x3a
,
0xea
,
0x3a
,
0x75
,
0x16
,
0x47
,
0x46
,
0xff
,
0xaa
,
0x79
}
},
{
{
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x00
},
"Test With Truncation"
,
{
0x56
,
0x46
,
0x1e
,
0xf2
,
0x34
,
0x2e
,
0xdc
,
0x00
,
0xf9
,
0xba
,
0xb9
,
0x95
,
0x69
,
0x0e
,
0xfd
,
0x4c
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
"Test Using Larger Than Block-Size Key - Hash Key First"
,
{
0x6b
,
0x1a
,
0xb7
,
0xfe
,
0x4b
,
0xd7
,
0xbf
,
0x8f
,
0x0b
,
0x62
,
0xe6
,
0xce
,
0x61
,
0xb9
,
0xd0
,
0xcd
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
"Test Using Larger Than Block-Size Key and Larger Than One "
"Block-Size Data"
,
{
0x6f
,
0x63
,
0x0f
,
0xad
,
0x67
,
0xcd
,
0xa0
,
0xee
,
0x1f
,
0xb1
,
0xf5
,
0x62
,
0xdb
,
0x3a
,
0xa5
,
0x3e
}
},
/* cross page test, need to retain key */
{
{
'J'
,
'e'
,
'f'
,
'e'
,
0
},
"what do ya want for nothing?"
,
{
0x75
,
0x0c
,
0x78
,
0x3e
,
0x6a
,
0xb0
,
0xb5
,
0x03
,
0xea
,
0xa8
,
0x6e
,
0x31
,
0x0a
,
0x5d
,
0xb7
,
0x38
}
},
struct
cipher_testvec
{
unsigned
char
fail
;
unsigned
char
wk
;
/* weak key flag */
char
key
[
MAX_KEYLEN
];
unsigned
char
klen
;
char
iv
[
MAX_IVLEN
];
char
input
[
48
];
unsigned
char
ilen
;
char
result
[
48
];
unsigned
char
rlen
;
int
np
;
unsigned
char
tap
[
MAX_TAP
];
};
/*
*
HMAC-SHA1 test vectors from RFC2202
*
MD4 test vectors from RFC1320
*/
#define MD4_TEST_VECTORS 7
#define HMAC_SHA1_TEST_VECTORS 7
struct
hmac_sha1_testvec
{
char
key
[
128
];
char
plaintext
[
128
];
char
digest
[
SHA1_DIGEST_SIZE
];
}
hmac_sha1_tv_template
[]
=
{
{
{
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x00
},
"Hi There"
,
{
0xb6
,
0x17
,
0x31
,
0x86
,
0x55
,
0x05
,
0x72
,
0x64
,
0xe2
,
0x8b
,
0xc0
,
0xb6
,
0xfb
,
0x37
,
0x8c
,
0x8e
,
0xf1
,
0x46
,
0xbe
,
0x00
}
},
{
{
'J'
,
'e'
,
'f'
,
'e'
,
0
},
"what do ya want for nothing?"
,
{
0xef
,
0xfc
,
0xdf
,
0x6a
,
0xe5
,
0xeb
,
0x2f
,
0xa2
,
0xd2
,
0x74
,
0x16
,
0xd5
,
0xf1
,
0x84
,
0xdf
,
0x9c
,
0x25
,
0x9a
,
0x7c
,
0x79
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
{
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0x00
},
{
0x12
,
0x5d
,
0x73
,
0x42
,
0xb9
,
0xac
,
0x11
,
0xcd
,
0x91
,
0xa3
,
0x9a
,
0xf4
,
0x8a
,
0xa1
,
0x7b
,
0x4f
,
0x63
,
0xf1
,
0x75
,
0xd3
}
},
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x00
},
{
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0x00
},
{
0x4c
,
0x90
,
0x07
,
0xf4
,
0x02
,
0x62
,
0x50
,
0xc6
,
0xbc
,
0x84
,
0x14
,
0xf9
,
0xbf
,
0x50
,
0xc8
,
0x6c
,
0x2d
,
0x72
,
0x35
,
0xda
}
},
{
{
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x00
},
"Test With Truncation"
,
{
0x4c
,
0x1a
,
0x03
,
0x42
,
0x4b
,
0x55
,
0xe0
,
0x7f
,
0xe7
,
0xf2
,
0x7b
,
0xe1
,
0xd5
,
0x8b
,
0xb9
,
0x32
,
0x4a
,
0x9a
,
0x5a
,
0x04
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
"Test Using Larger Than Block-Size Key - Hash Key First"
,
{
0xaa
,
0x4a
,
0xe5
,
0xe1
,
0x52
,
0x72
,
0xd0
,
0x0e
,
0x95
,
0x70
,
0x56
,
0x37
,
0xce
,
0x8a
,
0x3b
,
0x55
,
0xed
,
0x40
,
0x21
,
0x12
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
"Test Using Larger Than Block-Size Key and Larger Than One "
"Block-Size Data"
,
{
0xe8
,
0xe9
,
0x9d
,
0x0f
,
0x45
,
0x23
,
0x7d
,
0x78
,
0x6d
,
0x6b
,
0xba
,
0xa7
,
0x96
,
0x5c
,
0x78
,
0x08
,
0xbb
,
0xff
,
0x1a
,
0x91
}
},
/* cross page test */
{
{
'J'
,
'e'
,
'f'
,
'e'
,
0
},
"what do ya want for nothing?"
,
{
0xef
,
0xfc
,
0xdf
,
0x6a
,
0xe5
,
0xeb
,
0x2f
,
0xa2
,
0xd2
,
0x74
,
0x16
,
0xd5
,
0xf1
,
0x84
,
0xdf
,
0x9c
,
0x25
,
0x9a
,
0x7c
,
0x79
}
struct
hash_testvec
md4_tv_template
[]
=
{
{
.
plaintext
=
""
,
.
digest
=
{
0x31
,
0xd6
,
0xcf
,
0xe0
,
0xd1
,
0x6a
,
0xe9
,
0x31
,
0xb7
,
0x3c
,
0x59
,
0xd7
,
0xe0
,
0xc0
,
0x89
,
0xc0
},
},
{
.
plaintext
=
"a"
,
.
psize
=
1
,
.
digest
=
{
0xbd
,
0xe5
,
0x2c
,
0xb3
,
0x1d
,
0xe3
,
0x3e
,
0x46
,
0x24
,
0x5e
,
0x05
,
0xfb
,
0xdb
,
0xd6
,
0xfb
,
0x24
},
},
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xa4
,
0x48
,
0x01
,
0x7a
,
0xaf
,
0x21
,
0xd8
,
0x52
,
0x5f
,
0xc1
,
0x0a
,
0xe8
,
0x7a
,
0xa6
,
0x72
,
0x9d
},
},
{
.
plaintext
=
"message digest"
,
.
psize
=
14
,
.
digest
=
{
0xd9
,
0x13
,
0x0a
,
0x81
,
0x64
,
0x54
,
0x9f
,
0xe8
,
0x18
,
0x87
,
0x48
,
0x06
,
0xe1
,
0xc7
,
0x01
,
0x4b
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyz"
,
.
psize
=
26
,
.
digest
=
{
0xd7
,
0x9e
,
0x1c
,
0x30
,
0x8a
,
0xa5
,
0xbb
,
0xcd
,
0xee
,
0xa8
,
0xed
,
0x63
,
0xdf
,
0x41
,
0x2d
,
0xa9
},
.
np
=
2
,
.
tap
=
{
13
,
13
},
},
{
.
plaintext
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
,
.
psize
=
62
,
.
digest
=
{
0x04
,
0x3f
,
0x85
,
0x82
,
0xf2
,
0x41
,
0xdb
,
0x35
,
0x1c
,
0xe6
,
0x27
,
0xe1
,
0x53
,
0xe7
,
0xf0
,
0xe4
},
},
{
.
plaintext
=
"123456789012345678901234567890123456789012345678901234567890123"
"45678901234567890"
,
.
psize
=
80
,
.
digest
=
{
0xe3
,
0x3b
,
0x4d
,
0xdc
,
0x9c
,
0x38
,
0xf2
,
0x19
,
0x9c
,
0x3e
,
0x7b
,
0x16
,
0x4f
,
0xcc
,
0x05
,
0x36
},
},
};
/*
* HMAC-SHA256 test vectors from
* draft-ietf-ipsec-ciph-sha-256-01.txt
* MD5 test vectors from RFC1321
*/
#define HMAC_SHA256_TEST_VECTORS 10
struct
hmac_sha256_testvec
{
char
key
[
128
];
char
plaintext
[
128
];
char
digest
[
SHA256_DIGEST_SIZE
];
}
hmac_sha256_tv_template
[]
=
{
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
,
0x00
},
{
"abc"
},
{
0xa2
,
0x1b
,
0x1f
,
0x5d
,
0x4c
,
0xf4
,
0xf7
,
0x3a
,
0x4d
,
0xd9
,
0x39
,
0x75
,
0x0f
,
0x7a
,
0x06
,
0x6a
,
0x7f
,
0x98
,
0xcc
,
0x13
,
0x1c
,
0xb1
,
0x6a
,
0x66
,
0x92
,
0x75
,
0x90
,
0x21
,
0xcf
,
0xab
,
0x81
,
0x81
},
},
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
,
0x00
},
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
},
{
0x10
,
0x4f
,
0xdc
,
0x12
,
0x57
,
0x32
,
0x8f
,
0x08
,
0x18
,
0x4b
,
0xa7
,
0x31
,
0x31
,
0xc5
,
0x3c
,
0xae
,
0xe6
,
0x98
,
0xe3
,
0x61
,
0x19
,
0x42
,
0x11
,
0x49
,
0xea
,
0x8c
,
0x71
,
0x24
,
0x56
,
0x69
,
0x7d
,
0x30
}
},
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
,
0x00
},
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
},
{
0x47
,
0x03
,
0x05
,
0xfc
,
0x7e
,
0x40
,
0xfe
,
0x34
,
0xd3
,
0xee
,
0xb3
,
0xe7
,
0x73
,
0xd9
,
0x5a
,
0xab
,
0x73
,
0xac
,
0xf0
,
0xfd
,
0x06
,
0x04
,
0x47
,
0xa5
,
0xeb
,
0x45
,
0x95
,
0xbf
,
0x33
,
0xa9
,
0xd1
,
0xa3
}
},
{
{
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x0b
,
0x00
},
{
"Hi There"
},
{
0x19
,
0x8a
,
0x60
,
0x7e
,
0xb4
,
0x4b
,
0xfb
,
0xc6
,
0x99
,
0x03
,
0xa0
,
0xf1
,
0xcf
,
0x2b
,
0xbd
,
0xc5
,
0xba
,
0x0a
,
0xa3
,
0xf3
,
0xd9
,
0xae
,
0x3c
,
0x1c
,
0x7a
,
0x3b
,
0x16
,
0x96
,
0xa0
,
0xb6
,
0x8c
,
0xf7
}
},
{
{
"Jefe"
},
{
"what do ya want for nothing?"
},
{
0x5b
,
0xdc
,
0xc1
,
0x46
,
0xbf
,
0x60
,
0x75
,
0x4e
,
0x6a
,
0x04
,
0x24
,
0x26
,
0x08
,
0x95
,
0x75
,
0xc7
,
0x5a
,
0x00
,
0x3f
,
0x08
,
0x9d
,
0x27
,
0x39
,
0x83
,
0x9d
,
0xec
,
0x58
,
0xb9
,
0x64
,
0xec
,
0x38
,
0x43
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
{
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0xdd
,
0x00
},
{
0xcd
,
0xcb
,
0x12
,
0x20
,
0xd1
,
0xec
,
0xcc
,
0xea
,
0x91
,
0xe5
,
0x3a
,
0xba
,
0x30
,
0x92
,
0xf9
,
0x62
,
0xe5
,
0x49
,
0xfe
,
0x6c
,
0xe9
,
0xed
,
0x7f
,
0xdc
,
0x43
,
0x19
,
0x1f
,
0xbd
,
0xe4
,
0x5c
,
0x30
,
0xb0
}
},
{
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
,
0x21
,
0x22
,
0x23
,
0x24
,
0x25
,
0x00
},
{
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0xcd
,
0x00
},
{
0xd4
,
0x63
,
0x3c
,
0x17
,
0xf6
,
0xfb
,
0x8d
,
0x74
,
0x4c
,
0x66
,
0xde
,
0xe0
,
0xf8
,
0xf0
,
0x74
,
0x55
,
0x6e
,
0xc4
,
0xaf
,
0x55
,
0xef
,
0x07
,
0x99
,
0x85
,
0x41
,
0x46
,
0x8e
,
0xb4
,
0x9b
,
0xd2
,
0xe9
,
0x17
}
},
{
{
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x0c
,
0x00
},
{
"Test With Truncation"
},
{
0x75
,
0x46
,
0xaf
,
0x01
,
0x84
,
0x1f
,
0xc0
,
0x9b
,
0x1a
,
0xb9
,
0xc3
,
0x74
,
0x9a
,
0x5f
,
0x1c
,
0x17
,
0xd4
,
0xf5
,
0x89
,
0x66
,
0x8a
,
0x58
,
0x7b
,
0x27
,
0x00
,
0xa9
,
0xc9
,
0x7c
,
0x11
,
0x93
,
0xcf
,
0x42
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
{
"Test Using Larger Than Block-Size Key - Hash Key First"
},
{
0x69
,
0x53
,
0x02
,
0x5e
,
0xd9
,
0x6f
,
0x0c
,
0x09
,
0xf8
,
0x0a
,
0x96
,
0xf7
,
0x8e
,
0x65
,
0x38
,
0xdb
,
0xe2
,
0xe7
,
0xb8
,
0x20
,
0xe3
,
0xdd
,
0x97
,
0x0e
,
0x7d
,
0xdd
,
0x39
,
0x09
,
0x1b
,
0x32
,
0x35
,
0x2f
}
},
{
{
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0xaa
,
0x00
},
{
"Test Using Larger Than Block-Size Key and Larger Than "
"One Block-Size Data"
},
#define MD5_TEST_VECTORS 7
{
0x63
,
0x55
,
0xac
,
0x22
,
0xe8
,
0x90
,
0xd0
,
0xa3
,
0xc8
,
0x48
,
0x1a
,
0x5c
,
0xa4
,
0x82
,
0x5b
,
0xc8
,
0x84
,
0xd3
,
0xe7
,
0xa1
,
0xff
,
0x98
,
0xa2
,
0xfc
,
0x2a
,
0xc7
,
0xd8
,
0xe0
,
0x64
,
0xc3
,
0xb2
,
0xe6
}
},
struct
hash_testvec
md5_tv_template
[]
=
{
{
.
digest
=
{
0xd4
,
0x1d
,
0x8c
,
0xd9
,
0x8f
,
0x00
,
0xb2
,
0x04
,
0xe9
,
0x80
,
0x09
,
0x98
,
0xec
,
0xf8
,
0x42
,
0x7e
},
},
{
.
plaintext
=
"a"
,
.
psize
=
1
,
.
digest
=
{
0x0c
,
0xc1
,
0x75
,
0xb9
,
0xc0
,
0xf1
,
0xb6
,
0xa8
,
0x31
,
0xc3
,
0x99
,
0xe2
,
0x69
,
0x77
,
0x26
,
0x61
},
},
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0x90
,
0x01
,
0x50
,
0x98
,
0x3c
,
0xd2
,
0x4f
,
0xb0
,
0xd6
,
0x96
,
0x3f
,
0x7d
,
0x28
,
0xe1
,
0x7f
,
0x72
},
},
{
.
plaintext
=
"message digest"
,
.
psize
=
14
,
.
digest
=
{
0xf9
,
0x6b
,
0x69
,
0x7d
,
0x7c
,
0xb7
,
0x93
,
0x8d
,
0x52
,
0x5a
,
0x2f
,
0x31
,
0xaa
,
0xf1
,
0x61
,
0xd0
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyz"
,
.
psize
=
26
,
.
digest
=
{
0xc3
,
0xfc
,
0xd3
,
0xd7
,
0x61
,
0x92
,
0xe4
,
0x00
,
0x7d
,
0xfb
,
0x49
,
0x6c
,
0xca
,
0x67
,
0xe1
,
0x3b
},
.
np
=
2
,
.
tap
=
{
13
,
13
}
},
{
.
plaintext
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
,
.
psize
=
62
,
.
digest
=
{
0xd1
,
0x74
,
0xab
,
0x98
,
0xd2
,
0x77
,
0xd9
,
0xf5
,
0xa5
,
0x61
,
0x1c
,
0x2c
,
0x9f
,
0x41
,
0x9d
,
0x9f
},
},
{
.
plaintext
=
"12345678901234567890123456789012345678901234567890123456789012"
"345678901234567890"
,
.
psize
=
80
,
.
digest
=
{
0x57
,
0xed
,
0xf4
,
0xa2
,
0x2b
,
0xe3
,
0xc9
,
0x55
,
0xac
,
0x49
,
0xda
,
0x2e
,
0x21
,
0x07
,
0xb6
,
0x7a
},
}
};
#endif
/* CONFIG_CRYPTO_HMAC */
/*
* SHA1 test vectors from from FIPS PUB 180-1
*/
#define SHA1_TEST_VECTORS 2
struct
sha1_testvec
{
char
plaintext
[
128
];
char
digest
[
SHA1_DIGEST_SIZE
];
}
sha1_tv_template
[]
=
{
{
"abc"
,
{
0xA9
,
0x99
,
0x3E
,
0x36
,
0x47
,
0x06
,
0x81
,
0x6A
,
0xBA
,
0x3E
,
0x25
,
0x71
,
0x78
,
0x50
,
0xC2
,
0x6C
,
0x9C
,
0xD0
,
0xD8
,
0x9D
}
}
,
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
{
0x84
,
0x98
,
0x3E
,
0x44
,
0x1C
,
0x3B
,
0xD2
,
0x6E
,
0xBA
,
0xAE
,
0x4A
,
0xA1
,
0xF9
,
0x51
,
0x29
,
0xE5
,
0xE5
,
0x46
,
0x70
,
0xF1
}
struct
hash_testvec
sha1_tv_template
[]
=
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xa9
,
0x99
,
0x3e
,
0x36
,
0x47
,
0x06
,
0x81
,
0x6a
,
0xba
,
0x3e
,
0x25
,
0x71
,
0x78
,
0x50
,
0xc2
,
0x6c
,
0x9c
,
0xd0
,
0xd8
,
0x9d
},
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
56
,
.
digest
=
{
0x84
,
0x98
,
0x3e
,
0x44
,
0x1c
,
0x3b
,
0xd2
,
0x6e
,
0xba
,
0xae
,
0x4a
,
0xa1
,
0xf9
,
0x51
,
0x29
,
0xe5
,
0xe5
,
0x46
,
0x70
,
0xf1
},
.
np
=
2
,
.
tap
=
{
28
,
28
}
}
};
...
...
@@ -573,22 +173,23 @@ struct sha1_testvec {
*/
#define SHA256_TEST_VECTORS 2
struct
sha256_testvec
{
char
plaintext
[
128
];
char
digest
[
SHA256_DIGEST_SIZE
];
}
sha256_tv_template
[]
=
{
{
"abc"
,
{
0xba
,
0x78
,
0x16
,
0xbf
,
0x8f
,
0x01
,
0xcf
,
0xea
,
struct
hash_testvec
sha256_tv_template
[]
=
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xba
,
0x78
,
0x16
,
0xbf
,
0x8f
,
0x01
,
0xcf
,
0xea
,
0x41
,
0x41
,
0x40
,
0xde
,
0x5d
,
0xae
,
0x22
,
0x23
,
0xb0
,
0x03
,
0x61
,
0xa3
,
0x96
,
0x17
,
0x7a
,
0x9c
,
0xb4
,
0x10
,
0xff
,
0x61
,
0xf2
,
0x00
,
0x15
,
0xad
}
},
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
{
0x24
,
0x8d
,
0x6a
,
0x61
,
0xd2
,
0x06
,
0x38
,
0xb8
,
0xb4
,
0x10
,
0xff
,
0x61
,
0xf2
,
0x00
,
0x15
,
0xad
},
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
56
,
.
digest
=
{
0x24
,
0x8d
,
0x6a
,
0x61
,
0xd2
,
0x06
,
0x38
,
0xb8
,
0xe5
,
0xc0
,
0x26
,
0x93
,
0x0c
,
0x3e
,
0x60
,
0x39
,
0xa3
,
0x3c
,
0xe4
,
0x59
,
0x64
,
0xff
,
0x21
,
0x67
,
0xf6
,
0xec
,
0xed
,
0xd4
,
0x19
,
0xdb
,
0x06
,
0xc1
}
0xf6
,
0xec
,
0xed
,
0xd4
,
0x19
,
0xdb
,
0x06
,
0xc1
},
.
np
=
2
,
.
tap
=
{
28
,
28
}
},
};
...
...
@@ -597,47 +198,47 @@ struct sha256_testvec {
*/
#define SHA384_TEST_VECTORS 4
struct
sha384_testvec
{
char
plaintext
[
128
];
char
digest
[
SHA384_DIGEST_SIZE
];
}
sha384_tv_template
[]
=
{
{
"abc"
,
{
0xcb
,
0x00
,
0x75
,
0x3f
,
0x45
,
0xa3
,
0x5e
,
0x8b
,
struct
hash_testvec
sha384_tv_template
[]
=
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xcb
,
0x00
,
0x75
,
0x3f
,
0x45
,
0xa3
,
0x5e
,
0x8b
,
0xb5
,
0xa0
,
0x3d
,
0x69
,
0x9a
,
0xc6
,
0x50
,
0x07
,
0x27
,
0x2c
,
0x32
,
0xab
,
0x0e
,
0xde
,
0xd1
,
0x63
,
0x1a
,
0x8b
,
0x60
,
0x5a
,
0x43
,
0xff
,
0x5b
,
0xed
,
0x80
,
0x86
,
0x07
,
0x2b
,
0xa1
,
0xe7
,
0xcc
,
0x23
,
0x58
,
0xba
,
0xec
,
0xa1
,
0x34
,
0xc8
,
0x25
,
0xa7
}
},
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
{
0x33
,
0x91
,
0xfd
,
0xdd
,
0xfc
,
0x8d
,
0xc7
,
0x39
,
0x58
,
0xba
,
0xec
,
0xa1
,
0x34
,
0xc8
,
0x25
,
0xa7
},
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
56
,
.
digest
=
{
0x33
,
0x91
,
0xfd
,
0xdd
,
0xfc
,
0x8d
,
0xc7
,
0x39
,
0x37
,
0x07
,
0xa6
,
0x5b
,
0x1b
,
0x47
,
0x09
,
0x39
,
0x7c
,
0xf8
,
0xb1
,
0xd1
,
0x62
,
0xaf
,
0x05
,
0xab
,
0xfe
,
0x8f
,
0x45
,
0x0d
,
0xe5
,
0xf3
,
0x6b
,
0xc6
,
0xb0
,
0x45
,
0x5a
,
0x85
,
0x20
,
0xbc
,
0x4e
,
0x6f
,
0x5f
,
0xe9
,
0x5b
,
0x1f
,
0xe3
,
0xc8
,
0x45
,
0x2b
}
},
{
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
0x5f
,
0xe9
,
0x5b
,
0x1f
,
0xe3
,
0xc8
,
0x45
,
0x2b
},
},
{
.
plaintext
=
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
,
{
0x09
,
0x33
,
0x0c
,
0x33
,
0xf7
,
0x11
,
0x47
,
0xe8
,
.
psize
=
112
,
.
digest
=
{
0x09
,
0x33
,
0x0c
,
0x33
,
0xf7
,
0x11
,
0x47
,
0xe8
,
0x3d
,
0x19
,
0x2f
,
0xc7
,
0x82
,
0xcd
,
0x1b
,
0x47
,
0x53
,
0x11
,
0x1b
,
0x17
,
0x3b
,
0x3b
,
0x05
,
0xd2
,
0x2f
,
0xa0
,
0x80
,
0x86
,
0xe3
,
0xb0
,
0xf7
,
0x12
,
0xfc
,
0xc7
,
0xc7
,
0x1a
,
0x55
,
0x7e
,
0x2d
,
0xb9
,
0x66
,
0xc3
,
0xe9
,
0xfa
,
0x91
,
0x74
,
0x60
,
0x39
}
},
{
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
0x66
,
0xc3
,
0xe9
,
0xfa
,
0x91
,
0x74
,
0x60
,
0x39
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
"efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
,
{
0x3d
,
0x20
,
0x89
,
0x73
,
0xab
,
0x35
,
0x08
,
0xdb
,
.
psize
=
104
,
.
digest
=
{
0x3d
,
0x20
,
0x89
,
0x73
,
0xab
,
0x35
,
0x08
,
0xdb
,
0xbd
,
0x7e
,
0x2c
,
0x28
,
0x62
,
0xba
,
0x29
,
0x0a
,
0xd3
,
0x01
,
0x0e
,
0x49
,
0x78
,
0xc1
,
0x98
,
0xdc
,
0x4d
,
0x8f
,
0xd0
,
0x14
,
0xe5
,
0x82
,
0x82
,
0x3a
,
0x89
,
0xe1
,
0x6f
,
0x9b
,
0x2a
,
0x7b
,
0xbc
,
0x1a
,
0xc9
,
0x38
,
0xe2
,
0xd1
,
0x99
,
0xe8
,
0xbe
,
0xa4
}
0xc9
,
0x38
,
0xe2
,
0xd1
,
0x99
,
0xe8
,
0xbe
,
0xa4
},
.
np
=
4
,
.
tap
=
{
26
,
26
,
26
,
26
}
},
};
...
...
@@ -646,439 +247,616 @@ struct sha384_testvec {
*/
#define SHA512_TEST_VECTORS 4
struct
sha512_testvec
{
char
plaintext
[
128
];
char
digest
[
SHA512_DIGEST_SIZE
];
}
sha512_tv_template
[]
=
{
{
"abc"
,
{
0xdd
,
0xaf
,
0x35
,
0xa1
,
0x93
,
0x61
,
0x7a
,
0xba
,
struct
hash_testvec
sha512_tv_template
[]
=
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xdd
,
0xaf
,
0x35
,
0xa1
,
0x93
,
0x61
,
0x7a
,
0xba
,
0xcc
,
0x41
,
0x73
,
0x49
,
0xae
,
0x20
,
0x41
,
0x31
,
0x12
,
0xe6
,
0xfa
,
0x4e
,
0x89
,
0xa9
,
0x7e
,
0xa2
,
0x0a
,
0x9e
,
0xee
,
0xe6
,
0x4b
,
0x55
,
0xd3
,
0x9a
,
0x21
,
0x92
,
0x99
,
0x2a
,
0x27
,
0x4f
,
0xc1
,
0xa8
,
0x36
,
0xba
,
0x3c
,
0x23
,
0xa3
,
0xfe
,
0xeb
,
0xbd
,
0x45
,
0x4d
,
0x44
,
0x23
,
0x64
,
0x3c
,
0xe8
,
0x0e
,
0x2a
,
0x9a
,
0xc9
,
0x4f
,
0xa5
,
0x4c
,
0xa4
,
0x9f
}
},
{
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
{
0x20
,
0x4a
,
0x8f
,
0xc6
,
0xdd
,
0xa8
,
0x2f
,
0x0a
,
0x2a
,
0x9a
,
0xc9
,
0x4f
,
0xa5
,
0x4c
,
0xa4
,
0x9f
},
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
56
,
.
digest
=
{
0x20
,
0x4a
,
0x8f
,
0xc6
,
0xdd
,
0xa8
,
0x2f
,
0x0a
,
0x0c
,
0xed
,
0x7b
,
0xeb
,
0x8e
,
0x08
,
0xa4
,
0x16
,
0x57
,
0xc1
,
0x6e
,
0xf4
,
0x68
,
0xb2
,
0x28
,
0xa8
,
0x27
,
0x9b
,
0xe3
,
0x31
,
0xa7
,
0x03
,
0xc3
,
0x35
,
0x96
,
0xfd
,
0x15
,
0xc1
,
0x3b
,
0x1b
,
0x07
,
0xf9
,
0xaa
,
0x1d
,
0x3b
,
0xea
,
0x57
,
0x78
,
0x9c
,
0xa0
,
0x31
,
0xad
,
0x85
,
0xc7
,
0xa7
,
0x1d
,
0xd7
,
0x03
,
0x54
,
0xec
,
0x63
,
0x12
,
0x38
,
0xca
,
0x34
,
0x45
}
},
{
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
0x54
,
0xec
,
0x63
,
0x12
,
0x38
,
0xca
,
0x34
,
0x45
},
},
{
.
plaintext
=
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
,
{
0x8e
,
0x95
,
0x9b
,
0x75
,
0xda
,
0xe3
,
0x13
,
0xda
,
.
psize
=
112
,
.
digest
=
{
0x8e
,
0x95
,
0x9b
,
0x75
,
0xda
,
0xe3
,
0x13
,
0xda
,
0x8c
,
0xf4
,
0xf7
,
0x28
,
0x14
,
0xfc
,
0x14
,
0x3f
,
0x8f
,
0x77
,
0x79
,
0xc6
,
0xeb
,
0x9f
,
0x7f
,
0xa1
,
0x72
,
0x99
,
0xae
,
0xad
,
0xb6
,
0x88
,
0x90
,
0x18
,
0x50
,
0x1d
,
0x28
,
0x9e
,
0x49
,
0x00
,
0xf7
,
0xe4
,
0x33
,
0x1b
,
0x99
,
0xde
,
0xc4
,
0xb5
,
0x43
,
0x3a
,
0xc7
,
0xd3
,
0x29
,
0xee
,
0xb6
,
0xdd
,
0x26
,
0x54
,
0x5e
,
0x96
,
0xe5
,
0x5b
,
0x87
,
0x4b
,
0xe9
,
0x09
}
},
{
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
0x5e
,
0x96
,
0xe5
,
0x5b
,
0x87
,
0x4b
,
0xe9
,
0x09
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
"efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
,
{
0x93
,
0x0d
,
0x0c
,
0xef
,
0xcb
,
0x30
,
0xff
,
0x11
,
.
psize
=
104
,
.
digest
=
{
0x93
,
0x0d
,
0x0c
,
0xef
,
0xcb
,
0x30
,
0xff
,
0x11
,
0x33
,
0xb6
,
0x89
,
0x81
,
0x21
,
0xf1
,
0xcf
,
0x3d
,
0x27
,
0x57
,
0x8a
,
0xfc
,
0xaf
,
0xe8
,
0x67
,
0x7c
,
0x52
,
0x57
,
0xcf
,
0x06
,
0x99
,
0x11
,
0xf7
,
0x5d
,
0x8f
,
0x58
,
0x31
,
0xb5
,
0x6e
,
0xbf
,
0xda
,
0x67
,
0xb2
,
0x78
,
0xe6
,
0x6d
,
0xff
,
0x8b
,
0x84
,
0xfe
,
0x2b
,
0x28
,
0x70
,
0xf7
,
0x42
,
0xa5
,
0x80
,
0xd8
,
0xed
,
0xb4
,
0x19
,
0x87
,
0x23
,
0x28
,
0x50
,
0xc9
}
0xed
,
0xb4
,
0x19
,
0x87
,
0x23
,
0x28
,
0x50
,
0xc9
},
.
np
=
4
,
.
tap
=
{
26
,
26
,
26
,
26
}
},
};
#ifdef CONFIG_CRYPTO_HMAC
/*
* DES test vectors.
* HMAC-MD5 test vectors from RFC2202
* (These need to be fixed to not use strlen).
*/
#define DES_ENC_TEST_VECTORS 5
#define DES_DEC_TEST_VECTORS 2
#define DES_CBC_ENC_TEST_VECTORS 4
#define DES_CBC_DEC_TEST_VECTORS 3
#define DES3_EDE_ENC_TEST_VECTORS 3
#define DES3_EDE_DEC_TEST_VECTORS 3
struct
des_tv
{
unsigned
int
len
;
int
fail
;
char
key
[
24
];
char
iv
[
8
];
char
plaintext
[
128
];
char
result
[
128
];
};
struct
des_tv
des_enc_tv_template
[]
=
{
#define HMAC_MD5_TEST_VECTORS 7
/* From Applied Cryptography */
struct
hmac_testvec
hmac_md5_tv_template
[]
=
{
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
}
.
key
=
{
[
0
...
15
]
=
0x0b
},
.
ksize
=
16
,
.
plaintext
=
"Hi There"
,
.
psize
=
8
,
.
digest
=
{
0x92
,
0x94
,
0x72
,
0x7a
,
0x36
,
0x38
,
0xbb
,
0x1c
,
0x13
,
0xf4
,
0x8e
,
0xf8
,
0x15
,
0x8b
,
0xfc
,
0x9d
},
},
{
.
key
=
{
'J'
,
'e'
,
'f'
,
'e'
},
.
ksize
=
4
,
.
plaintext
=
"what do ya want for nothing?"
,
.
psize
=
28
,
.
digest
=
{
0x75
,
0x0c
,
0x78
,
0x3e
,
0x6a
,
0xb0
,
0xb5
,
0x03
,
0xea
,
0xa8
,
0x6e
,
0x31
,
0x0a
,
0x5d
,
0xb7
,
0x38
},
.
np
=
2
,
.
tap
=
{
14
,
14
}
},
{
.
key
=
{
[
0
...
15
]
=
0xaa
},
.
ksize
=
16
,
.
plaintext
=
{
[
0
...
49
]
=
0xdd
},
.
psize
=
50
,
.
digest
=
{
0x56
,
0xbe
,
0x34
,
0x52
,
0x1d
,
0x14
,
0x4c
,
0x88
,
0xdb
,
0xb8
,
0xc7
,
0x33
,
0xf0
,
0xe8
,
0xb3
,
0xf6
},
},
{
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
},
.
ksize
=
25
,
.
plaintext
=
{
[
0
...
49
]
=
0xcd
},
.
psize
=
50
,
.
digest
=
{
0x69
,
0x7e
,
0xaf
,
0x0a
,
0xca
,
0x3a
,
0x3a
,
0xea
,
0x3a
,
0x75
,
0x16
,
0x47
,
0x46
,
0xff
,
0xaa
,
0x79
},
},
{
.
key
=
{
[
0
...
15
]
=
0x0c
},
.
ksize
=
16
,
.
plaintext
=
"Test With Truncation"
,
.
psize
=
20
,
.
digest
=
{
0x56
,
0x46
,
0x1e
,
0xf2
,
0x34
,
0x2e
,
0xdc
,
0x00
,
0xf9
,
0xba
,
0xb9
,
0x95
,
0x69
,
0x0e
,
0xfd
,
0x4c
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key - Hash Key First"
,
.
psize
=
54
,
.
digest
=
{
0x6b
,
0x1a
,
0xb7
,
0xfe
,
0x4b
,
0xd7
,
0xbf
,
0x8f
,
0x0b
,
0x62
,
0xe6
,
0xce
,
0x61
,
0xb9
,
0xd0
,
0xcd
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key and Larger Than One "
"Block-Size Data"
,
.
psize
=
73
,
.
digest
=
{
0x6f
,
0x63
,
0x0f
,
0xad
,
0x67
,
0xcd
,
0xa0
,
0xee
,
0x1f
,
0xb1
,
0xf5
,
0x62
,
0xdb
,
0x3a
,
0xa5
,
0x3e
},
},
};
/* Same key, different plaintext block */
{
8
,
0
,
/*
* HMAC-SHA1 test vectors from RFC2202
*/
#define HMAC_SHA1_TEST_VECTORS 7
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
{
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
}
struct
hmac_testvec
hmac_sha1_tv_template
[]
=
{
{
.
key
=
{
[
0
...
19
]
=
0x0b
},
.
ksize
=
20
,
.
plaintext
=
"Hi There"
,
.
psize
=
8
,
.
digest
=
{
0xb6
,
0x17
,
0x31
,
0x86
,
0x55
,
0x05
,
0x72
,
0x64
,
0xe2
,
0x8b
,
0xc0
,
0xb6
,
0xfb
,
0x37
,
0x8c
,
0x8e
,
0xf1
,
0x46
,
0xbe
},
},
{
.
key
=
{
'J'
,
'e'
,
'f'
,
'e'
},
.
ksize
=
4
,
.
plaintext
=
"what do ya want for nothing?"
,
.
psize
=
28
,
.
digest
=
{
0xef
,
0xfc
,
0xdf
,
0x6a
,
0xe5
,
0xeb
,
0x2f
,
0xa2
,
0xd2
,
0x74
,
0x16
,
0xd5
,
0xf1
,
0x84
,
0xdf
,
0x9c
,
0x25
,
0x9a
,
0x7c
,
0x79
},
.
np
=
2
,
.
tap
=
{
14
,
14
}
},
{
.
key
=
{
[
0
...
19
]
=
0xaa
},
.
ksize
=
20
,
.
plaintext
=
{
[
0
...
49
]
=
0xdd
},
.
psize
=
50
,
.
digest
=
{
0x12
,
0x5d
,
0x73
,
0x42
,
0xb9
,
0xac
,
0x11
,
0xcd
,
0x91
,
0xa3
,
0x9a
,
0xf4
,
0x8a
,
0xa1
,
0x7b
,
0x4f
,
0x63
,
0xf1
,
0x75
,
0xd3
},
},
{
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
},
.
ksize
=
25
,
.
plaintext
=
{
[
0
...
49
]
=
0xcd
},
.
psize
=
50
,
.
digest
=
{
0x4c
,
0x90
,
0x07
,
0xf4
,
0x02
,
0x62
,
0x50
,
0xc6
,
0xbc
,
0x84
,
0x14
,
0xf9
,
0xbf
,
0x50
,
0xc8
,
0x6c
,
0x2d
,
0x72
,
0x35
,
0xda
},
},
{
.
key
=
{
[
0
...
19
]
=
0x0c
},
.
ksize
=
20
,
.
plaintext
=
"Test With Truncation"
,
.
psize
=
20
,
.
digest
=
{
0x4c
,
0x1a
,
0x03
,
0x42
,
0x4b
,
0x55
,
0xe0
,
0x7f
,
0xe7
,
0xf2
,
0x7b
,
0xe1
,
0xd5
,
0x8b
,
0xb9
,
0x32
,
0x4a
,
0x9a
,
0x5a
,
0x04
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key - Hash Key First"
,
.
psize
=
54
,
.
digest
=
{
0xaa
,
0x4a
,
0xe5
,
0xe1
,
0x52
,
0x72
,
0xd0
,
0x0e
,
0x95
,
0x70
,
0x56
,
0x37
,
0xce
,
0x8a
,
0x3b
,
0x55
,
0xed
,
0x40
,
0x21
,
0x12
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key and Larger Than One "
"Block-Size Data"
,
.
psize
=
73
,
.
digest
=
{
0xe8
,
0xe9
,
0x9d
,
0x0f
,
0x45
,
0x23
,
0x7d
,
0x78
,
0x6d
,
0x6b
,
0xba
,
0xa7
,
0x96
,
0x5c
,
0x78
,
0x08
,
0xbb
,
0xff
,
0x1a
,
0x91
},
},
};
/* Sbox test from NBS */
{
8
,
0
,
{
0x7C
,
0xA1
,
0x10
,
0x45
,
0x4A
,
0x1A
,
0x6E
,
0x57
},
{
0
},
{
0x01
,
0xA1
,
0xD6
,
0xD0
,
0x39
,
0x77
,
0x67
,
0x42
},
{
0x69
,
0x0F
,
0x5B
,
0x0D
,
0x9A
,
0x26
,
0x93
,
0x9B
}
},
/*
* HMAC-SHA256 test vectors from
* draft-ietf-ipsec-ciph-sha-256-01.txt
*/
#define HMAC_SHA256_TEST_VECTORS 10
/* Three blocks */
struct
hmac_testvec
hmac_sha256_tv_template
[]
=
{
{
24
,
0
,
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
},
.
ksize
=
32
,
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xa2
,
0x1b
,
0x1f
,
0x5d
,
0x4c
,
0xf4
,
0xf7
,
0x3a
,
0x4d
,
0xd9
,
0x39
,
0x75
,
0x0f
,
0x7a
,
0x06
,
0x6a
,
0x7f
,
0x98
,
0xcc
,
0x13
,
0x1c
,
0xb1
,
0x6a
,
0x66
,
0x92
,
0x75
,
0x90
,
0x21
,
0xcf
,
0xab
,
0x81
,
0x81
},
},
{
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
},
.
ksize
=
32
,
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
56
,
.
digest
=
{
0x10
,
0x4f
,
0xdc
,
0x12
,
0x57
,
0x32
,
0x8f
,
0x08
,
0x18
,
0x4b
,
0xa7
,
0x31
,
0x31
,
0xc5
,
0x3c
,
0xae
,
0xe6
,
0x98
,
0xe3
,
0x61
,
0x19
,
0x42
,
0x11
,
0x49
,
0xea
,
0x8c
,
0x71
,
0x24
,
0x56
,
0x69
,
0x7d
,
0x30
},
},
{
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
},
.
ksize
=
32
,
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
.
psize
=
112
,
.
digest
=
{
0x47
,
0x03
,
0x05
,
0xfc
,
0x7e
,
0x40
,
0xfe
,
0x34
,
0xd3
,
0xee
,
0xb3
,
0xe7
,
0x73
,
0xd9
,
0x5a
,
0xab
,
0x73
,
0xac
,
0xf0
,
0xfd
,
0x06
,
0x04
,
0x47
,
0xa5
,
0xeb
,
0x45
,
0x95
,
0xbf
,
0x33
,
0xa9
,
0xd1
,
0xa3
},
},
{
.
key
=
{
[
0
...
31
]
=
0x0b
},
.
ksize
=
32
,
.
plaintext
=
"Hi There"
,
.
psize
=
8
,
.
digest
=
{
0x19
,
0x8a
,
0x60
,
0x7e
,
0xb4
,
0x4b
,
0xfb
,
0xc6
,
0x99
,
0x03
,
0xa0
,
0xf1
,
0xcf
,
0x2b
,
0xbd
,
0xc5
,
0xba
,
0x0a
,
0xa3
,
0xf3
,
0xd9
,
0xae
,
0x3c
,
0x1c
,
0x7a
,
0x3b
,
0x16
,
0x96
,
0xa0
,
0xb6
,
0x8c
,
0xf7
},
},
{
.
key
=
"Jefe"
,
.
ksize
=
4
,
.
plaintext
=
"what do ya want for nothing?"
,
.
psize
=
28
,
.
digest
=
{
0x5b
,
0xdc
,
0xc1
,
0x46
,
0xbf
,
0x60
,
0x75
,
0x4e
,
0x6a
,
0x04
,
0x24
,
0x26
,
0x08
,
0x95
,
0x75
,
0xc7
,
0x5a
,
0x00
,
0x3f
,
0x08
,
0x9d
,
0x27
,
0x39
,
0x83
,
0x9d
,
0xec
,
0x58
,
0xb9
,
0x64
,
0xec
,
0x38
,
0x43
},
.
np
=
2
,
.
tap
=
{
14
,
14
}
},
{
.
key
=
{
[
0
...
31
]
=
0xaa
},
.
ksize
=
32
,
.
plaintext
=
{
[
0
...
49
]
=
0xdd
},
.
psize
=
50
,
.
digest
=
{
0xcd
,
0xcb
,
0x12
,
0x20
,
0xd1
,
0xec
,
0xcc
,
0xea
,
0x91
,
0xe5
,
0x3a
,
0xba
,
0x30
,
0x92
,
0xf9
,
0x62
,
0xe5
,
0x49
,
0xfe
,
0x6c
,
0xe9
,
0xed
,
0x7f
,
0xdc
,
0x43
,
0x19
,
0x1f
,
0xbd
,
0xe4
,
0x5c
,
0x30
,
0xb0
},
},
{
.
key
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
,
0x20
,
0x21
,
0x22
,
0x23
,
0x24
,
0x25
},
.
ksize
=
37
,
.
plaintext
=
{
[
0
...
49
]
=
0xcd
},
.
psize
=
50
,
.
digest
=
{
0xd4
,
0x63
,
0x3c
,
0x17
,
0xf6
,
0xfb
,
0x8d
,
0x74
,
0x4c
,
0x66
,
0xde
,
0xe0
,
0xf8
,
0xf0
,
0x74
,
0x55
,
0x6e
,
0xc4
,
0xaf
,
0x55
,
0xef
,
0x07
,
0x99
,
0x85
,
0x41
,
0x46
,
0x8e
,
0xb4
,
0x9b
,
0xd2
,
0xe9
,
0x17
},
},
{
.
key
=
{
[
0
...
31
]
=
0x0c
},
.
ksize
=
32
,
.
plaintext
=
"Test With Truncation"
,
.
psize
=
20
,
.
digest
=
{
0x75
,
0x46
,
0xaf
,
0x01
,
0x84
,
0x1f
,
0xc0
,
0x9b
,
0x1a
,
0xb9
,
0xc3
,
0x74
,
0x9a
,
0x5f
,
0x1c
,
0x17
,
0xd4
,
0xf5
,
0x89
,
0x66
,
0x8a
,
0x58
,
0x7b
,
0x27
,
0x00
,
0xa9
,
0xc9
,
0x7c
,
0x11
,
0x93
,
0xcf
,
0x42
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key - Hash Key First"
,
.
psize
=
54
,
.
digest
=
{
0x69
,
0x53
,
0x02
,
0x5e
,
0xd9
,
0x6f
,
0x0c
,
0x09
,
0xf8
,
0x0a
,
0x96
,
0xf7
,
0x8e
,
0x65
,
0x38
,
0xdb
,
0xe2
,
0xe7
,
0xb8
,
0x20
,
0xe3
,
0xdd
,
0x97
,
0x0e
,
0x7d
,
0xdd
,
0x39
,
0x09
,
0x1b
,
0x32
,
0x35
,
0x2f
},
},
{
.
key
=
{
[
0
...
79
]
=
0xaa
},
.
ksize
=
80
,
.
plaintext
=
"Test Using Larger Than Block-Size Key and Larger Than "
"One Block-Size Data"
,
.
psize
=
73
,
.
digest
=
{
0x63
,
0x55
,
0xac
,
0x22
,
0xe8
,
0x90
,
0xd0
,
0xa3
,
0xc8
,
0x48
,
0x1a
,
0x5c
,
0xa4
,
0x82
,
0x5b
,
0xc8
,
0x84
,
0xd3
,
0xe7
,
0xa1
,
0xff
,
0x98
,
0xa2
,
0xfc
,
0x2a
,
0xc7
,
0xd8
,
0xe0
,
0x64
,
0xc3
,
0xb2
,
0xe6
},
},
};
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
#endif
/* CONFIG_CRYPTO_HMAC */
{
0
},
/*
* DES test vectors.
*/
#define DES_ENC_TEST_VECTORS 10
#define DES_DEC_TEST_VECTORS 4
#define DES_CBC_ENC_TEST_VECTORS 5
#define DES_CBC_DEC_TEST_VECTORS 4
#define DES3_EDE_ENC_TEST_VECTORS 3
#define DES3_EDE_DEC_TEST_VECTORS 3
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
struct
cipher_testvec
des_enc_tv_template
[]
=
{
{
/* From Applied Cryptography */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
.
ilen
=
8
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
.
rlen
=
8
,
},
{
/* Same key, different plaintext block */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
.
ilen
=
8
,
.
result
=
{
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
.
rlen
=
8
,
},
{
/* Sbox test from NBS */
.
key
=
{
0x7c
,
0xa1
,
0x10
,
0x45
,
0x4a
,
0x1a
,
0x6e
,
0x57
},
.
klen
=
8
,
.
input
=
{
0x01
,
0xa1
,
0xd6
,
0xd0
,
0x39
,
0x77
,
0x67
,
0x42
},
.
ilen
=
8
,
.
result
=
{
0x69
,
0x0f
,
0x5b
,
0x0d
,
0x9a
,
0x26
,
0x93
,
0x9b
},
.
rlen
=
8
,
},
{
/* Three blocks */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xca
,
0xfe
,
0xba
,
0xbe
,
0xfe
,
0xed
,
0xbe
,
0xef
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
.
ilen
=
24
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
,
0xb4
,
0x99
,
0x26
,
0xf7
,
0x1f
,
0xe1
,
0xd4
,
0x90
},
},
/* Weak key */
{
8
,
1
,
{
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
},
{
0
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
}
},
/* Two blocks -- for testing encryption across pages */
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
.
rlen
=
24
,
},
{
/* Weak key */
.
fail
=
1
,
.
wk
=
1
,
.
key
=
{
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
.
ilen
=
8
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
.
rlen
=
8
,
},
{
/* Two blocks -- for testing encryption across pages */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
}
},
/* Two blocks -- for testing decryption across pages */
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
.
ilen
=
16
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
},
/* Four blocks -- for testing encryption with chunking */
{
24
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
.
rlen
=
16
,
.
np
=
2
,
.
tap
=
{
8
,
8
}
},
{
/* Four blocks -- for testing encryption with chunking */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xca
,
0xfe
,
0xba
,
0xbe
,
0xfe
,
0xed
,
0xbe
,
0xef
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
.
ilen
=
32
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
,
0xb4
,
0x99
,
0x26
,
0xf7
,
0x1f
,
0xe1
,
0xd4
,
0x90
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
.
rlen
=
32
,
.
np
=
3
,
.
tap
=
{
14
,
10
,
8
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xca
,
0xfe
,
0xba
,
0xbe
,
0xfe
,
0xed
,
0xbe
,
0xef
},
.
ilen
=
24
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
,
0xb4
,
0x99
,
0x26
,
0xf7
,
0x1f
,
0xe1
,
0xd4
,
0x90
},
.
rlen
=
24
,
.
np
=
4
,
.
tap
=
{
2
,
1
,
3
,
18
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
},
.
ilen
=
16
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
.
rlen
=
16
,
.
np
=
5
,
.
tap
=
{
2
,
2
,
2
,
2
,
8
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
.
ilen
=
8
,
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
.
rlen
=
8
,
.
np
=
8
,
.
tap
=
{
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
}
},
};
};
struct
des_tv
des_dec_tv_template
[]
=
{
/* From Applied Cryptography */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
},
/* Sbox test from NBS */
{
8
,
0
,
{
0x7C
,
0xA1
,
0x10
,
0x45
,
0x4A
,
0x1A
,
0x6E
,
0x57
},
{
0
},
{
0x69
,
0x0F
,
0x5B
,
0x0D
,
0x9A
,
0x26
,
0x93
,
0x9B
},
{
0x01
,
0xA1
,
0xD6
,
0xD0
,
0x39
,
0x77
,
0x67
,
0x42
}
},
/* Two blocks, for chunking test */
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0
},
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0x69
,
0x0F
,
0x5B
,
0x0D
,
0x9A
,
0x26
,
0x93
,
0x9B
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0xa3
,
0x99
,
0x7b
,
0xca
,
0xaf
,
0x69
,
0xa0
,
0xf5
}
},
};
struct
des_tv
des_cbc_enc_tv_template
[]
=
{
/* From OpenSSL */
{
24
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4E
,
0x6F
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6D
,
0x65
,
0x20
,
0x66
,
0x6F
,
0x72
,
0x20
,
0x00
,
0x31
,
0x00
,
0x00
},
{
0xcc
,
0xd1
,
0x73
,
0xff
,
0xab
,
0x20
,
0x39
,
0xf4
,
0xac
,
0xd8
,
0xae
,
0xfd
,
0xdf
,
0xd8
,
0xa1
,
0xeb
,
0x46
,
0x8e
,
0x91
,
0x15
,
0x78
,
0x88
,
0xba
,
0x68
,
0x1d
,
0x26
,
0x93
,
0x97
,
0xf7
,
0xfe
,
0x62
,
0xb4
}
},
/* FIPS Pub 81 */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x12
,
0x34
,
0x56
,
0x78
,
0x90
,
0xab
,
0xcd
,
0xef
},
{
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
},
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
},
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
{
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
},
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
struct
cipher_testvec
des_dec_tv_template
[]
=
{
{
/* From Applied Cryptography */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
.
rlen
=
8
,
},
{
/* Sbox test from NBS */
.
key
=
{
0x7c
,
0xa1
,
0x10
,
0x45
,
0x4a
,
0x1a
,
0x6e
,
0x57
},
.
klen
=
8
,
.
input
=
{
0x69
,
0x0f
,
0x5b
,
0x0d
,
0x9a
,
0x26
,
0x93
,
0x9b
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0xa1
,
0xd6
,
0xd0
,
0x39
,
0x77
,
0x67
,
0x42
},
.
rlen
=
8
,
},
{
/* Two blocks, for chunking test */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0x69
,
0x0f
,
0x5b
,
0x0d
,
0x9a
,
0x26
,
0x93
,
0x9b
},
.
ilen
=
16
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0xa3
,
0x99
,
0x7b
,
0xca
,
0xaf
,
0x69
,
0xa0
,
0xf5
},
.
rlen
=
16
,
.
np
=
2
,
.
tap
=
{
8
,
8
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
input
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
,
0x69
,
0x0f
,
0x5b
,
0x0d
,
0x9a
,
0x26
,
0x93
,
0x9b
},
.
ilen
=
16
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
,
0xa3
,
0x99
,
0x7b
,
0xca
,
0xaf
,
0x69
,
0xa0
,
0xf5
},
.
rlen
=
16
,
.
np
=
3
,
.
tap
=
{
3
,
12
,
1
}
},
};
/* Copy of openssl vector for chunk testing */
struct
cipher_testvec
des_cbc_enc_tv_template
[]
=
{
{
/* From OpenSSL */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
input
=
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
.
ilen
=
24
,
.
result
=
{
0xcc
,
0xd1
,
0x73
,
0xff
,
0xab
,
0x20
,
0x39
,
0xf4
,
0xac
,
0xd8
,
0xae
,
0xfd
,
0xdf
,
0xd8
,
0xa1
,
0xeb
,
0x46
,
0x8e
,
0x91
,
0x15
,
0x78
,
0x88
,
0xba
,
0x68
},
.
rlen
=
24
,
},
{
/* FIPS Pub 81 */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0x12
,
0x34
,
0x56
,
0x78
,
0x90
,
0xab
,
0xcd
,
0xef
},
.
input
=
{
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
},
.
ilen
=
8
,
.
result
=
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
.
input
=
{
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
.
ilen
=
8
,
.
result
=
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
.
input
=
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
.
ilen
=
8
,
.
result
=
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
.
rlen
=
8
,
},
{
/* Copy of openssl vector for chunk testing */
/* From OpenSSL */
{
24
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4E
,
0x6F
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6D
,
0x65
,
0x20
,
0x66
,
0x6F
,
0x72
,
0x20
,
0x00
,
0x31
,
0x00
,
0x00
},
{
0xcc
,
0xd1
,
0x73
,
0xff
,
0xab
,
0x20
,
0x39
,
0xf4
,
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
input
=
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
.
ilen
=
24
,
.
result
=
{
0xcc
,
0xd1
,
0x73
,
0xff
,
0xab
,
0x20
,
0x39
,
0xf4
,
0xac
,
0xd8
,
0xae
,
0xfd
,
0xdf
,
0xd8
,
0xa1
,
0xeb
,
0x46
,
0x8e
,
0x91
,
0x15
,
0x78
,
0x88
,
0xba
,
0x68
,
0x1d
,
0x26
,
0x93
,
0x97
,
0xf7
,
0xfe
,
0x62
,
0xb4
}
0x46
,
0x8e
,
0x91
,
0x15
,
0x78
,
0x88
,
0xba
,
0x68
},
.
rlen
=
24
,
.
np
=
2
,
.
tap
=
{
13
,
11
}
},
};
struct
des_tv
des_cbc_dec_tv_template
[]
=
{
/* FIPS Pub 81 */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x12
,
0x34
,
0x56
,
0x78
,
0x90
,
0xab
,
0xcd
,
0xef
},
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
{
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
},
},
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
{
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
},
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
},
/* Copy of above, for chunk testing */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
struct
cipher_testvec
des_cbc_dec_tv_template
[]
=
{
{
/* FIPS Pub 81 */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0x12
,
0x34
,
0x56
,
0x78
,
0x90
,
0xab
,
0xcd
,
0xef
},
.
input
=
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
.
ilen
=
8
,
.
result
=
{
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
.
input
=
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
.
ilen
=
8
,
.
result
=
{
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
.
input
=
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
.
ilen
=
8
,
.
result
=
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
.
rlen
=
8
,
},
{
/* Copy of above, for chunk testing */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0x43
,
0xe9
,
0x34
,
0x00
,
0x8c
,
0x38
,
0x9c
,
0x0f
},
.
input
=
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
.
ilen
=
8
,
.
result
=
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
.
rlen
=
8
,
.
np
=
2
,
.
tap
=
{
4
,
4
}
},
};
/*
* We really need some more test vectors, especially for DES3 CBC.
*/
struct
des_tv
des3_ede_enc_tv_template
[]
=
{
/* These are from openssl */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
struct
cipher_testvec
des3_ede_enc_tv_template
[]
=
{
{
/* These are from openssl */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0
},
{
0x73
,
0x6F
,
0x6D
,
0x65
,
0x64
,
0x61
,
0x74
,
0x61
},
{
0x18
,
0xd7
,
0x48
,
0xe5
,
0x63
,
0x62
,
0x05
,
0x72
},
},
{
8
,
0
,
{
0x03
,
0x52
,
0x02
,
0x07
,
0x67
,
0x20
,
0x82
,
0x17
,
0x86
,
0x02
,
0x87
,
0x66
,
0x59
,
0x08
,
0x21
,
0x98
,
0x64
,
0x05
,
0x6A
,
0xBD
,
0xFE
,
0xA9
,
0x34
,
0x57
},
{
0
},
{
0x73
,
0x71
,
0x75
,
0x69
,
0x67
,
0x67
,
0x6C
,
0x65
},
{
0xc0
,
0x7d
,
0x2a
,
0x0f
,
0xa5
,
0x66
,
0xfa
,
0x30
}
},
{
8
,
0
,
{
0x10
,
0x46
,
0x10
,
0x34
,
0x89
,
0x98
,
0x80
,
0x20
,
0x91
,
0x07
,
0xD0
,
0x15
,
0x89
,
0x19
,
0x01
,
0x01
,
0x19
,
0x07
,
0x92
,
0x10
,
0x98
,
0x1A
,
0x01
,
0x01
},
{
0
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xe1
,
0xef
,
0x62
,
0xc3
,
0x32
,
0xfe
,
0x82
,
0x5b
}
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
klen
=
24
,
.
input
=
{
0x73
,
0x6f
,
0x6d
,
0x65
,
0x64
,
0x61
,
0x74
,
0x61
},
.
ilen
=
8
,
.
result
=
{
0x18
,
0xd7
,
0x48
,
0xe5
,
0x63
,
0x62
,
0x05
,
0x72
},
.
rlen
=
8
,
},
{
.
key
=
{
0x03
,
0x52
,
0x02
,
0x07
,
0x67
,
0x20
,
0x82
,
0x17
,
0x86
,
0x02
,
0x87
,
0x66
,
0x59
,
0x08
,
0x21
,
0x98
,
0x64
,
0x05
,
0x6a
,
0xbd
,
0xfe
,
0xa9
,
0x34
,
0x57
},
.
klen
=
24
,
.
input
=
{
0x73
,
0x71
,
0x75
,
0x69
,
0x67
,
0x67
,
0x6c
,
0x65
},
.
ilen
=
8
,
.
result
=
{
0xc0
,
0x7d
,
0x2a
,
0x0f
,
0xa5
,
0x66
,
0xfa
,
0x30
},
.
rlen
=
8
,
},
{
.
key
=
{
0x10
,
0x46
,
0x10
,
0x34
,
0x89
,
0x98
,
0x80
,
0x20
,
0x91
,
0x07
,
0xd0
,
0x15
,
0x89
,
0x19
,
0x01
,
0x01
,
0x19
,
0x07
,
0x92
,
0x10
,
0x98
,
0x1a
,
0x01
,
0x01
},
.
klen
=
24
,
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
8
,
.
result
=
{
0xe1
,
0xef
,
0x62
,
0xc3
,
0x32
,
0xfe
,
0x82
,
0x5b
},
.
rlen
=
8
,
},
};
struct
des_tv
des3_ede_dec_tv_template
[]
=
{
/* These are from openssl */
{
8
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
struct
cipher_testvec
des3_ede_dec_tv_template
[]
=
{
{
/* These are from openssl */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0x55
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0
},
{
0x18
,
0xd7
,
0x48
,
0xe5
,
0x63
,
0x62
,
0x05
,
0x72
},
{
0x73
,
0x6F
,
0x6D
,
0x65
,
0x64
,
0x61
,
0x74
,
0x61
},
},
{
8
,
0
,
{
0x03
,
0x52
,
0x02
,
0x07
,
0x67
,
0x20
,
0x82
,
0x17
,
0x86
,
0x02
,
0x87
,
0x66
,
0x59
,
0x08
,
0x21
,
0x98
,
0x64
,
0x05
,
0x6A
,
0xBD
,
0xFE
,
0xA9
,
0x34
,
0x57
},
{
0
},
{
0xc0
,
0x7d
,
0x2a
,
0x0f
,
0xa5
,
0x66
,
0xfa
,
0x30
},
{
0x73
,
0x71
,
0x75
,
0x69
,
0x67
,
0x67
,
0x6C
,
0x65
},
},
{
8
,
0
,
{
0x10
,
0x46
,
0x10
,
0x34
,
0x89
,
0x98
,
0x80
,
0x20
,
0x91
,
0x07
,
0xD0
,
0x15
,
0x89
,
0x19
,
0x01
,
0x01
,
0x19
,
0x07
,
0x92
,
0x10
,
0x98
,
0x1A
,
0x01
,
0x01
},
{
0
},
{
0xe1
,
0xef
,
0x62
,
0xc3
,
0x32
,
0xfe
,
0x82
,
0x5b
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
klen
=
24
,
.
input
=
{
0x18
,
0xd7
,
0x48
,
0xe5
,
0x63
,
0x62
,
0x05
,
0x72
},
.
ilen
=
8
,
.
result
=
{
0x73
,
0x6f
,
0x6d
,
0x65
,
0x64
,
0x61
,
0x74
,
0x61
},
.
rlen
=
8
,
},
{
.
key
=
{
0x03
,
0x52
,
0x02
,
0x07
,
0x67
,
0x20
,
0x82
,
0x17
,
0x86
,
0x02
,
0x87
,
0x66
,
0x59
,
0x08
,
0x21
,
0x98
,
0x64
,
0x05
,
0x6a
,
0xbd
,
0xfe
,
0xa9
,
0x34
,
0x57
},
.
klen
=
24
,
.
input
=
{
0xc0
,
0x7d
,
0x2a
,
0x0f
,
0xa5
,
0x66
,
0xfa
,
0x30
},
.
ilen
=
8
,
.
result
=
{
0x73
,
0x71
,
0x75
,
0x69
,
0x67
,
0x67
,
0x6c
,
0x65
},
.
rlen
=
8
,
},
{
.
key
=
{
0x10
,
0x46
,
0x10
,
0x34
,
0x89
,
0x98
,
0x80
,
0x20
,
0x91
,
0x07
,
0xd0
,
0x15
,
0x89
,
0x19
,
0x01
,
0x01
,
0x19
,
0x07
,
0x92
,
0x10
,
0x98
,
0x1a
,
0x01
,
0x01
},
.
klen
=
24
,
.
input
=
{
0xe1
,
0xef
,
0x62
,
0xc3
,
0x32
,
0xfe
,
0x82
,
0x5b
},
.
ilen
=
8
,
.
result
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
rlen
=
8
,
},
};
...
...
@@ -1090,189 +868,151 @@ struct des_tv des3_ede_dec_tv_template[] = {
#define BF_CBC_ENC_TEST_VECTORS 1
#define BF_CBC_DEC_TEST_VECTORS 1
struct
bf_tv
{
unsigned
int
keylen
;
unsigned
int
plen
;
unsigned
int
rlen
;
int
fail
;
char
key
[
56
];
char
iv
[
8
];
char
plaintext
[
32
];
char
result
[
32
];
};
struct
bf_tv
bf_enc_tv_template
[]
=
{
/* DES test vectors from OpenSSL */
{
8
,
8
,
8
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
},
{
0
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x4E
,
0xF9
,
0x97
,
0x45
,
0x61
,
0x98
,
0xDD
,
0x78
},
},
{
8
,
8
,
8
,
0
,
{
0x1F
,
0x1F
,
0x1F
,
0x1F
,
0x0E
,
0x0E
,
0x0E
,
0x0E
,
},
{
0
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
},
{
0xA7
,
0x90
,
0x79
,
0x51
,
0x08
,
0xEA
,
0x3C
,
0xAE
},
},
{
8
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
},
{
0
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0xE8
,
0x7A
,
0x24
,
0x4E
,
0x2C
,
0xC8
,
0x5E
,
0x82
}
},
/* Vary the keylength... */
{
16
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
},
{
0
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0x93
,
0x14
,
0x28
,
0x87
,
0xEE
,
0x3B
,
0xE1
,
0x5C
}
},
{
21
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
,
struct
cipher_testvec
bf_enc_tv_template
[]
=
{
{
/* DES test vectors from OpenSSL */
.
key
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
},
.
klen
=
8
,
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
8
,
.
result
=
{
0x4e
,
0xf9
,
0x97
,
0x45
,
0x61
,
0x98
,
0xdd
,
0x78
},
.
rlen
=
8
,
},
{
.
key
=
{
0x1f
,
0x1f
,
0x1f
,
0x1f
,
0x0e
,
0x0e
,
0x0e
,
0x0e
},
.
klen
=
8
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
ilen
=
8
,
.
result
=
{
0xa7
,
0x90
,
0x79
,
0x51
,
0x08
,
0xea
,
0x3c
,
0xae
},
.
rlen
=
8
,
},
{
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
},
.
klen
=
8
,
.
input
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
ilen
=
8
,
.
result
=
{
0xe8
,
0x7a
,
0x24
,
0x4e
,
0x2c
,
0xc8
,
0x5e
,
0x82
},
.
rlen
=
8
,
},
{
/* Vary the keylength... */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
},
.
klen
=
16
,
.
input
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
ilen
=
8
,
.
result
=
{
0x93
,
0x14
,
0x28
,
0x87
,
0xee
,
0x3b
,
0xe1
,
0x5c
},
.
rlen
=
8
,
},
{
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
},
{
0
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0xE6
,
0xF5
,
0x1E
,
0xD7
,
0x9B
,
0x9D
,
0xB2
,
0x1F
}
},
/* Generated with bf488 */
{
56
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
,
.
klen
=
21
,
.
input
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
ilen
=
8
,
.
result
=
{
0xe6
,
0xf5
,
0x1e
,
0xd7
,
0x9b
,
0x9d
,
0xb2
,
0x1f
},
.
rlen
=
8
,
},
{
/* Generated with bf488 */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x04
,
0x68
,
0x91
,
0x04
,
0xC2
,
0xFD
,
0x3B
,
0x2F
,
0x58
,
0x40
,
0x23
,
0x64
,
0x1A
,
0xBA
,
0x61
,
0x76
,
0x1F
,
0x1F
,
0x1F
,
0x1F
,
0x0E
,
0x0E
,
0x0E
,
0x0E
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
},
{
0
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0xc0
,
0x45
,
0x04
,
0x01
,
0x2e
,
0x4e
,
0x1f
,
0x53
}
}
};
struct
bf_tv
bf_dec_tv_template
[]
=
{
/* DES test vectors from OpenSSL */
{
8
,
8
,
8
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
},
{
0
},
{
0x4E
,
0xF9
,
0x97
,
0x45
,
0x61
,
0x98
,
0xDD
,
0x78
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
}
},
{
8
,
8
,
8
,
0
,
{
0x1F
,
0x1F
,
0x1F
,
0x1F
,
0x0E
,
0x0E
,
0x0E
,
0x0E
,
},
{
0
},
{
0xA7
,
0x90
,
0x79
,
0x51
,
0x08
,
0xEA
,
0x3C
,
0xAE
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
}
},
{
8
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
},
{
0
},
{
0xE8
,
0x7A
,
0x24
,
0x4E
,
0x2C
,
0xC8
,
0x5E
,
0x82
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
}
},
/* Vary the keylength... */
{
16
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
},
{
0
},
{
0x93
,
0x14
,
0x28
,
0x87
,
0xEE
,
0x3B
,
0xE1
,
0x5C
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
}
0x04
,
0x68
,
0x91
,
0x04
,
0xc2
,
0xfd
,
0x3b
,
0x2f
,
0x58
,
0x40
,
0x23
,
0x64
,
0x1a
,
0xba
,
0x61
,
0x76
,
0x1f
,
0x1f
,
0x1f
,
0x1f
,
0x0e
,
0x0e
,
0x0e
,
0x0e
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
},
.
klen
=
56
,
.
input
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
ilen
=
8
,
.
result
=
{
0xc0
,
0x45
,
0x04
,
0x01
,
0x2e
,
0x4e
,
0x1f
,
0x53
},
.
rlen
=
8
,
},
};
{
21
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
,
struct
cipher_testvec
bf_dec_tv_template
[]
=
{
{
/* DES test vectors from OpenSSL */
.
key
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
klen
=
8
,
.
input
=
{
0x4e
,
0xf9
,
0x97
,
0x45
,
0x61
,
0x98
,
0xdd
,
0x78
},
.
ilen
=
8
,
.
result
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
rlen
=
8
,
},
{
.
key
=
{
0x1f
,
0x1f
,
0x1f
,
0x1f
,
0x0e
,
0x0e
,
0x0e
,
0x0e
},
.
klen
=
8
,
.
input
=
{
0xa7
,
0x90
,
0x79
,
0x51
,
0x08
,
0xea
,
0x3c
,
0xae
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
rlen
=
8
,
},
{
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
},
.
klen
=
8
,
.
input
=
{
0xe8
,
0x7a
,
0x24
,
0x4e
,
0x2c
,
0xc8
,
0x5e
,
0x82
},
.
ilen
=
8
,
.
result
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
rlen
=
8
,
},
{
/* Vary the keylength... */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
},
.
klen
=
16
,
.
input
=
{
0x93
,
0x14
,
0x28
,
0x87
,
0xee
,
0x3b
,
0xe1
,
0x5c
},
.
ilen
=
8
,
.
result
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
rlen
=
8
,
},
{
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
},
{
0
},
{
0xE6
,
0xF5
,
0x1E
,
0xD7
,
0x9B
,
0x9D
,
0xB2
,
0x1F
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
}
},
/* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
{
56
,
8
,
8
,
0
,
{
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5A
,
0x4B
,
0x3C
,
0x2D
,
0x1E
,
0x0F
,
.
klen
=
21
,
.
input
=
{
0xe6
,
0xf5
,
0x1e
,
0xd7
,
0x9b
,
0x9d
,
0xb2
,
0x1f
},
.
ilen
=
8
,
.
result
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
rlen
=
8
,
},
{
/* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x04
,
0x68
,
0x91
,
0x04
,
0xC2
,
0xFD
,
0x3B
,
0x2F
,
0x58
,
0x40
,
0x23
,
0x64
,
0x1A
,
0xBA
,
0x61
,
0x76
,
0x1F
,
0x1F
,
0x1F
,
0x1F
,
0x0E
,
0x0E
,
0x0E
,
0x0E
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
},
{
0
},
{
0xc0
,
0x45
,
0x04
,
0x01
,
0x2e
,
0x4e
,
0x1f
,
0x53
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
}
}
0x04
,
0x68
,
0x91
,
0x04
,
0xc2
,
0xfd
,
0x3b
,
0x2f
,
0x58
,
0x40
,
0x23
,
0x64
,
0x1a
,
0xba
,
0x61
,
0x76
,
0x1f
,
0x1f
,
0x1f
,
0x1f
,
0x0e
,
0x0e
,
0x0e
,
0x0e
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
},
.
klen
=
56
,
.
input
=
{
0xc0
,
0x45
,
0x04
,
0x01
,
0x2e
,
0x4e
,
0x1f
,
0x53
},
.
ilen
=
8
,
.
result
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
rlen
=
8
,
},
};
struct
bf_tv
bf_cbc_enc_tv_template
[]
=
{
/* From OpenSSL */
{
16
,
32
,
32
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4E
,
0x6F
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6D
,
0x65
,
0x20
,
0x66
,
0x6F
,
0x72
,
0x20
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x6B
,
0x77
,
0xB4
,
0xD6
,
0x30
,
0x06
,
0xDE
,
0xE6
,
0x05
,
0xB1
,
0x56
,
0xE2
,
0x74
,
0x03
,
0x97
,
0x93
,
0x58
,
0xDE
,
0xB9
,
0xE7
,
0x15
,
0x46
,
0x16
,
0xD9
,
0x59
,
0xF1
,
0x65
,
0x2B
,
0xD5
,
0xFF
,
0x92
,
0xCC
}
struct
cipher_testvec
bf_cbc_enc_tv_template
[]
=
{
{
/* From OpenSSL */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
},
.
klen
=
16
,
.
iv
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
input
=
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
32
,
.
result
=
{
0x6b
,
0x77
,
0xb4
,
0xd6
,
0x30
,
0x06
,
0xde
,
0xe6
,
0x05
,
0xb1
,
0x56
,
0xe2
,
0x74
,
0x03
,
0x97
,
0x93
,
0x58
,
0xde
,
0xb9
,
0xe7
,
0x15
,
0x46
,
0x16
,
0xd9
,
0x59
,
0xf1
,
0x65
,
0x2b
,
0xd5
,
0xff
,
0x92
,
0xcc
},
.
rlen
=
32
,
},
};
struct
bf_tv
bf_cbc_dec_tv_template
[]
=
{
/* From OpenSSL */
{
16
,
32
,
32
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xF0
,
0xE1
,
0xD2
,
0xC3
,
0xB4
,
0xA5
,
0x96
,
0x87
},
{
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
{
0x6B
,
0x77
,
0xB4
,
0xD6
,
0x30
,
0x06
,
0xDE
,
0xE6
,
0x05
,
0xB1
,
0x56
,
0xE2
,
0x74
,
0x03
,
0x97
,
0x93
,
0x58
,
0xDE
,
0xB9
,
0xE7
,
0x15
,
0x46
,
0x16
,
0xD9
,
0x59
,
0xF1
,
0x65
,
0x2B
,
0xD5
,
0xFF
,
0x92
,
0xCC
},
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4E
,
0x6F
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6D
,
0x65
,
0x20
,
0x66
,
0x6F
,
0x72
,
0x20
,
0x00
,
0x00
,
0x00
,
0x00
}
struct
cipher_testvec
bf_cbc_dec_tv_template
[]
=
{
{
/* From OpenSSL */
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
},
.
klen
=
16
,
.
iv
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
input
=
{
0x6b
,
0x77
,
0xb4
,
0xd6
,
0x30
,
0x06
,
0xde
,
0xe6
,
0x05
,
0xb1
,
0x56
,
0xe2
,
0x74
,
0x03
,
0x97
,
0x93
,
0x58
,
0xde
,
0xb9
,
0xe7
,
0x15
,
0x46
,
0x16
,
0xd9
,
0x59
,
0xf1
,
0x65
,
0x2b
,
0xd5
,
0xff
,
0x92
,
0xcc
},
.
ilen
=
32
,
.
result
=
{
0x37
,
0x36
,
0x35
,
0x34
,
0x33
,
0x32
,
0x31
,
0x20
,
0x4e
,
0x6f
,
0x77
,
0x20
,
0x69
,
0x73
,
0x20
,
0x74
,
0x68
,
0x65
,
0x20
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x00
,
0x00
,
0x00
,
0x00
},
.
rlen
=
32
,
},
};
...
...
@@ -1284,212 +1024,161 @@ struct bf_tv bf_cbc_dec_tv_template[] = {
#define TF_CBC_ENC_TEST_VECTORS 4
#define TF_CBC_DEC_TEST_VECTORS 4
struct
tf_tv
{
unsigned
int
keylen
;
unsigned
int
plen
;
unsigned
int
rlen
;
int
fail
;
char
key
[
32
];
char
iv
[
16
];
char
plaintext
[
48
];
char
result
[
48
];
};
struct
tf_tv
tf_enc_tv_template
[]
=
{
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9F
,
0x58
,
0x9F
,
0x5C
,
0xF6
,
0x12
,
0x2C
,
0x32
,
0xB6
,
0xBF
,
0xEC
,
0x2F
,
0x2A
,
0xE8
,
0xC3
,
0x5A
}
},
struct
cipher_testvec
tf_enc_tv_template
[]
=
{
{
24
,
16
,
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
.
rlen
=
16
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
},
{
0
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xCF
,
0xD1
,
0xD2
,
0xE5
,
0xA9
,
0xBE
,
0x9C
,
0xDF
,
0x50
,
0x1F
,
0x13
,
0xB8
,
0x92
,
0xBD
,
0x22
,
0x48
}
},
{
32
,
16
,
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
.
klen
=
24
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0xcf
,
0xd1
,
0xd2
,
0xe5
,
0xa9
,
0xbe
,
0x9c
,
0xdf
,
0x50
,
0x1f
,
0x13
,
0xb8
,
0x92
,
0xbd
,
0x22
,
0x48
},
.
rlen
=
16
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xAA
,
0xBB
,
0xCC
,
0xDD
,
0xEE
,
0xFF
},
{
0
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x37
,
0x52
,
0x7B
,
0xE0
,
0x05
,
0x23
,
0x34
,
0xB8
,
0x9F
,
0x0C
,
0xFC
,
0xCA
,
0xE8
,
0x7C
,
0xFA
,
0x20
}
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
klen
=
32
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x37
,
0x52
,
0x7b
,
0xe0
,
0x05
,
0x23
,
0x34
,
0xb8
,
0x9f
,
0x0c
,
0xfc
,
0xca
,
0xe8
,
0x7c
,
0xfa
,
0x20
},
.
rlen
=
16
,
},
};
struct
tf_tv
tf_dec_tv_template
[]
=
{
struct
cipher_testvec
tf_dec_tv_template
[]
=
{
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0
},
{
0x9F
,
0x58
,
0x9F
,
0x5C
,
0xF6
,
0x12
,
0x2C
,
0x32
,
0xB6
,
0xBF
,
0xEC
,
0x2F
,
0x2A
,
0xE8
,
0xC3
,
0x5A
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
24
,
16
,
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
input
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
},
{
0
},
{
0xCF
,
0xD1
,
0xD2
,
0xE5
,
0xA9
,
0xBE
,
0x9C
,
0xDF
,
0x50
,
0x1F
,
0x13
,
0xB8
,
0x92
,
0xBD
,
0x22
,
0x48
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
32
,
16
,
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
,
0xFE
,
0xDC
,
0xBA
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
.
klen
=
24
,
.
input
=
{
0xcf
,
0xd1
,
0xd2
,
0xe5
,
0xa9
,
0xbe
,
0x9c
,
0xdf
,
0x50
,
0x1f
,
0x13
,
0xb8
,
0x92
,
0xbd
,
0x22
,
0x48
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xAA
,
0xBB
,
0xCC
,
0xDD
,
0xEE
,
0xFF
},
{
0
},
{
0x37
,
0x52
,
0x7B
,
0xE0
,
0x05
,
0x23
,
0x34
,
0xB8
,
0x9F
,
0x0C
,
0xFC
,
0xCA
,
0xE8
,
0x7C
,
0xFA
,
0x20
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
klen
=
32
,
.
input
=
{
0x37
,
0x52
,
0x7b
,
0xe0
,
0x05
,
0x23
,
0x34
,
0xb8
,
0x9f
,
0x0c
,
0xfc
,
0xca
,
0xe8
,
0x7c
,
0xfa
,
0x20
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
};
struct
tf_tv
tf_cbc_enc_tv_template
[]
=
{
/* Generated with Nettle */
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
struct
cipher_testvec
tf_cbc_enc_tv_template
[]
=
{
{
/* Generated with Nettle */
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
[
0
...
15
]
=
0x00
},
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
},
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
}
,
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
.
input
=
{
[
0
...
15
]
=
0x00
}
,
.
ilen
=
16
,
.
result
=
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
},
},
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
}
,
{
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
.
input
=
{
[
0
...
15
]
=
0x00
}
,
.
ilen
=
16
,
.
result
=
{
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
0x34
,
0xba
,
0x5c
,
0xb7
,
0x10
,
0x6a
,
0xa6
,
0x41
},
},
{
16
,
48
,
48
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
[
0
...
15
]
=
0x00
},
.
input
=
{
[
0
...
47
]
=
0x00
},
.
ilen
=
48
,
.
result
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
,
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
,
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
0x34
,
0xba
,
0x5c
,
0xb7
,
0x10
,
0x6a
,
0xa6
,
0x41
},
.
rlen
=
48
,
},
};
struct
tf_tv
tf_cbc_dec_tv_template
[]
=
{
/* Reverse of the first four above */
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
struct
cipher_testvec
tf_cbc_dec_tv_template
[]
=
{
{
/* Reverse of the first four above */
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
[
0
...
15
]
=
0x00
},
.
input
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
.
input
=
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
16
,
16
,
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
},
{
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
.
input
=
{
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
0x34
,
0xba
,
0x5c
,
0xb7
,
0x10
,
0x6a
,
0xa6
,
0x41
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
16
,
48
,
48
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
[
0
...
15
]
=
0x00
},
.
input
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
,
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
0x86
,
0xcb
,
0x08
,
0x6b
,
0x78
,
0x9f
,
0x54
,
0x19
,
0x05
,
0xef
,
0x8c
,
0x61
,
0xa8
,
0x11
,
0x58
,
0x26
,
0x34
,
0xba
,
0x5c
,
0xb7
,
0x10
,
0x6a
,
0xa6
,
0x41
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
48
,
.
result
=
{
[
0
...
47
]
=
0x00
},
.
rlen
=
48
,
},
};
...
...
@@ -1500,179 +1189,162 @@ struct tf_tv tf_cbc_dec_tv_template[] = {
#define SERPENT_ENC_TEST_VECTORS 4
#define SERPENT_DEC_TEST_VECTORS 4
struct
serpent_tv
{
unsigned
int
keylen
,
fail
;
u8
key
[
32
],
plaintext
[
16
],
result
[
16
];
};
struct
serpent_tv
serpent_enc_tv_template
[]
=
struct
cipher_testvec
serpent_enc_tv_template
[]
=
{
{
0
,
0
,
{
0
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
input
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0x12
,
0x07
,
0xfc
,
0xce
,
0x9b
,
0xd0
,
0xd6
,
0x47
,
0x6a
,
0xe9
,
0x8f
,
0xbe
,
0xd1
,
0x43
,
0xa0
,
0xe2
}
},
{
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
ilen
=
16
,
.
result
=
{
0x12
,
0x07
,
0xfc
,
0xce
,
0x9b
,
0xd0
,
0xd6
,
0x47
,
0x6a
,
0xe9
,
0x8f
,
0xbe
,
0xd1
,
0x43
,
0xa0
,
0xe2
},
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
klen
=
16
,
.
input
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0x4c
,
0x7d
,
0x8a
,
0x32
,
0x80
,
0x72
,
0xa2
,
0x2c
,
0x82
,
0x3e
,
0x4a
,
0x1f
,
0x3a
,
0xcd
,
0xa1
,
0x6d
}
},
{
32
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
ilen
=
16
,
.
result
=
{
0x4c
,
0x7d
,
0x8a
,
0x32
,
0x80
,
0x72
,
0xa2
,
0x2c
,
0x82
,
0x3e
,
0x4a
,
0x1f
,
0x3a
,
0xcd
,
0xa1
,
0x6d
},
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
klen
=
32
,
.
input
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0xde
,
0x26
,
0x9f
,
0xf8
,
0x33
,
0xe4
,
0x32
,
0xb8
,
0x5b
,
0x2e
,
0x88
,
0xd2
,
0x70
,
0x1c
,
0xe7
,
0x5c
}
.
ilen
=
16
,
.
result
=
{
0xde
,
0x26
,
0x9f
,
0xf8
,
0x33
,
0xe4
,
0x32
,
0xb8
,
0x5b
,
0x2e
,
0x88
,
0xd2
,
0x70
,
0x1c
,
0xe7
,
0x5c
},
.
rlen
=
16
,
},
{
.
key
=
{
[
15
]
=
0x80
},
.
klen
=
16
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0xdd
,
0xd2
,
0x6b
,
0x98
,
0xa5
,
0xff
,
0xd8
,
0x2c
,
0x05
,
0x34
,
0x5a
,
0x9d
,
0xad
,
0xbf
,
0xaf
,
0x49
},
.
rlen
=
16
,
},
{
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x80
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xdd
,
0xd2
,
0x6b
,
0x98
,
0xa5
,
0xff
,
0xd8
,
0x2c
,
0x05
,
0x34
,
0x5a
,
0x9d
,
0xad
,
0xbf
,
0xaf
,
0x49
}
}
};
struct
serpent_tv
serpent_dec_tv_template
[]
=
struct
cipher_testvec
serpent_dec_tv_template
[]
=
{
{
0
,
0
,
{
0
},
{
0x12
,
0x07
,
0xfc
,
0xce
,
0x9b
,
0xd0
,
0xd6
,
0x47
,
.
input
=
{
0x12
,
0x07
,
0xfc
,
0xce
,
0x9b
,
0xd0
,
0xd6
,
0x47
,
0x6a
,
0xe9
,
0x8f
,
0xbe
,
0xd1
,
0x43
,
0xa0
,
0xe2
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
},
{
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0x4c
,
0x7d
,
0x8a
,
0x32
,
0x80
,
0x72
,
0xa2
,
0x2c
,
.
klen
=
16
,
.
input
=
{
0x4c
,
0x7d
,
0x8a
,
0x32
,
0x80
,
0x72
,
0xa2
,
0x2c
,
0x82
,
0x3e
,
0x4a
,
0x1f
,
0x3a
,
0xcd
,
0xa1
,
0x6d
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
},
{
32
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
{
0xde
,
0x26
,
0x9f
,
0xf8
,
0x33
,
0xe4
,
0x32
,
0xb8
,
.
klen
=
32
,
.
input
=
{
0xde
,
0x26
,
0x9f
,
0xf8
,
0x33
,
0xe4
,
0x32
,
0xb8
,
0x5b
,
0x2e
,
0x88
,
0xd2
,
0x70
,
0x1c
,
0xe7
,
0x5c
},
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
},
{
16
,
0
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x80
},
{
0xdd
,
0xd2
,
0x6b
,
0x98
,
0xa5
,
0xff
,
0xd8
,
0x2c
,
.
rlen
=
16
,
},
{
.
key
=
{
[
15
]
=
0x80
},
.
klen
=
16
,
.
input
=
{
0xdd
,
0xd2
,
0x6b
,
0x98
,
0xa5
,
0xff
,
0xd8
,
0x2c
,
0x05
,
0x34
,
0x5a
,
0x9d
,
0xad
,
0xbf
,
0xaf
,
0x49
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
}
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
};
/* Cast6 test vectors from RFC 2612 */
#define CAST6_ENC_TEST_VECTORS 3
#define CAST6_DEC_TEST_VECTORS 3
struct
cast6_tv
{
unsigned
keylen
;
unsigned
fail
;
u8
key
[
32
];
u8
plaintext
[
16
];
u8
result
[
16
];
};
struct
cast6_tv
cast6_enc_tv_template
[]
=
struct
cipher_testvec
cast6_enc_tv_template
[]
=
{
{
16
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0x0a
,
0xf7
,
0x56
,
0x47
,
0xf2
,
0x9f
,
0x61
,
0x5d
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
.
klen
=
16
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
0x83
,
0x6c
,
0x91
,
0xd1
,
0xb7
,
0x53
,
0x0f
,
0x6b
},
},
{
24
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
rlen
=
16
,
},
{
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0xbe
,
0xd0
,
0xac
,
0x83
,
0x94
,
0x0a
,
0xc2
,
0x98
,
0xba
,
0xc7
,
0x7a
,
0x77
,
0x17
,
0x94
,
0x28
,
0x63
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
.
klen
=
24
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
0xdd
,
0x0e
,
0x41
,
0xaa
,
0x08
,
0xa7
,
0xa7
,
0xe8
},
},
{
32
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
rlen
=
16
,
},
{
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0xbe
,
0xd0
,
0xac
,
0x83
,
0x94
,
0x0a
,
0xc2
,
0x98
,
0x8d
,
0x7c
,
0x47
,
0xce
,
0x26
,
0x49
,
0x08
,
0x46
,
0x1c
,
0xc1
,
0xb5
,
0x13
,
0x7a
,
0xe6
,
0xb6
,
0x04
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
.
klen
=
32
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
0xc9
,
0x87
,
0x01
,
0x36
,
0x55
,
0x33
,
0x17
,
0xfa
},
}
.
rlen
=
16
,
},
};
struct
c
ast6_tv
cast6_dec_tv_template
[]
=
struct
c
ipher_testvec
cast6_dec_tv_template
[]
=
{
{
16
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0x0a
,
0xf7
,
0x56
,
0x47
,
0xf2
,
0x9f
,
0x61
,
0x5d
},
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
.
klen
=
16
,
.
input
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
0x83
,
0x6c
,
0x91
,
0xd1
,
0xb7
,
0x53
,
0x0f
,
0x6b
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
24
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0xbe
,
0xd0
,
0xac
,
0x83
,
0x94
,
0x0a
,
0xc2
,
0x98
,
0xba
,
0xc7
,
0x7a
,
0x77
,
0x17
,
0x94
,
0x28
,
0x63
},
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
.
klen
=
24
,
.
input
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
0xdd
,
0x0e
,
0x41
,
0xaa
,
0x08
,
0xa7
,
0xa7
,
0xe8
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
},
{
32
,
0
,
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
{
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0xbe
,
0xd0
,
0xac
,
0x83
,
0x94
,
0x0a
,
0xc2
,
0x98
,
0x8d
,
0x7c
,
0x47
,
0xce
,
0x26
,
0x49
,
0x08
,
0x46
,
0x1c
,
0xc1
,
0xb5
,
0x13
,
0x7a
,
0xe6
,
0xb6
,
0x04
},
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
.
klen
=
32
,
.
input
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
0xc9
,
0x87
,
0x01
,
0x36
,
0x55
,
0x33
,
0x17
,
0xfa
},
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
}
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
},
};
...
...
@@ -1682,90 +1354,77 @@ struct cast6_tv cast6_dec_tv_template[] =
#define AES_ENC_TEST_VECTORS 3
#define AES_DEC_TEST_VECTORS 3
struct
aes_tv
{
unsigned
int
keylen
;
unsigned
int
plen
;
unsigned
int
rlen
;
int
fail
;
char
key
[
32
];
char
iv
[
8
];
char
plaintext
[
16
];
char
result
[
16
];
};
struct
aes_tv
aes_enc_tv_template
[]
=
{
/* From FIPS-197 */
{
16
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
struct
cipher_testvec
aes_enc_tv_template
[]
=
{
{
/* From FIPS-197 */
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0
}
,
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
klen
=
16
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
{
0x69
,
0xc4
,
0xe0
,
0xd8
,
0x6a
,
0x7b
,
0x04
,
0x30
,
.
ilen
=
16
,
.
result
=
{
0x69
,
0xc4
,
0xe0
,
0xd8
,
0x6a
,
0x7b
,
0x04
,
0x30
,
0xd8
,
0xcd
,
0xb7
,
0x80
,
0x70
,
0xb4
,
0xc5
,
0x5a
},
},
{
24
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
},
{
0
}
,
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
klen
=
24
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
.
ilen
=
16
,
.
result
=
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
0x6e
,
0xaf
,
0x70
,
0xa0
,
0xec
,
0x0d
,
0x71
,
0x91
},
},
{
32
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
{
0
}
,
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
klen
=
32
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
.
ilen
=
16
,
.
result
=
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
0xea
,
0xfc
,
0x49
,
0x90
,
0x4b
,
0x49
,
0x60
,
0x89
},
.
rlen
=
16
,
},
};
struct
aes_tv
aes_dec_tv_template
[]
=
{
/* From FIPS-197 */
{
16
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
struct
cipher_testvec
aes_dec_tv_template
[]
=
{
{
/* From FIPS-197 */
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
{
0
}
,
{
0x69
,
0xc4
,
0xe0
,
0xd8
,
0x6a
,
0x7b
,
0x04
,
0x30
,
.
klen
=
16
,
.
input
=
{
0x69
,
0xc4
,
0xe0
,
0xd8
,
0x6a
,
0x7b
,
0x04
,
0x30
,
0xd8
,
0xcd
,
0xb7
,
0x80
,
0x70
,
0xb4
,
0xc5
,
0x5a
},
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
},
{
24
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
},
{
0
}
,
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
.
klen
=
24
,
.
input
=
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
0x6e
,
0xaf
,
0x70
,
0xa0
,
0xec
,
0x0d
,
0x71
,
0x91
},
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
},
{
32
,
16
,
16
,
0
,
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
{
0
}
,
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
.
klen
=
32
,
.
input
=
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
0xea
,
0xfc
,
0x49
,
0x90
,
0x4b
,
0x49
,
0x60
,
0x89
},
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
ilen
=
16
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
rlen
=
16
,
},
};
...
...
@@ -1773,68 +1432,60 @@ struct aes_tv aes_dec_tv_template[] = {
#define CAST5_ENC_TEST_VECTORS 3
#define CAST5_DEC_TEST_VECTORS 3
struct
cast5_tv
{
unsigned
keylen
;
unsigned
fail
;
u8
key
[
16
];
u8
plaintext
[
8
];
u8
ciphertext
[
8
];
};
struct
cast5_tv
cast5_enc_tv_template
[]
=
struct
cipher_testvec
cast5_enc_tv_template
[]
=
{
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9A
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
},
{
10
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9a
},
.
klen
=
16
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
ilen
=
8
,
.
result
=
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
.
klen
=
10
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
ilen
=
8
,
.
result
=
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
.
klen
=
5
,
.
input
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
ilen
=
8
,
.
result
=
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
.
rlen
=
8
,
},
{
5
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
}
};
struct
c
ast5_tv
cast5_dec_tv_template
[]
=
struct
c
ipher_testvec
cast5_dec_tv_template
[]
=
{
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9A
},
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
},
{
10
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9a
},
.
klen
=
16
,
.
input
=
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
},
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
10
,
.
input
=
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
rlen
=
8
,
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
.
klen
=
5
,
.
input
=
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
.
ilen
=
8
,
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
rlen
=
8
,
},
{
5
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
}
};
/*
...
...
@@ -1857,27 +1508,22 @@ struct comp_testvec {
struct
comp_testvec
deflate_comp_tv_template
[]
=
{
{
70
,
38
,
"Join us now and share the software "
.
inlen
=
70
,
.
outlen
=
38
,
.
input
=
"Join us now and share the software "
"Join us now and share the software "
,
{
0xf3
,
0xca
,
0xcf
,
0xcc
,
0x53
,
0x28
,
0x2d
,
0x56
,
.
output
=
{
0xf3
,
0xca
,
0xcf
,
0xcc
,
0x53
,
0x28
,
0x2d
,
0x56
,
0xc8
,
0xcb
,
0x2f
,
0x57
,
0x48
,
0xcc
,
0x4b
,
0x51
,
0x28
,
0xce
,
0x48
,
0x2c
,
0x4a
,
0x55
,
0x28
,
0xc9
,
0x48
,
0x55
,
0x28
,
0xce
,
0x4f
,
0x2b
,
0x29
,
0x07
,
0x71
,
0xbc
,
0x08
,
0x2b
,
0x01
,
0x00
},
},
{
191
,
122
,
"This document describes a compression method based on the DEFLATE"
0x71
,
0xbc
,
0x08
,
0x2b
,
0x01
,
0x00
},
},
{
.
inlen
=
191
,
.
outlen
=
122
,
.
input
=
"This document describes a compression method based on the DEFLATE"
"compression algorithm. This document defines the application of "
"the DEFLATE algorithm to the IP Payload Compression Protocol."
,
{
0x5d
,
0x8d
,
0x31
,
0x0e
,
0xc2
,
0x30
,
0x10
,
0x04
,
.
output
=
{
0x5d
,
0x8d
,
0x31
,
0x0e
,
0xc2
,
0x30
,
0x10
,
0x04
,
0xbf
,
0xb2
,
0x2f
,
0xc8
,
0x1f
,
0x10
,
0x04
,
0x09
,
0x89
,
0xc2
,
0x85
,
0x3f
,
0x70
,
0xb1
,
0x2f
,
0xf8
,
0x24
,
0xdb
,
0x67
,
0xd9
,
0x47
,
0xc1
,
0xef
,
0x49
,
...
...
@@ -1898,9 +1544,9 @@ struct comp_testvec deflate_comp_tv_template[] = {
struct
comp_testvec
deflate_decomp_tv_template
[]
=
{
{
122
,
191
,
{
0x5d
,
0x8d
,
0x31
,
0x0e
,
0xc2
,
0x30
,
0x10
,
0x04
,
.
inlen
=
122
,
.
outlen
=
191
,
.
input
=
{
0x5d
,
0x8d
,
0x31
,
0x0e
,
0xc2
,
0x30
,
0x10
,
0x04
,
0xbf
,
0xb2
,
0x2f
,
0xc8
,
0x1f
,
0x10
,
0x04
,
0x09
,
0x89
,
0xc2
,
0x85
,
0x3f
,
0x70
,
0xb1
,
0x2f
,
0xf8
,
0x24
,
0xdb
,
0x67
,
0xd9
,
0x47
,
0xc1
,
0xef
,
0x49
,
...
...
@@ -1916,23 +1562,18 @@ struct comp_testvec deflate_decomp_tv_template[] = {
0xfe
,
0x8a
,
0x87
,
0x83
,
0xa3
,
0x4f
,
0x56
,
0x8a
,
0xb8
,
0x9e
,
0x8e
,
0x5c
,
0x57
,
0xd3
,
0xa0
,
0x79
,
0xfa
,
0x02
},
"This document describes a compression method based on the DEFLATE"
.
output
=
"This document describes a compression method based on the DEFLATE"
"compression algorithm. This document defines the application of "
"the DEFLATE algorithm to the IP Payload Compression Protocol."
,
},
{
38
,
70
,
{
0xf3
,
0xca
,
0xcf
,
0xcc
,
0x53
,
0x28
,
0x2d
,
0x56
,
},
{
.
inlen
=
38
,
.
outlen
=
70
,
.
input
=
{
0xf3
,
0xca
,
0xcf
,
0xcc
,
0x53
,
0x28
,
0x2d
,
0x56
,
0xc8
,
0xcb
,
0x2f
,
0x57
,
0x48
,
0xcc
,
0x4b
,
0x51
,
0x28
,
0xce
,
0x48
,
0x2c
,
0x4a
,
0x55
,
0x28
,
0xc9
,
0x48
,
0x55
,
0x28
,
0xce
,
0x4f
,
0x2b
,
0x29
,
0x07
,
0x71
,
0xbc
,
0x08
,
0x2b
,
0x01
,
0x00
},
"Join us now and share the software "
0x71
,
0xbc
,
0x08
,
0x2b
,
0x01
,
0x00
},
.
output
=
"Join us now and share the software "
"Join us now and share the software "
,
},
};
...
...
include/linux/sysctl.h
View file @
c41a3ca5
...
...
@@ -579,6 +579,14 @@ enum {
NET_SCTP_MAX_BURST
=
12
,
};
/* /proc/sys/net/bridge */
enum
{
NET_BRIDGE_NF_CALL_ARPTABLES
=
1
,
NET_BRIDGE_NF_CALL_IPTABLES
=
2
,
NET_BRIDGE_NF_CALL_IP6TABLES
=
3
,
NET_BRIDGE_NF_FILTER_VLAN_TAGGED
=
4
,
};
/* CTL_PROC names: */
/* CTL_FS names: */
...
...
include/net/ax25.h
View file @
c41a3ca5
...
...
@@ -227,8 +227,7 @@ extern void ax25_cb_add(ax25_cb *);
struct
sock
*
ax25_find_listener
(
ax25_address
*
,
int
,
struct
net_device
*
,
int
);
struct
sock
*
ax25_get_socket
(
ax25_address
*
,
ax25_address
*
,
int
);
extern
ax25_cb
*
ax25_find_cb
(
ax25_address
*
,
ax25_address
*
,
ax25_digi
*
,
struct
net_device
*
);
extern
struct
sock
*
ax25_addr_match
(
ax25_address
*
);
extern
void
ax25_send_to_raw
(
struct
sock
*
,
struct
sk_buff
*
,
int
);
extern
void
ax25_send_to_raw
(
ax25_address
*
,
struct
sk_buff
*
,
int
);
extern
void
ax25_destroy_socket
(
ax25_cb
*
);
extern
ax25_cb
*
ax25_create_cb
(
void
);
extern
void
ax25_fillin_cb
(
ax25_cb
*
,
ax25_dev
*
);
...
...
include/net/pkt_cls.h
View file @
c41a3ca5
...
...
@@ -81,7 +81,12 @@ static inline int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, struct
return
-
1
;
}
static
inline
void
tcf_destroy
(
struct
tcf_proto
*
tp
)
{
tp
->
ops
->
destroy
(
tp
);
module_put
(
tp
->
ops
->
owner
);
kfree
(
tp
);
}
extern
int
register_tcf_proto_ops
(
struct
tcf_proto_ops
*
ops
);
extern
int
unregister_tcf_proto_ops
(
struct
tcf_proto_ops
*
ops
);
...
...
net/ax25/af_ax25.c
View file @
c41a3ca5
...
...
@@ -228,45 +228,25 @@ ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
return
NULL
;
}
/*
* Look for any matching address - RAW sockets can bind to arbitrary names
*/
struct
sock
*
ax25_addr_match
(
ax25_address
*
addr
)
void
ax25_send_to_raw
(
ax25_address
*
addr
,
struct
sk_buff
*
skb
,
int
proto
)
{
struct
sock
*
sk
=
NULL
;
ax25_cb
*
s
;
struct
sk_buff
*
copy
;
struct
hlist_node
*
node
;
spin_lock_bh
(
&
ax25_list_lock
);
ax25_for_each
(
s
,
node
,
&
ax25_list
)
{
if
(
s
->
sk
!=
NULL
&&
ax25cmp
(
&
s
->
source_addr
,
addr
)
==
0
&&
s
->
sk
->
sk_type
==
SOCK_RAW
)
{
sk
=
s
->
sk
;
lock_sock
(
sk
);
break
;
}
}
spin_unlock_bh
(
&
ax25_list_lock
);
return
sk
;
}
void
ax25_send_to_raw
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
proto
)
{
struct
sk_buff
*
copy
;
struct
hlist_node
*
node
;
sk_for_each_from
(
sk
,
node
)
if
(
sk
->
sk_type
==
SOCK_RAW
&&
sk
->
sk_protocol
==
proto
&&
atomic_read
(
&
sk
->
sk_rmem_alloc
)
<=
sk
->
sk_rcvbuf
)
{
s
->
sk
->
sk_type
==
SOCK_RAW
&&
s
->
sk
->
sk_protocol
==
proto
&&
s
->
ax25_dev
->
dev
==
skb
->
dev
&&
atomic_read
(
&
s
->
sk
->
sk_rmem_alloc
)
<=
s
->
sk
->
sk_rcvbuf
)
{
if
((
copy
=
skb_clone
(
skb
,
GFP_ATOMIC
))
==
NULL
)
return
;
if
(
sock_queue_rcv_skb
(
sk
,
copy
)
!=
0
)
continue
;
if
(
sock_queue_rcv_skb
(
s
->
sk
,
copy
)
!=
0
)
kfree_skb
(
copy
);
}
}
}
/*
...
...
@@ -318,7 +298,7 @@ void ax25_destroy_socket(ax25_cb *ax25)
ax25_cb
*
sax25
=
ax25_sk
(
skb
->
sk
);
/* Queue the unaccepted socket for death */
sock_
set_flag
(
skb
->
sk
,
SOCK_DEAD
);
sock_
orphan
(
skb
->
sk
);
ax25_start_heartbeat
(
sax25
);
sax25
->
state
=
AX25_STATE_0
;
...
...
@@ -913,6 +893,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
if
(
oax25
->
digipeat
!=
NULL
)
{
if
((
ax25
->
digipeat
=
kmalloc
(
sizeof
(
ax25_digi
),
GFP_ATOMIC
))
==
NULL
)
{
sk_free
(
sk
);
ax25_cb_put
(
ax25
);
return
NULL
;
}
...
...
@@ -934,20 +915,25 @@ static int ax25_release(struct socket *sock)
return
0
;
sock_hold
(
sk
);
sock_orphan
(
sk
);
lock_sock
(
sk
);
ax25
=
ax25_sk
(
sk
);
if
(
sk
->
sk_type
==
SOCK_SEQPACKET
)
{
switch
(
ax25
->
state
)
{
case
AX25_STATE_0
:
release_sock
(
sk
);
ax25_disconnect
(
ax25
,
0
);
lock_sock
(
sk
);
ax25_destroy_socket
(
ax25
);
break
;
case
AX25_STATE_1
:
case
AX25_STATE_2
:
ax25_send_control
(
ax25
,
AX25_DISC
,
AX25_POLLON
,
AX25_COMMAND
);
release_sock
(
sk
);
ax25_disconnect
(
ax25
,
0
);
lock_sock
(
sk
);
ax25_destroy_socket
(
ax25
);
break
;
...
...
@@ -980,7 +966,6 @@ static int ax25_release(struct socket *sock)
sk
->
sk_state
=
TCP_CLOSE
;
sk
->
sk_shutdown
|=
SEND_SHUTDOWN
;
sk
->
sk_state_change
(
sk
);
sock_set_flag
(
sk
,
SOCK_DEAD
);
sock_set_flag
(
sk
,
SOCK_DESTROY
);
break
;
...
...
@@ -991,12 +976,10 @@ static int ax25_release(struct socket *sock)
sk
->
sk_state
=
TCP_CLOSE
;
sk
->
sk_shutdown
|=
SEND_SHUTDOWN
;
sk
->
sk_state_change
(
sk
);
sock_set_flag
(
sk
,
SOCK_DEAD
);
ax25_destroy_socket
(
ax25
);
}
sock
->
sk
=
NULL
;
sk
->
sk_socket
=
NULL
;
/* Not used, but we should do this */
release_sock
(
sk
);
sock_put
(
sk
);
...
...
@@ -1334,11 +1317,13 @@ static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
release_sock
(
sk
);
current
->
state
=
TASK_INTERRUPTIBLE
;
if
(
flags
&
O_NONBLOCK
)
if
(
flags
&
O_NONBLOCK
)
{
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
EWOULDBLOCK
;
}
if
(
!
signal_pending
(
tsk
))
{
schedule
();
current
->
state
=
TASK_RUNNING
;
lock_sock
(
sk
);
continue
;
}
...
...
net/ax25/ax25_in.c
View file @
c41a3ca5
...
...
@@ -147,7 +147,6 @@ int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
}
if
(
ax25
->
sk
!=
NULL
&&
ax25
->
ax25_dev
->
values
[
AX25_VALUES_CONMODE
]
==
2
)
{
bh_lock_sock
(
ax25
->
sk
);
if
((
!
ax25
->
pidincl
&&
ax25
->
sk
->
sk_protocol
==
pid
)
||
ax25
->
pidincl
)
{
if
(
sock_queue_rcv_skb
(
ax25
->
sk
,
skb
)
==
0
)
...
...
@@ -155,7 +154,6 @@ int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
else
ax25
->
condition
|=
AX25_COND_OWN_RX_BUSY
;
}
bh_unlock_sock
(
ax25
->
sk
);
}
return
queued
;
...
...
@@ -195,7 +193,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
{
ax25_address
src
,
dest
,
*
next_digi
=
NULL
;
int
type
=
0
,
mine
=
0
,
dama
;
struct
sock
*
make
,
*
sk
,
*
raw
;
struct
sock
*
make
,
*
sk
;
ax25_digi
dp
,
reverse_dp
;
ax25_cb
*
ax25
;
ax25_dev
*
ax25_dev
;
...
...
@@ -243,10 +241,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
if
((
*
skb
->
data
&
~
0x10
)
==
AX25_UI
&&
dp
.
lastrepeat
+
1
==
dp
.
ndigi
)
{
skb
->
h
.
raw
=
skb
->
data
+
2
;
/* skip control and pid */
if
((
raw
=
ax25_addr_match
(
&
dest
))
!=
NULL
)
{
ax25_send_to_raw
(
raw
,
skb
,
skb
->
data
[
1
]);
release_sock
(
raw
);
}
ax25_send_to_raw
(
&
dest
,
skb
,
skb
->
data
[
1
]);
if
(
!
mine
&&
ax25cmp
(
&
dest
,
(
ax25_address
*
)
dev
->
broadcast
)
!=
0
)
{
kfree_skb
(
skb
);
...
...
@@ -381,7 +376,6 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
sk
->
sk_ack_backlog
++
;
bh_unlock_sock
(
sk
);
sock_put
(
sk
);
}
else
{
if
(
!
mine
)
{
kfree_skb
(
skb
);
...
...
@@ -407,6 +401,8 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
(
ax25
->
digipeat
=
kmalloc
(
sizeof
(
ax25_digi
),
GFP_ATOMIC
))
==
NULL
)
{
kfree_skb
(
skb
);
ax25_destroy_socket
(
ax25
);
if
(
sk
)
sock_put
(
sk
);
return
0
;
}
...
...
@@ -446,6 +442,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
if
(
sk
)
{
if
(
!
sock_flag
(
sk
,
SOCK_DEAD
))
sk
->
sk_data_ready
(
sk
,
skb
->
len
);
sock_put
(
sk
);
}
else
kfree_skb
(
skb
);
...
...
net/bluetooth/af_bluetooth.c
View file @
c41a3ca5
...
...
@@ -360,3 +360,4 @@ module_exit(bt_cleanup);
MODULE_AUTHOR
(
"Maxim Krasnyansky <maxk@qualcomm.com>"
);
MODULE_DESCRIPTION
(
"Bluetooth Core ver "
VERSION
);
MODULE_LICENSE
(
"GPL"
);
MODULE_ALIAS_NETPROTO
(
PF_BLUETOOTH
);
net/bluetooth/bnep/core.c
View file @
c41a3ca5
...
...
@@ -707,4 +707,3 @@ module_exit(bnep_cleanup_module);
MODULE_DESCRIPTION
(
"Bluetooth BNEP ver "
VERSION
);
MODULE_AUTHOR
(
"David Libault <david.libault@inventel.fr>, Maxim Krasnyanskiy <maxk@qualcomm.com>"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_ALIAS_NETPROTO
(
PF_BLUETOOTH
);
net/bridge/br_netfilter.c
View file @
c41a3ca5
...
...
@@ -35,6 +35,9 @@
#include <asm/uaccess.h>
#include <asm/checksum.h>
#include "br_private.h"
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
#endif
#define skb_origaddr(skb) (((struct bridge_skb_cb *) \
...
...
@@ -47,10 +50,21 @@
#define has_bridge_parent(device) ((device)->br_port != NULL)
#define bridge_parent(device) ((device)->br_port->br->dev)
#ifdef CONFIG_SYSCTL
static
struct
ctl_table_header
*
brnf_sysctl_header
;
static
int
brnf_call_iptables
=
1
;
static
int
brnf_call_arptables
=
1
;
static
int
brnf_filter_vlan_tagged
=
1
;
#else
#define brnf_filter_vlan_tagged 1
#endif
#define IS_VLAN_IP (skb->protocol == __constant_htons(ETH_P_8021Q) && \
hdr->h_vlan_encapsulated_proto == __constant_htons(ETH_P_IP))
hdr->h_vlan_encapsulated_proto == __constant_htons(ETH_P_IP) && \
brnf_filter_vlan_tagged)
#define IS_VLAN_ARP (skb->protocol == __constant_htons(ETH_P_8021Q) && \
hdr->h_vlan_encapsulated_proto == __constant_htons(ETH_P_ARP))
hdr->h_vlan_encapsulated_proto == __constant_htons(ETH_P_ARP) && \
brnf_filter_vlan_tagged)
/* We need these fake structures to make netfilter happy --
* lots of places assume that skb->dst != NULL, which isn't
...
...
@@ -74,8 +88,7 @@ static struct rtable __fake_rtable = {
.
metrics
=
{[
RTAX_MTU
-
1
]
=
1500
},
}
},
.
rt_flags
=
0
.
rt_flags
=
0
,
};
...
...
@@ -251,6 +264,11 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
struct
sk_buff
*
skb
=
*
pskb
;
struct
nf_bridge_info
*
nf_bridge
;
#ifdef CONFIG_SYSCTL
if
(
!
brnf_call_iptables
)
return
NF_ACCEPT
;
#endif
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_IP
))
{
struct
vlan_ethhdr
*
hdr
=
(
struct
vlan_ethhdr
*
)
((
*
pskb
)
->
mac
.
ethernet
);
...
...
@@ -373,7 +391,7 @@ static int br_nf_forward_finish(struct sk_buff *skb)
* because of the ipt_physdev.c module. For ARP, indev and outdev are the
* bridge ports.
*/
static
unsigned
int
br_nf_forward
(
unsigned
int
hook
,
struct
sk_buff
**
pskb
,
static
unsigned
int
br_nf_forward
_ip
(
unsigned
int
hook
,
struct
sk_buff
**
pskb
,
const
struct
net_device
*
in
,
const
struct
net_device
*
out
,
int
(
*
okfn
)(
struct
sk_buff
*
))
{
...
...
@@ -381,9 +399,13 @@ static unsigned int br_nf_forward(unsigned int hook, struct sk_buff **pskb,
struct
nf_bridge_info
*
nf_bridge
;
struct
vlan_ethhdr
*
hdr
=
(
struct
vlan_ethhdr
*
)(
skb
->
mac
.
ethernet
);
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_IP
)
&&
skb
->
protocol
!=
__constant_htons
(
ETH_P_ARP
))
{
if
(
!
IS_VLAN_IP
&&
!
IS_VLAN_ARP
)
#ifdef CONFIG_SYSCTL
if
(
!
skb
->
nf_bridge
)
return
NF_ACCEPT
;
#endif
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_IP
))
{
if
(
!
IS_VLAN_IP
)
return
NF_ACCEPT
;
skb_pull
(
*
pskb
,
VLAN_HLEN
);
(
*
pskb
)
->
nh
.
raw
+=
VLAN_HLEN
;
...
...
@@ -392,7 +414,6 @@ static unsigned int br_nf_forward(unsigned int hook, struct sk_buff **pskb,
#ifdef CONFIG_NETFILTER_DEBUG
skb
->
nf_debug
^=
(
1
<<
NF_BR_FORWARD
);
#endif
if
(
skb
->
protocol
==
__constant_htons
(
ETH_P_IP
)
||
IS_VLAN_IP
)
{
nf_bridge
=
skb
->
nf_bridge
;
if
(
skb
->
pkt_type
==
PACKET_OTHERHOST
)
{
skb
->
pkt_type
=
PACKET_HOST
;
...
...
@@ -405,11 +426,33 @@ static unsigned int br_nf_forward(unsigned int hook, struct sk_buff **pskb,
NF_HOOK
(
PF_INET
,
NF_IP_FORWARD
,
skb
,
bridge_parent
(
in
),
bridge_parent
(
out
),
br_nf_forward_finish
);
}
else
{
return
NF_STOLEN
;
}
static
unsigned
int
br_nf_forward_arp
(
unsigned
int
hook
,
struct
sk_buff
**
pskb
,
const
struct
net_device
*
in
,
const
struct
net_device
*
out
,
int
(
*
okfn
)(
struct
sk_buff
*
))
{
struct
sk_buff
*
skb
=
*
pskb
;
struct
vlan_ethhdr
*
hdr
=
(
struct
vlan_ethhdr
*
)(
skb
->
mac
.
ethernet
);
struct
net_device
**
d
=
(
struct
net_device
**
)(
skb
->
cb
);
struct
arphdr
*
arp
=
skb
->
nh
.
arph
;
if
(
arp
->
ar_pln
!=
4
)
{
if
(
!
brnf_call_arptables
)
return
NF_ACCEPT
;
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_ARP
))
{
if
(
!
IS_VLAN_ARP
)
return
NF_ACCEPT
;
skb_pull
(
*
pskb
,
VLAN_HLEN
);
(
*
pskb
)
->
nh
.
raw
+=
VLAN_HLEN
;
}
#ifdef CONFIG_NETFILTER_DEBUG
skb
->
nf_debug
^=
(
1
<<
NF_BR_FORWARD
);
#endif
if
(
skb
->
nh
.
arph
->
ar_pln
!=
4
)
{
if
(
IS_VLAN_ARP
)
{
skb_push
(
*
pskb
,
VLAN_HLEN
);
(
*
pskb
)
->
nh
.
raw
-=
VLAN_HLEN
;
...
...
@@ -419,12 +462,10 @@ static unsigned int br_nf_forward(unsigned int hook, struct sk_buff **pskb,
*
d
=
(
struct
net_device
*
)
in
;
NF_HOOK
(
NF_ARP
,
NF_ARP_FORWARD
,
skb
,
(
struct
net_device
*
)
in
,
(
struct
net_device
*
)
out
,
br_nf_forward_finish
);
}
return
NF_STOLEN
;
}
/* PF_BRIDGE/LOCAL_OUT ***********************************************/
static
int
br_nf_local_out_finish
(
struct
sk_buff
*
skb
)
{
...
...
@@ -475,6 +516,11 @@ static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
struct
nf_bridge_info
*
nf_bridge
;
struct
vlan_ethhdr
*
hdr
=
(
struct
vlan_ethhdr
*
)(
skb
->
mac
.
ethernet
);
#ifdef CONFIG_SYSCTL
if
(
!
skb
->
nf_bridge
)
return
NF_ACCEPT
;
#endif
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_IP
)
&&
!
IS_VLAN_IP
)
return
NF_ACCEPT
;
...
...
@@ -485,6 +531,7 @@ static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
return
NF_ACCEPT
;
nf_bridge
=
skb
->
nf_bridge
;
nf_bridge
->
physoutdev
=
skb
->
dev
;
realindev
=
nf_bridge
->
physindev
;
...
...
@@ -567,6 +614,11 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
return
NF_ACCEPT
;
}
#ifdef CONFIG_SYSCTL
if
(
!
nf_bridge
)
return
NF_ACCEPT
;
#endif
if
(
skb
->
protocol
!=
__constant_htons
(
ETH_P_IP
)
&&
!
IS_VLAN_IP
)
return
NF_ACCEPT
;
...
...
@@ -632,6 +684,13 @@ static unsigned int ipv4_sabotage_out(unsigned int hook, struct sk_buff **pskb,
const
struct
net_device
*
in
,
const
struct
net_device
*
out
,
int
(
*
okfn
)(
struct
sk_buff
*
))
{
struct
sk_buff
*
skb
=
*
pskb
;
#ifdef CONFIG_SYSCTL
if
(
!
brnf_call_iptables
&&
!
skb
->
nf_bridge
)
return
NF_ACCEPT
;
#endif
if
((
out
->
hard_start_xmit
==
br_dev_xmit
&&
okfn
!=
br_nf_forward_finish
&&
okfn
!=
br_nf_local_out_finish
&&
...
...
@@ -641,7 +700,6 @@ static unsigned int ipv4_sabotage_out(unsigned int hook, struct sk_buff **pskb,
VLAN_DEV_INFO
(
out
)
->
real_dev
->
hard_start_xmit
==
br_dev_xmit
)
#endif
)
{
struct
sk_buff
*
skb
=
*
pskb
;
struct
nf_bridge_info
*
nf_bridge
;
if
(
!
skb
->
nf_bridge
&&
!
nf_bridge_alloc
(
skb
))
...
...
@@ -687,7 +745,12 @@ static struct nf_hook_ops br_nf_ops[] = {
.
pf
=
PF_BRIDGE
,
.
hooknum
=
NF_BR_LOCAL_IN
,
.
priority
=
NF_BR_PRI_BRNF
,
},
{
.
hook
=
br_nf_forward
,
{
.
hook
=
br_nf_forward_ip
,
.
owner
=
THIS_MODULE
,
.
pf
=
PF_BRIDGE
,
.
hooknum
=
NF_BR_FORWARD
,
.
priority
=
NF_BR_PRI_BRNF
-
1
,
},
{
.
hook
=
br_nf_forward_arp
,
.
owner
=
THIS_MODULE
,
.
pf
=
PF_BRIDGE
,
.
hooknum
=
NF_BR_FORWARD
,
...
...
@@ -724,6 +787,69 @@ static struct nf_hook_ops br_nf_ops[] = {
.
priority
=
NF_IP_PRI_FIRST
,
},
};
#ifdef CONFIG_SYSCTL
static
int
brnf_sysctl_call_tables
(
ctl_table
*
ctl
,
int
write
,
struct
file
*
filp
,
void
*
buffer
,
size_t
*
lenp
)
{
int
ret
;
ret
=
proc_dointvec
(
ctl
,
write
,
filp
,
buffer
,
lenp
);
if
(
write
&&
*
(
int
*
)(
ctl
->
data
))
*
(
int
*
)(
ctl
->
data
)
=
1
;
return
ret
;
}
static
ctl_table
brnf_table
[]
=
{
{
.
ctl_name
=
NET_BRIDGE_NF_CALL_ARPTABLES
,
.
procname
=
"bridge-nf-call-arptables"
,
.
data
=
&
brnf_call_arptables
,
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
proc_handler
=
&
brnf_sysctl_call_tables
,
},
{
.
ctl_name
=
NET_BRIDGE_NF_CALL_IPTABLES
,
.
procname
=
"bridge-nf-call-iptables"
,
.
data
=
&
brnf_call_iptables
,
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
proc_handler
=
&
brnf_sysctl_call_tables
,
},
{
.
ctl_name
=
NET_BRIDGE_NF_FILTER_VLAN_TAGGED
,
.
procname
=
"bridge-nf-filter-vlan-tagged"
,
.
data
=
&
brnf_filter_vlan_tagged
,
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
proc_handler
=
&
brnf_sysctl_call_tables
,
},
{
.
ctl_name
=
0
}
};
static
ctl_table
brnf_bridge_table
[]
=
{
{
.
ctl_name
=
NET_BRIDGE
,
.
procname
=
"bridge"
,
.
mode
=
0555
,
.
child
=
brnf_table
,
},
{
.
ctl_name
=
0
}
};
static
ctl_table
brnf_net_table
[]
=
{
{
.
ctl_name
=
CTL_NET
,
.
procname
=
"net"
,
.
mode
=
0555
,
.
child
=
brnf_bridge_table
,
},
{
.
ctl_name
=
0
}
};
#endif
int
br_netfilter_init
(
void
)
{
int
i
;
...
...
@@ -740,6 +866,16 @@ int br_netfilter_init(void)
return
ret
;
}
#ifdef CONFIG_SYSCTL
brnf_sysctl_header
=
register_sysctl_table
(
brnf_net_table
,
0
);
if
(
brnf_sysctl_header
==
NULL
)
{
printk
(
KERN_WARNING
"br_netfilter: can't register to sysctl.
\n
"
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
br_nf_ops
);
i
++
)
nf_unregister_hook
(
&
br_nf_ops
[
i
]);
return
-
EFAULT
;
}
#endif
printk
(
KERN_NOTICE
"Bridge firewalling registered
\n
"
);
return
0
;
...
...
@@ -751,4 +887,7 @@ void br_netfilter_fini(void)
for
(
i
=
ARRAY_SIZE
(
br_nf_ops
)
-
1
;
i
>=
0
;
i
--
)
nf_unregister_hook
(
&
br_nf_ops
[
i
]);
#ifdef CONFIG_SYSCTL
unregister_sysctl_table
(
brnf_sysctl_header
);
#endif
}
net/core/neighbour.c
View file @
c41a3ca5
...
...
@@ -98,7 +98,7 @@ static int neigh_blackhole(struct sk_buff *skb)
/*
* It is random distribution in the interval (1/2)*base...(3/2)*base.
* It corresponds to default IPv6 settings and is not overridable,
* because it is really reason
ba
le choice.
* because it is really reason
ab
le choice.
*/
unsigned
long
neigh_rand_reach_time
(
unsigned
long
base
)
...
...
@@ -120,7 +120,7 @@ static int neigh_forced_gc(struct neigh_table *tbl)
while
((
n
=
*
np
)
!=
NULL
)
{
/* Neighbour record may be discarded if:
- nobody refers to it.
- it is not p
re
manent
- it is not p
er
manent
- (NEW and probably wrong)
INCOMPLETE entries are kept at least for
n->parms->retrans_time, otherwise we could
...
...
@@ -510,7 +510,7 @@ static void neigh_suspect(struct neighbour *neigh)
{
struct
hh_cache
*
hh
;
NEIGH_PRINTK2
(
"neigh %p is suspected
ed
.
\n
"
,
neigh
);
NEIGH_PRINTK2
(
"neigh %p is suspected.
\n
"
,
neigh
);
neigh
->
output
=
neigh
->
ops
->
output
;
...
...
@@ -537,7 +537,7 @@ static void neigh_connect(struct neighbour *neigh)
/*
Transitions NUD_STALE <-> NUD_REACHABLE do not occur
when fast path is built: we have no timers asso
t
iated with
when fast path is built: we have no timers asso
c
iated with
these states, we do not have time to check state when sending.
neigh_periodic_timer check periodically neigh->confirmed
time and moves NUD_REACHABLE -> NUD_STALE.
...
...
@@ -962,7 +962,7 @@ static void neigh_hh_init(struct neighbour *n, struct dst_entry *dst,
/* This function can be used in contexts, where only old dev_queue_xmit
worked, f.e. if you want to override normal output path (eql, shaper),
but resol
t
ution is not made yet.
but resolution is not made yet.
*/
int
neigh_compat_output
(
struct
sk_buff
*
skb
)
...
...
net/ipv6/ndisc.c
View file @
c41a3ca5
...
...
@@ -207,9 +207,8 @@ static struct ndisc_options *ndisc_parse_options(u8 *opt, int opt_len,
case
ND_OPT_MTU
:
case
ND_OPT_REDIRECT_HDR
:
if
(
ndopts
->
nd_opt_array
[
nd_opt
->
nd_opt_type
])
{
ND_PRINTK2
((
KERN_WARNING
"ndisc_parse_options(): duplicated ND6 option found: type=%d
\n
"
,
nd_opt
->
nd_opt_type
));
ND_PRINTK2
(
"ndisc_parse_options(): duplicated ND6 option found: type=%d
\n
"
,
nd_opt
->
nd_opt_type
);
}
else
{
ndopts
->
nd_opt_array
[
nd_opt
->
nd_opt_type
]
=
nd_opt
;
}
...
...
@@ -619,6 +618,7 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
1
,
&
err
);
if
(
skb
==
NULL
)
{
ND_PRINTK1
(
"send_ns: alloc skb failed
\n
"
);
dst_release
(
dst
);
return
;
}
...
...
@@ -1166,9 +1166,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
ND_PRINTK0
(
"NDISC: router announcement with mtu = %d
\n
"
,
mtu
);
}
}
if
(
in6_dev
->
cnf
.
mtu6
!=
mtu
)
{
}
else
if
(
in6_dev
->
cnf
.
mtu6
!=
mtu
)
{
in6_dev
->
cnf
.
mtu6
=
mtu
;
if
(
rt
)
...
...
net/netrom/af_netrom.c
View file @
c41a3ca5
...
...
@@ -532,7 +532,7 @@ static int nr_release(struct socket *sock)
sk
->
sk_state
=
TCP_CLOSE
;
sk
->
sk_shutdown
|=
SEND_SHUTDOWN
;
sk
->
sk_state_change
(
sk
);
sock_
set_flag
(
sk
,
SOCK_DEAD
);
sock_
orphan
(
sk
);
sock_set_flag
(
sk
,
SOCK_DESTROY
);
sk
->
sk_socket
=
NULL
;
break
;
...
...
@@ -727,6 +727,8 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
lock_sock
(
sk
);
continue
;
}
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
ERESTARTSYS
;
}
current
->
state
=
TASK_RUNNING
;
...
...
@@ -780,13 +782,18 @@ static int nr_accept(struct socket *sock, struct socket *newsock, int flags)
current
->
state
=
TASK_INTERRUPTIBLE
;
release_sock
(
sk
);
if
(
flags
&
O_NONBLOCK
)
if
(
flags
&
O_NONBLOCK
)
{
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
EWOULDBLOCK
;
}
if
(
!
signal_pending
(
tsk
))
{
schedule
();
lock_sock
(
sk
);
continue
;
}
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
ERESTARTSYS
;
}
current
->
state
=
TASK_RUNNING
;
...
...
@@ -1377,7 +1384,7 @@ static int __init nr_proto_init(void)
{
int
i
;
if
(
nr_ndevs
>
0x7fffffff
/
sizeof
(
struct
net_device
))
{
if
(
nr_ndevs
>
0x7fffffff
/
sizeof
(
struct
net_device
*
))
{
printk
(
KERN_ERR
"NET/ROM: nr_proto_init - nr_ndevs parameter to large
\n
"
);
return
-
1
;
}
...
...
@@ -1405,6 +1412,7 @@ static int __init nr_proto_init(void)
dev
->
base_addr
=
i
;
if
(
register_netdev
(
dev
))
{
printk
(
KERN_ERR
"NET/ROM: nr_proto_init - unable to register network device
\n
"
);
free_netdev
(
dev
);
goto
fail
;
}
dev_nr
[
i
]
=
dev
;
...
...
@@ -1433,8 +1441,10 @@ static int __init nr_proto_init(void)
return
0
;
fail:
while
(
--
i
>=
0
)
while
(
--
i
>=
0
)
{
unregister_netdev
(
dev_nr
[
i
]);
free_netdev
(
dev_nr
[
i
]);
}
kfree
(
dev_nr
);
return
-
1
;
}
...
...
@@ -1474,8 +1484,10 @@ static void __exit nr_exit(void)
for
(
i
=
0
;
i
<
nr_ndevs
;
i
++
)
{
struct
net_device
*
dev
=
dev_nr
[
i
];
if
(
dev
)
if
(
dev
)
{
unregister_netdev
(
dev
);
free_netdev
(
dev
);
}
}
kfree
(
dev_nr
);
...
...
net/netrom/nr_dev.c
View file @
c41a3ca5
...
...
@@ -204,7 +204,6 @@ void nr_setup(struct net_device *dev)
dev
->
hard_start_xmit
=
nr_xmit
;
dev
->
open
=
nr_open
;
dev
->
stop
=
nr_close
;
dev
->
destructor
=
free_netdev
;
dev
->
hard_header
=
nr_header
;
dev
->
hard_header_len
=
NR_NETWORK_LEN
+
NR_TRANSPORT_LEN
;
...
...
net/packet/af_packet.c
View file @
c41a3ca5
...
...
@@ -246,6 +246,10 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev, struct
if
((
skb
=
skb_share_check
(
skb
,
GFP_ATOMIC
))
==
NULL
)
goto
oom
;
/* drop any routing info */
dst_release
(
skb
->
dst
);
skb
->
dst
=
NULL
;
spkt
=
(
struct
sockaddr_pkt
*
)
skb
->
cb
;
skb_push
(
skb
,
skb
->
data
-
skb
->
mac
.
raw
);
...
...
@@ -486,6 +490,9 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, struct packe
skb_set_owner_r
(
skb
,
sk
);
skb
->
dev
=
NULL
;
dst_release
(
skb
->
dst
);
skb
->
dst
=
NULL
;
spin_lock
(
&
sk
->
sk_receive_queue
.
lock
);
po
->
stats
.
tp_packets
++
;
__skb_queue_tail
(
&
sk
->
sk_receive_queue
,
skb
);
...
...
net/rose/af_rose.c
View file @
c41a3ca5
...
...
@@ -359,7 +359,7 @@ void rose_destroy_socket(struct sock *sk)
sk
->
sk_timer
.
data
=
(
unsigned
long
)
sk
;
add_timer
(
&
sk
->
sk_timer
);
}
else
s
k_free
(
sk
);
s
ock_put
(
sk
);
}
/*
...
...
@@ -634,7 +634,6 @@ static int rose_release(struct socket *sock)
}
sock
->
sk
=
NULL
;
sk
->
sk_socket
=
NULL
;
/* Not used, but we should do this. **/
return
0
;
}
...
...
@@ -813,6 +812,8 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
schedule
();
continue
;
}
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
ERESTARTSYS
;
}
current
->
state
=
TASK_RUNNING
;
...
...
@@ -864,8 +865,11 @@ static int rose_accept(struct socket *sock, struct socket *newsock, int flags)
current
->
state
=
TASK_INTERRUPTIBLE
;
release_sock
(
sk
);
if
(
flags
&
O_NONBLOCK
)
if
(
flags
&
O_NONBLOCK
)
{
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
sk
->
sk_sleep
,
&
wait
);
return
-
EWOULDBLOCK
;
}
if
(
!
signal_pending
(
tsk
))
{
schedule
();
lock_sock
(
sk
);
...
...
@@ -1482,7 +1486,7 @@ static int __init rose_proto_init(void)
rose_callsign
=
null_ax25_address
;
if
(
rose_ndevs
>
0x7FFFFFFF
/
sizeof
(
struct
net_device
))
{
if
(
rose_ndevs
>
0x7FFFFFFF
/
sizeof
(
struct
net_device
*
))
{
printk
(
KERN_ERR
"ROSE: rose_proto_init - rose_ndevs parameter to large
\n
"
);
return
-
1
;
}
...
...
@@ -1503,23 +1507,14 @@ static int __init rose_proto_init(void)
name
,
rose_setup
);
if
(
!
dev
)
{
printk
(
KERN_ERR
"ROSE: rose_proto_init - unable to allocate memory
\n
"
);
while
(
--
i
>=
0
)
kfree
(
dev_rose
[
i
]);
return
-
ENOMEM
;
}
dev_rose
[
i
]
=
dev
;
goto
fail
;
}
for
(
i
=
0
;
i
<
rose_ndevs
;
i
++
)
{
if
(
register_netdev
(
dev_rose
[
i
]))
{
if
(
register_netdev
(
dev
))
{
printk
(
KERN_ERR
"ROSE: netdevice regeistration failed
\n
"
);
while
(
--
i
>=
0
)
{
unregister_netdev
(
dev_rose
[
i
]);
kfree
(
dev_rose
[
i
]);
return
-
EIO
;
}
free_netdev
(
dev
);
goto
fail
;
}
dev_rose
[
i
]
=
dev
;
}
sock_register
(
&
rose_family_ops
);
...
...
@@ -1542,6 +1537,13 @@ static int __init rose_proto_init(void)
proc_net_fops_create
(
"rose_routes"
,
S_IRUGO
,
&
rose_routes_fops
);
return
0
;
fail:
while
(
--
i
>=
0
)
{
unregister_netdev
(
dev_rose
[
i
]);
free_netdev
(
dev_rose
[
i
]);
}
kfree
(
dev_rose
);
return
-
ENOMEM
;
}
module_init
(
rose_proto_init
);
...
...
net/sched/cls_api.c
View file @
c41a3ca5
...
...
@@ -247,10 +247,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
*
back
=
tp
->
next
;
spin_unlock_bh
(
&
dev
->
queue_lock
);
write_unlock
(
&
qdisc_tree_lock
);
tp
->
ops
->
destroy
(
tp
);
module_put
(
tp
->
ops
->
owner
);
kfree
(
tp
);
tcf_destroy
(
tp
);
err
=
0
;
goto
errout
;
}
...
...
net/sched/sch_atm.c
View file @
c41a3ca5
...
...
@@ -162,7 +162,7 @@ static void destroy_filters(struct atm_flow_data *flow)
while
((
filter
=
flow
->
filter_list
))
{
DPRINTK
(
"destroy_filters: destroying filter %p
\n
"
,
filter
);
flow
->
filter_list
=
filter
->
next
;
filter
->
ops
->
destroy
(
filter
);
tcf_
destroy
(
filter
);
}
}
...
...
net/sched/sch_cbq.c
View file @
c41a3ca5
...
...
@@ -1705,7 +1705,7 @@ static void cbq_destroy_filters(struct cbq_class *cl)
while
((
tp
=
cl
->
filter_list
)
!=
NULL
)
{
cl
->
filter_list
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
}
...
...
net/sched/sch_csz.c
View file @
c41a3ca5
...
...
@@ -752,7 +752,7 @@ csz_destroy(struct Qdisc* sch)
while
((
tp
=
q
->
filter_list
)
!=
NULL
)
{
q
->
filter_list
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
}
...
...
net/sched/sch_dsmark.c
View file @
c41a3ca5
...
...
@@ -378,7 +378,7 @@ static void dsmark_destroy(struct Qdisc *sch)
while
(
p
->
filter_list
)
{
tp
=
p
->
filter_list
;
p
->
filter_list
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
qdisc_destroy
(
p
->
q
);
p
->
q
=
&
noop_qdisc
;
...
...
net/sched/sch_htb.c
View file @
c41a3ca5
...
...
@@ -1338,7 +1338,7 @@ static void htb_destroy_filters(struct tcf_proto **fl)
while
((
tp
=
*
fl
)
!=
NULL
)
{
*
fl
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
}
...
...
net/sched/sch_ingress.c
View file @
c41a3ca5
...
...
@@ -292,7 +292,7 @@ static void ingress_destroy(struct Qdisc *sch)
while
(
p
->
filter_list
)
{
tp
=
p
->
filter_list
;
p
->
filter_list
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
memset
(
p
,
0
,
sizeof
(
*
p
));
p
->
filter_list
=
NULL
;
...
...
net/sched/sch_prio.c
View file @
c41a3ca5
...
...
@@ -162,7 +162,7 @@ prio_destroy(struct Qdisc* sch)
while
((
tp
=
q
->
filter_list
)
!=
NULL
)
{
q
->
filter_list
=
tp
->
next
;
t
p
->
ops
->
destroy
(
tp
);
t
cf_
destroy
(
tp
);
}
for
(
prio
=
0
;
prio
<
q
->
bands
;
prio
++
)
{
...
...
net/sched/sch_tbf.c
View file @
c41a3ca5
...
...
@@ -108,6 +108,10 @@
Note that the peak rate TBF is much more tough: with MTU 1500
P_crit = 150Kbytes/sec. So, if you need greater peak
rates, use alpha with HZ=1000 :-)
With classful TBF, limit is just kept for backwards compatibility.
It is passed to the default bfifo qdisc - if the inner qdisc is
changed the limit is not effective anymore.
*/
struct
tbf_sched_data
...
...
@@ -136,7 +140,7 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch)
struct
tbf_sched_data
*
q
=
(
struct
tbf_sched_data
*
)
sch
->
data
;
int
ret
;
if
(
skb
->
len
>
q
->
max_size
||
sch
->
stats
.
backlog
+
skb
->
len
>
q
->
limit
)
{
if
(
skb
->
len
>
q
->
max_size
)
{
sch
->
stats
.
drops
++
;
#ifdef CONFIG_NET_CLS_POLICE
if
(
sch
->
reshape_fail
==
NULL
||
sch
->
reshape_fail
(
skb
,
sch
))
...
...
@@ -152,7 +156,6 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch)
}
sch
->
q
.
qlen
++
;
sch
->
stats
.
backlog
+=
skb
->
len
;
sch
->
stats
.
bytes
+=
skb
->
len
;
sch
->
stats
.
packets
++
;
return
0
;
...
...
@@ -163,10 +166,8 @@ static int tbf_requeue(struct sk_buff *skb, struct Qdisc* sch)
struct
tbf_sched_data
*
q
=
(
struct
tbf_sched_data
*
)
sch
->
data
;
int
ret
;
if
((
ret
=
q
->
qdisc
->
ops
->
requeue
(
skb
,
q
->
qdisc
))
==
0
)
{
if
((
ret
=
q
->
qdisc
->
ops
->
requeue
(
skb
,
q
->
qdisc
))
==
0
)
sch
->
q
.
qlen
++
;
sch
->
stats
.
backlog
+=
skb
->
len
;
}
return
ret
;
}
...
...
@@ -178,7 +179,6 @@ static unsigned int tbf_drop(struct Qdisc* sch)
if
((
len
=
q
->
qdisc
->
ops
->
drop
(
q
->
qdisc
))
!=
0
)
{
sch
->
q
.
qlen
--
;
sch
->
stats
.
backlog
-=
len
;
sch
->
stats
.
drops
++
;
}
return
len
;
...
...
@@ -224,7 +224,6 @@ static struct sk_buff *tbf_dequeue(struct Qdisc* sch)
q
->
t_c
=
now
;
q
->
tokens
=
toks
;
q
->
ptokens
=
ptoks
;
sch
->
stats
.
backlog
-=
len
;
sch
->
q
.
qlen
--
;
sch
->
flags
&=
~
TCQ_F_THROTTLED
;
return
skb
;
...
...
@@ -253,7 +252,6 @@ static struct sk_buff *tbf_dequeue(struct Qdisc* sch)
if
(
q
->
qdisc
->
ops
->
requeue
(
skb
,
q
->
qdisc
)
!=
NET_XMIT_SUCCESS
)
{
/* When requeue fails skb is dropped */
sch
->
q
.
qlen
--
;
sch
->
stats
.
backlog
-=
len
;
sch
->
stats
.
drops
++
;
}
...
...
@@ -269,7 +267,6 @@ static void tbf_reset(struct Qdisc* sch)
qdisc_reset
(
q
->
qdisc
);
sch
->
q
.
qlen
=
0
;
sch
->
stats
.
backlog
=
0
;
PSCHED_GET_TIME
(
q
->
t_c
);
q
->
tokens
=
q
->
buffer
;
q
->
ptokens
=
q
->
mtu
;
...
...
@@ -456,7 +453,6 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
*
old
=
xchg
(
&
q
->
qdisc
,
new
);
qdisc_reset
(
*
old
);
sch
->
q
.
qlen
=
0
;
sch
->
stats
.
backlog
=
0
;
sch_tree_unlock
(
sch
);
return
0
;
...
...
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