| /*############################################################################ |
| # Copyright 2016-2017 Intel Corporation |
| # |
| # Licensed 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 |
| * \brief Pairing interface. |
| */ |
| |
| #ifndef EPID_COMMON_MATH_PAIRING_H_ |
| #define EPID_COMMON_MATH_PAIRING_H_ |
| |
| #include "epid/common/errors.h" |
| #include "epid/common/math/ecgroup.h" |
| #include "epid/common/math/finitefield.h" |
| #include "epid/common/types.h" |
| |
| /// Pairing operations |
| /*! |
| \defgroup PairingPrimitives pairing |
| Provides APIs for defining and using a pairing relationship between two |
| elliptic curve groups. |
| |
| \ingroup EpidMath |
| @{ |
| */ |
| |
| /// A pairing |
| typedef struct PairingState PairingState; |
| |
| /// Constructs a new pairing state. |
| /*! |
| Allocates memory and creates a new pairing state for Optimal Ate Pairing. |
| |
| Use DeletePairingState() to free memory. |
| |
| \param[in] ga |
| The EcGroup from which the first parameter of the pairing is taken. |
| \param[in] gb |
| The EcGroup from which the second parameter of the pairing is taken. |
| \param[in] ff |
| The result finite field. Must be a Fq12 field. |
| \param[in] t |
| A positive integer such that 6(t^2) == q - p, where p and q are parameters |
| of G1. |
| \param[in] neg |
| Select the alternate "negate" processing path for Optimal Ate Pairing. |
| \param[out] ps |
| Newly constructed pairing state. |
| |
| \returns ::EpidStatus |
| |
| \attention It is the responsibility of the caller to ensure that ga, gb, and |
| ff exist for the entire lifetime of the new PairingState. |
| |
| \see DeletePairingState |
| */ |
| EpidStatus NewPairingState(EcGroup const* ga, EcGroup const* gb, |
| FiniteField* ff, BigNumStr const* t, bool neg, |
| PairingState** ps); |
| |
| /// Frees a previously allocated by PairingState. |
| /*! |
| Frees memory pointed to by pairing state. Nulls the pointer. |
| |
| \param[in] ps |
| The pairing state. Can be NULL. |
| |
| \see NewPairingState |
| */ |
| void DeletePairingState(PairingState** ps); |
| |
| /// Computes an Optimal Ate Pairing for two parameters. |
| /*! |
| \param[in] ps |
| The pairing state. |
| \param[in] a |
| The first value to pair. Must be in ga used to create ps. |
| \param[in] b |
| The second value to pair. Must be in gb used to create ps |
| \param[out] d |
| The result of the pairing. Will be in ff used to create the pairing state. |
| |
| \returns ::EpidStatus |
| */ |
| EpidStatus Pairing(PairingState* ps, EcPoint const* a, EcPoint const* b, |
| FfElement* d); |
| |
| /*! |
| @} |
| */ |
| |
| #endif // EPID_COMMON_MATH_PAIRING_H_ |