1261287Sdes/* $OpenBSD: fe25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */
2261287Sdes
3261287Sdes/*
4261287Sdes * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange,
5261287Sdes * Peter Schwabe, Bo-Yin Yang.
6261287Sdes * Copied from supercop-20130419/crypto_sign/ed25519/ref/fe25519.h
7261287Sdes */
8261287Sdes
9261287Sdes#ifndef FE25519_H
10261287Sdes#define FE25519_H
11261287Sdes
12261287Sdes#include "crypto_api.h"
13261287Sdes
14261287Sdes#define fe25519              crypto_sign_ed25519_ref_fe25519
15261287Sdes#define fe25519_freeze       crypto_sign_ed25519_ref_fe25519_freeze
16261287Sdes#define fe25519_unpack       crypto_sign_ed25519_ref_fe25519_unpack
17261287Sdes#define fe25519_pack         crypto_sign_ed25519_ref_fe25519_pack
18261287Sdes#define fe25519_iszero       crypto_sign_ed25519_ref_fe25519_iszero
19261287Sdes#define fe25519_iseq_vartime crypto_sign_ed25519_ref_fe25519_iseq_vartime
20261287Sdes#define fe25519_cmov         crypto_sign_ed25519_ref_fe25519_cmov
21261287Sdes#define fe25519_setone       crypto_sign_ed25519_ref_fe25519_setone
22261287Sdes#define fe25519_setzero      crypto_sign_ed25519_ref_fe25519_setzero
23261287Sdes#define fe25519_neg          crypto_sign_ed25519_ref_fe25519_neg
24261287Sdes#define fe25519_getparity    crypto_sign_ed25519_ref_fe25519_getparity
25261287Sdes#define fe25519_add          crypto_sign_ed25519_ref_fe25519_add
26261287Sdes#define fe25519_sub          crypto_sign_ed25519_ref_fe25519_sub
27261287Sdes#define fe25519_mul          crypto_sign_ed25519_ref_fe25519_mul
28261287Sdes#define fe25519_square       crypto_sign_ed25519_ref_fe25519_square
29261287Sdes#define fe25519_invert       crypto_sign_ed25519_ref_fe25519_invert
30261287Sdes#define fe25519_pow2523      crypto_sign_ed25519_ref_fe25519_pow2523
31261287Sdes
32261287Sdestypedef struct
33261287Sdes{
34261287Sdes  crypto_uint32 v[32];
35261287Sdes}
36261287Sdesfe25519;
37261287Sdes
38261287Sdesvoid fe25519_freeze(fe25519 *r);
39261287Sdes
40261287Sdesvoid fe25519_unpack(fe25519 *r, const unsigned char x[32]);
41261287Sdes
42261287Sdesvoid fe25519_pack(unsigned char r[32], const fe25519 *x);
43261287Sdes
44261287Sdesint fe25519_iszero(const fe25519 *x);
45261287Sdes
46261287Sdesint fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y);
47261287Sdes
48261287Sdesvoid fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b);
49261287Sdes
50261287Sdesvoid fe25519_setone(fe25519 *r);
51261287Sdes
52261287Sdesvoid fe25519_setzero(fe25519 *r);
53261287Sdes
54261287Sdesvoid fe25519_neg(fe25519 *r, const fe25519 *x);
55261287Sdes
56261287Sdesunsigned char fe25519_getparity(const fe25519 *x);
57261287Sdes
58261287Sdesvoid fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y);
59261287Sdes
60261287Sdesvoid fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y);
61261287Sdes
62261287Sdesvoid fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y);
63261287Sdes
64261287Sdesvoid fe25519_square(fe25519 *r, const fe25519 *x);
65261287Sdes
66261287Sdesvoid fe25519_invert(fe25519 *r, const fe25519 *x);
67261287Sdes
68261287Sdesvoid fe25519_pow2523(fe25519 *r, const fe25519 *x);
69261287Sdes
70261287Sdes#endif
71