]> git.codecow.com Git - Monocypher.git/commitdiff
Allow headers to declare a C++ namespace
authorJens Alfke <jens@mooseyard.com>
Wed, 12 Jan 2022 19:36:44 +0000 (11:36 -0800)
committerLoup Vaillant <github-is-valid@loup-vaillant.fr>
Mon, 17 Jan 2022 23:37:24 +0000 (00:37 +0100)
If the preprocessor symbol `MONOCYPHER_CPP_NAMESPACE` is defined,
the Monocypher headers will be wrapped in a C++ namespace instead of
in `extern "C"`. The name of the namespace is the value of the symbol.

This requires also compiling Monocypher's .c files as C++, either by:
- Using a compiler option like `--x c++`;
- Using an IDE setting, like the Identity & Type inspector in Xcode;
- Putting `#include "monocypher.c" in a C++ file

AUTHORS.md
src/deprecated/aead-incr.c
src/deprecated/aead-incr.h
src/deprecated/chacha20.c
src/deprecated/chacha20.h
src/monocypher.c
src/monocypher.h
src/optional/monocypher-ed25519.c
src/optional/monocypher-ed25519.h

index 343aa1d968e558324e53ea6dda037c03dc5f9108..65a16ec641b8eed819a7852a0c9c1b24de4c9957 100644 (file)
@@ -55,3 +55,7 @@ Mike Hamburg explained comb algorithms, including the signed
 all-bits-set comb described in his 2012 paper, Fast and compact
 elliptic-curve cryptography.  This made EdDSA signatures over twice as
 fast.
+
+Jens Alfke added some #ifdefs that enabled Monocypher to compile into
+a C++ namespace, preventing symbol collisions with similarly-named
+functions in other crypto libraries.
index 3d586920479f80c1082068bc885eced2c36b2525..a0e3ce27d89c1364e40c7a470b48ab666623daa5 100644 (file)
 
 #include "aead-incr.h"
 
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
 #define FOR_T(type, i, start, end) for (type i = (start); i < (end); i++)
 #define FOR(i, start, end)         FOR_T(size_t, i, start, end)
 #define WIPE_CTX(ctx)              crypto_wipe(ctx   , sizeof(*(ctx)))
@@ -227,3 +231,7 @@ int crypto_unlock_final(crypto_lock_ctx *ctx, const u8 mac[16])
     WIPE_BUFFER(real_mac);
     return mismatch;
 }
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
index c349b1f31feb6ccd7dc17cb91d69a2c78856afbb..795babe04f3e9269e9c056e6831d15aff4132e3b 100644 (file)
@@ -92,7 +92,9 @@
 #include <inttypes.h>
 #include "monocypher.h"
 
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
 extern "C" {
 #endif
 
index 61a283dad1fa1dd954ca6066cbcf90b6f57f4a5e..e7930509ec36919dc0774c67ea6832510200be72 100644 (file)
 #include "chacha20.h"
 #include "monocypher.h"
 
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
 #define FOR_T(type, i, start, end) for (type i = (start); i < (end); i++)
 #define FOR(i, start, end)         FOR_T(size_t, i, start, end)
 #define WIPE_CTX(ctx)              crypto_wipe(ctx   , sizeof(*(ctx)))
@@ -146,3 +150,7 @@ void crypto_chacha20_stream(crypto_chacha_ctx *ctx, u8 *stream, size_t size)
 {
     crypto_chacha20_encrypt(ctx, stream, 0, size);
 }
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
index 5208a08d5db78aaf6e470ff4a67b607052dbb912..afb8b5ab9aa7b482b18ef7d135054f88f549f879 100644 (file)
@@ -82,7 +82,9 @@
 #include <stddef.h>
 #include <inttypes.h>
 
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
 extern "C" {
 #endif
 
index 2859b5e9773a205bde42961c26af5634d52183c1..30642e656c388ca98f787b94a23e4c60cbc8efbd 100644 (file)
 
 #include "monocypher.h"
 
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
 /////////////////
 /// Utilities ///
 /////////////////
@@ -2957,3 +2961,7 @@ int crypto_unlock(u8 *plain_text,
     return crypto_unlock_aead(plain_text, key, nonce, mac, 0, 0,
                               cipher_text, text_size);
 }
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
index fc6886c15fd642f65c1c13a1a30833097a6f148e..50f0fcb29897b2e04d796b940ca9489fe187eddc 100644 (file)
@@ -57,7 +57,9 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
 extern "C" {
 #endif
 
index f173fd8927352efabba378730b3d01f3b6126b46..d5f4cfadaa9330441de9df33dd253116f216a280 100644 (file)
 
 #include "monocypher-ed25519.h"
 
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
 /////////////////
 /// Utilities ///
 /////////////////
@@ -407,3 +411,7 @@ void crypto_from_ed25519_private(u8 x25519[32], const u8 eddsa[32])
     COPY(x25519, a, 32);
     WIPE_BUFFER(a);
 }
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
index 6a40703262fb021c9649a5c9ceb964251554daa7..98ffbd1b40da0513d58e4009e1b83bd501d4f723 100644 (file)
@@ -56,7 +56,9 @@
 
 #include "monocypher.h"
 
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
 extern "C" {
 #endif