Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
060de20e
Commit
060de20e
authored
Jun 22, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
parents
b7c84c6a
2c4ee8f9
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
921 additions
and
482 deletions
+921
-482
crypto/tcrypt.c
crypto/tcrypt.c
+407
-173
crypto/tcrypt.h
crypto/tcrypt.h
+262
-187
drivers/net/appletalk/ltpc.c
drivers/net/appletalk/ltpc.c
+2
-4
include/linux/netdevice.h
include/linux/netdevice.h
+2
-2
include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
+2
-1
include/linux/netpoll.h
include/linux/netpoll.h
+26
-8
include/linux/x25.h
include/linux/x25.h
+12
-0
include/net/x25.h
include/net/x25.h
+5
-4
net/appletalk/aarp.c
net/appletalk/aarp.c
+3
-4
net/bridge/netfilter/ebtables.c
net/bridge/netfilter/ebtables.c
+7
-14
net/core/netpoll.c
net/core/netpoll.c
+59
-21
net/ipv4/netfilter/ipt_CLUSTERIP.c
net/ipv4/netfilter/ipt_CLUSTERIP.c
+1
-1
net/ipv4/route.c
net/ipv4/route.c
+4
-4
net/socket.c
net/socket.c
+1
-2
net/x25/af_x25.c
net/x25/af_x25.c
+81
-29
net/x25/x25_facilities.c
net/x25/x25_facilities.c
+29
-5
net/x25/x25_subr.c
net/x25/x25_subr.c
+18
-23
No files found.
crypto/tcrypt.c
View file @
060de20e
/*
/*
* Quick & dirty crypto testing module.
*
* This will only exist until we have a better testing mechanism
...
...
@@ -9,11 +9,12 @@
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* 14 - 09 - 2003
* Rewritten by Kartikey Mahendra Bhatt
* 2004-08-09 Added cipher speed tests (Reyk Floeter <reyk@vantronix.net>)
* 2003-09-14 Rewritten by Kartikey Mahendra Bhatt
*
*/
#include <linux/init.h>
...
...
@@ -25,12 +26,15 @@
#include <linux/crypto.h>
#include <linux/highmem.h>
#include <linux/moduleparam.h>
#include <linux/jiffies.h>
#include <linux/timex.h>
#include <linux/interrupt.h>
#include "tcrypt.h"
/*
* Need to kmalloc() memory for testing kmap().
*/
#define TVMEMSIZE
4096
#define TVMEMSIZE
16384
#define XBUFSIZE 32768
/*
...
...
@@ -55,19 +59,23 @@
static
unsigned
int
IDX
[
8
]
=
{
IDX1
,
IDX2
,
IDX3
,
IDX4
,
IDX5
,
IDX6
,
IDX7
,
IDX8
};
/*
* Used by test_cipher_speed()
*/
static
unsigned
int
sec
;
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"
,
"arc4"
,
"michael_mic"
,
"deflate"
,
"crc32c"
,
"tea"
,
"xtea"
,
"twofish"
,
"serpent"
,
"sha384"
,
"sha512"
,
"md4"
,
"aes"
,
"cast6"
,
"arc4"
,
"michael_mic"
,
"deflate"
,
"crc32c"
,
"tea"
,
"xtea"
,
"khazad"
,
"wp512"
,
"wp384"
,
"wp256"
,
"tnepres"
,
NULL
};
static
void
hexdump
(
unsigned
char
*
buf
,
unsigned
int
len
)
static
void
hexdump
(
unsigned
char
*
buf
,
unsigned
int
len
)
{
while
(
len
--
)
printk
(
"%02x"
,
*
buf
++
);
...
...
@@ -75,29 +83,29 @@ hexdump(unsigned char *buf, unsigned int len)
printk
(
"
\n
"
);
}
static
void
test_hash
(
char
*
algo
,
struct
hash_testvec
*
template
,
unsigned
int
tcount
)
static
void
test_hash
(
char
*
algo
,
struct
hash_testvec
*
template
,
unsigned
int
tcount
)
{
char
*
p
;
unsigned
int
i
,
j
,
k
,
temp
;
struct
scatterlist
sg
[
8
];
char
result
[
64
];
struct
crypto_tfm
*
tfm
;
struct
hash_testvec
*
hash_tv
;
unsigned
int
tsize
;
printk
(
"
\n
testing %s
\n
"
,
algo
);
tsize
=
sizeof
(
struct
hash_testvec
);
char
*
p
;
unsigned
int
i
,
j
,
k
,
temp
;
struct
scatterlist
sg
[
8
];
char
result
[
64
];
struct
crypto_tfm
*
tfm
;
struct
hash_testvec
*
hash_tv
;
unsigned
int
tsize
;
printk
(
"
\n
testing %s
\n
"
,
algo
);
tsize
=
sizeof
(
struct
hash_testvec
);
tsize
*=
tcount
;
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
template
,
tsize
);
hash_tv
=
(
void
*
)
tvmem
;
hash_tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for %s
\n
"
,
algo
);
...
...
@@ -105,70 +113,71 @@ test_hash (char * algo, struct hash_testvec * template, unsigned int tcount)
}
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
64
);
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
64
);
p
=
hash_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
hash_tv
[
i
].
psize
;
crypto_digest_init
(
tfm
);
crypto_digest_init
(
tfm
);
if
(
tfm
->
crt_u
.
digest
.
dit_setkey
)
{
crypto_digest_setkey
(
tfm
,
hash_tv
[
i
].
key
,
hash_tv
[
i
].
ksize
);
crypto_digest_setkey
(
tfm
,
hash_tv
[
i
].
key
,
hash_tv
[
i
].
ksize
);
}
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
crypto_digest_update
(
tfm
,
sg
,
1
);
crypto_digest_final
(
tfm
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
printk
(
"testing %s across pages
\n
"
,
algo
);
printk
(
"testing %s across pages
\n
"
,
algo
);
/* setup the dummy buffer first */
memset
(
xbuf
,
0
,
XBUFSIZE
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
hash_tv
[
i
].
np
)
{
j
++
;
printk
(
"test %u:
\n
"
,
j
);
memset
(
result
,
0
,
64
);
printk
(
"test %u:
\n
"
,
j
);
memset
(
result
,
0
,
64
);
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
]);
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
].
page
=
virt_to_page
(
p
);
sg
[
k
].
offset
=
offset_in_page
(
p
);
sg
[
k
].
length
=
hash_tv
[
i
].
tap
[
k
];
}
crypto_digest_digest
(
tfm
,
sg
,
hash_tv
[
i
].
np
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
crypto_digest_digest
(
tfm
,
sg
,
hash_tv
[
i
].
np
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
memcmp
(
result
,
hash_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
}
crypto_free_tfm
(
tfm
);
crypto_free_tfm
(
tfm
);
}
#ifdef CONFIG_CRYPTO_HMAC
static
void
test_hmac
(
char
*
algo
,
struct
hmac_testvec
*
template
,
unsigned
int
tcount
)
static
void
test_hmac
(
char
*
algo
,
struct
hmac_testvec
*
template
,
unsigned
int
tcount
)
{
char
*
p
;
unsigned
int
i
,
j
,
k
,
temp
;
...
...
@@ -185,8 +194,8 @@ test_hmac(char *algo, struct hmac_testvec * template, unsigned int tcount)
}
printk
(
"
\n
testing hmac_%s
\n
"
,
algo
);
tsize
=
sizeof
(
struct
hmac_testvec
);
tsize
=
sizeof
(
struct
hmac_testvec
);
tsize
*=
tcount
;
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
...
...
@@ -195,7 +204,7 @@ test_hmac(char *algo, struct hmac_testvec * template, unsigned int tcount)
}
memcpy
(
tvmem
,
template
,
tsize
);
hmac_tv
=
(
void
*
)
tvmem
;
hmac_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
printk
(
"test %u:
\n
"
,
i
+
1
);
...
...
@@ -219,34 +228,35 @@ test_hmac(char *algo, struct hmac_testvec * template, unsigned int tcount)
printk
(
"
\n
testing hmac_%s across pages
\n
"
,
algo
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
hmac_tv
[
i
].
np
)
{
j
++
;
printk
(
"test %u:
\n
"
,
j
);
memset
(
result
,
0
,
64
);
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
]);
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
].
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
);
crypto_hmac
(
tfm
,
hmac_tv
[
i
].
key
,
&
klen
,
sg
,
hmac_tv
[
i
].
np
,
result
);
hexdump
(
result
,
crypto_tfm_alg_digestsize
(
tfm
));
printk
(
"%s
\n
"
,
memcmp
(
result
,
hmac_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
memcmp
(
result
,
hmac_tv
[
i
].
digest
,
crypto_tfm_alg_digestsize
(
tfm
))
?
"fail"
:
"pass"
);
}
}
out:
...
...
@@ -255,8 +265,8 @@ test_hmac(char *algo, struct hmac_testvec * template, unsigned int tcount)
#endif
/* CONFIG_CRYPTO_HMAC */
static
void
test_cipher
(
char
*
algo
,
int
mode
,
int
enc
,
struct
cipher_testvec
*
template
,
unsigned
int
tcount
)
static
void
test_cipher
(
char
*
algo
,
int
mode
,
int
enc
,
struct
cipher_testvec
*
template
,
unsigned
int
tcount
)
{
unsigned
int
ret
,
i
,
j
,
k
,
temp
;
unsigned
int
tsize
;
...
...
@@ -265,22 +275,22 @@ test_cipher(char * algo, int mode, int enc, struct cipher_testvec * template, un
char
*
key
;
struct
cipher_testvec
*
cipher_tv
;
struct
scatterlist
sg
[
8
];
c
har
e
[
11
],
m
[
4
]
;
c
onst
char
*
e
,
*
m
;
if
(
enc
==
ENCRYPT
)
strncpy
(
e
,
"encryption"
,
11
)
;
e
=
"encryption"
;
else
strncpy
(
e
,
"decryption"
,
11
)
;
e
=
"decryption"
;
if
(
mode
==
MODE_ECB
)
strncpy
(
m
,
"ECB"
,
4
)
;
m
=
"ECB"
;
else
strncpy
(
m
,
"CBC"
,
4
)
;
m
=
"CBC"
;
printk
(
"
\n
testing %s %s %s
\n
"
,
algo
,
m
,
e
);
printk
(
"
\n
testing %s %s %s
\n
"
,
algo
,
m
,
e
);
tsize
=
sizeof
(
struct
cipher_testvec
);
tsize
=
sizeof
(
struct
cipher_testvec
);
tsize
*=
tcount
;
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
...
...
@@ -288,112 +298,113 @@ test_cipher(char * algo, int mode, int enc, struct cipher_testvec * template, un
}
memcpy
(
tvmem
,
template
,
tsize
);
cipher_tv
=
(
void
*
)
tvmem
;
cipher_tv
=
(
void
*
)
tvmem
;
if
(
mode
)
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
else
tfm
=
crypto_alloc_tfm
(
algo
,
CRYPTO_TFM_MODE_CBC
);
if
(
mode
)
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
else
tfm
=
crypto_alloc_tfm
(
algo
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for %s %s
\n
"
,
algo
,
m
);
return
;
}
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
!
(
cipher_tv
[
i
].
np
))
{
j
++
;
j
++
;
printk
(
"test %u (%d bit key):
\n
"
,
j
,
cipher_tv
[
i
].
klen
*
8
);
tfm
->
crt_flags
=
0
;
if
(
cipher_tv
[
i
].
wk
)
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
(
!
cipher_tv
[
i
].
fail
)
goto
out
;
}
}
p
=
cipher_tv
[
i
].
input
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
cipher_tv
[
i
].
ilen
;
if
(
!
mode
)
{
crypto_cipher_set_iv
(
tfm
,
cipher_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
crypto_tfm_alg_ivsize
(
tfm
));
}
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
);
if
(
ret
)
{
printk
(
"%s () failed flags=%x
\n
"
,
e
,
tfm
->
crt_flags
);
goto
out
;
}
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
cipher_tv
[
i
].
rlen
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
cipher_tv
[
i
].
result
,
cipher_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
printk
(
"%s
\n
"
,
memcmp
(
q
,
cipher_tv
[
i
].
result
,
cipher_tv
[
i
].
rlen
)
?
"fail"
:
"pass"
);
}
}
printk
(
"
\n
testing %s %s %s across pages (chunking)
\n
"
,
algo
,
m
,
e
);
printk
(
"
\n
testing %s %s %s across pages (chunking)
\n
"
,
algo
,
m
,
e
);
memset
(
xbuf
,
0
,
XBUFSIZE
);
j
=
0
;
for
(
i
=
0
;
i
<
tcount
;
i
++
)
{
if
(
cipher_tv
[
i
].
np
)
{
j
++
;
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
=
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
);
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
cipher_tv
[
i
].
klen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
cipher_tv
[
i
].
fail
)
goto
out
;
}
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
]);
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
].
page
=
virt_to_page
(
p
);
sg
[
k
].
offset
=
offset_in_page
(
p
);
sg
[
k
].
length
=
cipher_tv
[
i
].
tap
[
k
];
}
if
(
!
mode
)
{
crypto_cipher_set_iv
(
tfm
,
cipher_tv
[
i
].
iv
,
crypto_tfm_alg_ivsize
(
tfm
));
crypto_tfm_alg_ivsize
(
tfm
));
}
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
);
if
(
ret
)
{
printk
(
"%s () failed flags=%x
\n
"
,
e
,
tfm
->
crt_flags
);
goto
out
;
...
...
@@ -404,9 +415,9 @@ test_cipher(char * algo, int mode, int enc, struct cipher_testvec * template, un
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"
:
printk
(
"%s
\n
"
,
memcmp
(
q
,
cipher_tv
[
i
].
result
+
temp
,
cipher_tv
[
i
].
tap
[
k
])
?
"fail"
:
"pass"
);
temp
+=
cipher_tv
[
i
].
tap
[
k
];
}
...
...
@@ -417,8 +428,169 @@ test_cipher(char * algo, int mode, int enc, struct cipher_testvec * template, un
crypto_free_tfm
(
tfm
);
}
static
void
test_deflate
(
void
)
static
int
test_cipher_jiffies
(
struct
crypto_tfm
*
tfm
,
int
enc
,
char
*
p
,
int
blen
,
int
sec
)
{
struct
scatterlist
sg
[
8
];
unsigned
long
start
,
end
;
int
bcount
;
int
ret
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
blen
;
for
(
start
=
jiffies
,
end
=
start
+
sec
*
HZ
,
bcount
=
0
;
time_before
(
jiffies
,
end
);
bcount
++
)
{
if
(
enc
)
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
blen
);
else
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
blen
);
if
(
ret
)
return
ret
;
}
printk
(
"%d operations in %d seconds (%ld bytes)
\n
"
,
bcount
,
sec
,
(
long
)
bcount
*
blen
);
return
0
;
}
static
int
test_cipher_cycles
(
struct
crypto_tfm
*
tfm
,
int
enc
,
char
*
p
,
int
blen
)
{
struct
scatterlist
sg
[
8
];
unsigned
long
cycles
=
0
;
int
ret
=
0
;
int
i
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
offset_in_page
(
p
);
sg
[
0
].
length
=
blen
;
local_bh_disable
();
local_irq_disable
();
/* Warm-up run. */
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
enc
)
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
blen
);
else
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
blen
);
if
(
ret
)
goto
out
;
}
/* The real thing. */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
cycles_t
start
,
end
;
start
=
get_cycles
();
if
(
enc
)
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
blen
);
else
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
blen
);
end
=
get_cycles
();
if
(
ret
)
goto
out
;
cycles
+=
end
-
start
;
}
out:
local_irq_enable
();
local_bh_enable
();
if
(
ret
==
0
)
printk
(
"1 operation in %lu cycles (%d bytes)
\n
"
,
(
cycles
+
4
)
/
8
,
blen
);
return
ret
;
}
static
void
test_cipher_speed
(
char
*
algo
,
int
mode
,
int
enc
,
unsigned
int
sec
,
struct
cipher_testvec
*
template
,
unsigned
int
tcount
,
struct
cipher_speed
*
speed
)
{
unsigned
int
ret
,
i
,
j
,
iv_len
;
unsigned
char
*
key
,
*
p
,
iv
[
128
];
struct
crypto_tfm
*
tfm
;
const
char
*
e
,
*
m
;
if
(
enc
==
ENCRYPT
)
e
=
"encryption"
;
else
e
=
"decryption"
;
if
(
mode
==
MODE_ECB
)
m
=
"ECB"
;
else
m
=
"CBC"
;
printk
(
"
\n
testing speed of %s %s %s
\n
"
,
algo
,
m
,
e
);
if
(
mode
)
tfm
=
crypto_alloc_tfm
(
algo
,
0
);
else
tfm
=
crypto_alloc_tfm
(
algo
,
CRYPTO_TFM_MODE_CBC
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for %s %s
\n
"
,
algo
,
m
);
return
;
}
for
(
i
=
0
;
speed
[
i
].
klen
!=
0
;
i
++
)
{
if
((
speed
[
i
].
blen
+
speed
[
i
].
klen
)
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
speed
[
i
].
blen
+
speed
[
i
].
klen
,
TVMEMSIZE
);
goto
out
;
}
printk
(
"test %u (%d bit key, %d byte blocks): "
,
i
,
speed
[
i
].
klen
*
8
,
speed
[
i
].
blen
);
memset
(
tvmem
,
0xff
,
speed
[
i
].
klen
+
speed
[
i
].
blen
);
/* set key, plain text and IV */
key
=
(
unsigned
char
*
)
tvmem
;
for
(
j
=
0
;
j
<
tcount
;
j
++
)
{
if
(
template
[
j
].
klen
==
speed
[
i
].
klen
)
{
key
=
template
[
j
].
key
;
break
;
}
}
p
=
(
unsigned
char
*
)
tvmem
+
speed
[
i
].
klen
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
speed
[
i
].
klen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
if
(
!
mode
)
{
iv_len
=
crypto_tfm_alg_ivsize
(
tfm
);
memset
(
&
iv
,
0xff
,
iv_len
);
crypto_cipher_set_iv
(
tfm
,
iv
,
iv_len
);
}
if
(
sec
)
ret
=
test_cipher_jiffies
(
tfm
,
enc
,
p
,
speed
[
i
].
blen
,
sec
);
else
ret
=
test_cipher_cycles
(
tfm
,
enc
,
p
,
speed
[
i
].
blen
);
if
(
ret
)
{
printk
(
"%s() failed flags=%x
\n
"
,
e
,
tfm
->
crt_flags
);
break
;
}
}
out:
crypto_free_tfm
(
tfm
);
}
static
void
test_deflate
(
void
)
{
unsigned
int
i
;
char
result
[
COMP_BUF_SIZE
];
...
...
@@ -436,7 +608,7 @@ test_deflate(void)
}
memcpy
(
tvmem
,
deflate_comp_tv_template
,
tsize
);
tv
=
(
void
*
)
tvmem
;
tv
=
(
void
*
)
tvmem
;
tfm
=
crypto_alloc_tfm
(
"deflate"
,
0
);
if
(
tfm
==
NULL
)
{
...
...
@@ -446,7 +618,7 @@ test_deflate(void)
for
(
i
=
0
;
i
<
DEFLATE_COMP_TEST_VECTORS
;
i
++
)
{
int
ilen
,
ret
,
dlen
=
COMP_BUF_SIZE
;
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
...
...
@@ -473,11 +645,11 @@ test_deflate(void)
}
memcpy
(
tvmem
,
deflate_decomp_tv_template
,
tsize
);
tv
=
(
void
*
)
tvmem
;
tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
DEFLATE_DECOMP_TEST_VECTORS
;
i
++
)
{
int
ilen
,
ret
,
dlen
=
COMP_BUF_SIZE
;
printk
(
"test %u:
\n
"
,
i
+
1
);
memset
(
result
,
0
,
sizeof
(
result
));
...
...
@@ -497,8 +669,7 @@ test_deflate(void)
crypto_free_tfm
(
tfm
);
}
static
void
test_crc32c
(
void
)
static
void
test_crc32c
(
void
)
{
#define NUMVEC 6
#define VECSIZE 40
...
...
@@ -511,7 +682,7 @@ test_crc32c(void)
0xd579c862
,
0xba979ad0
,
0x2b29d913
};
static
u32
tot_vec_results
=
0x24c5d375
;
struct
scatterlist
sg
[
NUMVEC
];
struct
crypto_tfm
*
tfm
;
char
*
fmtdata
=
"testing crc32c initialized to %08x: %s
\n
"
;
...
...
@@ -525,18 +696,18 @@ test_crc32c(void)
printk
(
"failed to load transform for crc32c
\n
"
);
return
;
}
crypto_digest_init
(
tfm
);
crypto_digest_final
(
tfm
,
(
u8
*
)
&
crc
);
printk
(
fmtdata
,
crc
,
(
crc
==
0
)
?
"pass"
:
"ERROR"
);
/*
* stuff test_vec with known values, simple incrementing
* byte values.
*/
b
=
0
;
for
(
i
=
0
;
i
<
NUMVEC
;
i
++
)
{
for
(
j
=
0
;
j
<
VECSIZE
;
j
++
)
for
(
j
=
0
;
j
<
VECSIZE
;
j
++
)
test_vec
[
i
][
j
]
=
++
b
;
sg
[
i
].
page
=
virt_to_page
(
test_vec
[
i
]);
sg
[
i
].
offset
=
offset_in_page
(
test_vec
[
i
]);
...
...
@@ -548,11 +719,11 @@ test_crc32c(void)
crypto_digest_final
(
tfm
,
(
u8
*
)
&
crc
);
printk
(
"testing crc32c setkey returns %08x : %s
\n
"
,
crc
,
(
crc
==
(
SEEDTESTVAL
^
~
(
u32
)
0
))
?
"pass"
:
"ERROR"
);
printk
(
"testing crc32c using update/final:
\n
"
);
pass
=
1
;
/* assume all is well */
for
(
i
=
0
;
i
<
NUMVEC
;
i
++
)
{
seed
=
~
(
u32
)
0
;
(
void
)
crypto_digest_setkey
(
tfm
,
(
const
u8
*
)
&
seed
,
sizeof
(
u32
));
...
...
@@ -591,66 +762,64 @@ test_crc32c(void)
printk
(
" %08x:BAD, wanted %08x
\n
"
,
crc
,
tot_vec_results
);
pass
=
0
;
}
printk
(
"
\n
%s
\n
"
,
pass
?
"pass"
:
"ERROR"
);
crypto_free_tfm
(
tfm
);
printk
(
"crc32c test complete
\n
"
);
}
static
void
test_available
(
void
)
static
void
test_available
(
void
)
{
char
**
name
=
check
;
while
(
*
name
)
{
printk
(
"alg %s "
,
*
name
);
printk
((
crypto_alg_available
(
*
name
,
0
))
?
"found
\n
"
:
"not found
\n
"
);
name
++
;
}
}
}
static
void
do_test
(
void
)
static
void
do_test
(
void
)
{
switch
(
mode
)
{
case
0
:
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
);
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_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
);
//TNEPRES
test_cipher
(
"tnepres"
,
MODE_ECB
,
ENCRYPT
,
tnepres_enc_tv_template
,
TNEPRES_ENC_TEST_VECTORS
);
test_cipher
(
"tnepres"
,
MODE_ECB
,
DECRYPT
,
tnepres_dec_tv_template
,
TNEPRES_DEC_TEST_VECTORS
);
...
...
@@ -662,7 +831,7 @@ do_test(void)
//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
);
...
...
@@ -702,9 +871,9 @@ do_test(void)
test_crc32c
();
#ifdef CONFIG_CRYPTO_HMAC
test_hmac
(
"md5"
,
hmac_md5_tv_template
,
HMAC_MD5_TEST_VECTORS
);
test_hmac
(
"sha1"
,
hmac_sha1_tv_template
,
HMAC_SHA1_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
#endif
test_hash
(
"michael_mic"
,
michael_mic_tv_template
,
MICHAEL_MIC_TEST_VECTORS
);
break
;
...
...
@@ -726,17 +895,17 @@ do_test(void)
case
4
:
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_cipher
(
"des3_ede"
,
MODE_ECB
,
DECRYPT
,
des3_ede_dec_tv_template
,
DES3_EDE_DEC_TEST_VECTORS
);
break
;
case
5
:
test_hash
(
"md4"
,
md4_tv_template
,
MD4_TEST_VECTORS
);
break
;
case
6
:
test_hash
(
"sha256"
,
sha256_tv_template
,
SHA256_TEST_VECTORS
);
break
;
case
7
:
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
);
...
...
@@ -750,7 +919,7 @@ do_test(void)
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_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
);
...
...
@@ -758,13 +927,13 @@ do_test(void)
case
10
:
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
);
test_cipher
(
"aes"
,
MODE_ECB
,
DECRYPT
,
aes_dec_tv_template
,
AES_DEC_TEST_VECTORS
);
break
;
case
11
:
test_hash
(
"sha384"
,
sha384_tv_template
,
SHA384_TEST_VECTORS
);
break
;
case
12
:
test_hash
(
"sha512"
,
sha512_tv_template
,
SHA512_TEST_VECTORS
);
break
;
...
...
@@ -852,21 +1021,84 @@ do_test(void)
case
100
:
test_hmac
(
"md5"
,
hmac_md5_tv_template
,
HMAC_MD5_TEST_VECTORS
);
break
;
case
101
:
test_hmac
(
"sha1"
,
hmac_sha1_tv_template
,
HMAC_SHA1_TEST_VECTORS
);
test_hmac
(
"sha1"
,
hmac_sha1_tv_template
,
HMAC_SHA1_TEST_VECTORS
);
break
;
case
102
:
test_hmac
(
"sha256"
,
hmac_sha256_tv_template
,
HMAC_SHA256_TEST_VECTORS
);
break
;
#endif
case
200
:
test_cipher_speed
(
"aes"
,
MODE_ECB
,
ENCRYPT
,
sec
,
NULL
,
0
,
aes_speed_template
);
test_cipher_speed
(
"aes"
,
MODE_ECB
,
DECRYPT
,
sec
,
NULL
,
0
,
aes_speed_template
);
test_cipher_speed
(
"aes"
,
MODE_CBC
,
ENCRYPT
,
sec
,
NULL
,
0
,
aes_speed_template
);
test_cipher_speed
(
"aes"
,
MODE_CBC
,
DECRYPT
,
sec
,
NULL
,
0
,
aes_speed_template
);
break
;
case
201
:
test_cipher_speed
(
"des3_ede"
,
MODE_ECB
,
ENCRYPT
,
sec
,
des3_ede_enc_tv_template
,
DES3_EDE_ENC_TEST_VECTORS
,
des3_ede_speed_template
);
test_cipher_speed
(
"des3_ede"
,
MODE_ECB
,
DECRYPT
,
sec
,
des3_ede_dec_tv_template
,
DES3_EDE_DEC_TEST_VECTORS
,
des3_ede_speed_template
);
test_cipher_speed
(
"des3_ede"
,
MODE_CBC
,
ENCRYPT
,
sec
,
des3_ede_enc_tv_template
,
DES3_EDE_ENC_TEST_VECTORS
,
des3_ede_speed_template
);
test_cipher_speed
(
"des3_ede"
,
MODE_CBC
,
DECRYPT
,
sec
,
des3_ede_dec_tv_template
,
DES3_EDE_DEC_TEST_VECTORS
,
des3_ede_speed_template
);
break
;
case
202
:
test_cipher_speed
(
"twofish"
,
MODE_ECB
,
ENCRYPT
,
sec
,
NULL
,
0
,
twofish_speed_template
);
test_cipher_speed
(
"twofish"
,
MODE_ECB
,
DECRYPT
,
sec
,
NULL
,
0
,
twofish_speed_template
);
test_cipher_speed
(
"twofish"
,
MODE_CBC
,
ENCRYPT
,
sec
,
NULL
,
0
,
twofish_speed_template
);
test_cipher_speed
(
"twofish"
,
MODE_CBC
,
DECRYPT
,
sec
,
NULL
,
0
,
twofish_speed_template
);
break
;
case
203
:
test_cipher_speed
(
"blowfish"
,
MODE_ECB
,
ENCRYPT
,
sec
,
NULL
,
0
,
blowfish_speed_template
);
test_cipher_speed
(
"blowfish"
,
MODE_ECB
,
DECRYPT
,
sec
,
NULL
,
0
,
blowfish_speed_template
);
test_cipher_speed
(
"blowfish"
,
MODE_CBC
,
ENCRYPT
,
sec
,
NULL
,
0
,
blowfish_speed_template
);
test_cipher_speed
(
"blowfish"
,
MODE_CBC
,
DECRYPT
,
sec
,
NULL
,
0
,
blowfish_speed_template
);
break
;
case
204
:
test_cipher_speed
(
"des"
,
MODE_ECB
,
ENCRYPT
,
sec
,
NULL
,
0
,
des_speed_template
);
test_cipher_speed
(
"des"
,
MODE_ECB
,
DECRYPT
,
sec
,
NULL
,
0
,
des_speed_template
);
test_cipher_speed
(
"des"
,
MODE_CBC
,
ENCRYPT
,
sec
,
NULL
,
0
,
des_speed_template
);
test_cipher_speed
(
"des"
,
MODE_CBC
,
DECRYPT
,
sec
,
NULL
,
0
,
des_speed_template
);
break
;
case
1000
:
test_available
();
break
;
default:
/* useful for debugging */
printk
(
"not testing anything
\n
"
);
...
...
@@ -874,8 +1106,7 @@ do_test(void)
}
}
static
int
__init
init
(
void
)
static
int
__init
init
(
void
)
{
tvmem
=
kmalloc
(
TVMEMSIZE
,
GFP_KERNEL
);
if
(
tvmem
==
NULL
)
...
...
@@ -904,6 +1135,9 @@ module_init(init);
module_exit
(
fini
);
module_param
(
mode
,
int
,
0
);
module_param
(
sec
,
uint
,
0
);
MODULE_PARM_DESC
(
sec
,
"Length in seconds of speed tests "
"(defaults to zero which uses CPU cycles instead)"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Quick & dirty crypto testing module"
);
...
...
crypto/tcrypt.h
View file @
060de20e
...
...
@@ -9,10 +9,11 @@
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* 14 - 09 - 2003 Changes by Kartikey Mahendra Bhatt
* 2004-08-09 Cipher speed tests by Reyk Floeter <reyk@vantronix.net>
* 2003-09-14 Changes by Kartikey Mahendra Bhatt
*
*/
#ifndef _CRYPTO_TCRYPT_H
...
...
@@ -29,19 +30,19 @@ struct hash_testvec {
unsigned
char
psize
;
char
digest
[
MAX_DIGEST_SIZE
];
unsigned
char
np
;
unsigned
char
tap
[
MAX_TAP
];
unsigned
char
tap
[
MAX_TAP
];
char
key
[
128
];
/* only used with keyed hash algorithms */
unsigned
char
ksize
;
};
struct
hmac_testvec
{
struct
hmac_testvec
{
char
key
[
128
];
unsigned
char
ksize
;
char
plaintext
[
128
];
unsigned
char
psize
;
char
digest
[
MAX_DIGEST_SIZE
];
unsigned
char
np
;
unsigned
char
tap
[
MAX_TAP
];
unsigned
char
tap
[
MAX_TAP
];
};
struct
cipher_testvec
{
...
...
@@ -55,7 +56,12 @@ struct cipher_testvec {
char
result
[
48
];
unsigned
char
rlen
;
int
np
;
unsigned
char
tap
[
MAX_TAP
];
unsigned
char
tap
[
MAX_TAP
];
};
struct
cipher_speed
{
unsigned
char
klen
;
unsigned
int
blen
;
};
/*
...
...
@@ -155,7 +161,7 @@ static struct hash_testvec md5_tv_template[] = {
#define SHA1_TEST_VECTORS 2
static
struct
hash_testvec
sha1_tv_template
[]
=
{
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xa9
,
0x99
,
0x3e
,
0x36
,
0x47
,
0x06
,
0x81
,
0x6a
,
0xba
,
0x3e
,
...
...
@@ -175,8 +181,8 @@ static struct hash_testvec sha1_tv_template[] = {
*/
#define SHA256_TEST_VECTORS 2
static
struct
hash_testvec
sha256_tv_template
[]
=
{
{
static
struct
hash_testvec
sha256_tv_template
[]
=
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xba
,
0x78
,
0x16
,
0xbf
,
0x8f
,
0x01
,
0xcf
,
0xea
,
...
...
@@ -201,7 +207,7 @@ static struct hash_testvec sha256_tv_template[] = {
#define SHA384_TEST_VECTORS 4
static
struct
hash_testvec
sha384_tv_template
[]
=
{
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xcb
,
0x00
,
0x75
,
0x3f
,
0x45
,
0xa3
,
0x5e
,
0x8b
,
...
...
@@ -221,7 +227,7 @@ static struct hash_testvec sha384_tv_template[] = {
0x5f
,
0xe9
,
0x5b
,
0x1f
,
0xe3
,
0xc8
,
0x45
,
0x2b
},
},
{
.
plaintext
=
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
,
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
,
.
psize
=
112
,
.
digest
=
{
0x09
,
0x33
,
0x0c
,
0x33
,
0xf7
,
0x11
,
0x47
,
0xe8
,
0x3d
,
0x19
,
0x2f
,
0xc7
,
0x82
,
0xcd
,
0x1b
,
0x47
,
...
...
@@ -250,7 +256,7 @@ static struct hash_testvec sha384_tv_template[] = {
#define SHA512_TEST_VECTORS 4
static
struct
hash_testvec
sha512_tv_template
[]
=
{
{
{
.
plaintext
=
"abc"
,
.
psize
=
3
,
.
digest
=
{
0xdd
,
0xaf
,
0x35
,
0xa1
,
0x93
,
0x61
,
0x7a
,
0xba
,
...
...
@@ -303,14 +309,14 @@ static struct hash_testvec sha512_tv_template[] = {
/*
* WHIRLPOOL test vectors from Whirlpool package
* WHIRLPOOL test vectors from Whirlpool package
* by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
* submission
*/
#define WP512_TEST_VECTORS 8
static
struct
hash_testvec
wp512_tv_template
[]
=
{
{
{
.
plaintext
=
""
,
.
psize
=
0
,
.
digest
=
{
0x19
,
0xFA
,
0x61
,
0xD7
,
0x55
,
0x22
,
0xA4
,
0x66
,
...
...
@@ -348,13 +354,13 @@ static struct hash_testvec wp512_tv_template[] = {
},
{
.
plaintext
=
"message digest"
,
.
psize
=
14
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
0xE1
,
0xF5
,
0x70
,
0x0C
,
0x0F
,
0xFB
,
0x4D
,
0x3B
,
0x84
,
0x21
,
0x55
,
0x76
,
0x59
,
0xEF
,
0x55
,
0xC1
,
0x06
,
0xB4
,
0xB5
,
0x2A
,
0xC5
,
0xA4
,
0xAA
,
0xA6
,
0x92
,
0xED
,
0x92
,
0x00
,
0x52
,
0x83
,
0x8F
,
0x33
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
0xE1
,
0xF5
,
0x70
,
0x0C
,
0x0F
,
0xFB
,
0x4D
,
0x3B
,
0x84
,
0x21
,
0x55
,
0x76
,
0x59
,
0xEF
,
0x55
,
0xC1
,
0x06
,
0xB4
,
0xB5
,
0x2A
,
0xC5
,
0xA4
,
0xAA
,
0xA6
,
0x92
,
0xED
,
0x92
,
0x00
,
0x52
,
0x83
,
0x8F
,
0x33
,
0x62
,
0xE8
,
0x6D
,
0xBD
,
0x37
,
0xA8
,
0x90
,
0x3E
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyz"
,
...
...
@@ -394,7 +400,7 @@ static struct hash_testvec wp512_tv_template[] = {
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijk"
,
.
psize
=
32
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
0xF5
,
0xD6
,
0xF0
,
0xA0
,
0xE4
,
0x64
,
0x4F
,
0x48
,
0x8A
,
0x7A
,
0x5A
,
0x52
,
0xDE
,
0xEE
,
0x65
,
0x62
,
0x07
,
0xC5
,
0x62
,
0xF9
,
0x88
,
0xE9
,
0x5C
,
0x69
,
...
...
@@ -408,7 +414,7 @@ static struct hash_testvec wp512_tv_template[] = {
#define WP384_TEST_VECTORS 8
static
struct
hash_testvec
wp384_tv_template
[]
=
{
{
{
.
plaintext
=
""
,
.
psize
=
0
,
.
digest
=
{
0x19
,
0xFA
,
0x61
,
0xD7
,
0x55
,
0x22
,
0xA4
,
0x66
,
...
...
@@ -440,11 +446,11 @@ static struct hash_testvec wp384_tv_template[] = {
},
{
.
plaintext
=
"message digest"
,
.
psize
=
14
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
0xE1
,
0xF5
,
0x70
,
0x0C
,
0x0F
,
0xFB
,
0x4D
,
0x3B
,
0x84
,
0x21
,
0x55
,
0x76
,
0x59
,
0xEF
,
0x55
,
0xC1
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
0xE1
,
0xF5
,
0x70
,
0x0C
,
0x0F
,
0xFB
,
0x4D
,
0x3B
,
0x84
,
0x21
,
0x55
,
0x76
,
0x59
,
0xEF
,
0x55
,
0xC1
,
0x06
,
0xB4
,
0xB5
,
0x2A
,
0xC5
,
0xA4
,
0xAA
,
0xA6
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyz"
,
...
...
@@ -478,7 +484,7 @@ static struct hash_testvec wp384_tv_template[] = {
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijk"
,
.
psize
=
32
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
0xF5
,
0xD6
,
0xF0
,
0xA0
,
0xE4
,
0x64
,
0x4F
,
0x48
,
0x8A
,
0x7A
,
0x5A
,
0x52
,
0xDE
,
0xEE
,
0x65
,
0x62
,
0x07
,
0xC5
,
0x62
,
0xF9
,
0x88
,
0xE9
,
0x5C
,
0x69
,
...
...
@@ -490,7 +496,7 @@ static struct hash_testvec wp384_tv_template[] = {
#define WP256_TEST_VECTORS 8
static
struct
hash_testvec
wp256_tv_template
[]
=
{
{
{
.
plaintext
=
""
,
.
psize
=
0
,
.
digest
=
{
0x19
,
0xFA
,
0x61
,
0xD7
,
0x55
,
0x22
,
0xA4
,
0x66
,
...
...
@@ -516,9 +522,9 @@ static struct hash_testvec wp256_tv_template[] = {
},
{
.
plaintext
=
"message digest"
,
.
psize
=
14
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
.
digest
=
{
0x37
,
0x8C
,
0x84
,
0xA4
,
0x12
,
0x6E
,
0x2D
,
0xC6
,
0xE5
,
0x6D
,
0xCC
,
0x74
,
0x58
,
0x37
,
0x7A
,
0xAC
,
0x83
,
0x8D
,
0x00
,
0x03
,
0x22
,
0x30
,
0xF5
,
0x3C
,
0xE1
,
0xF5
,
0x70
,
0x0C
,
0x0F
,
0xFB
,
0x4D
,
0x3B
},
},
{
.
plaintext
=
"abcdefghijklmnopqrstuvwxyz"
,
...
...
@@ -546,7 +552,7 @@ static struct hash_testvec wp256_tv_template[] = {
},
{
.
plaintext
=
"abcdbcdecdefdefgefghfghighijhijk"
,
.
psize
=
32
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
.
digest
=
{
0x2A
,
0x98
,
0x7E
,
0xA4
,
0x0F
,
0x91
,
0x70
,
0x61
,
0xF5
,
0xD6
,
0xF0
,
0xA0
,
0xE4
,
0x64
,
0x4F
,
0x48
,
0x8A
,
0x7A
,
0x5A
,
0x52
,
0xDE
,
0xEE
,
0x65
,
0x62
,
0x07
,
0xC5
,
0x62
,
0xF9
,
0x88
,
0xE9
,
0x5C
,
0x69
},
...
...
@@ -554,7 +560,7 @@ static struct hash_testvec wp256_tv_template[] = {
};
/*
* TIGER test vectors from Tiger website
* TIGER test vectors from Tiger website
*/
#define TGR192_TEST_VECTORS 6
...
...
@@ -693,7 +699,7 @@ static struct hash_testvec tgr128_tv_template[] = {
#define HMAC_MD5_TEST_VECTORS 7
static
struct
hmac_testvec
hmac_md5_tv_template
[]
=
{
{
{
.
key
=
{
[
0
...
15
]
=
0x0b
},
.
ksize
=
16
,
...
...
@@ -756,7 +762,7 @@ static struct hmac_testvec hmac_md5_tv_template[] =
*/
#define HMAC_SHA1_TEST_VECTORS 7
static
struct
hmac_testvec
hmac_sha1_tv_template
[]
=
{
static
struct
hmac_testvec
hmac_sha1_tv_template
[]
=
{
{
.
key
=
{
[
0
...
19
]
=
0x0b
},
.
ksize
=
20
,
...
...
@@ -766,11 +772,11 @@ static struct hmac_testvec hmac_sha1_tv_template[] = {
0xe2
,
0x8b
,
0xc0
,
0xb6
,
0xfb
,
0x37
,
0x8c
,
0x8e
,
0xf1
,
0x46
,
0xbe
},
},
{
.
key
=
{
'J'
,
'e'
,
'f'
,
'e'
},
.
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
,
.
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
}
...
...
@@ -779,30 +785,30 @@ static struct hmac_testvec hmac_sha1_tv_template[] = {
.
ksize
=
20
,
.
plaintext
=
{
[
0
...
49
]
=
0xdd
},
.
psize
=
50
,
.
digest
=
{
0x12
,
0x5d
,
0x73
,
0x42
,
0xb9
,
0xac
,
0x11
,
0xcd
,
0x91
,
0xa3
,
.
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
,
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
,
.
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
,
.
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
,
.
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
},
...
...
@@ -810,7 +816,7 @@ static struct hmac_testvec hmac_sha1_tv_template[] = {
.
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
,
.
digest
=
{
0xe8
,
0xe9
,
0x9d
,
0x0f
,
0x45
,
0x23
,
0x7d
,
0x78
,
0x6d
,
0x6b
,
0xba
,
0xa7
,
0x96
,
0x5c
,
0x78
,
0x08
,
0xbb
,
0xff
,
0x1a
,
0x91
},
},
};
...
...
@@ -1011,7 +1017,7 @@ static struct cipher_testvec des_enc_tv_template[] = {
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
.
rlen
=
32
,
.
np
=
3
,
.
tap
=
{
14
,
10
,
8
}
.
tap
=
{
14
,
10
,
8
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
...
...
@@ -1024,7 +1030,7 @@ static struct cipher_testvec des_enc_tv_template[] = {
0xb4
,
0x99
,
0x26
,
0xf7
,
0x1f
,
0xe1
,
0xd4
,
0x90
},
.
rlen
=
24
,
.
np
=
4
,
.
tap
=
{
2
,
1
,
3
,
18
}
.
tap
=
{
2
,
1
,
3
,
18
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
...
...
@@ -1035,7 +1041,7 @@ static struct cipher_testvec des_enc_tv_template[] = {
0xf7
,
0x9c
,
0x89
,
0x2a
,
0x33
,
0x8f
,
0x4a
,
0x8b
},
.
rlen
=
16
,
.
np
=
5
,
.
tap
=
{
2
,
2
,
2
,
2
,
8
}
.
tap
=
{
2
,
2
,
2
,
2
,
8
}
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
...
...
@@ -1044,7 +1050,7 @@ static struct cipher_testvec des_enc_tv_template[] = {
.
result
=
{
0xc9
,
0x57
,
0x44
,
0x25
,
0x6a
,
0x5e
,
0xd3
,
0x1d
},
.
rlen
=
8
,
.
np
=
8
,
.
tap
=
{
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
}
.
tap
=
{
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
}
},
};
...
...
@@ -1057,7 +1063,7 @@ static struct cipher_testvec des_dec_tv_template[] = {
.
result
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xe7
},
.
rlen
=
8
,
},
{
/* Sbox test from NBS */
.
key
=
{
0x7c
,
0xa1
,
0x10
,
0x45
,
0x4a
,
0x1a
,
0x6e
,
0x57
},
.
key
=
{
0x7c
,
0xa1
,
0x10
,
0x45
,
0x4a
,
0x1a
,
0x6e
,
0x57
},
.
klen
=
8
,
.
input
=
{
0x69
,
0x0f
,
0x5b
,
0x0d
,
0x9a
,
0x26
,
0x93
,
0x9b
},
.
ilen
=
8
,
...
...
@@ -1092,19 +1098,19 @@ static 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
},
.
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
},
.
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
},
.
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
},
...
...
@@ -1117,7 +1123,7 @@ static struct cipher_testvec des_cbc_enc_tv_template[] = {
.
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
},
...
...
@@ -1125,18 +1131,18 @@ static struct cipher_testvec des_cbc_enc_tv_template[] = {
.
ilen
=
8
,
.
result
=
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
.
rlen
=
8
,
},
{
/* Copy of openssl vector for chunk testing */
},
{
/* Copy of openssl vector for chunk testing */
/* 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
},
.
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
},
.
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
,
.
np
=
2
,
.
tap
=
{
13
,
11
}
...
...
@@ -1155,24 +1161,24 @@ static struct cipher_testvec des_cbc_dec_tv_template[] = {
},
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
.
iv
=
{
0xe5
,
0xc7
,
0xcd
,
0xde
,
0x87
,
0x2b
,
0xf2
,
0x7c
},
.
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
},
.
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
},
.
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 */
},
{
/* 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
},
.
input
=
{
0x68
,
0x37
,
0x88
,
0x49
,
0x9a
,
0x7c
,
0x05
,
0xf6
},
.
ilen
=
8
,
.
result
=
{
0x66
,
0x6f
,
0x72
,
0x20
,
0x61
,
0x6c
,
0x6c
,
0x20
},
.
rlen
=
8
,
...
...
@@ -1276,7 +1282,7 @@ static struct cipher_testvec bf_enc_tv_template[] = {
.
ilen
=
8
,
.
result
=
{
0xe8
,
0x7a
,
0x24
,
0x4e
,
0x2c
,
0xc8
,
0x5e
,
0x82
},
.
rlen
=
8
,
},
{
/* Vary the keylength... */
},
{
/* Vary the keylength... */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
},
.
klen
=
16
,
...
...
@@ -1297,9 +1303,9 @@ static struct cipher_testvec bf_enc_tv_template[] = {
.
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
,
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
},
...
...
@@ -1331,7 +1337,7 @@ static struct cipher_testvec bf_dec_tv_template[] = {
.
ilen
=
8
,
.
result
=
{
0xfe
,
0xdc
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
},
.
rlen
=
8
,
},
{
/* Vary the keylength... */
},
{
/* Vary the keylength... */
.
key
=
{
0xf0
,
0xe1
,
0xd2
,
0xc3
,
0xb4
,
0xa5
,
0x96
,
0x87
,
0x78
,
0x69
,
0x5a
,
0x4b
,
0x3c
,
0x2d
,
0x1e
,
0x0f
},
.
klen
=
16
,
...
...
@@ -1352,9 +1358,9 @@ static struct cipher_testvec bf_dec_tv_template[] = {
.
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
,
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
},
...
...
@@ -1369,7 +1375,7 @@ static struct cipher_testvec bf_cbc_enc_tv_template[] = {
.
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
},
.
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
,
...
...
@@ -1388,7 +1394,7 @@ static struct cipher_testvec bf_cbc_dec_tv_template[] = {
.
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
},
.
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
,
...
...
@@ -1490,7 +1496,7 @@ static struct cipher_testvec tf_cbc_enc_tv_template[] = {
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
.
iv
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0xd4
,
0x91
,
0xdb
,
0x16
,
0xe7
,
0xb1
,
0xc3
,
0x9e
,
...
...
@@ -1528,7 +1534,7 @@ static struct cipher_testvec tf_cbc_dec_tv_template[] = {
.
klen
=
16
,
.
iv
=
{
[
0
...
15
]
=
0x00
},
.
input
=
{
0x9f
,
0x58
,
0x9f
,
0x5c
,
0xf6
,
0x12
,
0x2c
,
0x32
,
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
0xb6
,
0xbf
,
0xec
,
0x2f
,
0x2a
,
0xe8
,
0xc3
,
0x5a
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
.
rlen
=
16
,
...
...
@@ -1578,8 +1584,7 @@ static struct cipher_testvec tf_cbc_dec_tv_template[] = {
#define TNEPRES_ENC_TEST_VECTORS 4
#define TNEPRES_DEC_TEST_VECTORS 4
static
struct
cipher_testvec
serpent_enc_tv_template
[]
=
{
static
struct
cipher_testvec
serpent_enc_tv_template
[]
=
{
{
.
input
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
...
...
@@ -1620,8 +1625,7 @@ static struct cipher_testvec serpent_enc_tv_template[] =
},
};
static
struct
cipher_testvec
tnepres_enc_tv_template
[]
=
{
static
struct
cipher_testvec
tnepres_enc_tv_template
[]
=
{
{
/* KeySize=128, PT=0, I=1 */
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
...
...
@@ -1629,7 +1633,7 @@ static struct cipher_testvec tnepres_enc_tv_template[] =
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
klen
=
16
,
.
ilen
=
16
,
.
result
=
{
0x49
,
0xaf
,
0xbf
,
0xad
,
0x9d
,
0x5a
,
0x34
,
0x05
,
.
result
=
{
0x49
,
0xaf
,
0xbf
,
0xad
,
0x9d
,
0x5a
,
0x34
,
0x05
,
0x2c
,
0xd8
,
0xff
,
0xa5
,
0x98
,
0x6b
,
0xd2
,
0xdd
},
.
rlen
=
16
,
},
{
/* KeySize=192, PT=0, I=1 */
...
...
@@ -1640,7 +1644,7 @@ static struct cipher_testvec tnepres_enc_tv_template[] =
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
16
,
.
result
=
{
0xe7
,
0x8e
,
0x54
,
0x02
,
0xc7
,
0x19
,
0x55
,
0x68
,
.
result
=
{
0xe7
,
0x8e
,
0x54
,
0x02
,
0xc7
,
0x19
,
0x55
,
0x68
,
0xac
,
0x36
,
0x78
,
0xf7
,
0xa3
,
0xf6
,
0x0c
,
0x66
},
.
rlen
=
16
,
},
{
/* KeySize=256, PT=0, I=1 */
...
...
@@ -1652,7 +1656,7 @@ static struct cipher_testvec tnepres_enc_tv_template[] =
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ilen
=
16
,
.
result
=
{
0xab
,
0xed
,
0x96
,
0xe7
,
0x66
,
0xbf
,
0x28
,
0xcb
,
.
result
=
{
0xab
,
0xed
,
0x96
,
0xe7
,
0x66
,
0xbf
,
0x28
,
0xcb
,
0xc0
,
0xeb
,
0xd2
,
0x1a
,
0x82
,
0xef
,
0x08
,
0x19
},
.
rlen
=
16
,
},
{
/* KeySize=256, I=257 */
...
...
@@ -1664,15 +1668,14 @@ static struct cipher_testvec tnepres_enc_tv_template[] =
.
input
=
{
0x0f
,
0x0e
,
0x0d
,
0x0c
,
0x0b
,
0x0a
,
0x09
,
0x08
,
0x07
,
0x06
,
0x05
,
0x04
,
0x03
,
0x02
,
0x01
,
0x00
},
.
ilen
=
16
,
.
result
=
{
0x5c
,
0xe7
,
0x1c
,
0x70
,
0xd2
,
0x88
,
0x2e
,
0x5b
,
.
result
=
{
0x5c
,
0xe7
,
0x1c
,
0x70
,
0xd2
,
0x88
,
0x2e
,
0x5b
,
0xb8
,
0x32
,
0xe4
,
0x33
,
0xf8
,
0x9f
,
0x26
,
0xde
},
.
rlen
=
16
,
},
};
static
struct
cipher_testvec
serpent_dec_tv_template
[]
=
{
static
struct
cipher_testvec
serpent_dec_tv_template
[]
=
{
{
.
input
=
{
0x12
,
0x07
,
0xfc
,
0xce
,
0x9b
,
0xd0
,
0xd6
,
0x47
,
0x6a
,
0xe9
,
0x8f
,
0xbe
,
0xd1
,
0x43
,
0xa0
,
0xe2
},
...
...
@@ -1713,8 +1716,7 @@ static struct cipher_testvec serpent_dec_tv_template[] =
},
};
static
struct
cipher_testvec
tnepres_dec_tv_template
[]
=
{
static
struct
cipher_testvec
tnepres_dec_tv_template
[]
=
{
{
.
input
=
{
0x41
,
0xcc
,
0x6b
,
0x31
,
0x59
,
0x31
,
0x45
,
0x97
,
0x6d
,
0x6f
,
0xbb
,
0x38
,
0x4b
,
0x37
,
0x21
,
0x28
},
...
...
@@ -1726,7 +1728,7 @@ static struct cipher_testvec tnepres_dec_tv_template[] =
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
.
klen
=
16
,
.
input
=
{
0xea
,
0xf4
,
0xd7
,
0xfc
,
0xd8
,
0x01
,
0x34
,
0x47
,
.
input
=
{
0xea
,
0xf4
,
0xd7
,
0xfc
,
0xd8
,
0x01
,
0x34
,
0x47
,
0x81
,
0x45
,
0x0b
,
0xfa
,
0x0c
,
0xd6
,
0xad
,
0x6e
},
.
ilen
=
16
,
.
result
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
...
...
@@ -1738,7 +1740,7 @@ static struct cipher_testvec tnepres_dec_tv_template[] =
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
.
klen
=
32
,
.
input
=
{
0x64
,
0xa9
,
0x1a
,
0x37
,
0xed
,
0x9f
,
0xe7
,
0x49
,
.
input
=
{
0x64
,
0xa9
,
0x1a
,
0x37
,
0xed
,
0x9f
,
0xe7
,
0x49
,
0xa8
,
0x4e
,
0x76
,
0xd6
,
0xf5
,
0x0d
,
0x78
,
0xee
},
.
ilen
=
16
,
.
result
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
...
...
@@ -1747,7 +1749,7 @@ static struct cipher_testvec tnepres_dec_tv_template[] =
},
{
/* KeySize=128, I=121 */
.
key
=
{
[
15
]
=
0x80
},
.
klen
=
16
,
.
input
=
{
0x3d
,
0xda
,
0xbf
,
0xc0
,
0x06
,
0xda
,
0xab
,
0x06
,
.
input
=
{
0x3d
,
0xda
,
0xbf
,
0xc0
,
0x06
,
0xda
,
0xab
,
0x06
,
0x46
,
0x2a
,
0xf4
,
0xef
,
0x81
,
0x54
,
0x4e
,
0x26
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
...
...
@@ -1760,58 +1762,56 @@ static struct cipher_testvec tnepres_dec_tv_template[] =
#define CAST6_ENC_TEST_VECTORS 3
#define CAST6_DEC_TEST_VECTORS 3
static
struct
cipher_testvec
cast6_enc_tv_template
[]
=
{
static
struct
cipher_testvec
cast6_enc_tv_template
[]
=
{
{
.
key
=
{
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
},
.
klen
=
16
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
.
result
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
0x83
,
0x6c
,
0x91
,
0xd1
,
0xb7
,
0x53
,
0x0f
,
0x6b
},
.
rlen
=
16
,
},
{
.
key
=
{
0x23
,
0x42
,
0xbb
,
0x9e
,
0xfa
,
0x38
,
0x54
,
0x2c
,
0xbe
,
0xd0
,
0xac
,
0x83
,
0x94
,
0x0a
,
0xc2
,
0x98
,
.
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
},
.
klen
=
24
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
.
result
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
0xdd
,
0x0e
,
0x41
,
0xaa
,
0x08
,
0xa7
,
0xa7
,
0xe8
},
.
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
},
0x1c
,
0xc1
,
0xb5
,
0x13
,
0x7a
,
0xe6
,
0xb6
,
0x04
},
.
klen
=
32
,
.
input
=
{
[
0
...
15
]
=
0x00
},
.
ilen
=
16
,
.
result
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
.
result
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
0xc9
,
0x87
,
0x01
,
0x36
,
0x55
,
0x33
,
0x17
,
0xfa
},
.
rlen
=
16
,
},
};
static
struct
cipher_testvec
cast6_dec_tv_template
[]
=
{
static
struct
cipher_testvec
cast6_dec_tv_template
[]
=
{
{
.
key
=
{
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
},
.
klen
=
16
,
.
input
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
.
input
=
{
0xc8
,
0x42
,
0xa0
,
0x89
,
0x72
,
0xb4
,
0x3d
,
0x20
,
0x83
,
0x6c
,
0x91
,
0xd1
,
0xb7
,
0x53
,
0x0f
,
0x6b
},
.
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
,
.
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
},
.
klen
=
24
,
.
input
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
.
input
=
{
0x1b
,
0x38
,
0x6c
,
0x02
,
0x10
,
0xdc
,
0xad
,
0xcb
,
0xdd
,
0x0e
,
0x41
,
0xaa
,
0x08
,
0xa7
,
0xa7
,
0xe8
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
...
...
@@ -1820,9 +1820,9 @@ static struct cipher_testvec cast6_dec_tv_template[] =
.
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
},
0x1c
,
0xc1
,
0xb5
,
0x13
,
0x7a
,
0xe6
,
0xb6
,
0x04
},
.
klen
=
32
,
.
input
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
.
input
=
{
0x4f
,
0x6a
,
0x20
,
0x38
,
0x28
,
0x68
,
0x97
,
0xb9
,
0xc9
,
0x87
,
0x01
,
0x36
,
0x55
,
0x33
,
0x17
,
0xfa
},
.
ilen
=
16
,
.
result
=
{
[
0
...
15
]
=
0x00
},
...
...
@@ -1837,9 +1837,9 @@ static struct cipher_testvec cast6_dec_tv_template[] =
#define AES_ENC_TEST_VECTORS 3
#define AES_DEC_TEST_VECTORS 3
static
struct
cipher_testvec
aes_enc_tv_template
[]
=
{
static
struct
cipher_testvec
aes_enc_tv_template
[]
=
{
{
/* From FIPS-197 */
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
.
klen
=
16
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
...
...
@@ -1853,7 +1853,7 @@ static struct cipher_testvec aes_enc_tv_template[] = {
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
},
.
klen
=
24
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
ilen
=
16
,
.
result
=
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
...
...
@@ -1865,7 +1865,7 @@ static struct cipher_testvec aes_enc_tv_template[] = {
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1f
},
.
klen
=
32
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
input
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
ilen
=
16
,
.
result
=
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
...
...
@@ -1874,9 +1874,9 @@ static struct cipher_testvec aes_enc_tv_template[] = {
},
};
static
struct
cipher_testvec
aes_dec_tv_template
[]
=
{
static
struct
cipher_testvec
aes_dec_tv_template
[]
=
{
{
/* From FIPS-197 */
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
},
.
klen
=
16
,
.
input
=
{
0x69
,
0xc4
,
0xe0
,
0xd8
,
0x6a
,
0x7b
,
0x04
,
0x30
,
...
...
@@ -1893,8 +1893,8 @@ static struct cipher_testvec aes_dec_tv_template[] = {
.
input
=
{
0xdd
,
0xa9
,
0x7c
,
0xa4
,
0x86
,
0x4c
,
0xdf
,
0xe0
,
0x6e
,
0xaf
,
0x70
,
0xa0
,
0xec
,
0x0d
,
0x71
,
0x91
},
.
ilen
=
16
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
rlen
=
16
,
},
{
.
key
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
...
...
@@ -1905,7 +1905,7 @@ static struct cipher_testvec aes_dec_tv_template[] = {
.
input
=
{
0x8e
,
0xa2
,
0xb7
,
0xca
,
0x51
,
0x67
,
0x45
,
0xbf
,
0xea
,
0xfc
,
0x49
,
0x90
,
0x4b
,
0x49
,
0x60
,
0x89
},
.
ilen
=
16
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
.
result
=
{
0x00
,
0x11
,
0x22
,
0x33
,
0x44
,
0x55
,
0x66
,
0x77
,
0x88
,
0x99
,
0xaa
,
0xbb
,
0xcc
,
0xdd
,
0xee
,
0xff
},
.
rlen
=
16
,
},
...
...
@@ -1915,8 +1915,7 @@ static struct cipher_testvec aes_dec_tv_template[] = {
#define CAST5_ENC_TEST_VECTORS 3
#define CAST5_DEC_TEST_VECTORS 3
static
struct
cipher_testvec
cast5_enc_tv_template
[]
=
{
static
struct
cipher_testvec
cast5_enc_tv_template
[]
=
{
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9a
},
...
...
@@ -1943,8 +1942,7 @@ static struct cipher_testvec cast5_enc_tv_template[] =
},
};
static
struct
cipher_testvec
cast5_dec_tv_template
[]
=
{
static
struct
cipher_testvec
cast5_dec_tv_template
[]
=
{
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9a
},
...
...
@@ -1971,14 +1969,13 @@ static struct cipher_testvec cast5_dec_tv_template[] =
},
};
/*
* ARC4 test vectors from OpenSSL
/*
* ARC4 test vectors from OpenSSL
*/
#define ARC4_ENC_TEST_VECTORS 7
#define ARC4_DEC_TEST_VECTORS 7
static
struct
cipher_testvec
arc4_enc_tv_template
[]
=
{
static
struct
cipher_testvec
arc4_enc_tv_template
[]
=
{
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
...
...
@@ -2044,8 +2041,7 @@ static struct cipher_testvec arc4_enc_tv_template[] =
},
};
static
struct
cipher_testvec
arc4_dec_tv_template
[]
=
{
static
struct
cipher_testvec
arc4_dec_tv_template
[]
=
{
{
.
key
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
.
klen
=
8
,
...
...
@@ -2111,14 +2107,13 @@ static struct cipher_testvec arc4_dec_tv_template[] =
},
};
/*
/*
* TEA test vectors
*/
#define TEA_ENC_TEST_VECTORS 4
#define TEA_DEC_TEST_VECTORS 4
static
struct
cipher_testvec
tea_enc_tv_template
[]
=
{
static
struct
cipher_testvec
tea_enc_tv_template
[]
=
{
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
...
...
@@ -2138,31 +2133,30 @@ static struct cipher_testvec tea_enc_tv_template[] =
.
key
=
{
0x09
,
0x65
,
0x43
,
0x11
,
0x66
,
0x44
,
0x39
,
0x25
,
0x51
,
0x3a
,
0x16
,
0x10
,
0x0a
,
0x08
,
0x12
,
0x6e
},
.
klen
=
16
,
.
input
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
.
input
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
0x65
,
0x73
,
0x74
,
0x5f
,
0x76
,
0x65
,
0x63
,
0x74
},
.
ilen
=
16
,
.
result
=
{
0xbe
,
0x7a
,
0xbb
,
0x81
,
0x95
,
0x2d
,
0x1f
,
0x1e
,
.
result
=
{
0xbe
,
0x7a
,
0xbb
,
0x81
,
0x95
,
0x2d
,
0x1f
,
0x1e
,
0xdd
,
0x89
,
0xa1
,
0x25
,
0x04
,
0x21
,
0xdf
,
0x95
},
.
rlen
=
16
,
},
{
.
key
=
{
0x4d
,
0x76
,
0x32
,
0x17
,
0x05
,
0x3f
,
0x75
,
0x2c
,
0x5d
,
0x04
,
0x16
,
0x36
,
0x15
,
0x72
,
0x63
,
0x2f
},
.
klen
=
16
,
.
input
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
.
input
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
0x65
,
0x61
,
0x6c
,
0x6c
,
0x79
,
0x21
,
0x21
,
0x21
},
.
ilen
=
32
,
.
result
=
{
0xe0
,
0x4d
,
0x5d
,
0x3c
,
0xb7
,
0x8c
,
0x36
,
0x47
,
0x94
,
0x18
,
0x95
,
0x91
,
0xa9
,
0xfc
,
0x49
,
0xf8
,
0x44
,
0xd1
,
0x2d
,
0xc2
,
0x99
,
0xb8
,
0x08
,
0x2a
,
.
result
=
{
0xe0
,
0x4d
,
0x5d
,
0x3c
,
0xb7
,
0x8c
,
0x36
,
0x47
,
0x94
,
0x18
,
0x95
,
0x91
,
0xa9
,
0xfc
,
0x49
,
0xf8
,
0x44
,
0xd1
,
0x2d
,
0xc2
,
0x99
,
0xb8
,
0x08
,
0x2a
,
0x07
,
0x89
,
0x73
,
0xc2
,
0x45
,
0x92
,
0xc6
,
0x90
},
.
rlen
=
32
,
}
};
static
struct
cipher_testvec
tea_dec_tv_template
[]
=
{
static
struct
cipher_testvec
tea_dec_tv_template
[]
=
{
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
...
...
@@ -2183,9 +2177,9 @@ static struct cipher_testvec tea_dec_tv_template[] =
0x51
,
0x3a
,
0x16
,
0x10
,
0x0a
,
0x08
,
0x12
,
0x6e
},
.
klen
=
16
,
.
input
=
{
0xbe
,
0x7a
,
0xbb
,
0x81
,
0x95
,
0x2d
,
0x1f
,
0x1e
,
0xdd
,
0x89
,
0xa1
,
0x25
,
0x04
,
0x21
,
0xdf
,
0x95
},
.
ilen
=
16
,
.
result
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
0xdd
,
0x89
,
0xa1
,
0x25
,
0x04
,
0x21
,
0xdf
,
0x95
},
.
ilen
=
16
,
.
result
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
0x65
,
0x73
,
0x74
,
0x5f
,
0x76
,
0x65
,
0x63
,
0x74
},
.
rlen
=
16
,
},
{
...
...
@@ -2193,26 +2187,25 @@ static struct cipher_testvec tea_dec_tv_template[] =
0x5d
,
0x04
,
0x16
,
0x36
,
0x15
,
0x72
,
0x63
,
0x2f
},
.
klen
=
16
,
.
input
=
{
0xe0
,
0x4d
,
0x5d
,
0x3c
,
0xb7
,
0x8c
,
0x36
,
0x47
,
0x94
,
0x18
,
0x95
,
0x91
,
0xa9
,
0xfc
,
0x49
,
0xf8
,
0x44
,
0xd1
,
0x2d
,
0xc2
,
0x99
,
0xb8
,
0x08
,
0x2a
,
0x07
,
0x89
,
0x73
,
0xc2
,
0x45
,
0x92
,
0xc6
,
0x90
},
0x94
,
0x18
,
0x95
,
0x91
,
0xa9
,
0xfc
,
0x49
,
0xf8
,
0x44
,
0xd1
,
0x2d
,
0xc2
,
0x99
,
0xb8
,
0x08
,
0x2a
,
0x07
,
0x89
,
0x73
,
0xc2
,
0x45
,
0x92
,
0xc6
,
0x90
},
.
ilen
=
32
,
.
result
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
.
result
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
0x65
,
0x61
,
0x6c
,
0x6c
,
0x79
,
0x21
,
0x21
,
0x21
},
.
rlen
=
32
,
}
};
/*
* XTEA test vectors
/*
* XTEA test vectors
*/
#define XTEA_ENC_TEST_VECTORS 4
#define XTEA_DEC_TEST_VECTORS 4
static
struct
cipher_testvec
xtea_enc_tv_template
[]
=
{
static
struct
cipher_testvec
xtea_enc_tv_template
[]
=
{
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
...
...
@@ -2232,31 +2225,30 @@ static struct cipher_testvec xtea_enc_tv_template[] =
.
key
=
{
0x09
,
0x65
,
0x43
,
0x11
,
0x66
,
0x44
,
0x39
,
0x25
,
0x51
,
0x3a
,
0x16
,
0x10
,
0x0a
,
0x08
,
0x12
,
0x6e
},
.
klen
=
16
,
.
input
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
.
input
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
0x65
,
0x73
,
0x74
,
0x5f
,
0x76
,
0x65
,
0x63
,
0x74
},
.
ilen
=
16
,
.
result
=
{
0xe2
,
0x04
,
0xdb
,
0xf2
,
0x89
,
0x85
,
0x9e
,
0xea
,
.
result
=
{
0xe2
,
0x04
,
0xdb
,
0xf2
,
0x89
,
0x85
,
0x9e
,
0xea
,
0x61
,
0x35
,
0xaa
,
0xed
,
0xb5
,
0xcb
,
0x71
,
0x2c
},
.
rlen
=
16
,
},
{
.
key
=
{
0x4d
,
0x76
,
0x32
,
0x17
,
0x05
,
0x3f
,
0x75
,
0x2c
,
0x5d
,
0x04
,
0x16
,
0x36
,
0x15
,
0x72
,
0x63
,
0x2f
},
.
klen
=
16
,
.
input
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
.
input
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
0x65
,
0x61
,
0x6c
,
0x6c
,
0x79
,
0x21
,
0x21
,
0x21
},
.
ilen
=
32
,
.
result
=
{
0x0b
,
0x03
,
0xcd
,
0x8a
,
0xbe
,
0x95
,
0xfd
,
0xb1
,
0xc1
,
0x44
,
0x91
,
0x0b
,
0xa5
,
0xc9
,
0x1b
,
0xb4
,
0xa9
,
0xda
,
0x1e
,
0x9e
,
0xb1
,
0x3e
,
0x2a
,
0x8f
,
.
result
=
{
0x0b
,
0x03
,
0xcd
,
0x8a
,
0xbe
,
0x95
,
0xfd
,
0xb1
,
0xc1
,
0x44
,
0x91
,
0x0b
,
0xa5
,
0xc9
,
0x1b
,
0xb4
,
0xa9
,
0xda
,
0x1e
,
0x9e
,
0xb1
,
0x3e
,
0x2a
,
0x8f
,
0xea
,
0xa5
,
0x6a
,
0x85
,
0xd1
,
0xf4
,
0xa8
,
0xa5
},
.
rlen
=
32
,
}
};
static
struct
cipher_testvec
xtea_dec_tv_template
[]
=
{
static
struct
cipher_testvec
xtea_dec_tv_template
[]
=
{
{
.
key
=
{
[
0
...
15
]
=
0x00
},
.
klen
=
16
,
...
...
@@ -2276,24 +2268,24 @@ static struct cipher_testvec xtea_dec_tv_template[] =
.
key
=
{
0x09
,
0x65
,
0x43
,
0x11
,
0x66
,
0x44
,
0x39
,
0x25
,
0x51
,
0x3a
,
0x16
,
0x10
,
0x0a
,
0x08
,
0x12
,
0x6e
},
.
klen
=
16
,
.
input
=
{
0xe2
,
0x04
,
0xdb
,
0xf2
,
0x89
,
0x85
,
0x9e
,
0xea
,
.
input
=
{
0xe2
,
0x04
,
0xdb
,
0xf2
,
0x89
,
0x85
,
0x9e
,
0xea
,
0x61
,
0x35
,
0xaa
,
0xed
,
0xb5
,
0xcb
,
0x71
,
0x2c
},
.
ilen
=
16
,
.
result
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
.
result
=
{
0x6c
,
0x6f
,
0x6e
,
0x67
,
0x65
,
0x72
,
0x5f
,
0x74
,
0x65
,
0x73
,
0x74
,
0x5f
,
0x76
,
0x65
,
0x63
,
0x74
},
.
rlen
=
16
,
},
{
.
key
=
{
0x4d
,
0x76
,
0x32
,
0x17
,
0x05
,
0x3f
,
0x75
,
0x2c
,
0x5d
,
0x04
,
0x16
,
0x36
,
0x15
,
0x72
,
0x63
,
0x2f
},
.
klen
=
16
,
.
input
=
{
0x0b
,
0x03
,
0xcd
,
0x8a
,
0xbe
,
0x95
,
0xfd
,
0xb1
,
0xc1
,
0x44
,
0x91
,
0x0b
,
0xa5
,
0xc9
,
0x1b
,
0xb4
,
0xa9
,
0xda
,
0x1e
,
0x9e
,
0xb1
,
0x3e
,
0x2a
,
0x8f
,
.
input
=
{
0x0b
,
0x03
,
0xcd
,
0x8a
,
0xbe
,
0x95
,
0xfd
,
0xb1
,
0xc1
,
0x44
,
0x91
,
0x0b
,
0xa5
,
0xc9
,
0x1b
,
0xb4
,
0xa9
,
0xda
,
0x1e
,
0x9e
,
0xb1
,
0x3e
,
0x2a
,
0x8f
,
0xea
,
0xa5
,
0x6a
,
0x85
,
0xd1
,
0xf4
,
0xa8
,
0xa5
},
.
ilen
=
32
,
.
result
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
.
result
=
{
0x54
,
0x65
,
0x61
,
0x20
,
0x69
,
0x73
,
0x20
,
0x67
,
0x6f
,
0x6f
,
0x64
,
0x20
,
0x66
,
0x6f
,
0x72
,
0x20
,
0x79
,
0x6f
,
0x75
,
0x21
,
0x21
,
0x21
,
0x20
,
0x72
,
0x65
,
0x61
,
0x6c
,
0x6c
,
0x79
,
0x21
,
0x21
,
0x21
},
.
rlen
=
32
,
}
...
...
@@ -2305,9 +2297,9 @@ static struct cipher_testvec xtea_dec_tv_template[] =
#define KHAZAD_ENC_TEST_VECTORS 5
#define KHAZAD_DEC_TEST_VECTORS 5
static
struct
cipher_testvec
khazad_enc_tv_template
[]
=
{
{
.
key
=
{
0x80
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
static
struct
cipher_testvec
khazad_enc_tv_template
[]
=
{
{
.
key
=
{
0x80
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
klen
=
16
,
.
input
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
...
...
@@ -2351,9 +2343,9 @@ static struct cipher_testvec khazad_enc_tv_template[] = {
},
};
static
struct
cipher_testvec
khazad_dec_tv_template
[]
=
{
static
struct
cipher_testvec
khazad_dec_tv_template
[]
=
{
{
.
key
=
{
0x80
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
.
key
=
{
0x80
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
klen
=
16
,
.
input
=
{
0X49
,
0Xa4
,
0Xce
,
0X32
,
0Xac
,
0X19
,
0X0e
,
0X3f
},
...
...
@@ -2697,8 +2689,7 @@ static struct comp_testvec deflate_decomp_tv_template[] = {
*/
#define MICHAEL_MIC_TEST_VECTORS 6
static
struct
hash_testvec
michael_mic_tv_template
[]
=
{
static
struct
hash_testvec
michael_mic_tv_template
[]
=
{
{
.
key
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
},
.
ksize
=
8
,
...
...
@@ -2743,4 +2734,88 @@ static struct hash_testvec michael_mic_tv_template[] =
}
};
/*
* Cipher speed tests
*/
static
struct
cipher_speed
aes_speed_template
[]
=
{
{
.
klen
=
16
,
.
blen
=
16
,
},
{
.
klen
=
16
,
.
blen
=
64
,
},
{
.
klen
=
16
,
.
blen
=
256
,
},
{
.
klen
=
16
,
.
blen
=
1024
,
},
{
.
klen
=
16
,
.
blen
=
8192
,
},
{
.
klen
=
24
,
.
blen
=
16
,
},
{
.
klen
=
24
,
.
blen
=
64
,
},
{
.
klen
=
24
,
.
blen
=
256
,
},
{
.
klen
=
24
,
.
blen
=
1024
,
},
{
.
klen
=
24
,
.
blen
=
8192
,
},
{
.
klen
=
32
,
.
blen
=
16
,
},
{
.
klen
=
32
,
.
blen
=
64
,
},
{
.
klen
=
32
,
.
blen
=
256
,
},
{
.
klen
=
32
,
.
blen
=
1024
,
},
{
.
klen
=
32
,
.
blen
=
8192
,
},
/* End marker */
{
.
klen
=
0
,
.
blen
=
0
,
}
};
static
struct
cipher_speed
des3_ede_speed_template
[]
=
{
{
.
klen
=
24
,
.
blen
=
16
,
},
{
.
klen
=
24
,
.
blen
=
64
,
},
{
.
klen
=
24
,
.
blen
=
256
,
},
{
.
klen
=
24
,
.
blen
=
1024
,
},
{
.
klen
=
24
,
.
blen
=
8192
,
},
/* End marker */
{
.
klen
=
0
,
.
blen
=
0
,
}
};
static
struct
cipher_speed
twofish_speed_template
[]
=
{
{
.
klen
=
16
,
.
blen
=
16
,
},
{
.
klen
=
16
,
.
blen
=
64
,
},
{
.
klen
=
16
,
.
blen
=
256
,
},
{
.
klen
=
16
,
.
blen
=
1024
,
},
{
.
klen
=
16
,
.
blen
=
8192
,
},
{
.
klen
=
24
,
.
blen
=
16
,
},
{
.
klen
=
24
,
.
blen
=
64
,
},
{
.
klen
=
24
,
.
blen
=
256
,
},
{
.
klen
=
24
,
.
blen
=
1024
,
},
{
.
klen
=
24
,
.
blen
=
8192
,
},
{
.
klen
=
32
,
.
blen
=
16
,
},
{
.
klen
=
32
,
.
blen
=
64
,
},
{
.
klen
=
32
,
.
blen
=
256
,
},
{
.
klen
=
32
,
.
blen
=
1024
,
},
{
.
klen
=
32
,
.
blen
=
8192
,
},
/* End marker */
{
.
klen
=
0
,
.
blen
=
0
,
}
};
static
struct
cipher_speed
blowfish_speed_template
[]
=
{
/* Don't support blowfish keys > 256 bit in this test */
{
.
klen
=
8
,
.
blen
=
16
,
},
{
.
klen
=
8
,
.
blen
=
64
,
},
{
.
klen
=
8
,
.
blen
=
256
,
},
{
.
klen
=
8
,
.
blen
=
1024
,
},
{
.
klen
=
8
,
.
blen
=
8192
,
},
{
.
klen
=
32
,
.
blen
=
16
,
},
{
.
klen
=
32
,
.
blen
=
64
,
},
{
.
klen
=
32
,
.
blen
=
256
,
},
{
.
klen
=
32
,
.
blen
=
1024
,
},
{
.
klen
=
32
,
.
blen
=
8192
,
},
/* End marker */
{
.
klen
=
0
,
.
blen
=
0
,
}
};
static
struct
cipher_speed
des_speed_template
[]
=
{
{
.
klen
=
8
,
.
blen
=
16
,
},
{
.
klen
=
8
,
.
blen
=
64
,
},
{
.
klen
=
8
,
.
blen
=
256
,
},
{
.
klen
=
8
,
.
blen
=
1024
,
},
{
.
klen
=
8
,
.
blen
=
8192
,
},
/* End marker */
{
.
klen
=
0
,
.
blen
=
0
,
}
};
#endif
/* _CRYPTO_TCRYPT_H */
drivers/net/appletalk/ltpc.c
View file @
060de20e
...
...
@@ -1109,8 +1109,7 @@ struct net_device * __init ltpc_probe(void)
inb_p
(
io
+
1
);
inb_p
(
io
+
3
);
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
2
*
HZ
/
100
);
msleep
(
20
);
inb_p
(
io
+
0
);
inb_p
(
io
+
2
);
...
...
@@ -1120,8 +1119,7 @@ struct net_device * __init ltpc_probe(void)
inb_p
(
io
+
5
);
/* enable dma */
inb_p
(
io
+
6
);
/* tri-state interrupt line */
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
HZ
);
ssleep
(
1
);
/* now, figure out which dma channel we're using, unless it's
already been specified */
...
...
include/linux/netdevice.h
View file @
060de20e
...
...
@@ -41,7 +41,7 @@
struct
divert_blk
;
struct
vlan_group
;
struct
ethtool_ops
;
struct
netpoll
;
struct
netpoll
_info
;
/* source back-compat hooks */
#define SET_ETHTOOL_OPS(netdev,ops) \
( (netdev)->ethtool_ops = (ops) )
...
...
@@ -468,7 +468,7 @@ struct net_device
unsigned
char
*
haddr
);
int
(
*
neigh_setup
)(
struct
net_device
*
dev
,
struct
neigh_parms
*
);
#ifdef CONFIG_NETPOLL
struct
netpoll
*
np
;
struct
netpoll
_info
*
npinfo
;
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER
void
(
*
poll_controller
)(
struct
net_device
*
dev
);
...
...
include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
View file @
060de20e
...
...
@@ -18,7 +18,6 @@ struct clusterip_config;
struct
ipt_clusterip_tgt_info
{
u_int32_t
flags
;
struct
clusterip_config
*
config
;
/* only relevant for new ones */
u_int8_t
clustermac
[
6
];
...
...
@@ -27,6 +26,8 @@ struct ipt_clusterip_tgt_info {
u_int16_t
local_nodes
[
CLUSTERIP_MAX_NODES
];
enum
clusterip_hashmode
hash_mode
;
u_int32_t
hash_initval
;
struct
clusterip_config
*
config
;
};
#endif
/*_IPT_CLUSTERIP_H_target*/
include/linux/netpoll.h
View file @
060de20e
...
...
@@ -16,14 +16,19 @@ struct netpoll;
struct
netpoll
{
struct
net_device
*
dev
;
char
dev_name
[
16
],
*
name
;
int
rx_flags
;
void
(
*
rx_hook
)(
struct
netpoll
*
,
int
,
char
*
,
int
);
void
(
*
drop
)(
struct
sk_buff
*
skb
);
u32
local_ip
,
remote_ip
;
u16
local_port
,
remote_port
;
unsigned
char
local_mac
[
6
],
remote_mac
[
6
];
};
struct
netpoll_info
{
spinlock_t
poll_lock
;
int
poll_owner
;
int
rx_flags
;
spinlock_t
rx_lock
;
struct
netpoll
*
rx_np
;
/* netpoll that registered an rx_hook */
};
void
netpoll_poll
(
struct
netpoll
*
np
);
...
...
@@ -39,22 +44,35 @@ void netpoll_queue(struct sk_buff *skb);
#ifdef CONFIG_NETPOLL
static
inline
int
netpoll_rx
(
struct
sk_buff
*
skb
)
{
return
skb
->
dev
->
np
&&
skb
->
dev
->
np
->
rx_flags
&&
__netpoll_rx
(
skb
);
struct
netpoll_info
*
npinfo
=
skb
->
dev
->
npinfo
;
unsigned
long
flags
;
int
ret
=
0
;
if
(
!
npinfo
||
(
!
npinfo
->
rx_np
&&
!
npinfo
->
rx_flags
))
return
0
;
spin_lock_irqsave
(
&
npinfo
->
rx_lock
,
flags
);
/* check rx_flags again with the lock held */
if
(
npinfo
->
rx_flags
&&
__netpoll_rx
(
skb
))
ret
=
1
;
spin_unlock_irqrestore
(
&
npinfo
->
rx_lock
,
flags
);
return
ret
;
}
static
inline
void
netpoll_poll_lock
(
struct
net_device
*
dev
)
{
if
(
dev
->
np
)
{
spin_lock
(
&
dev
->
np
->
poll_lock
);
dev
->
np
->
poll_owner
=
smp_processor_id
();
if
(
dev
->
np
info
)
{
spin_lock
(
&
dev
->
np
info
->
poll_lock
);
dev
->
np
info
->
poll_owner
=
smp_processor_id
();
}
}
static
inline
void
netpoll_poll_unlock
(
struct
net_device
*
dev
)
{
if
(
dev
->
np
)
{
spin_unlock
(
&
dev
->
np
->
poll_lock
)
;
dev
->
np
->
poll_owner
=
-
1
;
if
(
dev
->
np
info
)
{
dev
->
npinfo
->
poll_owner
=
-
1
;
spin_unlock
(
&
dev
->
npinfo
->
poll_lock
)
;
}
}
...
...
include/linux/x25.h
View file @
060de20e
...
...
@@ -4,6 +4,8 @@
* History
* mar/20/00 Daniela Squassoni Disabling/enabling of facilities
* negotiation.
* apr/02/05 Shaun Pereira Selective sub address matching with
* call user data
*/
#ifndef X25_KERNEL_H
...
...
@@ -16,6 +18,9 @@
#define SIOCX25GCALLUSERDATA (SIOCPROTOPRIVATE + 4)
#define SIOCX25SCALLUSERDATA (SIOCPROTOPRIVATE + 5)
#define SIOCX25GCAUSEDIAG (SIOCPROTOPRIVATE + 6)
#define SIOCX25SCUDMATCHLEN (SIOCPROTOPRIVATE + 7)
#define SIOCX25CALLACCPTAPPRV (SIOCPROTOPRIVATE + 8)
#define SIOCX25SENDCALLACCPT (SIOCPROTOPRIVATE + 9)
/*
* Values for {get,set}sockopt.
...
...
@@ -109,4 +114,11 @@ struct x25_causediag {
unsigned
char
diagnostic
;
};
/*
* Further optional call user data match length selection
*/
struct
x25_subaddr
{
unsigned
int
cudmatchlength
;
};
#endif
include/net/x25.h
View file @
060de20e
...
...
@@ -79,6 +79,8 @@ enum {
#define X25_DEFAULT_PACKET_SIZE X25_PS128
/* Default Packet Size */
#define X25_DEFAULT_THROUGHPUT 0x0A
/* Deafult Throughput */
#define X25_DEFAULT_REVERSE 0x00
/* Default Reverse Charging */
#define X25_DENY_ACCPT_APPRV 0x01
/* Default value */
#define X25_ALLOW_ACCPT_APPRV 0x00
/* Control enabled */
#define X25_SMODULUS 8
#define X25_EMODULUS 128
...
...
@@ -94,7 +96,7 @@ enum {
#define X25_FAC_CLASS_C 0x80
#define X25_FAC_CLASS_D 0xC0
#define X25_FAC_REVERSE 0x01
#define X25_FAC_REVERSE 0x01
/* also fast select */
#define X25_FAC_THROUGHPUT 0x02
#define X25_FAC_PACKET_SIZE 0x42
#define X25_FAC_WINDOW_SIZE 0x43
...
...
@@ -134,8 +136,8 @@ struct x25_sock {
struct
sock
sk
;
struct
x25_address
source_addr
,
dest_addr
;
struct
x25_neigh
*
neighbour
;
unsigned
int
lci
;
unsigned
char
state
,
condition
,
qbitincl
,
intflag
;
unsigned
int
lci
,
cudmatchlength
;
unsigned
char
state
,
condition
,
qbitincl
,
intflag
,
accptapprv
;
unsigned
short
vs
,
vr
,
va
,
vl
;
unsigned
long
t2
,
t21
,
t22
,
t23
;
unsigned
short
fraglen
;
...
...
@@ -242,7 +244,6 @@ extern int x25_validate_nr(struct sock *, unsigned short);
extern
void
x25_write_internal
(
struct
sock
*
,
int
);
extern
int
x25_decode
(
struct
sock
*
,
struct
sk_buff
*
,
int
*
,
int
*
,
int
*
,
int
*
,
int
*
);
extern
void
x25_disconnect
(
struct
sock
*
,
int
,
unsigned
char
,
unsigned
char
);
extern
int
x25_check_calluserdata
(
struct
x25_calluserdata
*
,
struct
x25_calluserdata
*
);
/* x25_timer.c */
extern
void
x25_start_heartbeat
(
struct
sock
*
);
...
...
net/appletalk/aarp.c
View file @
060de20e
...
...
@@ -35,6 +35,7 @@
#include <net/datalink.h>
#include <net/psnap.h>
#include <linux/atalk.h>
#include <linux/delay.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
...
...
@@ -462,8 +463,7 @@ void aarp_probe_network(struct atalk_iface *atif)
aarp_send_probe
(
atif
->
dev
,
&
atif
->
address
);
/* Defer 1/10th */
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
HZ
/
10
);
msleep
(
100
);
if
(
atif
->
status
&
ATIF_PROBE_FAIL
)
break
;
...
...
@@ -510,9 +510,8 @@ int aarp_proxy_probe_network(struct atalk_iface *atif, struct atalk_addr *sa)
aarp_send_probe
(
atif
->
dev
,
sa
);
/* Defer 1/10th */
current
->
state
=
TASK_INTERRUPTIBLE
;
write_unlock_bh
(
&
aarp_lock
);
schedule_timeout
(
HZ
/
1
0
);
msleep
(
10
0
);
write_lock_bh
(
&
aarp_lock
);
if
(
entry
->
status
&
ATIF_PROBE_FAIL
)
...
...
net/bridge/netfilter/ebtables.c
View file @
060de20e
...
...
@@ -859,8 +859,7 @@ static int translate_table(struct ebt_replace *repl,
if
(
repl
->
valid_hooks
&
(
1
<<
i
))
if
(
check_chainloops
(
newinfo
->
hook_entry
[
i
],
cl_s
,
udc_cnt
,
i
,
newinfo
->
entries
))
{
if
(
cl_s
)
vfree
(
cl_s
);
vfree
(
cl_s
);
return
-
EINVAL
;
}
...
...
@@ -883,8 +882,7 @@ static int translate_table(struct ebt_replace *repl,
EBT_ENTRY_ITERATE
(
newinfo
->
entries
,
newinfo
->
entries_size
,
ebt_cleanup_entry
,
&
i
);
}
if
(
cl_s
)
vfree
(
cl_s
);
vfree
(
cl_s
);
return
ret
;
}
...
...
@@ -1030,8 +1028,7 @@ static int do_replace(void __user *user, unsigned int len)
}
vfree
(
table
);
if
(
counterstmp
)
vfree
(
counterstmp
);
vfree
(
counterstmp
);
return
ret
;
free_unlock:
...
...
@@ -1040,8 +1037,7 @@ static int do_replace(void __user *user, unsigned int len)
EBT_ENTRY_ITERATE
(
newinfo
->
entries
,
newinfo
->
entries_size
,
ebt_cleanup_entry
,
NULL
);
free_counterstmp:
if
(
counterstmp
)
vfree
(
counterstmp
);
vfree
(
counterstmp
);
/* can be initialized in translate_table() */
if
(
newinfo
->
chainstack
)
{
for
(
i
=
0
;
i
<
num_possible_cpus
();
i
++
)
...
...
@@ -1049,11 +1045,9 @@ static int do_replace(void __user *user, unsigned int len)
vfree
(
newinfo
->
chainstack
);
}
free_entries:
if
(
newinfo
->
entries
)
vfree
(
newinfo
->
entries
);
vfree
(
newinfo
->
entries
);
free_newinfo:
if
(
newinfo
)
vfree
(
newinfo
);
vfree
(
newinfo
);
return
ret
;
}
...
...
@@ -1213,8 +1207,7 @@ void ebt_unregister_table(struct ebt_table *table)
down
(
&
ebt_mutex
);
LIST_DELETE
(
&
ebt_tables
,
table
);
up
(
&
ebt_mutex
);
if
(
table
->
private
->
entries
)
vfree
(
table
->
private
->
entries
);
vfree
(
table
->
private
->
entries
);
if
(
table
->
private
->
chainstack
)
{
for
(
i
=
0
;
i
<
num_possible_cpus
();
i
++
)
vfree
(
table
->
private
->
chainstack
[
i
]);
...
...
net/core/netpoll.c
View file @
060de20e
...
...
@@ -130,19 +130,20 @@ static int checksum_udp(struct sk_buff *skb, struct udphdr *uh,
*/
static
void
poll_napi
(
struct
netpoll
*
np
)
{
struct
netpoll_info
*
npinfo
=
np
->
dev
->
npinfo
;
int
budget
=
16
;
if
(
test_bit
(
__LINK_STATE_RX_SCHED
,
&
np
->
dev
->
state
)
&&
np
->
poll_owner
!=
smp_processor_id
()
&&
spin_trylock
(
&
np
->
poll_lock
))
{
np
->
rx_flags
|=
NETPOLL_RX_DROP
;
np
info
->
poll_owner
!=
smp_processor_id
()
&&
spin_trylock
(
&
np
info
->
poll_lock
))
{
np
info
->
rx_flags
|=
NETPOLL_RX_DROP
;
atomic_inc
(
&
trapped
);
np
->
dev
->
poll
(
np
->
dev
,
&
budget
);
atomic_dec
(
&
trapped
);
np
->
rx_flags
&=
~
NETPOLL_RX_DROP
;
spin_unlock
(
&
np
->
poll_lock
);
np
info
->
rx_flags
&=
~
NETPOLL_RX_DROP
;
spin_unlock
(
&
np
info
->
poll_lock
);
}
}
...
...
@@ -245,6 +246,7 @@ static struct sk_buff * find_skb(struct netpoll *np, int len, int reserve)
static
void
netpoll_send_skb
(
struct
netpoll
*
np
,
struct
sk_buff
*
skb
)
{
int
status
;
struct
netpoll_info
*
npinfo
;
repeat:
if
(
!
np
||
!
np
->
dev
||
!
netif_running
(
np
->
dev
))
{
...
...
@@ -253,8 +255,9 @@ static void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
}
/* avoid recursion */
if
(
np
->
poll_owner
==
smp_processor_id
()
||
np
->
dev
->
xmit_lock_owner
==
smp_processor_id
())
{
npinfo
=
np
->
dev
->
npinfo
;
if
(
npinfo
->
poll_owner
==
smp_processor_id
()
||
np
->
dev
->
xmit_lock_owner
==
smp_processor_id
())
{
if
(
np
->
drop
)
np
->
drop
(
skb
);
else
...
...
@@ -341,14 +344,22 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
static
void
arp_reply
(
struct
sk_buff
*
skb
)
{
struct
netpoll_info
*
npinfo
=
skb
->
dev
->
npinfo
;
struct
arphdr
*
arp
;
unsigned
char
*
arp_ptr
;
int
size
,
type
=
ARPOP_REPLY
,
ptype
=
ETH_P_ARP
;
u32
sip
,
tip
;
unsigned
long
flags
;
struct
sk_buff
*
send_skb
;
struct
netpoll
*
np
=
skb
->
dev
->
np
;
struct
netpoll
*
np
=
NULL
;
spin_lock_irqsave
(
&
npinfo
->
rx_lock
,
flags
);
if
(
npinfo
->
rx_np
&&
npinfo
->
rx_np
->
dev
==
skb
->
dev
)
np
=
npinfo
->
rx_np
;
spin_unlock_irqrestore
(
&
npinfo
->
rx_lock
,
flags
);
if
(
!
np
)
return
;
if
(
!
np
)
return
;
/* No arp on this interface */
if
(
skb
->
dev
->
flags
&
IFF_NOARP
)
...
...
@@ -429,9 +440,9 @@ int __netpoll_rx(struct sk_buff *skb)
int
proto
,
len
,
ulen
;
struct
iphdr
*
iph
;
struct
udphdr
*
uh
;
struct
netpoll
*
np
=
skb
->
dev
->
np
;
struct
netpoll
*
np
=
skb
->
dev
->
np
info
->
rx_np
;
if
(
!
np
->
rx_hook
)
if
(
!
np
)
goto
out
;
if
(
skb
->
dev
->
type
!=
ARPHRD_ETHER
)
goto
out
;
...
...
@@ -611,9 +622,8 @@ int netpoll_setup(struct netpoll *np)
{
struct
net_device
*
ndev
=
NULL
;
struct
in_device
*
in_dev
;
np
->
poll_lock
=
SPIN_LOCK_UNLOCKED
;
np
->
poll_owner
=
-
1
;
struct
netpoll_info
*
npinfo
;
unsigned
long
flags
;
if
(
np
->
dev_name
)
ndev
=
dev_get_by_name
(
np
->
dev_name
);
...
...
@@ -624,7 +634,17 @@ int netpoll_setup(struct netpoll *np)
}
np
->
dev
=
ndev
;
ndev
->
np
=
np
;
if
(
!
ndev
->
npinfo
)
{
npinfo
=
kmalloc
(
sizeof
(
*
npinfo
),
GFP_KERNEL
);
if
(
!
npinfo
)
goto
release
;
npinfo
->
rx_np
=
NULL
;
npinfo
->
poll_lock
=
SPIN_LOCK_UNLOCKED
;
npinfo
->
poll_owner
=
-
1
;
npinfo
->
rx_lock
=
SPIN_LOCK_UNLOCKED
;
}
else
npinfo
=
ndev
->
npinfo
;
if
(
!
ndev
->
poll_controller
)
{
printk
(
KERN_ERR
"%s: %s doesn't support polling, aborting.
\n
"
,
...
...
@@ -692,13 +712,20 @@ int netpoll_setup(struct netpoll *np)
np
->
name
,
HIPQUAD
(
np
->
local_ip
));
}
if
(
np
->
rx_hook
)
np
->
rx_flags
=
NETPOLL_RX_ENABLED
;
if
(
np
->
rx_hook
)
{
spin_lock_irqsave
(
&
npinfo
->
rx_lock
,
flags
);
npinfo
->
rx_flags
|=
NETPOLL_RX_ENABLED
;
npinfo
->
rx_np
=
np
;
spin_unlock_irqrestore
(
&
npinfo
->
rx_lock
,
flags
);
}
/* last thing to do is link it to the net device structure */
ndev
->
npinfo
=
npinfo
;
return
0
;
release:
ndev
->
np
=
NULL
;
if
(
!
ndev
->
npinfo
)
kfree
(
npinfo
);
np
->
dev
=
NULL
;
dev_put
(
ndev
);
return
-
1
;
...
...
@@ -706,9 +733,20 @@ int netpoll_setup(struct netpoll *np)
void
netpoll_cleanup
(
struct
netpoll
*
np
)
{
if
(
np
->
dev
)
np
->
dev
->
np
=
NULL
;
dev_put
(
np
->
dev
);
struct
netpoll_info
*
npinfo
;
unsigned
long
flags
;
if
(
np
->
dev
)
{
npinfo
=
np
->
dev
->
npinfo
;
if
(
npinfo
&&
npinfo
->
rx_np
==
np
)
{
spin_lock_irqsave
(
&
npinfo
->
rx_lock
,
flags
);
npinfo
->
rx_np
=
NULL
;
npinfo
->
rx_flags
&=
~
NETPOLL_RX_ENABLED
;
spin_unlock_irqrestore
(
&
npinfo
->
rx_lock
,
flags
);
}
dev_put
(
np
->
dev
);
}
np
->
dev
=
NULL
;
}
...
...
net/ipv4/netfilter/ipt_CLUSTERIP.c
View file @
060de20e
...
...
@@ -339,7 +339,7 @@ target(struct sk_buff **pskb,
* error messages (RELATED) and information requests (see below) */
if
((
*
pskb
)
->
nh
.
iph
->
protocol
==
IPPROTO_ICMP
&&
(
ctinfo
==
IP_CT_RELATED
||
ctinfo
==
IP_CT_
IS_REPLY
+
IP_CT_IS_REPLY
))
||
ctinfo
==
IP_CT_
RELATED
+
IP_CT_IS_REPLY
))
return
IPT_CONTINUE
;
/* ip_conntrack_icmp guarantees us that we only have ICMP_ECHO,
...
...
net/ipv4/route.c
View file @
060de20e
...
...
@@ -1767,7 +1767,7 @@ static inline int ip_mkroute_input_def(struct sk_buff *skb,
struct
in_device
*
in_dev
,
u32
daddr
,
u32
saddr
,
u32
tos
)
{
struct
rtable
*
rth
;
struct
rtable
*
rth
=
NULL
;
int
err
;
unsigned
hash
;
...
...
@@ -1794,7 +1794,7 @@ static inline int ip_mkroute_input(struct sk_buff *skb,
u32
daddr
,
u32
saddr
,
u32
tos
)
{
#ifdef CONFIG_IP_ROUTE_MULTIPATH_CACHED
struct
rtable
*
rth
;
struct
rtable
*
rth
=
NULL
;
unsigned
char
hop
,
hopcount
,
lasthop
;
int
err
=
-
EINVAL
;
unsigned
int
hash
;
...
...
@@ -2239,7 +2239,7 @@ static inline int ip_mkroute_output_def(struct rtable **rp,
struct
net_device
*
dev_out
,
unsigned
flags
)
{
struct
rtable
*
rth
;
struct
rtable
*
rth
=
NULL
;
int
err
=
__mkroute_output
(
&
rth
,
res
,
fl
,
oldflp
,
dev_out
,
flags
);
unsigned
hash
;
if
(
err
==
0
)
{
...
...
@@ -2267,7 +2267,7 @@ static inline int ip_mkroute_output(struct rtable** rp,
unsigned
char
hop
;
unsigned
hash
;
int
err
=
-
EINVAL
;
struct
rtable
*
rth
;
struct
rtable
*
rth
=
NULL
;
if
(
res
->
fi
&&
res
->
fi
->
fib_nhs
>
1
)
{
unsigned
char
hopcount
=
res
->
fi
->
fib_nhs
;
...
...
net/socket.c
View file @
060de20e
...
...
@@ -383,9 +383,8 @@ int sock_map_fd(struct socket *sock)
goto
out
;
}
sprintf
(
name
,
"[%lu]"
,
SOCK_INODE
(
sock
)
->
i_ino
);
this
.
len
=
sprintf
(
name
,
"[%lu]"
,
SOCK_INODE
(
sock
)
->
i_ino
);
this
.
name
=
name
;
this
.
len
=
strlen
(
name
);
this
.
hash
=
SOCK_INODE
(
sock
)
->
i_ino
;
file
->
f_dentry
=
d_alloc
(
sock_mnt
->
mnt_sb
->
s_root
,
&
this
);
...
...
net/x25/af_x25.c
View file @
060de20e
...
...
@@ -29,6 +29,10 @@
* 2000-11-14 Henner Eisen Closing datalink from NETDEV_GOING_DOWN
* 2002-10-06 Arnaldo C. Melo Get rid of cli/sti, move proc stuff to
* x25_proc.c, using seq_file
* 2005-04-02 Shaun Pereira Selective sub address matching
* with call user data
* 2005-04-15 Shaun Pereira Fast select with no restriction on
* response
*/
#include <linux/config.h>
...
...
@@ -219,7 +223,8 @@ static void x25_insert_socket(struct sock *sk)
* Note: if a listening socket has cud set it must only get calls
* with matching cud.
*/
static
struct
sock
*
x25_find_listener
(
struct
x25_address
*
addr
,
struct
x25_calluserdata
*
calluserdata
)
static
struct
sock
*
x25_find_listener
(
struct
x25_address
*
addr
,
struct
sk_buff
*
skb
)
{
struct
sock
*
s
;
struct
sock
*
next_best
;
...
...
@@ -230,22 +235,23 @@ static struct sock *x25_find_listener(struct x25_address *addr, struct x25_callu
sk_for_each
(
s
,
node
,
&
x25_list
)
if
((
!
strcmp
(
addr
->
x25_addr
,
x25_sk
(
s
)
->
source_addr
.
x25_addr
)
||
!
strcmp
(
addr
->
x25_addr
,
null_x25_address
.
x25_addr
))
&&
s
->
sk_state
==
TCP_LISTEN
)
{
x25_sk
(
s
)
->
source_addr
.
x25_addr
)
||
!
strcmp
(
addr
->
x25_addr
,
null_x25_address
.
x25_addr
))
&&
s
->
sk_state
==
TCP_LISTEN
)
{
/*
* Found a listening socket, now check the incoming
* call user data vs this sockets call user data
*/
if
(
x25_check_calluserdata
(
&
x25_sk
(
s
)
->
calluserdata
,
calluserdata
))
{
sock_hold
(
s
);
goto
found
;
}
if
(
x25_sk
(
s
)
->
calluserdata
.
cudlength
==
0
)
{
if
(
skb
->
len
>
0
&&
x25_sk
(
s
)
->
cudmatchlength
>
0
)
{
if
((
memcmp
(
x25_sk
(
s
)
->
calluserdata
.
cuddata
,
skb
->
data
,
x25_sk
(
s
)
->
cudmatchlength
))
==
0
)
{
sock_hold
(
s
);
goto
found
;
}
}
else
next_best
=
s
;
}
}
if
(
next_best
)
{
s
=
next_best
;
...
...
@@ -497,6 +503,9 @@ static int x25_create(struct socket *sock, int protocol)
x25
->
t23
=
sysctl_x25_clear_request_timeout
;
x25
->
t2
=
sysctl_x25_ack_holdback_timeout
;
x25
->
state
=
X25_STATE_0
;
x25
->
cudmatchlength
=
0
;
x25
->
accptapprv
=
X25_DENY_ACCPT_APPRV
;
/* normally no cud */
/* on call accept */
x25
->
facilities
.
winsize_in
=
X25_DEFAULT_WINDOW_SIZE
;
x25
->
facilities
.
winsize_out
=
X25_DEFAULT_WINDOW_SIZE
;
...
...
@@ -545,6 +554,8 @@ static struct sock *x25_make_new(struct sock *osk)
x25
->
t2
=
ox25
->
t2
;
x25
->
facilities
=
ox25
->
facilities
;
x25
->
qbitincl
=
ox25
->
qbitincl
;
x25
->
cudmatchlength
=
ox25
->
cudmatchlength
;
x25
->
accptapprv
=
ox25
->
accptapprv
;
x25_init_timers
(
sk
);
out:
...
...
@@ -822,7 +833,6 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb,
struct
x25_sock
*
makex25
;
struct
x25_address
source_addr
,
dest_addr
;
struct
x25_facilities
facilities
;
struct
x25_calluserdata
calluserdata
;
int
len
,
rc
;
/*
...
...
@@ -844,20 +854,11 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb,
len
=
skb
->
data
[
0
]
+
1
;
skb_pull
(
skb
,
len
);
/*
* Incoming Call User Data.
*/
if
(
skb
->
len
>=
0
)
{
memcpy
(
calluserdata
.
cuddata
,
skb
->
data
,
skb
->
len
);
calluserdata
.
cudlength
=
skb
->
len
;
}
skb_push
(
skb
,
len
);
/*
* Find a listener for the particular address/cud pair.
*/
sk
=
x25_find_listener
(
&
source_addr
,
&
calluserdata
);
sk
=
x25_find_listener
(
&
source_addr
,
skb
);
skb_push
(
skb
,
len
);
/*
* We can't accept the Call Request.
...
...
@@ -900,11 +901,23 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb,
makex25
->
neighbour
=
nb
;
makex25
->
facilities
=
facilities
;
makex25
->
vc_facil_mask
=
x25_sk
(
sk
)
->
vc_facil_mask
;
makex25
->
calluserdata
=
calluserdata
;
x25_write_internal
(
make
,
X25_CALL_ACCEPTED
);
/* ensure no reverse facil on accept */
makex25
->
vc_facil_mask
&=
~
X25_MASK_REVERSE
;
makex25
->
cudmatchlength
=
x25_sk
(
sk
)
->
cudmatchlength
;
/* Normally all calls are accepted immediatly */
if
(
makex25
->
accptapprv
&
X25_DENY_ACCPT_APPRV
)
{
x25_write_internal
(
make
,
X25_CALL_ACCEPTED
);
makex25
->
state
=
X25_STATE_3
;
}
makex25
->
state
=
X25_STATE_3
;
/*
* Incoming Call User Data.
*/
if
(
skb
->
len
>=
0
)
{
memcpy
(
makex25
->
calluserdata
.
cuddata
,
skb
->
data
,
skb
->
len
);
makex25
->
calluserdata
.
cudlength
=
skb
->
len
;
}
sk
->
sk_ack_backlog
++
;
...
...
@@ -1288,7 +1301,8 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
if
(
facilities
.
throughput
<
0x03
||
facilities
.
throughput
>
0xDD
)
break
;
if
(
facilities
.
reverse
&&
facilities
.
reverse
!=
1
)
if
(
facilities
.
reverse
&&
(
facilities
.
reverse
|
0x81
)
!=
0x81
)
break
;
x25
->
facilities
=
facilities
;
rc
=
0
;
...
...
@@ -1325,6 +1339,44 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
break
;
}
case
SIOCX25SCUDMATCHLEN
:
{
struct
x25_subaddr
sub_addr
;
rc
=
-
EINVAL
;
if
(
sk
->
sk_state
!=
TCP_CLOSE
)
break
;
rc
=
-
EFAULT
;
if
(
copy_from_user
(
&
sub_addr
,
argp
,
sizeof
(
sub_addr
)))
break
;
rc
=
-
EINVAL
;
if
(
sub_addr
.
cudmatchlength
>
X25_MAX_CUD_LEN
)
break
;
x25
->
cudmatchlength
=
sub_addr
.
cudmatchlength
;
rc
=
0
;
break
;
}
case
SIOCX25CALLACCPTAPPRV
:
{
rc
=
-
EINVAL
;
if
(
sk
->
sk_state
!=
TCP_CLOSE
)
break
;
x25
->
accptapprv
=
X25_ALLOW_ACCPT_APPRV
;
rc
=
0
;
break
;
}
case
SIOCX25SENDCALLACCPT
:
{
rc
=
-
EINVAL
;
if
(
sk
->
sk_state
!=
TCP_ESTABLISHED
)
break
;
if
(
x25
->
accptapprv
)
/* must call accptapprv above */
break
;
x25_write_internal
(
sk
,
X25_CALL_ACCEPTED
);
x25
->
state
=
X25_STATE_3
;
rc
=
0
;
break
;
}
default:
rc
=
dev_ioctl
(
cmd
,
argp
);
break
;
...
...
net/x25/x25_facilities.c
View file @
060de20e
...
...
@@ -17,6 +17,8 @@
* X.25 001 Split from x25_subr.c
* mar/20/00 Daniela Squassoni Disabling/enabling of facilities
* negotiation.
* apr/14/05 Shaun Pereira - Allow fast select with no restriction
* on response.
*/
#include <linux/kernel.h>
...
...
@@ -43,9 +45,31 @@ int x25_parse_facilities(struct sk_buff *skb,
case
X25_FAC_CLASS_A
:
switch
(
*
p
)
{
case
X25_FAC_REVERSE
:
facilities
->
reverse
=
p
[
1
]
&
0x01
;
*
vc_fac_mask
|=
X25_MASK_REVERSE
;
break
;
if
((
p
[
1
]
&
0x81
)
==
0x81
)
{
facilities
->
reverse
=
p
[
1
]
&
0x81
;
*
vc_fac_mask
|=
X25_MASK_REVERSE
;
break
;
}
if
((
p
[
1
]
&
0x01
)
==
0x01
)
{
facilities
->
reverse
=
p
[
1
]
&
0x01
;
*
vc_fac_mask
|=
X25_MASK_REVERSE
;
break
;
}
if
((
p
[
1
]
&
0x80
)
==
0x80
)
{
facilities
->
reverse
=
p
[
1
]
&
0x80
;
*
vc_fac_mask
|=
X25_MASK_REVERSE
;
break
;
}
if
(
p
[
1
]
==
0x00
)
{
facilities
->
reverse
=
X25_DEFAULT_REVERSE
;
*
vc_fac_mask
|=
X25_MASK_REVERSE
;
break
;
}
case
X25_FAC_THROUGHPUT
:
facilities
->
throughput
=
p
[
1
];
*
vc_fac_mask
|=
X25_MASK_THROUGHPUT
;
...
...
@@ -122,7 +146,7 @@ int x25_create_facilities(unsigned char *buffer,
if
(
facilities
->
reverse
&&
(
facil_mask
&
X25_MASK_REVERSE
))
{
*
p
++
=
X25_FAC_REVERSE
;
*
p
++
=
!!
facilities
->
reverse
;
*
p
++
=
facilities
->
reverse
;
}
if
(
facilities
->
throughput
&&
(
facil_mask
&
X25_MASK_THROUGHPUT
))
{
...
...
@@ -171,7 +195,7 @@ int x25_negotiate_facilities(struct sk_buff *skb, struct sock *sk,
/*
* They want reverse charging, we won't accept it.
*/
if
(
theirs
.
reverse
&&
ours
->
reverse
)
{
if
(
(
theirs
.
reverse
&
0x01
)
&&
(
ours
->
reverse
&
0x01
)
)
{
SOCK_DEBUG
(
sk
,
"X.25: rejecting reverse charging request"
);
return
-
1
;
}
...
...
net/x25/x25_subr.c
View file @
060de20e
...
...
@@ -19,6 +19,8 @@
* mar/20/00 Daniela Squassoni Disabling/enabling of facilities
* negotiation.
* jun/24/01 Arnaldo C. Melo use skb_queue_purge, cleanups
* apr/04/15 Shaun Pereira Fast select with no
* restriction on response.
*/
#include <linux/kernel.h>
...
...
@@ -127,8 +129,12 @@ void x25_write_internal(struct sock *sk, int frametype)
len
+=
1
+
X25_ADDR_LEN
+
X25_MAX_FAC_LEN
+
X25_MAX_CUD_LEN
;
break
;
case
X25_CALL_ACCEPTED
:
len
+=
1
+
X25_MAX_FAC_LEN
+
X25_MAX_CUD_LEN
;
case
X25_CALL_ACCEPTED
:
/* fast sel with no restr on resp */
if
(
x25
->
facilities
.
reverse
&
0x80
)
{
len
+=
1
+
X25_MAX_FAC_LEN
+
X25_MAX_CUD_LEN
;
}
else
{
len
+=
1
+
X25_MAX_FAC_LEN
;
}
break
;
case
X25_CLEAR_REQUEST
:
case
X25_RESET_REQUEST
:
...
...
@@ -203,9 +209,16 @@ void x25_write_internal(struct sock *sk, int frametype)
x25
->
vc_facil_mask
);
dptr
=
skb_put
(
skb
,
len
);
memcpy
(
dptr
,
facilities
,
len
);
dptr
=
skb_put
(
skb
,
x25
->
calluserdata
.
cudlength
);
memcpy
(
dptr
,
x25
->
calluserdata
.
cuddata
,
x25
->
calluserdata
.
cudlength
);
/* fast select with no restriction on response
allows call user data. Userland must
ensure it is ours and not theirs */
if
(
x25
->
facilities
.
reverse
&
0x80
)
{
dptr
=
skb_put
(
skb
,
x25
->
calluserdata
.
cudlength
);
memcpy
(
dptr
,
x25
->
calluserdata
.
cuddata
,
x25
->
calluserdata
.
cudlength
);
}
x25
->
calluserdata
.
cudlength
=
0
;
break
;
...
...
@@ -354,21 +367,3 @@ void x25_check_rbuf(struct sock *sk)
}
}
/*
* Compare 2 calluserdata structures, used to find correct listening sockets
* when call user data is used.
*/
int
x25_check_calluserdata
(
struct
x25_calluserdata
*
ours
,
struct
x25_calluserdata
*
theirs
)
{
int
i
;
if
(
ours
->
cudlength
!=
theirs
->
cudlength
)
return
0
;
for
(
i
=
0
;
i
<
ours
->
cudlength
;
i
++
)
{
if
(
ours
->
cuddata
[
i
]
!=
theirs
->
cuddata
[
i
])
{
return
0
;
}
}
return
1
;
}
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