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
nexedi
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