00001
00013 #ifndef C4E_EC_H
00014 #define C4E_EC_H
00015
00016
00017
00018
00019 #include "c4e_elements.h"
00020
00021
00022
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00027
00028
00029
00030
00042 typedef C4eElemPair C4eEcPoint;
00043
00044
00060 typedef struct
00061 {
00089 C4eElemOsp m;
00090
00094 C4eElement a;
00095
00099 C4eElement b;
00100
00130 C4eElemOsp q;
00131
00132 #ifndef C4E_CONFIG_DISABLE_DSA
00133
00138 C4eEcPoint g;
00139
00140 #endif
00141
00142 #ifndef C4E_CONFIG_DISABLE_DH
00143
00156 C4eElement h;
00157
00158 #endif
00159
00160 } C4eEcDomain;
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 #define C4E_EC_PTFMT_PC_Y (1U)
00173 #define C4E_EC_PTFMT_PC_C (2U)
00174 #define C4E_EC_PTFMT_PC_U (4U)
00175 #define C4E_EC_PTFMT_PC_H (C4E_EC_PTFMT_PC_U | C4E_EC_PTFMT_PC_C)
00188 #define C4E_EC_GF_BYTES_MAX ((1U * 1024U) / 8U)
00189
00190
00198 #define C4E_EC_ATTR_NONE (0U)
00199
00203 #define C4E_EC_ATTR_INF (1U)
00204
00205
00206
00207
00208
00209
00210
00211
00212
00226 #define C4E_EC_ASGN_MEM(pt, mem, size) \
00227 do \
00228 { \
00229 C4E_ELEM_ASGN_MEM(&(pt)->x, (mem)); \
00230 C4E_ELEM_ASGN_MEM(&(pt)->y, (mem) + (size)); \
00231 } \
00232 while (C4E_FALSE)
00233
00234
00235
00244 #define C4E_EC_IS_ZERO(pt) \
00245 (((pt)->attr & C4E_EC_ATTR_INF) != C4E_EC_ATTR_NONE)
00246
00247
00248
00254 #define C4E_EC_SET_INIT(pt) ((pt)->attr = C4E_EC_ATTR_NONE)
00255
00256
00257
00265 #define C4E_EC_SET_ZERO(pt) ((pt)->attr = C4E_EC_ATTR_INF)
00266
00267
00268
00276 #define C4E_EC_ASSERT_PTR(pt) \
00277 C4E_ASSERT(((pt) != NULL) && \
00278 ((pt)->x.digits != NULL) && \
00279 ((pt)->y.digits != NULL))
00280
00281
00282
00316 #define C4E_EC_FIELD_BITS_MAX(mbits) ((mbits) + 2U)
00317
00318
00319
00336 #define C4E_EC_FIELD_BYTES_MAX(mlen) ((mlen) + 1U)
00337
00338
00339
00359 #define C4E_EC_FIELD_DIGITS_MAX(msize) ((msize) + 1U)
00360
00361
00362
00363
00364
00365
00366
00367
00368 #ifdef __cplusplus
00369 }
00370 #endif
00371
00372
00373
00374
00375 #endif
00376
00377
00378
00379
00380