Extract Subversion ignore data.
[catacomb-perl] / field.xs
CommitLineData
a1a90aaf 1# ---?---
2#
3# $Id$
4#
5# Field abstraction
6#
7# (c) 2001 Straylight/Edgeware
8#
9
10#----- Licensing notice -----------------------------------------------------
11#
12# This file is part of the Perl interface to Catacomb.
13#
14# Catacomb/Perl is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License as published by
16# the Free Software Foundation; either version 2 of the License, or
17# (at your option) any later version.
18#
19# Catacomb/Perl is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22# GNU General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with Catacomb/Perl; if not, write to the Free Software Foundation,
26# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27
28MODULE = Catacomb PACKAGE = Catacomb::Field PREFIX = field_
29
30Field *
31field_prime(me, p)
32 SV *me
33 mp *p
34 C_ARGS:
35 p
36
37Field *
38field_niceprime(me, p)
39 SV *me
40 mp *p
41 C_ARGS:
42 p
43
44Field *
45field_binpoly(me, p)
46 SV *me
47 gf *p
48 C_ARGS:
49 p
50
51Field *
52field_binnorm(me, p, beta)
53 SV *me
54 gf *p
55 gf *beta
56 C_ARGS:
57 p, beta
58
59Field *
60byname(me, str)
61 SV *me
62 char *str
63 PREINIT:
64 qd_parse qd;
65 CODE:
66 qd.e = 0;
67 qd.p = str;
68 if ((RETVAL = field_parse(&qd)) == 0)
69 croak("bad field spec: %s", qd.e);
70 else if (!qd_eofp(&qd)) {
71 F_DESTROY(RETVAL);
72 croak("junk at end of field spec");
73 }
74 OUTPUT:
75 RETVAL
76
77SV *
78DESTROY(f)
79 Field *f
80 CODE:
81 F_DESTROY(f);
82 XSRETURN_YES;
83
84char *
85name(f)
86 Field *f
87 CODE:
88 RETVAL = (char *)F_NAME(f);
89 OUTPUT:
90 RETVAL
91
92UV
93type(f)
94 Field *f
95 CODE:
96 RETVAL = F_TYPE(f);
97 OUTPUT:
98 RETVAL
99
fcd15e0b 100fe *
101_zero(f)
a1a90aaf 102 Field *f
103 CODE:
104 RETVAL = MP_COPY(f->zero);
105 OUTPUT:
106 RETVAL
107
fcd15e0b 108fe *
109_one(f)
a1a90aaf 110 Field *f
111 CODE:
112 RETVAL = MP_COPY(f->one);
113 OUTPUT:
114 RETVAL
115
fcd15e0b 116fe *
a1a90aaf 117m(f)
118 Field *f
119 CODE:
120 RETVAL = MP_COPY(f->m);
121 OUTPUT:
122 RETVAL
123
fcd15e0b 124fe *
125q(f)
126 Field *f
127 CODE:
128 RETVAL = MP_COPY(f->q);
129 OUTPUT:
130 RETVAL
131
a1a90aaf 132UV
133nbits(f)
134 Field *f
135 CODE:
136 RETVAL = f->nbits;
137 OUTPUT:
138 RETVAL
139
140UV
141noctets(f)
142 Field *f
143 CODE:
144 RETVAL = f->noctets;
145 OUTPUT:
146 RETVAL
147
fcd15e0b 148fe *
149_rand(f, r = &rand_global)
a1a90aaf 150 Field *f
151 grand *r
152 CODE:
153 RETVAL = F_RAND(f, MP_NEW, r);
154 OUTPUT:
155 RETVAL
156
157bool
158samep(f, ff)
159 Field *f
160 Field *ff
161 CODE:
162 RETVAL = F_SAMEP(f, ff);
163 OUTPUT:
164 RETVAL
165
fcd15e0b 166fe *
a1a90aaf 167in(f, x)
168 Field *f
fcd15e0b 169 fe *x
a1a90aaf 170 CODE:
171 RETVAL = F_IN(f, MP_NEW, x);
172 OUTPUT:
173 RETVAL
174
fcd15e0b 175fe *
a1a90aaf 176out(f, x)
177 Field *f
fcd15e0b 178 fe *x
a1a90aaf 179 CODE:
180 RETVAL = F_OUT(f, MP_NEW, x);
181 OUTPUT:
182 RETVAL
183
184bool
185zerop(f, x)
186 Field *f
fcd15e0b 187 fe *x
a1a90aaf 188 CODE:
189 RETVAL = F_ZEROP(f, x);
190 OUTPUT:
191 RETVAL
192
fcd15e0b 193fe *
a1a90aaf 194neg(f, x)
195 Field *f
fcd15e0b 196 fe *x
a1a90aaf 197 CODE:
198 RETVAL = F_NEG(f, MP_NEW, x);
199 OUTPUT:
200 RETVAL
201
fcd15e0b 202fe *
a1a90aaf 203add(f, x, y)
204 Field *f
fcd15e0b 205 fe *x
206 fe *y
a1a90aaf 207 CODE:
208 RETVAL = F_ADD(f, MP_NEW, x, y);
209 OUTPUT:
210 RETVAL
211
fcd15e0b 212fe *
a1a90aaf 213sub(f, x, y)
214 Field *f
fcd15e0b 215 fe *x
216 fe *y
a1a90aaf 217 CODE:
218 RETVAL = F_SUB(f, MP_NEW, x, y);
219 OUTPUT:
220 RETVAL
221
fcd15e0b 222fe *
a1a90aaf 223mul(f, x, y)
224 Field *f
fcd15e0b 225 fe *x
226 fe *y
a1a90aaf 227 CODE:
228 RETVAL = F_MUL(f, MP_NEW, x, y);
229 OUTPUT:
230 RETVAL
231
fcd15e0b 232fe *
a1a90aaf 233sqr(f, x)
234 Field *f
fcd15e0b 235 fe *x
a1a90aaf 236 CODE:
237 RETVAL = F_SQR(f, MP_NEW, x);
238 OUTPUT:
239 RETVAL
240
fcd15e0b 241fe *
a1a90aaf 242inv(f, x)
243 Field *f
fcd15e0b 244 fe *x
a1a90aaf 245 CODE:
fcd15e0b 246 if (F_ZEROP(f, x))
247 croak("division by zero");
a1a90aaf 248 RETVAL = F_INV(f, MP_NEW, x);
249 OUTPUT:
250 RETVAL
251
fcd15e0b 252fe *
a1a90aaf 253reduce(f, x)
254 Field *f
fcd15e0b 255 fe *x
a1a90aaf 256 CODE:
257 RETVAL = F_REDUCE(f, MP_NEW, x);
258 OUTPUT:
259 RETVAL
260
fcd15e0b 261fe *
a1a90aaf 262sqrt(f, x)
263 Field *f
fcd15e0b 264 fe *x
a1a90aaf 265 CODE:
266 RETVAL = F_SQRT(f, MP_NEW, x);
267 OUTPUT:
268 RETVAL
269
fcd15e0b 270fe *
a1a90aaf 271quadsolve(f, x)
272 Field *f
fcd15e0b 273 fe *x
a1a90aaf 274 CODE:
275 if (F_TYPE(f) != FTY_BINARY)
276 croak("quadsolve only works on binary fields");
277 RETVAL = F_QUADSOLVE(f, MP_NEW, x);
278 OUTPUT:
279 RETVAL
280
fcd15e0b 281fe *
a1a90aaf 282dbl(f, x)
283 Field *f
fcd15e0b 284 fe *x
a1a90aaf 285 CODE:
286 if (F_TYPE(f) != FTY_PRIME)
287 croak("dbl only works on prime fields");
288 RETVAL = F_DBL(f, MP_NEW, x);
289 OUTPUT:
290 RETVAL
291
fcd15e0b 292fe *
a1a90aaf 293tpl(f, x)
294 Field *f
fcd15e0b 295 fe *x
a1a90aaf 296 CODE:
297 if (F_TYPE(f) != FTY_PRIME)
298 croak("tpl only works on prime fields");
299 RETVAL = F_TPL(f, MP_NEW, x);
300 OUTPUT:
301 RETVAL
302
fcd15e0b 303fe *
a1a90aaf 304qdl(f, x)
305 Field *f
fcd15e0b 306 fe *x
a1a90aaf 307 CODE:
308 if (F_TYPE(f) != FTY_PRIME)
309 croak("qdl only works on prime fields");
310 RETVAL = F_QDL(f, MP_NEW, x);
311 OUTPUT:
312 RETVAL
313
fcd15e0b 314fe *
a1a90aaf 315hlv(f, x)
316 Field *f
fcd15e0b 317 fe *x
a1a90aaf 318 CODE:
319 if (F_TYPE(f) != FTY_PRIME)
320 croak("hlv only works on prime fields");
321 RETVAL = F_HLV(f, MP_NEW, x);
322 OUTPUT:
323 RETVAL
324
fcd15e0b 325SV *
326get(f)
327 Field *f
328 CODE:
329 RETVAL = info_field(f);
330 OUTPUT:
331 RETVAL