diff options
author | vnugent <public@vaughnnugent.com> | 2024-05-26 17:39:40 -0400 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2024-05-26 17:39:40 -0400 |
commit | a8a6efb2319f739e5faae550561dc27d9dd1e88d (patch) | |
tree | fb24ccfb03e5eb57861182f89794992cfe02bb6e /src/providers/monocypher.c | |
parent | 72e1b7be4031e2fd4d258fcf434ad049c0029201 (diff) |
chore: Update libs, reorder files, internalize private headers
Diffstat (limited to 'src/providers/monocypher.c')
-rw-r--r-- | src/providers/monocypher.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/providers/monocypher.c b/src/providers/monocypher.c new file mode 100644 index 0000000..8ffe048 --- /dev/null +++ b/src/providers/monocypher.c @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2024 Vaughn Nugent +* +* Package: noscrypt +* File: impl/monocypher.c +* +* 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/. +*/ + + +/* +* This file handles some fallbacks that may not be available on +* some platforms. More specifically: +* - Secure memset 0 +* - Chacha20 cipher +* +*/ + +#ifdef NC_ENABLE_MONOCYPHER + +#include <monocypher.h> + +/* Export secure memse0 */ +#ifndef _IMPL_SECURE_ZERO_MEMSET + + /* export cytpo wipe function as is */ + #define _IMPL_SECURE_ZERO_MEMSET crypto_wipe +#endif + +/* Export Chacha20 */ +#ifndef _IMPL_CHACHA20_CRYPT + + #define _IMPL_CHACHA20_CRYPT _mc_chacha20_crypt + + _IMPLSTB cstatus_t _mc_chacha20_crypt( + const uint8_t* key, + const uint8_t* nonce, + const uint8_t* input, + uint8_t* output, + uint32_t dataLen + ) + { + _overflow_check(dataLen) + + /* + * Function returns the next counter value which is not + * needed for noscrypt as encryptions are one-shot, and + * require a new nonce for each encryption. + * + * ITEF function uses a 12byte nonce which is required for + * nip-44 compliant encryption. + */ + crypto_chacha20_ietf( + output, + input, + (size_t)dataLen, + key, + nonce, + 0x00 /* Counter always starts at 0 */ + ); + + return CSTATUS_OK; + } + +#endif + +#endif /* !NC_ENABLE_MONOCYPHER */
\ No newline at end of file |