diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/hkdf.h | 61 | ||||
-rw-r--r-- | include/nc-crypto.h | 59 | ||||
-rw-r--r-- | include/nc-util.h | 95 | ||||
-rw-r--r-- | include/noscrypt.h | 26 |
4 files changed, 20 insertions, 221 deletions
diff --git a/include/hkdf.h b/include/hkdf.h deleted file mode 100644 index 460e203..0000000 --- a/include/hkdf.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2024 Vaughn Nugent -* -* Package: noscrypt -* File: hkdf.h -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public License -* as published by the Free Software Foundation; either version 2.1 -* of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with noscrypt. If not, see http://www.gnu.org/licenses/. -*/ - -#pragma once - -#ifndef _NC_HKDF_H -#define _NC_HKDF_H - -#include "nc-util.h" -#include "nc-crypto.h" - -/* -* IMPORTANT: -* The HKDF_IN_BUF_SIZE defintion sets the internal stack buffer size to use -* during fallback HKDF_Expand operations. -* -* 128 bytes should be more than enough for most use cases, without going -* overboard. Could be dialed in better for specific use cases later. -*/ - -#ifndef HKDF_IN_BUF_SIZE - #define HKDF_IN_BUF_SIZE 0x80 -#endif - - -/* typedefs for hdkf callback functions */ - -typedef cstatus_t (*hmac_hash_func)(void* ctx, const cspan_t* data); -typedef cstatus_t (*hmac_finish_fn)(void* ctx, sha256_t hmacOut32); - -struct nc_hkdf_fn_cb_struct -{ - hmac_hash_func update; - hmac_finish_fn finish; -}; - -cstatus_t hkdfExpandProcess( - const struct nc_hkdf_fn_cb_struct* handler, - void* ctx, - const cspan_t* info, - span_t* okm -); - -#endif /* !_NC_HKDF_H */ diff --git a/include/nc-crypto.h b/include/nc-crypto.h deleted file mode 100644 index f04ebe0..0000000 --- a/include/nc-crypto.h +++ /dev/null @@ -1,59 +0,0 @@ - -/* -* Copyright (c) 2024 Vaughn Nugent -* -* Package: noscrypt -* File: nc-crypto.h -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public License -* as published by the Free Software Foundation; either version 2.1 -* of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with noscrypt. If not, see http://www.gnu.org/licenses/. -*/ - -#pragma once - -#ifndef _NC_CRYPTO_H -#define _NC_CRYPTO_H - -#include <stdint.h> - -#define CHACHA_NONCE_SIZE 0x0cu /* Size of 12 is set by the cipher spec */ -#define CHACHA_KEY_SIZE 0x20u /* Size of 32 is set by the cipher spec */ -#define SHA256_DIGEST_SIZE 0x20u /* Size of 32 is set by the cipher spec */ - -typedef uint8_t cstatus_t; -#define CSTATUS_OK ((cstatus_t)0x01u) -#define CSTATUS_FAIL ((cstatus_t)0x00u) - -typedef uint8_t sha256_t[SHA256_DIGEST_SIZE]; - -uint32_t ncCryptoFixedTimeComp(const uint8_t* a, const uint8_t* b, uint32_t size); - -void ncCryptoSecureZero(void* ptr, uint32_t size); - -cstatus_t ncCryptoDigestSha256(const cspan_t* data, sha256_t digestOut32); - -cstatus_t ncCryptoHmacSha256(const cspan_t* key, const cspan_t* data, sha256_t hmacOut32); - -cstatus_t ncCryptoSha256HkdfExpand(const cspan_t* prk, const cspan_t* info, span_t* okm); - -cstatus_t ncCryptoSha256HkdfExtract(const cspan_t* salt, const cspan_t* ikm, sha256_t prk); - -cstatus_t ncCryptoChacha20( - const uint8_t key[CHACHA_KEY_SIZE], - const uint8_t nonce[CHACHA_NONCE_SIZE], - const uint8_t* input, - uint8_t* output, - uint32_t dataSize -); - -#endif /* !_NC_CRYPTO_H */ diff --git a/include/nc-util.h b/include/nc-util.h deleted file mode 100644 index 8fb74ff..0000000 --- a/include/nc-util.h +++ /dev/null @@ -1,95 +0,0 @@ - -/* -* Copyright (c) 2024 Vaughn Nugent -* -* Package: noscrypt -* File: nc-util.h -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public License -* as published by the Free Software Foundation; either version 2.1 -* of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with noscrypt. If not, see http://www.gnu.org/licenses/. -*/ - -#pragma once - -#ifndef _NC_UTIL_H -#define _NC_UTIL_H - -#include "platform.h" - -/* NULL */ -#ifndef NULL - #define NULL ((void*)0) -#endif /* !NULL */ - -#ifdef DEBUG - /* Must include assert.h for assertions */ - #include <assert.h> - #define DEBUG_ASSERT(x) assert(x); - #define DEBUG_ASSERT2(x, message) assert(x && message); - - /* - * Compiler enabled static assertion keywords are - * only available in C11 and later. Later versions - * have macros built-in from assert.h so we can use - * the static_assert macro directly. - * - * Static assertions are only used for testing such as - * sanity checks and this library targets the c89 standard - * so static_assret very likely will not be available. - */ - #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L - #define STATIC_ASSERT(x, m) static_assert(x, m) - #elif !defined(STATIC_ASSERT) - #define STATIC_ASSERT(x, m) - #pragma message("Static assertions are not supported by this language version") - #endif - -#else - #define DEBUG_ASSERT(x) - #define DEBUG_ASSERT2(x, message) - #define STATIC_ASSERT(x, m) -#endif - -#include <stdint.h> - -#if SIZE_MAX < UINT32_MAX - #define _overflow_check(x) if(x > SIZE_MAX) return CSTATUS_FAIL; -#else - #define _overflow_check(x) -#endif - -typedef struct memory_span_struct -{ - uint8_t* data; - uint32_t size; -} span_t; - -typedef struct read_only_memory_span_struct -{ - const uint8_t* data; - uint32_t size; -} cspan_t; - -static _nc_fn_inline void ncSpanInitC(cspan_t* span, const uint8_t* data, uint32_t size) -{ - span->data = data; - span->size = size; -} - -static _nc_fn_inline void ncSpanInit(span_t* span, uint8_t* data, uint32_t size) -{ - span->data = data; - span->size = size; -} - -#endif /* !_NC_UTIL_H */
\ No newline at end of file diff --git a/include/noscrypt.h b/include/noscrypt.h index ca958a0..cdc74fe 100644 --- a/include/noscrypt.h +++ b/include/noscrypt.h @@ -29,6 +29,10 @@ #ifndef NOSCRYPT_H #define NOSCRYPT_H +#ifdef __cplusplus +extern "C" { +#endif + #include <stdint.h> #include <stddef.h> #include "platform.h" @@ -135,11 +139,7 @@ typedef struct xonly_pubkey_struct { /* An opaque full library context object */ -typedef struct ctx_struct { - - void* secpCtx; - -} NCContext; +typedef struct nc_ctx_struct NCContext; /* * The encryption arguments structure. This structure is used to pass @@ -253,6 +253,16 @@ for dynamic allocation when context size structure is not known. * @return The size of the context struct in bytes */ NC_EXPORT uint32_t NC_CC NCGetContextStructSize(void); + +/* +* Obtains a pointer to the process-wide shared structure to be +* used in single-threaded, resource constrained systems. NOTE: +* this structure is not initalized and still requires calling +* NCInitContext() before use. +* @return The address of the process-wide, shared structure. +*/ +NC_EXPORT NCContext* NC_CC NCGetSharedContext(void); + /* * Initializes a context struct with the given entropy * @param ctx A pointer to the context structure to initialize @@ -304,7 +314,7 @@ NC_EXPORT NCResult NC_CC NCGetPublicKey( is functionally the same as calling secp256k1_ec_seckey_verify. * @param ctx A pointer to the existing library context * @param sk A pointer to the secret key to verify -* @return 1 if the secret key is valid, 0 if it is not, otherwise an error code +* @return NC_SUCCESS if the secret key is valid, otherwise an error code */ NC_EXPORT NCResult NC_CC NCValidateSecretKey( const NCContext* ctx, @@ -568,4 +578,8 @@ NC_EXPORT NCResult NCComputeMac( uint8_t hmacOut[NC_ENCRYPTION_MAC_SIZE] ); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* !NOSCRYPT_H */ |