111 lines
3.1 KiB
C
111 lines
3.1 KiB
C
|
|
/**********************************************************************
|
||
|
|
* 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
|