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.
#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)))
WIPE_BUFFER(real_mac);
return mismatch;
}
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
#include <inttypes.h>
#include "monocypher.h"
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
extern "C" {
#endif
#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)))
{
crypto_chacha20_encrypt(ctx, stream, 0, size);
}
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
#include <stddef.h>
#include <inttypes.h>
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
extern "C" {
#endif
#include "monocypher.h"
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
/////////////////
/// Utilities ///
/////////////////
return crypto_unlock_aead(plain_text, key, nonce, mac, 0, 0,
cipher_text, text_size);
}
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
#include <stddef.h>
#include <stdint.h>
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
extern "C" {
#endif
#include "monocypher-ed25519.h"
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#endif
+
/////////////////
/// Utilities ///
/////////////////
COPY(x25519, a, 32);
WIPE_BUFFER(a);
}
+
+#ifdef MONOCYPHER_CPP_NAMESPACE
+}
+#endif
#include "monocypher.h"
-#ifdef __cplusplus
+#ifdef MONOCYPHER_CPP_NAMESPACE
+namespace MONOCYPHER_CPP_NAMESPACE {
+#elif defined(__cplusplus)
extern "C" {
#endif