#ifdef __cplusplus extern "C" { #endif #include "bignum.h" /*! * \file */ /** * \struct * \brief The CMixBuffer struct is the temporary storage of messages in each Node. * On this buffer, operations like decrypt and permute are performed. */ struct CMixBuffer { char* buffer; ///< The actual buffer unsigned int nr_messages; ///< The number of messages in the buffer unsigned int message_length; ///< The length of each message in the buffer }; /*! * \brief The cmix_error enum describes the output state of a each of the cmix functions */ enum cmix_error { no_error = 0, index_out_of_range = 1000, cmix_bignum_error = 2000, }; /*! * \brief permutate mixes the messages before sending the messages. * \param[in,out] b A buffer of \p nr_messages messages, each message of length *message_len* * \return no_error */ enum cmix_error permute(struct CMixBuffer b); /*! * \brief get_message takes the \p index message of the buffer \p b copies it into \p message * \param[out] message is the output buffer that has to hold at least \p b.message_length bytes. * \param[in] b is the buffer from which to copy the message. * \param[in] index is the index of the message to copy. * \return index_out_of_range if \p index is greater than or equal to \p b.nr_messages , otherwise no_error. */ enum cmix_error get_message(char* message, struct CMixBuffer b, unsigned int index); /*! * \brief set_message set the \p index message of the buffer to a copy of \p message. * \param[in] message The message to set the part of the buffer to. * \param[in,out] b The buffer * \param[in] index The index into the buffer * \return index_out_of_range if \p index is greater than or equal to \p b.nr_messages , otherwise no_error. */ enum cmix_error set_message(char const* message, struct CMixBuffer b, unsigned int index); /*! * \brief calculate_shared_key_part Calculates (partly) the shared key which is needed by all the nodes. * \param result Storage for the result * \param partial_shared The shared key so far. * \param my_share My part to add to the key. * \param mod The modulus of the group we are in. * \return An error_code. */ enum cmix_error calculate_shared_key_part(struct Bignum* result, struct Bignum partial_shared, struct Bignum my_share, struct Bignum mod); #ifdef __cplusplus } // extern "C" #endif