aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/impl_macros.h
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2017-02-11 14:48:52 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2017-02-11 17:54:40 +0100
commit623dffe2c054d1639dbf9c8f21ddfb088c7950fb (patch)
treef8159c5b3cf9872f9b271d03ad5a4b65ecec19b8 /libcmix-crypto/impl_macros.h
parentb229dc91d8825689c5e66264b462ce01398e621e (diff)
downloadcmix-623dffe2c054d1639dbf9c8f21ddfb088c7950fb.tar.gz
cmix-623dffe2c054d1639dbf9c8f21ddfb088c7950fb.tar.bz2
cmix-623dffe2c054d1639dbf9c8f21ddfb088c7950fb.zip
Working Ed25519 Implementation of libcmix.
Diffstat (limited to 'libcmix-crypto/impl_macros.h')
-rw-r--r--libcmix-crypto/impl_macros.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/libcmix-crypto/impl_macros.h b/libcmix-crypto/impl_macros.h
new file mode 100644
index 0000000..15d8ddf
--- /dev/null
+++ b/libcmix-crypto/impl_macros.h
@@ -0,0 +1,65 @@
+#pragma once
+
+#define VAR_IN_(x, y) x ## _ ## y
+#define VAR_IN(x, y) VAR_IN_(x, y)
+#define VAR(y) VAR_IN(ALGORITHM, y)
+#define DEF_IN_(x, y, z) x ## _ ## y ## _ ## z
+#define DEF_IN(x, y, z) DEF_IN_(x, y, z)
+#define DEF(z) DEF_IN(API, ALGORITHM, z)
+
+#define LINK_IMPLEMENTATION \
+Initializer VAR(initialize) = &DEF(initialize); \
+KeyPairCreator VAR(create_keypair) = &DEF(create_keypair); \
+KeyPairDeleter VAR(delete_keypair) = &DEF(delete_keypair); \
+ElementToArray VAR(element_to_array) = &DEF(element_to_array); \
+BufferDeleter VAR(free_buffer) = &DEF(free_buffer); \
+ArrayToElement VAR(array_to_element) = &DEF(array_to_element); \
+MessageToElement VAR(message_to_element) = &DEF(message_to_element); \
+ElementToMessage VAR(element_to_message) = &DEF(element_to_message); \
+PubKeyHashGetter VAR(get_pub_key_hash) = &DEF(get_pub_key_hash); \
+PubKeyHashLengthGetter VAR(get_pub_key_hash_length) = &DEF(get_pub_key_hash_length); \
+GroupElementGetter VAR(get_group_element) = &DEF(get_group_element); \
+GroupElementDeleter VAR(delete_group_element) = &DEF(delete_group_element); \
+KeyExchangeValueGetter VAR(get_key_exchange_value) = &DEF(get_key_exchange_value); \
+GroupElementCombiner VAR(combine) = &DEF(combine); \
+GroupElementUncombiner VAR(uncombine) = &DEF(uncombine); \
+DecryptionShareGetter VAR(get_decryption_share) = &DEF(get_decryption_share); \
+GroupElementArraySizeGetter VAR(get_group_element_array_size) = &DEF(get_group_element_array_size); \
+MessageSizeGetter VAR(get_message_size) = &DEF(get_message_size); \
+PublicShareAdder VAR(add_public_share) = &DEF(add_public_share); \
+SharedKeyDeriver VAR(derive_shared_key) = &DEF(derive_shared_key); \
+SharedKeyDeleter VAR(delete_shared_key) = &DEF(delete_shared_key); \
+Encrypter VAR(encrypt) = &DEF(encrypt); \
+Inverter VAR(invert) = &DEF(invert); \
+UniformIntGetter VAR(get_uniform_int) = &DEF(get_uniform_int); \
+Deinitializer VAR(deinitialize) = &DEF(deinitialize);
+
+//before expanding LINK_IMPLEMENTATION in your crypto api implementation file you need to define the following functions
+
+/*
+void DEF(initialize)(void) {}
+struct KeyPair DEF(create_keypair)(void) {}
+void DEF(delete_keypair)(struct KeyPair* pair) {}
+void DEF(element_to_array)(unsigned char** buffer, size_t* len, GroupElement element) {}
+void DEF(free_buffer)(void* buffer) {}
+GroupElement DEF(array_to_element)(char const* buffer, size_t len, bool secure) {}
+GroupElement DEF(message_to_element)(char const* buffer, size_t len, bool secure) {}
+void DEF(element_to_message)(char** buffer, const GroupElement el);
+size_t DEF(get_pub_key_hash_length)(void) {}
+void DEF(get_pub_key_hash)(char** buffer, size_t* len, GroupElement const pub) {}
+GroupElement DEF(get_group_element)(bool secure) {}
+GroupElement DEF(get_key_exchange_value)(GroupElement group_el) {}
+GroupElement DEF(combine)(GroupElement lh, GroupElement rh, bool secure) {}
+GroupElement DEF(uncombine)(GroupElement lh, GroupElement rh, bool secure) {}
+GroupElement DEF(get_decryption_share)(GroupElement r, GroupElement e) {}
+size_t DEF(get_group_element_array_size)(void) {}
+size_t DEF(get_message_size)(void) {}
+void DEF(delete_group_element)(GroupElement element) {}
+void DEF(add_public_share)(GroupElement* el, char const* share, size_t in_len, GroupElement pubkey) {}
+GroupElement DEF(derive_shared_key)(struct KeyPair keypair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap) {}
+void DEF(delete_shared_key)(struct SharedKey* s) {}
+void DEF(encrypt)(GroupElement* random_element, GroupElement* message_element, GroupElement value, GroupElement key) }
+GroupElement DEF(invert)(GroupElement const x) {}
+unsigned int DEF(get_uniform_int)(unsigned int upper) {}
+void DEF(deinitialize)(void) {}
+*/ \ No newline at end of file