mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 23:23:03 +00:00
23e91d8b7c
As we move to common code between client and server, we have been asked to make the names less confusing, and refer less to "cifs" and more to words which include "smb" instead to e.g. "smbfs" for the client (we already have "ksmbd" for the kernel server, and "smbd" for the user space Samba daemon). So to be more consistent in the naming of common code between client and server and reduce the risk of merge conflicts as more common code is added - rename "cifs_common" to "smbfs_common" (in future releases we also will rename the fs/cifs directory to fs/smbfs) Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com>
88 lines
1.3 KiB
C
88 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Cryptographic API
|
|
*
|
|
* ARC4 Cipher Algorithm
|
|
*
|
|
* Jon Oberheide <jon@oberheide.org>
|
|
*/
|
|
|
|
#include <linux/module.h>
|
|
#include "arc4.h"
|
|
|
|
MODULE_LICENSE("GPL");
|
|
|
|
int cifs_arc4_setkey(struct arc4_ctx *ctx, const u8 *in_key, unsigned int key_len)
|
|
{
|
|
int i, j = 0, k = 0;
|
|
|
|
ctx->x = 1;
|
|
ctx->y = 0;
|
|
|
|
for (i = 0; i < 256; i++)
|
|
ctx->S[i] = i;
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
u32 a = ctx->S[i];
|
|
|
|
j = (j + in_key[k] + a) & 0xff;
|
|
ctx->S[i] = ctx->S[j];
|
|
ctx->S[j] = a;
|
|
if (++k >= key_len)
|
|
k = 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL_GPL(cifs_arc4_setkey);
|
|
|
|
void cifs_arc4_crypt(struct arc4_ctx *ctx, u8 *out, const u8 *in, unsigned int len)
|
|
{
|
|
u32 *const S = ctx->S;
|
|
u32 x, y, a, b;
|
|
u32 ty, ta, tb;
|
|
|
|
if (len == 0)
|
|
return;
|
|
|
|
x = ctx->x;
|
|
y = ctx->y;
|
|
|
|
a = S[x];
|
|
y = (y + a) & 0xff;
|
|
b = S[y];
|
|
|
|
do {
|
|
S[y] = a;
|
|
a = (a + b) & 0xff;
|
|
S[x] = b;
|
|
x = (x + 1) & 0xff;
|
|
ta = S[x];
|
|
ty = (y + ta) & 0xff;
|
|
tb = S[ty];
|
|
*out++ = *in++ ^ S[a];
|
|
if (--len == 0)
|
|
break;
|
|
y = ty;
|
|
a = ta;
|
|
b = tb;
|
|
} while (true);
|
|
|
|
ctx->x = x;
|
|
ctx->y = y;
|
|
}
|
|
EXPORT_SYMBOL_GPL(cifs_arc4_crypt);
|
|
|
|
static int __init
|
|
init_smbfs_common(void)
|
|
{
|
|
return 0;
|
|
}
|
|
static void __init
|
|
exit_smbfs_common(void)
|
|
{
|
|
}
|
|
|
|
module_init(init_smbfs_common)
|
|
module_exit(exit_smbfs_common)
|