mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto updates from Herbert Xu: "API: - crypto_destroy_tfm now ignores errors as well as NULL pointers Algorithms: - Add explicit curve IDs in ECDH algorithm names - Add NIST P384 curve parameters - Add ECDSA Drivers: - Add support for Green Sardine in ccp - Add ecdh/curve25519 to hisilicon/hpre - Add support for AM64 in sa2ul" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (184 commits) fsverity: relax build time dependency on CRYPTO_SHA256 fscrypt: relax Kconfig dependencies for crypto API algorithms crypto: camellia - drop duplicate "depends on CRYPTO" crypto: s5p-sss - consistently use local 'dev' variable in probe() crypto: s5p-sss - remove unneeded local variable initialization crypto: s5p-sss - simplify getting of_device_id match data ccp: ccp - add support for Green Sardine crypto: ccp - Make ccp_dev_suspend and ccp_dev_resume void functions crypto: octeontx2 - add support for OcteonTX2 98xx CPT block. crypto: chelsio/chcr - Remove useless MODULE_VERSION crypto: ux500/cryp - Remove duplicate argument crypto: chelsio - remove unused function crypto: sa2ul - Add support for AM64 crypto: sa2ul - Support for per channel coherency dt-bindings: crypto: ti,sa2ul: Add new compatible for AM64 crypto: hisilicon - enable new error types for QM crypto: hisilicon - add new error type for SEC crypto: hisilicon - support new error types for ZIP crypto: hisilicon - dynamic configuration 'err_info' crypto: doc - fix kernel-doc notation in chacha.c and af_alg.c ...
This commit is contained in:
@@ -14,6 +14,7 @@ properties:
|
||||
enum:
|
||||
- ti,j721e-sa2ul
|
||||
- ti,am654-sa2ul
|
||||
- ti,am64-sa2ul
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -45,6 +46,18 @@ properties:
|
||||
description:
|
||||
Address translation for the possible RNG child node for SA2UL
|
||||
|
||||
clocks:
|
||||
items:
|
||||
- description: Clock used by PKA
|
||||
- description: Main Input Clock
|
||||
- description: Clock used by rng
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: pka_in_clk
|
||||
- const: x1_clk
|
||||
- const: x2_clk
|
||||
|
||||
patternProperties:
|
||||
"^rng@[a-f0-9]+$":
|
||||
type: object
|
||||
@@ -57,7 +70,16 @@ required:
|
||||
- power-domains
|
||||
- dmas
|
||||
- dma-names
|
||||
- dma-coherent
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- ti,j721e-sa2ul
|
||||
- ti,am654-sa2ul
|
||||
then:
|
||||
required:
|
||||
- dma-coherent
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
|
||||
@@ -28,6 +28,12 @@ properties:
|
||||
clock-names:
|
||||
const: ipsec
|
||||
|
||||
resets:
|
||||
maxItems: 1
|
||||
|
||||
reset-names:
|
||||
const: ipsec
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
@@ -35,6 +41,18 @@ required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- brcm,bcm6368-rng
|
||||
then:
|
||||
required:
|
||||
- clocks
|
||||
- clock-names
|
||||
- resets
|
||||
- reset-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
@@ -58,4 +76,7 @@ examples:
|
||||
|
||||
clocks = <&periph_clk 18>;
|
||||
clock-names = "ipsec";
|
||||
|
||||
resets = <&periph_rst 4>;
|
||||
reset-names = "ipsec";
|
||||
};
|
||||
|
||||
@@ -99,28 +99,6 @@
|
||||
__hround \out2, \out3, \in2, \in1, \in0, \in3, \in1, \in0, 0, \sz, \op, \oldcpsr
|
||||
.endm
|
||||
|
||||
.macro __rev, out, in
|
||||
.if __LINUX_ARM_ARCH__ < 6
|
||||
lsl t0, \in, #24
|
||||
and t1, \in, #0xff00
|
||||
and t2, \in, #0xff0000
|
||||
orr \out, t0, \in, lsr #24
|
||||
orr \out, \out, t1, lsl #8
|
||||
orr \out, \out, t2, lsr #8
|
||||
.else
|
||||
rev \out, \in
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro __adrl, out, sym, c
|
||||
.if __LINUX_ARM_ARCH__ < 7
|
||||
ldr\c \out, =\sym
|
||||
.else
|
||||
movw\c \out, #:lower16:\sym
|
||||
movt\c \out, #:upper16:\sym
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro do_crypt, round, ttab, ltab, bsz
|
||||
push {r3-r11, lr}
|
||||
|
||||
@@ -133,10 +111,10 @@
|
||||
ldr r7, [in, #12]
|
||||
|
||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
__rev r4, r4
|
||||
__rev r5, r5
|
||||
__rev r6, r6
|
||||
__rev r7, r7
|
||||
rev_l r4, t0
|
||||
rev_l r5, t0
|
||||
rev_l r6, t0
|
||||
rev_l r7, t0
|
||||
#endif
|
||||
|
||||
eor r4, r4, r8
|
||||
@@ -144,7 +122,7 @@
|
||||
eor r6, r6, r10
|
||||
eor r7, r7, r11
|
||||
|
||||
__adrl ttab, \ttab
|
||||
mov_l ttab, \ttab
|
||||
/*
|
||||
* Disable interrupts and prefetch the 1024-byte 'ft' or 'it' table into
|
||||
* L1 cache, assuming cacheline size >= 32. This is a hardening measure
|
||||
@@ -180,7 +158,7 @@
|
||||
2: .ifb \ltab
|
||||
add ttab, ttab, #1
|
||||
.else
|
||||
__adrl ttab, \ltab
|
||||
mov_l ttab, \ltab
|
||||
// Prefetch inverse S-box for final round; see explanation above
|
||||
.set i, 0
|
||||
.rept 256 / 64
|
||||
@@ -194,10 +172,10 @@
|
||||
\round r4, r5, r6, r7, r8, r9, r10, r11, \bsz, b, rounds
|
||||
|
||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
__rev r4, r4
|
||||
__rev r5, r5
|
||||
__rev r6, r6
|
||||
__rev r7, r7
|
||||
rev_l r4, t0
|
||||
rev_l r5, t0
|
||||
rev_l r6, t0
|
||||
rev_l r7, t0
|
||||
#endif
|
||||
|
||||
ldr out, [sp]
|
||||
|
||||
@@ -85,8 +85,8 @@ static int __init blake2b_neon_mod_init(void)
|
||||
|
||||
static void __exit blake2b_neon_mod_exit(void)
|
||||
{
|
||||
return crypto_unregister_shashes(blake2b_neon_algs,
|
||||
ARRAY_SIZE(blake2b_neon_algs));
|
||||
crypto_unregister_shashes(blake2b_neon_algs,
|
||||
ARRAY_SIZE(blake2b_neon_algs));
|
||||
}
|
||||
|
||||
module_init(blake2b_neon_mod_init);
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/assembler.h>
|
||||
|
||||
// Registers used to hold message words temporarily. There aren't
|
||||
// enough ARM registers to hold the whole message block, so we have to
|
||||
@@ -38,6 +39,23 @@
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro _le32_bswap a, tmp
|
||||
#ifdef __ARMEB__
|
||||
rev_l \a, \tmp
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro _le32_bswap_8x a, b, c, d, e, f, g, h, tmp
|
||||
_le32_bswap \a, \tmp
|
||||
_le32_bswap \b, \tmp
|
||||
_le32_bswap \c, \tmp
|
||||
_le32_bswap \d, \tmp
|
||||
_le32_bswap \e, \tmp
|
||||
_le32_bswap \f, \tmp
|
||||
_le32_bswap \g, \tmp
|
||||
_le32_bswap \h, \tmp
|
||||
.endm
|
||||
|
||||
// Execute a quarter-round of BLAKE2s by mixing two columns or two diagonals.
|
||||
// (a0, b0, c0, d0) and (a1, b1, c1, d1) give the registers containing the two
|
||||
// columns/diagonals. s0-s1 are the word offsets to the message words the first
|
||||
@@ -180,8 +198,10 @@ ENTRY(blake2s_compress_arch)
|
||||
tst r1, #3
|
||||
bne .Lcopy_block_misaligned
|
||||
ldmia r1!, {r2-r9}
|
||||
_le32_bswap_8x r2, r3, r4, r5, r6, r7, r8, r9, r14
|
||||
stmia r12!, {r2-r9}
|
||||
ldmia r1!, {r2-r9}
|
||||
_le32_bswap_8x r2, r3, r4, r5, r6, r7, r8, r9, r14
|
||||
stmia r12, {r2-r9}
|
||||
.Lcopy_block_done:
|
||||
str r1, [sp, #68] // Update message pointer
|
||||
@@ -268,6 +288,7 @@ ENTRY(blake2s_compress_arch)
|
||||
1:
|
||||
#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||
ldr r3, [r1], #4
|
||||
_le32_bswap r3, r4
|
||||
#else
|
||||
ldrb r3, [r1, #0]
|
||||
ldrb r4, [r1, #1]
|
||||
|
||||
@@ -41,32 +41,15 @@
|
||||
X14 .req r12
|
||||
X15 .req r14
|
||||
|
||||
.macro __rev out, in, t0, t1, t2
|
||||
.if __LINUX_ARM_ARCH__ >= 6
|
||||
rev \out, \in
|
||||
.else
|
||||
lsl \t0, \in, #24
|
||||
and \t1, \in, #0xff00
|
||||
and \t2, \in, #0xff0000
|
||||
orr \out, \t0, \in, lsr #24
|
||||
orr \out, \out, \t1, lsl #8
|
||||
orr \out, \out, \t2, lsr #8
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro _le32_bswap x, t0, t1, t2
|
||||
.macro _le32_bswap_4x a, b, c, d, tmp
|
||||
#ifdef __ARMEB__
|
||||
__rev \x, \x, \t0, \t1, \t2
|
||||
rev_l \a, \tmp
|
||||
rev_l \b, \tmp
|
||||
rev_l \c, \tmp
|
||||
rev_l \d, \tmp
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro _le32_bswap_4x a, b, c, d, t0, t1, t2
|
||||
_le32_bswap \a, \t0, \t1, \t2
|
||||
_le32_bswap \b, \t0, \t1, \t2
|
||||
_le32_bswap \c, \t0, \t1, \t2
|
||||
_le32_bswap \d, \t0, \t1, \t2
|
||||
.endm
|
||||
|
||||
.macro __ldrd a, b, src, offset
|
||||
#if __LINUX_ARM_ARCH__ >= 6
|
||||
ldrd \a, \b, [\src, #\offset]
|
||||
@@ -200,7 +183,7 @@
|
||||
add X1, X1, r9
|
||||
add X2, X2, r10
|
||||
add X3, X3, r11
|
||||
_le32_bswap_4x X0, X1, X2, X3, r8, r9, r10
|
||||
_le32_bswap_4x X0, X1, X2, X3, r8
|
||||
ldmia r12!, {r8-r11}
|
||||
eor X0, X0, r8
|
||||
eor X1, X1, r9
|
||||
@@ -216,7 +199,7 @@
|
||||
ldmia r12!, {X0-X3}
|
||||
add X6, r10, X6, ror #brot
|
||||
add X7, r11, X7, ror #brot
|
||||
_le32_bswap_4x X4, X5, X6, X7, r8, r9, r10
|
||||
_le32_bswap_4x X4, X5, X6, X7, r8
|
||||
eor X4, X4, X0
|
||||
eor X5, X5, X1
|
||||
eor X6, X6, X2
|
||||
@@ -231,7 +214,7 @@
|
||||
add r1, r1, r9 // x9
|
||||
add r6, r6, r10 // x10
|
||||
add r7, r7, r11 // x11
|
||||
_le32_bswap_4x r0, r1, r6, r7, r8, r9, r10
|
||||
_le32_bswap_4x r0, r1, r6, r7, r8
|
||||
ldmia r12!, {r8-r11}
|
||||
eor r0, r0, r8 // x8
|
||||
eor r1, r1, r9 // x9
|
||||
@@ -245,7 +228,7 @@
|
||||
add r3, r9, r3, ror #drot // x13
|
||||
add r4, r10, r4, ror #drot // x14
|
||||
add r5, r11, r5, ror #drot // x15
|
||||
_le32_bswap_4x r2, r3, r4, r5, r9, r10, r11
|
||||
_le32_bswap_4x r2, r3, r4, r5, r9
|
||||
ldr r9, [sp, #72] // load LEN
|
||||
eor r2, r2, r0 // x12
|
||||
eor r3, r3, r1 // x13
|
||||
@@ -301,7 +284,7 @@
|
||||
add X1, X1, r9
|
||||
add X2, X2, r10
|
||||
add X3, X3, r11
|
||||
_le32_bswap_4x X0, X1, X2, X3, r8, r9, r10
|
||||
_le32_bswap_4x X0, X1, X2, X3, r8
|
||||
stmia r14!, {X0-X3}
|
||||
|
||||
// Save keystream for x4-x7
|
||||
@@ -311,7 +294,7 @@
|
||||
add X5, r9, X5, ror #brot
|
||||
add X6, r10, X6, ror #brot
|
||||
add X7, r11, X7, ror #brot
|
||||
_le32_bswap_4x X4, X5, X6, X7, r8, r9, r10
|
||||
_le32_bswap_4x X4, X5, X6, X7, r8
|
||||
add r8, sp, #64
|
||||
stmia r14!, {X4-X7}
|
||||
|
||||
@@ -323,7 +306,7 @@
|
||||
add r1, r1, r9 // x9
|
||||
add r6, r6, r10 // x10
|
||||
add r7, r7, r11 // x11
|
||||
_le32_bswap_4x r0, r1, r6, r7, r8, r9, r10
|
||||
_le32_bswap_4x r0, r1, r6, r7, r8
|
||||
stmia r14!, {r0,r1,r6,r7}
|
||||
__ldrd r8, r9, sp, 144
|
||||
__ldrd r10, r11, sp, 152
|
||||
@@ -331,7 +314,7 @@
|
||||
add r3, r9, r3, ror #drot // x13
|
||||
add r4, r10, r4, ror #drot // x14
|
||||
add r5, r11, r5, ror #drot // x15
|
||||
_le32_bswap_4x r2, r3, r4, r5, r9, r10, r11
|
||||
_le32_bswap_4x r2, r3, r4, r5, r9
|
||||
stmia r14, {r2-r5}
|
||||
|
||||
// Stack: ks0-ks15 unused0-unused7 x0-x15 OUT IN LEN
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
#include <linux/linkage.h>
|
||||
|
||||
.text
|
||||
.fpu neon
|
||||
.arch armv7-a
|
||||
.fpu neon
|
||||
.align 4
|
||||
|
||||
ENTRY(curve25519_neon)
|
||||
|
||||
@@ -29,7 +29,7 @@ void __weak poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit)
|
||||
|
||||
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
|
||||
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||||
{
|
||||
poly1305_init_arm(&dctx->h, key);
|
||||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||||
|
||||
@@ -359,6 +359,7 @@ ST5( mov v4.16b, vctr.16b )
|
||||
ins vctr.d[0], x8
|
||||
|
||||
/* apply carry to N counter blocks for N := x12 */
|
||||
cbz x12, 2f
|
||||
adr x16, 1f
|
||||
sub x16, x16, x12, lsl #3
|
||||
br x16
|
||||
|
||||
@@ -25,7 +25,7 @@ asmlinkage void poly1305_emit(void *state, u8 *digest, const u32 *nonce);
|
||||
|
||||
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
|
||||
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||||
{
|
||||
poly1305_init_arm64(&dctx->h, key);
|
||||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||||
|
||||
@@ -17,7 +17,7 @@ asmlinkage void poly1305_init_mips(void *state, const u8 *key);
|
||||
asmlinkage void poly1305_blocks_mips(void *state, const u8 *src, u32 len, u32 hibit);
|
||||
asmlinkage void poly1305_emit_mips(void *state, u8 *digest, const u32 *nonce);
|
||||
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||||
{
|
||||
poly1305_init_mips(&dctx->h, key);
|
||||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||||
|
||||
@@ -107,7 +107,7 @@ static int ppc_spe_sha1_update(struct shash_desc *desc, const u8 *data,
|
||||
|
||||
src += bytes;
|
||||
len -= bytes;
|
||||
};
|
||||
}
|
||||
|
||||
memcpy((char *)sctx->buffer, src, len);
|
||||
return 0;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <asm/simd.h>
|
||||
|
||||
asmlinkage void poly1305_init_x86_64(void *ctx,
|
||||
const u8 key[POLY1305_KEY_SIZE]);
|
||||
const u8 key[POLY1305_BLOCK_SIZE]);
|
||||
asmlinkage void poly1305_blocks_x86_64(void *ctx, const u8 *inp,
|
||||
const size_t len, const u32 padbit);
|
||||
asmlinkage void poly1305_emit_x86_64(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
|
||||
@@ -81,7 +81,7 @@ static void convert_to_base2_64(void *ctx)
|
||||
state->is_base2_26 = 0;
|
||||
}
|
||||
|
||||
static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_KEY_SIZE])
|
||||
static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_BLOCK_SIZE])
|
||||
{
|
||||
poly1305_init_x86_64(ctx, key);
|
||||
}
|
||||
@@ -129,7 +129,7 @@ static void poly1305_simd_emit(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
|
||||
poly1305_emit_avx(ctx, mac, nonce);
|
||||
}
|
||||
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||||
void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||||
{
|
||||
poly1305_simd_init(&dctx->h, key);
|
||||
dctx->s[0] = get_unaligned_le32(&key[16]);
|
||||
|
||||
+10
-5
@@ -242,6 +242,16 @@ config CRYPTO_ECDH
|
||||
help
|
||||
Generic implementation of the ECDH algorithm
|
||||
|
||||
config CRYPTO_ECDSA
|
||||
tristate "ECDSA (NIST P192, P256 etc.) algorithm"
|
||||
select CRYPTO_ECC
|
||||
select CRYPTO_AKCIPHER
|
||||
select ASN1
|
||||
help
|
||||
Elliptic Curve Digital Signature Algorithm (NIST P192, P256 etc.)
|
||||
is A NIST cryptographic standard algorithm. Only signature verification
|
||||
is implemented.
|
||||
|
||||
config CRYPTO_ECRDSA
|
||||
tristate "EC-RDSA (GOST 34.10) algorithm"
|
||||
select CRYPTO_ECC
|
||||
@@ -1213,7 +1223,6 @@ config CRYPTO_BLOWFISH_X86_64
|
||||
|
||||
config CRYPTO_CAMELLIA
|
||||
tristate "Camellia cipher algorithms"
|
||||
depends on CRYPTO
|
||||
select CRYPTO_ALGAPI
|
||||
help
|
||||
Camellia cipher algorithms module.
|
||||
@@ -1229,7 +1238,6 @@ config CRYPTO_CAMELLIA
|
||||
config CRYPTO_CAMELLIA_X86_64
|
||||
tristate "Camellia cipher algorithm (x86_64)"
|
||||
depends on X86 && 64BIT
|
||||
depends on CRYPTO
|
||||
select CRYPTO_SKCIPHER
|
||||
imply CRYPTO_CTR
|
||||
help
|
||||
@@ -1246,7 +1254,6 @@ config CRYPTO_CAMELLIA_X86_64
|
||||
config CRYPTO_CAMELLIA_AESNI_AVX_X86_64
|
||||
tristate "Camellia cipher algorithm (x86_64/AES-NI/AVX)"
|
||||
depends on X86 && 64BIT
|
||||
depends on CRYPTO
|
||||
select CRYPTO_SKCIPHER
|
||||
select CRYPTO_CAMELLIA_X86_64
|
||||
select CRYPTO_SIMD
|
||||
@@ -1265,7 +1272,6 @@ config CRYPTO_CAMELLIA_AESNI_AVX_X86_64
|
||||
config CRYPTO_CAMELLIA_AESNI_AVX2_X86_64
|
||||
tristate "Camellia cipher algorithm (x86_64/AES-NI/AVX2)"
|
||||
depends on X86 && 64BIT
|
||||
depends on CRYPTO
|
||||
select CRYPTO_CAMELLIA_AESNI_AVX_X86_64
|
||||
help
|
||||
Camellia cipher algorithm module (x86_64/AES-NI/AVX2).
|
||||
@@ -1281,7 +1287,6 @@ config CRYPTO_CAMELLIA_AESNI_AVX2_X86_64
|
||||
config CRYPTO_CAMELLIA_SPARC64
|
||||
tristate "Camellia cipher algorithm (SPARC64)"
|
||||
depends on SPARC64
|
||||
depends on CRYPTO
|
||||
select CRYPTO_ALGAPI
|
||||
select CRYPTO_SKCIPHER
|
||||
help
|
||||
|
||||
@@ -50,6 +50,12 @@ sm2_generic-y += sm2.o
|
||||
|
||||
obj-$(CONFIG_CRYPTO_SM2) += sm2_generic.o
|
||||
|
||||
$(obj)/ecdsasignature.asn1.o: $(obj)/ecdsasignature.asn1.c $(obj)/ecdsasignature.asn1.h
|
||||
$(obj)/ecdsa.o: $(obj)/ecdsasignature.asn1.h
|
||||
ecdsa_generic-y += ecdsa.o
|
||||
ecdsa_generic-y += ecdsasignature.asn1.o
|
||||
obj-$(CONFIG_CRYPTO_ECDSA) += ecdsa_generic.o
|
||||
|
||||
crypto_acompress-y := acompress.o
|
||||
crypto_acompress-y += scompress.o
|
||||
obj-$(CONFIG_CRYPTO_ACOMP2) += crypto_acompress.o
|
||||
|
||||
@@ -21,9 +21,28 @@ union aegis_block {
|
||||
u8 bytes[AEGIS_BLOCK_SIZE];
|
||||
};
|
||||
|
||||
struct aegis_state;
|
||||
|
||||
extern int aegis128_have_aes_insn;
|
||||
|
||||
#define AEGIS_BLOCK_ALIGN (__alignof__(union aegis_block))
|
||||
#define AEGIS_ALIGNED(p) IS_ALIGNED((uintptr_t)p, AEGIS_BLOCK_ALIGN)
|
||||
|
||||
bool crypto_aegis128_have_simd(void);
|
||||
void crypto_aegis128_update_simd(struct aegis_state *state, const void *msg);
|
||||
void crypto_aegis128_init_simd(struct aegis_state *state,
|
||||
const union aegis_block *key,
|
||||
const u8 *iv);
|
||||
void crypto_aegis128_encrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size);
|
||||
void crypto_aegis128_decrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size);
|
||||
int crypto_aegis128_final_simd(struct aegis_state *state,
|
||||
union aegis_block *tag_xor,
|
||||
unsigned int assoclen,
|
||||
unsigned int cryptlen,
|
||||
unsigned int authsize);
|
||||
|
||||
static __always_inline void crypto_aegis_block_xor(union aegis_block *dst,
|
||||
const union aegis_block *src)
|
||||
{
|
||||
|
||||
@@ -58,21 +58,6 @@ static bool aegis128_do_simd(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool crypto_aegis128_have_simd(void);
|
||||
void crypto_aegis128_update_simd(struct aegis_state *state, const void *msg);
|
||||
void crypto_aegis128_init_simd(struct aegis_state *state,
|
||||
const union aegis_block *key,
|
||||
const u8 *iv);
|
||||
void crypto_aegis128_encrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size);
|
||||
void crypto_aegis128_decrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size);
|
||||
int crypto_aegis128_final_simd(struct aegis_state *state,
|
||||
union aegis_block *tag_xor,
|
||||
unsigned int assoclen,
|
||||
unsigned int cryptlen,
|
||||
unsigned int authsize);
|
||||
|
||||
static void crypto_aegis128_update(struct aegis_state *state)
|
||||
{
|
||||
union aegis_block tmp;
|
||||
|
||||
@@ -30,7 +30,7 @@ bool crypto_aegis128_have_simd(void)
|
||||
return IS_ENABLED(CONFIG_ARM64);
|
||||
}
|
||||
|
||||
void crypto_aegis128_init_simd(union aegis_block *state,
|
||||
void crypto_aegis128_init_simd(struct aegis_state *state,
|
||||
const union aegis_block *key,
|
||||
const u8 *iv)
|
||||
{
|
||||
@@ -39,14 +39,14 @@ void crypto_aegis128_init_simd(union aegis_block *state,
|
||||
kernel_neon_end();
|
||||
}
|
||||
|
||||
void crypto_aegis128_update_simd(union aegis_block *state, const void *msg)
|
||||
void crypto_aegis128_update_simd(struct aegis_state *state, const void *msg)
|
||||
{
|
||||
kernel_neon_begin();
|
||||
crypto_aegis128_update_neon(state, msg);
|
||||
kernel_neon_end();
|
||||
}
|
||||
|
||||
void crypto_aegis128_encrypt_chunk_simd(union aegis_block *state, u8 *dst,
|
||||
void crypto_aegis128_encrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size)
|
||||
{
|
||||
kernel_neon_begin();
|
||||
@@ -54,7 +54,7 @@ void crypto_aegis128_encrypt_chunk_simd(union aegis_block *state, u8 *dst,
|
||||
kernel_neon_end();
|
||||
}
|
||||
|
||||
void crypto_aegis128_decrypt_chunk_simd(union aegis_block *state, u8 *dst,
|
||||
void crypto_aegis128_decrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
||||
const u8 *src, unsigned int size)
|
||||
{
|
||||
kernel_neon_begin();
|
||||
@@ -62,7 +62,7 @@ void crypto_aegis128_decrypt_chunk_simd(union aegis_block *state, u8 *dst,
|
||||
kernel_neon_end();
|
||||
}
|
||||
|
||||
int crypto_aegis128_final_simd(union aegis_block *state,
|
||||
int crypto_aegis128_final_simd(struct aegis_state *state,
|
||||
union aegis_block *tag_xor,
|
||||
unsigned int assoclen,
|
||||
unsigned int cryptlen,
|
||||
|
||||
+53
-41
@@ -491,8 +491,8 @@ static int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
|
||||
/**
|
||||
* af_alg_alloc_tsgl - allocate the TX SGL
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @return: 0 upon success, < 0 upon error
|
||||
* @sk: socket of connection to user space
|
||||
* Return: 0 upon success, < 0 upon error
|
||||
*/
|
||||
static int af_alg_alloc_tsgl(struct sock *sk)
|
||||
{
|
||||
@@ -525,15 +525,15 @@ static int af_alg_alloc_tsgl(struct sock *sk)
|
||||
}
|
||||
|
||||
/**
|
||||
* aead_count_tsgl - Count number of TX SG entries
|
||||
* af_alg_count_tsgl - Count number of TX SG entries
|
||||
*
|
||||
* The counting starts from the beginning of the SGL to @bytes. If
|
||||
* an offset is provided, the counting of the SG entries starts at the offset.
|
||||
* an @offset is provided, the counting of the SG entries starts at the @offset.
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @bytes Count the number of SG entries holding given number of bytes.
|
||||
* @offset Start the counting of SG entries from the given offset.
|
||||
* @return Number of TX SG entries found given the constraints
|
||||
* @sk: socket of connection to user space
|
||||
* @bytes: Count the number of SG entries holding given number of bytes.
|
||||
* @offset: Start the counting of SG entries from the given offset.
|
||||
* Return: Number of TX SG entries found given the constraints
|
||||
*/
|
||||
unsigned int af_alg_count_tsgl(struct sock *sk, size_t bytes, size_t offset)
|
||||
{
|
||||
@@ -577,19 +577,19 @@ unsigned int af_alg_count_tsgl(struct sock *sk, size_t bytes, size_t offset)
|
||||
EXPORT_SYMBOL_GPL(af_alg_count_tsgl);
|
||||
|
||||
/**
|
||||
* aead_pull_tsgl - Release the specified buffers from TX SGL
|
||||
* af_alg_pull_tsgl - Release the specified buffers from TX SGL
|
||||
*
|
||||
* If @dst is non-null, reassign the pages to dst. The caller must release
|
||||
* If @dst is non-null, reassign the pages to @dst. The caller must release
|
||||
* the pages. If @dst_offset is given only reassign the pages to @dst starting
|
||||
* at the @dst_offset (byte). The caller must ensure that @dst is large
|
||||
* enough (e.g. by using af_alg_count_tsgl with the same offset).
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @used Number of bytes to pull from TX SGL
|
||||
* @dst If non-NULL, buffer is reassigned to dst SGL instead of releasing. The
|
||||
* caller must release the buffers in dst.
|
||||
* @dst_offset Reassign the TX SGL from given offset. All buffers before
|
||||
* reaching the offset is released.
|
||||
* @sk: socket of connection to user space
|
||||
* @used: Number of bytes to pull from TX SGL
|
||||
* @dst: If non-NULL, buffer is reassigned to dst SGL instead of releasing. The
|
||||
* caller must release the buffers in dst.
|
||||
* @dst_offset: Reassign the TX SGL from given offset. All buffers before
|
||||
* reaching the offset is released.
|
||||
*/
|
||||
void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst,
|
||||
size_t dst_offset)
|
||||
@@ -657,7 +657,7 @@ EXPORT_SYMBOL_GPL(af_alg_pull_tsgl);
|
||||
/**
|
||||
* af_alg_free_areq_sgls - Release TX and RX SGLs of the request
|
||||
*
|
||||
* @areq Request holding the TX and RX SGL
|
||||
* @areq: Request holding the TX and RX SGL
|
||||
*/
|
||||
static void af_alg_free_areq_sgls(struct af_alg_async_req *areq)
|
||||
{
|
||||
@@ -692,9 +692,9 @@ static void af_alg_free_areq_sgls(struct af_alg_async_req *areq)
|
||||
/**
|
||||
* af_alg_wait_for_wmem - wait for availability of writable memory
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @flags If MSG_DONTWAIT is set, then only report if function would sleep
|
||||
* @return 0 when writable memory is available, < 0 upon error
|
||||
* @sk: socket of connection to user space
|
||||
* @flags: If MSG_DONTWAIT is set, then only report if function would sleep
|
||||
* Return: 0 when writable memory is available, < 0 upon error
|
||||
*/
|
||||
static int af_alg_wait_for_wmem(struct sock *sk, unsigned int flags)
|
||||
{
|
||||
@@ -725,7 +725,7 @@ static int af_alg_wait_for_wmem(struct sock *sk, unsigned int flags)
|
||||
/**
|
||||
* af_alg_wmem_wakeup - wakeup caller when writable memory is available
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @sk: socket of connection to user space
|
||||
*/
|
||||
void af_alg_wmem_wakeup(struct sock *sk)
|
||||
{
|
||||
@@ -748,10 +748,10 @@ EXPORT_SYMBOL_GPL(af_alg_wmem_wakeup);
|
||||
/**
|
||||
* af_alg_wait_for_data - wait for availability of TX data
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @flags If MSG_DONTWAIT is set, then only report if function would sleep
|
||||
* @min Set to minimum request size if partial requests are allowed.
|
||||
* @return 0 when writable memory is available, < 0 upon error
|
||||
* @sk: socket of connection to user space
|
||||
* @flags: If MSG_DONTWAIT is set, then only report if function would sleep
|
||||
* @min: Set to minimum request size if partial requests are allowed.
|
||||
* Return: 0 when writable memory is available, < 0 upon error
|
||||
*/
|
||||
int af_alg_wait_for_data(struct sock *sk, unsigned flags, unsigned min)
|
||||
{
|
||||
@@ -790,7 +790,7 @@ EXPORT_SYMBOL_GPL(af_alg_wait_for_data);
|
||||
/**
|
||||
* af_alg_data_wakeup - wakeup caller when new data can be sent to kernel
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @sk: socket of connection to user space
|
||||
*/
|
||||
static void af_alg_data_wakeup(struct sock *sk)
|
||||
{
|
||||
@@ -820,12 +820,12 @@ static void af_alg_data_wakeup(struct sock *sk)
|
||||
*
|
||||
* In addition, the ctx is filled with the information sent via CMSG.
|
||||
*
|
||||
* @sock socket of connection to user space
|
||||
* @msg message from user space
|
||||
* @size size of message from user space
|
||||
* @ivsize the size of the IV for the cipher operation to verify that the
|
||||
* @sock: socket of connection to user space
|
||||
* @msg: message from user space
|
||||
* @size: size of message from user space
|
||||
* @ivsize: the size of the IV for the cipher operation to verify that the
|
||||
* user-space-provided IV has the right size
|
||||
* @return the number of copied data upon success, < 0 upon error
|
||||
* Return: the number of copied data upon success, < 0 upon error
|
||||
*/
|
||||
int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
|
||||
unsigned int ivsize)
|
||||
@@ -977,6 +977,11 @@ EXPORT_SYMBOL_GPL(af_alg_sendmsg);
|
||||
|
||||
/**
|
||||
* af_alg_sendpage - sendpage system call handler
|
||||
* @sock: socket of connection to user space to write to
|
||||
* @page: data to send
|
||||
* @offset: offset into page to begin sending
|
||||
* @size: length of data
|
||||
* @flags: message send/receive flags
|
||||
*
|
||||
* This is a generic implementation of sendpage to fill ctx->tsgl_list.
|
||||
*/
|
||||
@@ -1035,6 +1040,7 @@ EXPORT_SYMBOL_GPL(af_alg_sendpage);
|
||||
|
||||
/**
|
||||
* af_alg_free_resources - release resources required for crypto request
|
||||
* @areq: Request holding the TX and RX SGL
|
||||
*/
|
||||
void af_alg_free_resources(struct af_alg_async_req *areq)
|
||||
{
|
||||
@@ -1047,6 +1053,9 @@ EXPORT_SYMBOL_GPL(af_alg_free_resources);
|
||||
|
||||
/**
|
||||
* af_alg_async_cb - AIO callback handler
|
||||
* @_req: async request info
|
||||
* @err: if non-zero, error result to be returned via ki_complete();
|
||||
* otherwise return the AIO output length via ki_complete().
|
||||
*
|
||||
* This handler cleans up the struct af_alg_async_req upon completion of the
|
||||
* AIO operation.
|
||||
@@ -1073,6 +1082,9 @@ EXPORT_SYMBOL_GPL(af_alg_async_cb);
|
||||
|
||||
/**
|
||||
* af_alg_poll - poll system call handler
|
||||
* @file: file pointer
|
||||
* @sock: socket to poll
|
||||
* @wait: poll_table
|
||||
*/
|
||||
__poll_t af_alg_poll(struct file *file, struct socket *sock,
|
||||
poll_table *wait)
|
||||
@@ -1098,9 +1110,9 @@ EXPORT_SYMBOL_GPL(af_alg_poll);
|
||||
/**
|
||||
* af_alg_alloc_areq - allocate struct af_alg_async_req
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @areqlen size of struct af_alg_async_req + crypto_*_reqsize
|
||||
* @return allocated data structure or ERR_PTR upon error
|
||||
* @sk: socket of connection to user space
|
||||
* @areqlen: size of struct af_alg_async_req + crypto_*_reqsize
|
||||
* Return: allocated data structure or ERR_PTR upon error
|
||||
*/
|
||||
struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
|
||||
unsigned int areqlen)
|
||||
@@ -1125,13 +1137,13 @@ EXPORT_SYMBOL_GPL(af_alg_alloc_areq);
|
||||
* af_alg_get_rsgl - create the RX SGL for the output data from the crypto
|
||||
* operation
|
||||
*
|
||||
* @sk socket of connection to user space
|
||||
* @msg user space message
|
||||
* @flags flags used to invoke recvmsg with
|
||||
* @areq instance of the cryptographic request that will hold the RX SGL
|
||||
* @maxsize maximum number of bytes to be pulled from user space
|
||||
* @outlen number of bytes in the RX SGL
|
||||
* @return 0 on success, < 0 upon error
|
||||
* @sk: socket of connection to user space
|
||||
* @msg: user space message
|
||||
* @flags: flags used to invoke recvmsg with
|
||||
* @areq: instance of the cryptographic request that will hold the RX SGL
|
||||
* @maxsize: maximum number of bytes to be pulled from user space
|
||||
* @outlen: number of bytes in the RX SGL
|
||||
* Return: 0 on success, < 0 upon error
|
||||
*/
|
||||
int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags,
|
||||
struct af_alg_async_req *areq, size_t maxsize,
|
||||
|
||||
+1
-1
@@ -562,7 +562,7 @@ void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm)
|
||||
{
|
||||
struct crypto_alg *alg;
|
||||
|
||||
if (unlikely(!mem))
|
||||
if (IS_ERR_OR_NULL(mem))
|
||||
return;
|
||||
|
||||
alg = tfm->__crt_alg;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user