Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
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 @@ out:
#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 @@ out:
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 @@ out:
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 @@ free_iterate:
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 @@ free_counterstmp:
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 @@ repeat:
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 @@ repeat:
}
/* 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