This file is indexed.

/usr/include/eclib/ffmod.h is in libec-dev 20160101-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// ffmod.h: declaration of class ffmodq and Weil pairing functions
//////////////////////////////////////////////////////////////////////////
//
// Copyright 1990-2012 John Cremona
// 
// This file is part of the eclib package.
// 
// eclib is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at your
// option) any later version.
// 
// eclib is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
// 
// You should have received a copy of the GNU General Public License
// along with eclib; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
// 
//////////////////////////////////////////////////////////////////////////
 

// ffmodq is the function field of an elliptic curve mod a prime q
// (or more precisely the affine coordinate ring Fq[x,y])

// allow for multiple includes
#ifndef _FFMOD_
#define _FFMOD_

#include "curve.h"
#include "curvemod.h"
#include "pointsmod.h"

class ffmodq{ 

  public:
  static galois_field Fq;        //  the constant field
  static curvemodq E;            //  the curve mod q
  static FqPoly f1, f2;          //  f2=a1*x+a3, f2=x^3+a2*x^2+a4*x+a6
  FqPoly h1, h2;                 //  for h1+y*h2

public:

  //  constructors
  
  //  special one to initialize the curve and field only:
  ffmodq(const curvemodq& EE);

  //  normal ones:
  ffmodq(void) 
    {
      init_h1h2();
      FqPolyAssign0(h1);
      FqPolyAssign0(h2);
    }

  ffmodq(const gf_element& c) 
    {
      init_h1h2();
      FqPolyAssignGF(h1,c);
      FqPolyAssign0(h2);
    }

  ffmodq(const bigint& c) 
    {
      init_h1h2();
      FqPolyAssignZ(h1,c);
      FqPolyAssign0(h2);
    }

  ffmodq(const FqPoly& hh1) 
    {
      init_h1h2();
      h1=hh1; 
      FqPolyAssign0(h2);
    }

  ffmodq(const FqPoly& hh1, const FqPoly& hh2) {h1=hh1; h2=hh2;}

  //  initialization
  void init_f1f2(void);

  void init_h1h2(void) 
    {    
      FqPolySetField(h1,Fq);
      FqPolySetField(h2,Fq);
    }

  // assignment
  void operator=(const ffmodq& a) {h1=a.h1; h2=a.h2;}

  // equality test
  int operator==(const ffmodq& b) const;
  int operator!=(const ffmodq& b) const {return !((*this)==b);}

  // output
  void output(ostream& os) const;

  // addition, subtraction, multiplication
  ffmodq operator+(const ffmodq& b) const;
  ffmodq operator-(const ffmodq& b) const;
  ffmodq operator*(const ffmodq& b) const;
  ffmodq operator*(const FqPoly& h) const;

  //  division
  ffmodq operator/(const FqPoly& h) const;
  ffmodq operator/(const ffmodq& b) const;

  //  evaluation at a point:
  gf_element evaluate(const pointmodq& P) const;
  gf_element operator()(const pointmodq& P) const {return this->evaluate(P);}

  //  vertical line through a point:
  friend ffmodq vertical(const pointmodq& P);

  //  tangent at a point:
  friend ffmodq tangent(const pointmodq& P);

  //  chord between points:
  friend ffmodq chord(const pointmodq& P, const pointmodq& Q);


};

// weil_pol(T,m): T is a point of finite order m; returns a function
// f_T whose divisor is m(T)-m(0).

// The second version evaluates that at another point S without
// actually computing the polynomial

ffmodq weil_pol(const pointmodq& T, int m);

gf_element evaluate_weil_pol(const pointmodq& T, int m, const pointmodq& S);

gf_element weil_pairing(const pointmodq& S, const pointmodq& T, int m);

inline ostream& operator<<(ostream& os, const ffmodq& f)
{
  f.output(os);
  return os;
}


#endif