forked from openzfs/zfs
-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add generic implementation handling and SHA2 impl
The skeleton file module/icp/include/generic_impl.c can be used for iterating over different implementations of algorithms. It is used by SHA256, SHA512 and BLAKE3 currently. The Solaris SHA2 implementation got replaced with a version which is based on public domain code of cppcrypto v0.10. These assembly files are taken from current openssl master: - sha256-x86_64.S: x64, SSSE3, AVX, AVX2, SHA-NI (x86_64) - sha512-x86_64.S: x64, AVX, AVX2 (x86_64) - sha256-armv7.S: ARMv7, NEON, ARMv8-CE (arm) - sha512-armv7.S: ARMv7, NEON (arm) - sha256-armv8.S: ARMv7, NEON, ARMv8-CE (aarch64) - sha512-armv8.S: ARMv7, ARMv8-CE (aarch64) - sha256-ppc.S: Generic PPC64 LE/BE (ppc64) - sha512-ppc.S: Generic PPC64 LE/BE (ppc64) - sha256-p8.S: Power8 ISA Version 2.07 LE/BE (ppc64) - sha512-p8.S: Power8 ISA Version 2.07 LE/BE (ppc64) Tested-by: Rich Ercolani <[email protected]> Tested-by: Sebastian Gottschall <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Tino Reichardt <[email protected]> Closes openzfs#13741
- Loading branch information
Showing
30 changed files
with
27,987 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
/* | ||
* CDDL HEADER START | ||
* | ||
* The contents of this file are subject to the terms of the | ||
* Common Development and Distribution License (the "License"). | ||
* You may not use this file except in compliance with the License. | ||
* | ||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||
* or https://opensource.org/licenses/CDDL-1.0. | ||
* See the License for the specific language governing permissions | ||
* and limitations under the License. | ||
* | ||
* When distributing Covered Code, include this CDDL HEADER in each | ||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||
* If applicable, add the following below this CDDL HEADER, with the | ||
* fields enclosed by brackets "[]" replaced with your own identifying | ||
* information: Portions Copyright [yyyy] [name of copyright owner] | ||
* | ||
* CDDL HEADER END | ||
*/ | ||
|
||
/* | ||
* Copyright (c) 2022 Tino Reichardt <[email protected]> | ||
*/ | ||
|
||
#ifndef _SYS_SHA2_H | ||
#define _SYS_SHA2_H | ||
|
||
#ifdef _KERNEL | ||
#include <sys/types.h> | ||
#else | ||
#include <stdint.h> | ||
#include <stdlib.h> | ||
#endif | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
#define SHA224_BLOCK_LENGTH 64 | ||
#define SHA256_BLOCK_LENGTH 64 | ||
#define SHA384_BLOCK_LENGTH 128 | ||
#define SHA512_BLOCK_LENGTH 128 | ||
|
||
#define SHA224_DIGEST_LENGTH 28 | ||
#define SHA256_DIGEST_LENGTH 32 | ||
#define SHA384_DIGEST_LENGTH 48 | ||
#define SHA512_DIGEST_LENGTH 64 | ||
|
||
#define SHA512_224_DIGEST_LENGTH 28 | ||
#define SHA512_256_DIGEST_LENGTH 32 | ||
|
||
#define SHA256_HMAC_BLOCK_SIZE 64 | ||
#define SHA512_HMAC_BLOCK_SIZE 128 | ||
|
||
/* sha256 context */ | ||
typedef struct { | ||
uint32_t state[8]; | ||
uint64_t count[2]; | ||
uint8_t wbuf[64]; | ||
|
||
/* const sha256_ops_t *ops */ | ||
const void *ops; | ||
} sha256_ctx; | ||
|
||
/* sha512 context */ | ||
typedef struct { | ||
uint64_t state[8]; | ||
uint64_t count[2]; | ||
uint8_t wbuf[128]; | ||
|
||
/* const sha256_ops_t *ops */ | ||
const void *ops; | ||
} sha512_ctx; | ||
|
||
/* SHA2 context */ | ||
typedef struct { | ||
union { | ||
sha256_ctx sha256; | ||
sha512_ctx sha512; | ||
}; | ||
|
||
/* algorithm type */ | ||
int algotype; | ||
} SHA2_CTX; | ||
|
||
/* SHA2 algorithm types */ | ||
typedef enum sha2_mech_type { | ||
SHA256_MECH_INFO_TYPE, /* SUN_CKM_SHA256 */ | ||
SHA256_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC */ | ||
SHA256_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC_GENERAL */ | ||
SHA384_MECH_INFO_TYPE, /* SUN_CKM_SHA384 */ | ||
SHA384_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC */ | ||
SHA384_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC_GENERAL */ | ||
SHA512_MECH_INFO_TYPE, /* SUN_CKM_SHA512 */ | ||
SHA512_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC */ | ||
SHA512_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC_GENERAL */ | ||
SHA512_224_MECH_INFO_TYPE, /* SUN_CKM_SHA512_224 */ | ||
SHA512_256_MECH_INFO_TYPE /* SUN_CKM_SHA512_256 */ | ||
} sha2_mech_type_t; | ||
|
||
#define SHA256 0 | ||
#define SHA256_HMAC 1 | ||
#define SHA256_HMAC_GEN 2 | ||
#define SHA384 3 | ||
#define SHA384_HMAC 4 | ||
#define SHA384_HMAC_GEN 5 | ||
#define SHA512 6 | ||
#define SHA512_HMAC 7 | ||
#define SHA512_HMAC_GEN 8 | ||
#define SHA512_224 9 | ||
#define SHA512_256 10 | ||
|
||
/* SHA2 Init function */ | ||
extern void SHA2Init(int algotype, SHA2_CTX *ctx); | ||
|
||
/* SHA2 Update function */ | ||
extern void SHA2Update(SHA2_CTX *ctx, const void *data, size_t len); | ||
|
||
/* SHA2 Final function */ | ||
extern void SHA2Final(void *digest, SHA2_CTX *ctx); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* SYS_SHA2_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* CDDL HEADER START | ||
* | ||
* The contents of this file are subject to the terms of the | ||
* Common Development and Distribution License (the "License"). | ||
* You may not use this file except in compliance with the License. | ||
* | ||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||
* or https://opensource.org/licenses/CDDL-1.0. | ||
* See the License for the specific language governing permissions | ||
* and limitations under the License. | ||
* | ||
* When distributing Covered Code, include this CDDL HEADER in each | ||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||
* If applicable, add the following below this CDDL HEADER, with the | ||
* fields enclosed by brackets "[]" replaced with your own identifying | ||
* information: Portions Copyright [yyyy] [name of copyright owner] | ||
* | ||
* CDDL HEADER END | ||
*/ | ||
|
||
/* | ||
* Copyright (c) 2022 Tino Reichardt <[email protected]> | ||
*/ | ||
|
||
#ifndef _SYS_ZFS_IMPL_H | ||
#define _SYS_ZFS_IMPL_H | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/* generic implementation backends */ | ||
typedef struct | ||
{ | ||
/* algorithm name */ | ||
const char *name; | ||
|
||
/* get number of supported implementations */ | ||
uint32_t (*getcnt)(void); | ||
|
||
/* get id of selected implementation */ | ||
uint32_t (*getid)(void); | ||
|
||
/* get name of selected implementation */ | ||
const char *(*getname)(void); | ||
|
||
/* setup id as fastest implementation */ | ||
void (*set_fastest)(uint32_t id); | ||
|
||
/* set implementation by id */ | ||
void (*setid)(uint32_t id); | ||
|
||
/* set implementation by name */ | ||
int (*setname)(const char *val); | ||
} zfs_impl_t; | ||
|
||
/* return some set of function pointer */ | ||
extern const zfs_impl_t *zfs_impl_get_ops(const char *algo); | ||
|
||
extern const zfs_impl_t zfs_blake3_ops; | ||
extern const zfs_impl_t zfs_sha256_ops; | ||
extern const zfs_impl_t zfs_sha512_ops; | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* _SYS_ZFS_IMPL_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.