/*############################################################################
# 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 Intel(R) EPID 1.1 Pairing interface.
*/
#ifndef EPID_COMMON_MATH_TATEPAIRING_H_
#define EPID_COMMON_MATH_TATEPAIRING_H_
#include "epid/common/errors.h"
#include "epid/common/math/ecgroup.h"
#include "epid/common/math/finitefield.h"
#include "epid/common/types.h"
/// Intel(R) EPID 1.1 pairing operations
/*!
\defgroup Epid11PairingPrimitives Intel(R) EPID 1.1 specific pairing
Provides APIs for defining and using a pairing relationship between two
Elliptic curve groups.
These pairing operations are intended to support Intel(R) EPID
1.1 verification.
\ingroup PairingPrimitives
\see Intel(R) EPID
1.1
support
@{
*/
/// A pairing
typedef struct Epid11PairingState Epid11PairingState;
/// Constructs a new Tate pairing state.
/*!
Allocates memory and creates a new pairing state for Tate pairing.
Use DeleteEpid11PairingState() to free memory.
This pairing operation is intended to support Intel(R) EPID
1.1 verification.
\param[in] ga
The EcGroup from which the first parameter of the pairing will be taken.
\param[in] gb
The EcGroup from which the second parameter of the pairing will be taken.
\param[in] ff
The result finite field. Must be a Fq12 field.
\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 Epid11PairingState.
\see DeleteEpid11PairingState
\see Intel(R) EPID 1.1
support
*/
EpidStatus NewEpid11PairingState(EcGroup const* ga, EcGroup const* gb,
FiniteField const* ff,
Epid11PairingState** ps);
/// Frees a previously allocated by Epid11PairingState.
/*!
Frees memory pointed to by pairing state. Nulls the pointer.
This pairing operation is intended to support Intel(R) EPID
1.1 verification.
\param[in] ps
The pairing state. Can be NULL.
\see NewEpid11PairingState
\see Intel(R) EPID 1.1
support
*/
void DeleteEpid11PairingState(Epid11PairingState** ps);
/// Computes a Tate Pairing for two parameters.
/*!
This pairing operation is intended to support Intel(R) EPID
1.1 verification. It frees memory pointed to by an Intel(R) EPID
1.1 pairing state.
\param[in] ps
The pairing state.
\param[in] a
The first value to pair. Must be in ga.
\param[in] b
The second value to pair. Must be in gb.
\param[out] d
The result of the pairing. Must be in ff.
\returns ::EpidStatus
\see Intel(R) EPID 1.1
support
*/
EpidStatus Epid11Pairing(Epid11PairingState* ps, EcPoint const* a,
EcPoint const* b, FfElement* d);
/*!
@}
*/
#endif // EPID_COMMON_MATH_TATEPAIRING_H_