blob: 2e0bd918f8000ce126d338b236ea4906a01f705a [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
/**
* @file bls_ZZZ.h
* @author Mike Scott
* @date 28th Novemebr 2018
* @brief BLS Header file
*
* Allows some user configuration
* defines structures
* declares functions
*
*/
#ifndef BLS_ZZZ_H
#define BLS_ZZZ_H
#include "pair_ZZZ.h"
/* Field size is assumed to be greater than or equal to group size */
#define BGS_ZZZ MODBYTES_XXX /**< BLS Group Size */
#define BFS_ZZZ MODBYTES_XXX /**< BLS Field Size */
#define BLS_OK 0 /**< Function completed without error */
#define BLS_FAIL 41 /**< Invalid signature */
#define BLS_INVALID_G1 42 /**< Not a valid G1 point on the curve */
#define BLS_INVALID_G2 43 /**< Not a valid G2 point on the curve */
/* BLS API functions */
/** @brief Generate Key Pair
*
@param RNG Pointer to a cryptographically secure random number generator
@param S Private key. Generated externally if RNG set to NULL
@param W Public Key. W = S*G, where G is fixed generator
@return Zero for success or else an error code
*/
int BLS_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W);
/** @brief Calculate a signature
*
@param SIG signature
@param M message to be signed
@param S Private key
@return Zero for success or else an error code
*/
int BLS_ZZZ_SIGN(octet *SIG,octet *M,octet *S);
/** @brief Verify a signature
*
@param SIG signature
@param M message whose signature is to be verified.
@param W Public key
@return Zero for success or else an error code
*/
int BLS_ZZZ_VERIFY(octet *SIG,octet *M,octet *W);
/** @brief Add two members from the group G1
*
@param R1 member of G1
@param R2 member of G1
@param R member of G1. R = R1+R2
@return Zero for success or else an error code
*/
int BLS_ZZZ_ADD_G1(octet *R1,octet *R2,octet *R);
/** @brief Add two members from the group G2
*
@param W1 member of G2
@param W2 member of G2
@param W member of G2. W = W1+W2
@return Zero for success or else an error code
*/
int BLS_ZZZ_ADD_G2(octet *W1,octet *W2,octet *W);
/** @brief Use Shamir's secret sharing to distribute BLS secret keys
*
@param k Threshold
@param n Number of shares
@param RNG Pointer to a cryptographically secure random number generator
@param X X values
@param Y Y values. Valid BLS secret keys
@param SKI Input secret key to be shared. Ignored if set to NULL
@param SKO Secret key that is shared
@return Zero for success or else an error code
*/
int BLS_ZZZ_MAKE_SHARES(int k, int n, csprng *RNG, octet* X, octet* Y, octet* SKI, octet* SKO);
/** @brief Use Shamir's secret sharing to recover a BLS secret key
*
@param k Threshold
@param X X values
@param Y Y values. Valid BLS secret keys
@param SK Secret key that is recovered
@return Zero for success or else an error code
*/
int BLS_ZZZ_RECOVER_SECRET(int k, octet* X, octet* Y, octet* SK);
/** @brief Use Shamir's secret sharing to recover a BLS signature
*
@param k Threshold
@param X X values
@param Y Y values. Valid BLS signatures
@param SIG Signature that is recovered
@return Zero for success or else an error code
*/
int BLS_ZZZ_RECOVER_SIGNATURE(int k, octet* X, octet* Y, octet* SIG);
#endif