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__