diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2018-05-28 04:47:11 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2018-05-28 04:47:11 +0800 |
commit | b3c2b12093c9f04970f4acfb0dd825af4e0638ba (patch) | |
tree | d70ffe2af78c66b5f813c31c1434b2e15b141c3d | |
parent | 76c73cb0da746fd2026117394b6570b6bb3f09be (diff) | |
download | dexon-mcl-b3c2b12093c9f04970f4acfb0dd825af4e0638ba.tar.gz dexon-mcl-b3c2b12093c9f04970f4acfb0dd825af4e0638ba.tar.zst dexon-mcl-b3c2b12093c9f04970f4acfb0dd825af4e0638ba.zip |
remove throw in ecdsa-wasm
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | include/mcl/ecdsa.hpp | 16 | ||||
-rw-r--r-- | include/mcl/ecparam.hpp | 2 | ||||
-rw-r--r-- | include/mcl/window_method.hpp | 6 | ||||
-rw-r--r-- | src/ecdsa_c.cpp | 5 |
5 files changed, 27 insertions, 4 deletions
@@ -267,7 +267,7 @@ endif emcc -o $@ src/fp.cpp src/bn_c512.cpp $(EMCC_OPT) -DMCL_MAX_BIT_SIZE=512 -DMCL_USE_WEB_CRYPTO_API -s DISABLE_EXCEPTION_CATCHING=1 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -fno-exceptions ../ecdsa-wasm/ecdsa_c.js: src/ecdsa_c.cpp src/fp.cpp include/mcl/ecdsa.hpp include/mcl/ecdsa.h Makefile - emcc -o $@ src/fp.cpp src/ecdsa_c.cpp $(EMCC_OPT) -DMCL_MAX_BIT_SIZE=256 -DMCL_USE_WEB_CRYPTO_API -s DISABLE_EXCEPTION_CATCHING=1 + emcc -o $@ src/fp.cpp src/ecdsa_c.cpp $(EMCC_OPT) -DMCL_MAX_BIT_SIZE=256 -DMCL_USE_WEB_CRYPTO_API -s DISABLE_EXCEPTION_CATCHING=1 -DCYBOZU_DONT_USE_EXCEPTION -DCYBOZU_DONT_USE_STRING -fno-exceptions mcl-wasm: $(MAKE) ../mcl-wasm/mcl_c.js diff --git a/include/mcl/ecdsa.hpp b/include/mcl/ecdsa.hpp index f4ee5c4..d39d3f9 100644 --- a/include/mcl/ecdsa.hpp +++ b/include/mcl/ecdsa.hpp @@ -91,16 +91,24 @@ inline void init(bool *pb) Ec::setIoMode(mcl::IoEcAffine); local::Param& p = local::getParam(); p.ecParam = ecParam; - p.P.set(Fp(ecParam.gx), Fp(ecParam.gy)); + Fp x, y; + x.setStr(pb, ecParam.gx); + if (!*pb) return; + y.setStr(pb, ecParam.gy); + if (!*pb) return; + p.P.set(pb, x, y); + if (!*pb) return; p.Pbase.init(pb, p.P, ecParam.bitSize, local::winSize); } +#ifndef CYBOZU_DONT_USE_EXCEPTION inline void init() { bool b; init(&b); if (!b) throw cybozu::Exception("ecdsa:init"); } +#endif typedef Zn SecretKey; typedef Ec PublicKey; @@ -111,12 +119,14 @@ struct PrecomputedPublicKey { { pubBase_.init(pb, pub, param.ecParam.bitSize, local::winSize); } +#ifndef CYBOZU_DONT_USE_EXCEPTION void init(const PublicKey& pub) { bool b; init(&b, pub); if (!b) throw cybozu::Exception("ecdsa:PrecomputedPublicKey:init"); } +#endif }; inline void getPublicKey(PublicKey& pub, const SecretKey& sec) @@ -144,6 +154,7 @@ struct Signature : public mcl::fp::Serializable<Signature> { } s.save(pb, os, ioMode); } +#ifndef CYBOZU_DONT_USE_EXCEPTION template<class InputStream> void load(InputStream& is, int ioMode = IoSerialize) { @@ -158,6 +169,8 @@ struct Signature : public mcl::fp::Serializable<Signature> { save(&b, os, ioMode); if (!b) throw cybozu::Exception("ecdsa:Signature:save"); } +#endif +#ifndef CYBOZU_DONT_USE_STRING friend std::istream& operator>>(std::istream& is, Signature& self) { self.load(is, fp::detectIoMode(Ec::getIoMode(), is)); @@ -168,6 +181,7 @@ struct Signature : public mcl::fp::Serializable<Signature> { self.save(os, fp::detectIoMode(Ec::getIoMode(), os)); return os; } +#endif }; inline void sign(Signature& sig, const SecretKey& sec, const void *msg, size_t msgSize) diff --git a/include/mcl/ecparam.hpp b/include/mcl/ecparam.hpp index 8c17025..19b76bf 100644 --- a/include/mcl/ecparam.hpp +++ b/include/mcl/ecparam.hpp @@ -136,6 +136,7 @@ const struct mcl::EcParam NIST_P521 = { } // mcl::ecparam +#ifndef CYBOZU_DONT_USE_STRING static inline const mcl::EcParam* getEcParam(const std::string& name) { static const mcl::EcParam *tbl[] = { @@ -158,5 +159,6 @@ static inline const mcl::EcParam* getEcParam(const std::string& name) } throw cybozu::Exception("mcl::getEcParam:not support name") << name; } +#endif } // mcl diff --git a/include/mcl/window_method.hpp b/include/mcl/window_method.hpp index b2c3228..cb4fad3 100644 --- a/include/mcl/window_method.hpp +++ b/include/mcl/window_method.hpp @@ -109,12 +109,14 @@ public: } } } +#ifndef CYBOZU_DONT_USE_EXCEPTION void init(const Ec& x, size_t bitSize, size_t winSize) { bool b; init(&b, x, bitSize, winSize); if (!b) throw cybozu::Exception("mcl:WindowMethod:init") << bitSize << winSize; } +#endif /* @param z [out] x multiplied by y @param y [in] exponent @@ -129,10 +131,10 @@ public: void mul(Ec& z, int64_t y) const { #if MCL_SIZEOF_UNIT == 8 - Unit u = std::abs(y); + Unit u = fp::abs_(y); powArray(z, &u, 1, y < 0); #else - uint64_t ua = std::abs(y); + uint64_t ua = fp::abs_(y); Unit u[2] = { uint32_t(ua), uint32_t(ua >> 32) }; size_t un = u[1] ? 2 : 1; powArray(z, u, un, y < 0); diff --git a/src/ecdsa_c.cpp b/src/ecdsa_c.cpp index 3b1d53c..f2222a2 100644 --- a/src/ecdsa_c.cpp +++ b/src/ecdsa_c.cpp @@ -1,6 +1,7 @@ #define ECDSA_DLL_EXPORT #include <mcl/ecdsa.h> #include <mcl/ecdsa.hpp> +#include <new> using namespace mcl::ecdsa; @@ -18,6 +19,10 @@ static const PrecomputedPublicKey *cast(const ecdsaPrecomputedPublicKey *p) { re #ifdef __EMSCRIPTEN__ // use these functions forcibly +extern "C" ECDSA_DLL_API void *ecdsaMalloc(size_t n) +{ + return malloc(n); +} extern "C" ECDSA_DLL_API void ecdsaFree(void *p) { free(p); |