aboutsummaryrefslogtreecommitdiff
path: root/epid/common/math/pairing.h
blob: ff41a7665e37969e0b9e63c8f3ae17f375d10401 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*############################################################################
  # 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_