2017-04-09 Niels Möller <nisse@lysator.liu.se>
+ * ecc-curve.h (nettle_get_secp_192r1, nettle_get_secp_224r1)
+ (nettle_get_secp_256r1, nettle_get_secp_384r1)
+ (nettle_get_secp_521r1): New functions, returning a pointer to
+ corresponding structure.
+ (nettle_secp_192r1, nettle_secp_224r1, nettle_secp_256r1)
+ (nettle_secp_384r1, nettle_secp_521r1): Redefined as macros,
+ calling the corresponding function.
+
* nettle-meta.h (nettle_ciphers, nettle_aeads, nettle_armors): New
macros, analogous to below change to nettle_hashes.
#define ecc_192_modp ecc_mod
#endif
-const struct ecc_curve nettle_secp_192r1 =
+const struct ecc_curve _nettle_secp_192r1 =
{
{
192,
ecc_table
};
+const struct ecc_curve *nettle_get_secp_192r1(void)
+{
+ return &_nettle_secp_192r1;
+}
# error Configuration error
#endif
-const struct ecc_curve nettle_secp_224r1 =
+const struct ecc_curve _nettle_secp_224r1 =
{
{
224,
ecc_unit,
ecc_table
};
+
+const struct ecc_curve *nettle_get_secp_224r1(void)
+{
+ return &_nettle_secp_224r1;
+}
#error Unsupported parameters
#endif
-const struct ecc_curve nettle_secp_256r1 =
+const struct ecc_curve _nettle_secp_256r1 =
{
{
256,
ecc_unit,
ecc_table
};
+
+const struct ecc_curve *nettle_get_secp_256r1(void)
+{
+ return &_nettle_secp_256r1;
+}
#define ecc_384_modp ecc_mod
#endif
-const struct ecc_curve nettle_secp_384r1 =
+const struct ecc_curve _nettle_secp_384r1 =
{
{
384,
ecc_unit,
ecc_table
};
+
+const struct ecc_curve *nettle_get_secp_384r1(void)
+{
+ return &_nettle_secp_384r1;
+}
}
#endif
-const struct ecc_curve nettle_secp_521r1 =
+const struct ecc_curve _nettle_secp_521r1 =
{
{
521,
ecc_table
};
+const struct ecc_curve *nettle_get_secp_521r1(void)
+{
+ return &_nettle_secp_521r1;
+}
/* The contents of this struct is internal. */
struct ecc_curve;
-extern const struct ecc_curve nettle_secp_192r1;
-extern const struct ecc_curve nettle_secp_224r1;
-extern const struct ecc_curve nettle_secp_256r1;
-extern const struct ecc_curve nettle_secp_384r1;
-extern const struct ecc_curve nettle_secp_521r1;
+#ifdef __GNUC__
+#define NETTLE_PURE __attribute__((pure))
+#else
+#define NETTLE_PURE
+#endif
+
+const struct ecc_curve * NETTLE_PURE nettle_get_secp_192r1(void);
+const struct ecc_curve * NETTLE_PURE nettle_get_secp_224r1(void);
+const struct ecc_curve * NETTLE_PURE nettle_get_secp_256r1(void);
+const struct ecc_curve * NETTLE_PURE nettle_get_secp_384r1(void);
+const struct ecc_curve * NETTLE_PURE nettle_get_secp_521r1(void);
+
+#undef NETTLE_PURE
+
+/* For backwards compatibility */
+#define nettle_secp_192r1 (*nettle_get_secp_192r1())
+#define nettle_secp_224r1 (*nettle_get_secp_224r1())
+#define nettle_secp_256r1 (*nettle_get_secp_256r1())
+#define nettle_secp_384r1 (*nettle_get_secp_384r1())
+#define nettle_secp_521r1 (*nettle_get_secp_521r1())
#ifdef __cplusplus
}
#define sec_modinv _nettle_sec_modinv
#define curve25519_eh_to_x _nettle_curve25519_eh_to_x
+extern const struct ecc_curve _nettle_secp_192r1;
+extern const struct ecc_curve _nettle_secp_224r1;
+extern const struct ecc_curve _nettle_secp_256r1;
+extern const struct ecc_curve _nettle_secp_384r1;
+extern const struct ecc_curve _nettle_secp_521r1;
+
/* Keep this structure internal for now. It's misnamed (since it's
really implementing the equivalent twisted Edwards curve, with
different coordinates). And we're not quite ready to provide
}
const struct ecc_curve * const curves[] = {
- &nettle_secp_192r1,
- &nettle_secp_224r1,
+ &_nettle_secp_192r1,
+ &_nettle_secp_224r1,
&_nettle_curve25519,
- &nettle_secp_256r1,
- &nettle_secp_384r1,
- &nettle_secp_521r1,
+ &_nettle_secp_256r1,
+ &_nettle_secp_384r1,
+ &_nettle_secp_521r1,
};
#define numberof(x) (sizeof (x) / sizeof ((x)[0]))
}
const struct ecc_curve * const ecc_curves[] = {
- &nettle_secp_192r1,
- &nettle_secp_224r1,
- &nettle_secp_256r1,
- &nettle_secp_384r1,
- &nettle_secp_521r1,
+ &_nettle_secp_192r1,
+ &_nettle_secp_224r1,
+ &_nettle_secp_256r1,
+ &_nettle_secp_384r1,
+ &_nettle_secp_521r1,
&_nettle_curve25519,
NULL
};