1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
3 // SPDX-License-Identifier: LGPL-3.0+
5 #ifndef __ZETH_FIELD_ELEMENT_UTILS_TCC__
6 #define __ZETH_FIELD_ELEMENT_UTILS_TCC__
8 #include "libzeth/core/field_element_utils.hpp"
9 #include "libzeth/core/utils.hpp"
17 template<typename FieldT>
18 std::string base_field_element_to_hex(const FieldT &field_el)
21 FieldT::extension_degree() == 1, "only valid on base/ground fields");
22 return libff::bigint_to_hex(field_el.as_bigint(), true);
25 template<typename FieldT>
26 FieldT base_field_element_from_hex(const std::string &hex)
29 FieldT::extension_degree() == 1, "only valid on base/ground fields");
31 typename std::decay<decltype(((FieldT *)nullptr)->mont_repr)>::type;
33 libff::bigint_from_hex(v, hex);
37 template<typename FieldT>
38 void field_element_write_json(const FieldT &el, std::ostream &out_s)
40 libff::field_write<libff::encoding_json, libff::form_plain>(el, out_s);
43 template<typename FieldT>
44 void field_element_read_json(FieldT &el, std::istream &in_s)
46 libff::field_read<libff::encoding_json, libff::form_plain>(el, in_s);
49 template<typename FieldT> std::string field_element_to_json(const FieldT &el)
53 std::ios_base::eofbit | std::ios_base::badbit | std::ios_base::failbit);
54 field_element_write_json(el, ss);
58 template<typename FieldT>
59 FieldT field_element_from_json(const std::string &json)
61 std::stringstream ss(json);
63 field_element_read_json(result, ss);
67 template<typename FieldT>
68 void field_element_write_bytes(const FieldT &el, std::ostream &out_s)
70 libff::field_write<libff::encoding_binary, libff::form_plain>(el, out_s);
73 template<typename FieldT>
74 void field_element_read_bytes(FieldT &el, std::istream &in_s)
76 libff::field_read<libff::encoding_binary, libff::form_plain>(el, in_s);
79 } // namespace libzeth
81 #endif // __ZETH_FIELD_ELEMENT_UTILS_TCC__