123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*############################################################################
- # 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_
|