Files

111 lines
3.1 KiB
C
Raw Permalink Normal View History

2019-04-17 16:37:45 +02:00
/**********************************************************************
* Copyright (c) 2017 Tomas van der Wansem *
* Distributed under the MIT software license, see the accompanying *
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
**********************************************************************/
#ifndef _SECP256K1_MULTISET__
# define _SECP256K1_MULTISET__
# include "secp256k1.h"
# ifdef __cplusplus
extern "C" {
# endif
/** Opaque multiset; this is actually a group element **/
typedef struct {
unsigned char d[96];
} secp256k1_multiset;
/** Initialize a multiset
* The resulting multiset the multiset for no data elements
*
* Returns: 1: success
* 0: invalid parameter
* Args: ctx: pointer to a context object (cannot be NULL)
* Out: multiset: the resulting multiset
*/
SECP256K1_API int secp256k1_multiset_init(
const secp256k1_context* ctx,
secp256k1_multiset *multiset
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
/** Adds an element to a multiset from single data element
*
* Returns: 1: success
* 0: invalid parameter
* Args: ctx: pointer to a context object (cannot be NULL)
* Out: multiset: the multiset to update
* In: input: the data to add
* inputLen: the size of the data to add
*/
SECP256K1_API int secp256k1_multiset_add(
const secp256k1_context* ctx,
secp256k1_multiset *multiset,
const unsigned char *input,
size_t inputLen
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Removes an element from a multiset
*
* Returns: 1: success
* 0: invalid parameter
* Args: ctx: pointer to a context object (cannot be NULL)
* Out: multiset: the multiset to update
* In: input: the data to remove
* inputLen: the size of the data to remove
*/
SECP256K1_API int secp256k1_multiset_remove(
const secp256k1_context* ctx,
secp256k1_multiset *multiset,
const unsigned char *input,
size_t inputLen
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Combines two multisets
*
* Returns: 1: success
* 0: invalid parameter
* Args: ctx: pointer to a context object (cannot be NULL)
* In/Out: multiset: the multiset to which the input must be added
* In: input: the multiset to add
*/
SECP256K1_API int secp256k1_multiset_combine(
const secp256k1_context* ctx,
secp256k1_multiset *multiset,
const secp256k1_multiset *input
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Converts a multiset to a hash
*
* Returns: 1: success
* 0: invalid parameter
* Args: ctx: pointer to a context object (cannot be NULL)
* Out: hash: the resulting 32-byte hash
* In: multiset: the multiset to hash
*/
SECP256K1_API int secp256k1_multiset_finalize(
const secp256k1_context* ctx,
unsigned char *resultHash,
const secp256k1_multiset *multiset
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
# ifdef __cplusplus
}
# endif
#endif