herumi / mcl

a portable and fast pairing-based cryptography library
BSD 3-Clause "New" or "Revised" License
450 stars 151 forks source link

gmp support #191

Closed darcys22 closed 6 months ago

darcys22 commented 7 months ago

I've used GMP in my project previously, when building MCL this clashes because of this code:

#ifdef MCL_USE_VINT
#include <mcl/vint.hpp>
typedef mcl::Vint mpz_class;

However if I set MCL to use GMP internally using this in my cmake.

set(BLS_ETH ON CACHE BOOL "" FORCE)
add_compile_definitions(MCL_USE_GMP)
add_subdirectory(bls)

then a bunch of errors occur due to bint not being defined

/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp: In member function ‘void mcl::FpT<tag, maxBitSize>::dump() const’:                    
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp:150:17: error: ‘bint’ has not been declared                                            
  150 |                 bint::dump(v_, N);                                                                                                                          
      |                 ^~~~                                                                                                                                        
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp: In member function ‘void mcl::FpT<tag, maxBitSize>::load(bool*, InputStream&, int)’:  
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp:325:21: error: ‘bint’ has not been declared                                            
  325 |                 if (bint::cmpGeN(v_, op_.p, op_.N)) {                                                                                                       
      |                     ^~~~                                                                                                                                    
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp: In member function ‘void mcl::FpT<tag, maxBitSize>::setArray(bool*, const S*, size_t)’
:                                                                                                                                                                   
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp:383:21: error: ‘bint’ has not been declared                                            
  383 |                 if (bint::cmpGeN(v_, op_.p, op_.N)) {                                                                                                       
      |                     ^~~~
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp: In member function ‘void mcl::FpT<tag, maxBitSize>::setArrayMask(const S*, size_t)’:
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp:405:17: error: ‘bint’ has not been declared
  405 |                 bint::maskN(v_, op_.N, op_.bitSize);
      |                 ^~~~
/home/sean/service-node-rewards/test/cpp/external/bls/mcl/include/mcl/fp.hpp:406:21: error: ‘bint’ has not been declared
  406 |                 if (bint::cmpGeN(v_, op_.p, op_.N)) {

Does MCL still support using GMP? Or is there a path forward so it doesnt clash?

herumi commented 7 months ago

mcl does not use GML anymore, so the flag does not work.

herumi commented 7 months ago

But some APIs should be useful with GMP, so I'll try to fix it. Please wait a moment.

herumi commented 6 months ago

Sorry for the late reply. I have been very busy. I've fixed it at the latest version.

darcys22 commented 6 months ago

This is amazing news, appreciate it. Thank you!