123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*
- * libZRTP SDK library, implements the ZRTP secure VoIP protocol.
- * Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved.
- * Contact: http://philzimmermann.com
- * For licensing and other legal details, see the file zrtp_legal.c.
- */
-
- #ifndef __ZRTP_CRYPTO_EC_H__
- #define __ZRTP_CRYPTO_EC_H__
- #include "bn.h"
- #include "zrtp_config.h"
- #include "zrtp_types.h"
- #include "zrtp_error.h"
- #define ZRTP_MAXECBITS 521
- #define ZRTP_MAXECWORDS ((ZRTP_MAXECBITS+7)/8)
- typedef struct zrtp_ec_params
- {
- unsigned ec_bits; /* # EC bits: 256, 384, 521 */
- uint8_t P_data[ZRTP_MAXECWORDS]; /* curve field prime */
- uint8_t n_data[ZRTP_MAXECWORDS]; /* curve order (# points) */
- uint8_t b_data[ZRTP_MAXECWORDS]; /* curve param, y^3 = x^2 -3x + b */
- uint8_t Gx_data[ZRTP_MAXECWORDS]; /* curve point, x coordinate */
- uint8_t Gy_data[ZRTP_MAXECWORDS]; /* curve point, y coordinate */
- } zrtp_ec_params_t;
- #if defined(__cplusplus)
- extern "C"
- {
- #endif
-
- /*============================================================================*/
- /* Elliptic Curve library */
- /*============================================================================*/
- int zrtp_ecAdd ( struct BigNum *rsltx,
- struct BigNum *rslty,
- struct BigNum *p1x,
- struct BigNum *p1y,
- struct BigNum *p2x,
- struct BigNum *p2y,
- struct BigNum *mod);
- int zrtp_ecMul ( struct BigNum *rsltx,
- struct BigNum *rslty,
- struct BigNum *mult,
- struct BigNum *basex,
- struct BigNum *basey,
- struct BigNum *mod);
- zrtp_status_t zrtp_ec_random_point( zrtp_global_t *zrtp,
- struct BigNum *P,
- struct BigNum *n,
- struct BigNum *Gx,
- struct BigNum *Gy,
- struct BigNum *pkx,
- struct BigNum *pky,
- struct BigNum *sv,
- uint8_t *test_sv_data,
- size_t test_sv_data_len);
- extern zrtp_status_t zrtp_ec_init_params(struct zrtp_ec_params *params, uint32_t bits );
- /* Useful bignum utility functions not defined in bignum library */
- int bnAddMod_ (struct BigNum *rslt, struct BigNum *n1, struct BigNum *mod);
- int bnAddQMod_ (struct BigNum *rslt, unsigned n1, struct BigNum *mod);
- int bnSubMod_ (struct BigNum *rslt, struct BigNum *n1, struct BigNum *mod);
- int bnSubQMod_ (struct BigNum *rslt, unsigned n1, struct BigNum *mod);
- int bnMulMod_ (struct BigNum *rslt, struct BigNum *n1, struct BigNum *n2, struct BigNum *mod);
- int bnMulQMod_ (struct BigNum *rslt, struct BigNum *n1, unsigned n2, struct BigNum *mod);
- int bnSquareMod_ (struct BigNum *rslt, struct BigNum *n1, struct BigNum *mod);
- #if defined(__cplusplus)
- }
- #endif
- #endif /* __ZRTP_CRYPTO_EC_H__ */
|