Unverified Commit 7d7b42ff authored by Oleh Nikolaiev's avatar Oleh Nikolaiev Committed by GitHub

Merge branch 'develop' into enhancement/SKALE-2844-update-docs

parents e3dd12bf 7509141e
...@@ -351,7 +351,6 @@ string decryptDHKey(const string &polyName, int ind) { ...@@ -351,7 +351,6 @@ string decryptDHKey(const string &polyName, int ind) {
vector<string> mult_G2(const string &x) { vector<string> mult_G2(const string &x) {
vector<string> result(4); vector<string> result(4);
libff::init_alt_bn128_params();
libff::alt_bn128_Fr el(x.c_str()); libff::alt_bn128_Fr el(x.c_str());
libff::alt_bn128_G2 elG2 = el * libff::alt_bn128_G2::one(); libff::alt_bn128_G2 elG2 = el * libff::alt_bn128_G2::one();
elG2.to_affine_coordinates(); elG2.to_affine_coordinates();
......
...@@ -37,5 +37,5 @@ RUN apt update && \ ...@@ -37,5 +37,5 @@ RUN apt update && \
cd .. && rm -rf dynamic-application-loader-host-interface-072d233296c15d0dcd1fb4570694d0244729f87b && \ cd .. && rm -rf dynamic-application-loader-host-interface-072d233296c15d0dcd1fb4570694d0244729f87b && \
cd /usr/src/sdk && \ cd /usr/src/sdk && \
./autoconf.bash && \ ./autoconf.bash && \
./configure && \ ./configure && \
bash -c "make -j$(nproc)" bash -c "make -j$(nproc)"
...@@ -27,6 +27,14 @@ The sgxwallet server is still in active development and therefore should be rega ...@@ -27,6 +27,14 @@ The sgxwallet server is still in active development and therefore should be rega
## Running sgxwallet ## Running sgxwallet
### Clone this repo
As you probably suspect, the first thing to do is to clone this repository and all it is sub-repositories.
```bash
git clone https://github.com/skalenetwork/sgxwallet.git --recurse-submodules
```
### Try in simulation mode ### Try in simulation mode
The easiest way to try the sgxwallet server is to run a docker container in insecure simulation mode that emulates an SGX processor. Once you are familiar with the server, you can enable sgx on your machine and run it in secure production mode. The easiest way to try the sgxwallet server is to run a docker container in insecure simulation mode that emulates an SGX processor. Once you are familiar with the server, you can enable sgx on your machine and run it in secure production mode.
...@@ -55,12 +63,12 @@ Never run a production sgxserver in simulation mode. ...@@ -55,12 +63,12 @@ Never run a production sgxserver in simulation mode.
If you are a SKALE validator and want to run sgxwallet for testnet or mainnet usage, you need If you are a SKALE validator and want to run sgxwallet for testnet or mainnet usage, you need
a SGX-capable server. a SGX-capable server.
Please refer to Admin guide for details on how to setup sgxwallet in a secure hardware mode Please refer to Admin guide for details on how to setup sgxwallet in a secure hardware mode
[docs/admin_guide.md](docs/admin_guide.md). [docs/admin-guide.md](docs/admin-guide.md).
## Developer guide ## Developer guide
If you are a SKALE developer and want to build sgxwallet from source, please refer to Developer If you are a SKALE developer and want to build sgxwallet from source, please refer to Developer
guide [docs/developer_guide.md](docs/developer_guide.md). guide [docs/developer-guide.md](docs/developer-guide.md).
## Contributing ## Contributing
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include "libff/algebra/curves/alt_bn128/alt_bn128_init.hpp" #include "libff/algebra/curves/alt_bn128/alt_bn128_init.hpp"
#include <libff/common/profiling.hpp>
#include "bls.h" #include "bls.h"
#include "leveldb/db.h" #include "leveldb/db.h"
#include <jsonrpccpp/server/connectors/httpserver.h> #include <jsonrpccpp/server/connectors/httpserver.h>
...@@ -56,7 +57,12 @@ ...@@ -56,7 +57,12 @@
#include "SGXWalletServer.hpp" #include "SGXWalletServer.hpp"
void initUserSpace() { void initUserSpace() {
libff::inhibit_profiling_counters = true;
libff::inhibit_profiling_info = true;
libff::init_alt_bn128_params(); libff::init_alt_bn128_params();
LevelDB::initDataFolderAndDBs(); LevelDB::initDataFolderAndDBs();
} }
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
## Build from source code ## Build from source code
- [Install prerequisites](prerequisites.md) - [Install prerequisites](prerequisites.md)
- [Enable SGX](enabling-sgx.md) - [Enable SGX mode on your machine](enabling-sgx.md)
- [Build SGX](building.md) - [Build sgxwallet ](building.md)
- [Example Usage](examples.md) - [Sgxwallet example usage](examples.md)
- [Contributing source code](../.github/CONTRIBUTING.md) - [Contributing source code](../.github/CONTRIBUTING.md)
- [Security Bug Reporting](../SECURITY.md) - [Security bug reporting](../SECURITY.md)
## Community ## Community
- [SKALE Discord](http://skale.chat) - [SKALE discord](http://skale.chat)
...@@ -101,7 +101,7 @@ void enclave_init() { ...@@ -101,7 +101,7 @@ void enclave_init() {
bool enclave_sign(const char *_keyString, const char *_hashXString, const char *_hashYString, bool enclave_sign(const char *_keyString, const char *_hashXString, const char *_hashYString,
char* sig) { char* sig) {
libff::init_alt_bn128_params();
auto key = keyFromString(_keyString); auto key = keyFromString(_keyString);
...@@ -217,20 +217,20 @@ void logMsg(log_level _level, const char* _msg) { ...@@ -217,20 +217,20 @@ void logMsg(log_level _level, const char* _msg) {
} }
EXTERNC void LOG_INFO(char* _msg) { EXTERNC void LOG_INFO(const char* _msg) {
logMsg(L_INFO, _msg); logMsg(L_INFO, _msg);
}; };
EXTERNC void LOG_WARN(char* _msg) { EXTERNC void LOG_WARN(const char* _msg) {
logMsg(L_WARNING, _msg); logMsg(L_WARNING, _msg);
}; };
EXTERNC void LOG_ERROR(char* _msg) { EXTERNC void LOG_ERROR(const char* _msg) {
logMsg(L_ERROR, _msg); logMsg(L_ERROR, _msg);
}; };
EXTERNC void LOG_DEBUG(char* _msg) { EXTERNC void LOG_DEBUG(const char* _msg) {
logMsg(L_DEBUG, _msg); logMsg(L_DEBUG, _msg);
}; };
EXTERNC void LOG_TRACE(char* _msg) { EXTERNC void LOG_TRACE(const char* _msg) {
logMsg(L_TRACE, _msg); logMsg(L_TRACE, _msg);
}; };
...@@ -43,12 +43,19 @@ EXTERNC bool hex2carray2(const char * _hex, uint64_t *_bin_len, ...@@ -43,12 +43,19 @@ EXTERNC bool hex2carray2(const char * _hex, uint64_t *_bin_len,
uint8_t* _bin, const int _max_length ); uint8_t* _bin, const int _max_length );
EXTERNC void enclave_init(); EXTERNC void enclave_init();
EXTERNC void LOG_INFO(char* msg);
EXTERNC void LOG_WARN(char* _msg);
EXTERNC void LOG_ERROR(char* _msg); void get_global_random(unsigned char* _randBuff, uint64_t size);
EXTERNC void LOG_DEBUG(char* _msg);
EXTERNC void LOG_TRACE(char* _msg); EXTERNC void LOG_INFO(const char* msg);
EXTERNC void LOG_WARN(const char* _msg);
EXTERNC void LOG_ERROR(const char* _msg);
EXTERNC void LOG_DEBUG(const char* _msg);
EXTERNC void LOG_TRACE(const char* _msg);
extern uint32_t globalLogLevel_; extern uint32_t globalLogLevel_;
extern unsigned char* globalRandom;
#endif //SGXWALLET_ENCLAVECOMMON_H #endif //SGXWALLET_ENCLAVECOMMON_H
...@@ -92,86 +92,111 @@ void signature_extract_public_key(point public_key, mpz_t private_key, domain_pa ...@@ -92,86 +92,111 @@ void signature_extract_public_key(point public_key, mpz_t private_key, domain_pa
void signature_sign(signature sig, mpz_t message, mpz_t private_key, domain_parameters curve) { void signature_sign(signature sig, mpz_t message, mpz_t private_key, domain_parameters curve) {
//message must not have a bit length longer than that of n //message must not have a bit length longer than that of n
//see: Guide to Elliptic Curve Cryptography, section 4.4.1. //see: Guide to Elliptic Curve Cryptography, section 4.4.1.
assert(mpz_sizeinbase(message, 2) <= mpz_sizeinbase(curve->n, 2));
point Q = point_init(); for (int i = 0; i < 1; i++ ) {
//Initializing variables assert(mpz_sizeinbase(message, 2) <= mpz_sizeinbase(curve->n, 2));
mpz_t k, x, r, t1, t2, t3, t4, t5, s, n_div_2, rem, neg, seed;
mpz_init(k); mpz_init(x); mpz_init(r); mpz_init(t1); mpz_init(t2); mpz_init(t3); mpz_init(s);
mpz_init(t4); mpz_init(t5); mpz_init(n_div_2); mpz_init(rem); mpz_init(neg); mpz_init(seed);
unsigned char *rand_char = (unsigned char *) calloc(32,1); point Q = point_init();
sgx_read_rand(rand_char, 32); //Initializing variables
mpz_t k, x, r, t1, t2, t3, t4, t5, s, n_div_2, rem, neg, seed;
mpz_init(k);
mpz_init(x);
mpz_init(r);
mpz_init(t1);
mpz_init(t2);
mpz_init(t3);
mpz_init(s);
mpz_init(t4);
mpz_init(t5);
mpz_init(n_div_2);
mpz_init(rem);
mpz_init(neg);
mpz_init(seed);
gmp_randstate_t r_state; unsigned char *rand_char = (unsigned char *) calloc(32, 1);
signature_sign_start: get_global_random(rand_char, 32);
//Set k gmp_randstate_t r_state;
sgx_read_rand(rand_char, 32);
;
mpz_import(seed, 32, 1, sizeof(rand_char[0]), 0, 0, rand_char);
mpz_mod(k, seed, curve->p); signature_sign_start:
//mpz_set_str(k, "49a0d7b786ec9cde0d0721d72804befd06571c974b191efb42ecf322ba9ddd9a", 16);
// mpz_set_str(k, "DC87789C4C1A09C97FF4DE72C0D0351F261F10A2B9009C80AEE70DDEC77201A0", 16);
//mpz_set_str(k,"29932781130098090011281004827843485745127563886526054275935615017309884975795",10);
//Calculate x get_global_random(rand_char, 32);
point_multiplication(Q, k, curve->G, curve);
mpz_set(x, Q->x);
//Calculate r mpz_import(seed, 32, 1, sizeof(rand_char[0]), 0, 0, rand_char);
mpz_mod(r, x, curve->n);
if (!mpz_sgn(r)) //Start over if r=0, note haven't been tested memory might die :)
goto signature_sign_start;
mpz_mod(k, seed, curve->p);
//Calculate s //mpz_set_str(k, "49a0d7b786ec9cde0d0721d72804befd06571c974b191efb42ecf322ba9ddd9a", 16);
//s = k¯¹(e+d*r) mod n = (k¯¹ mod n) * ((e+d*r) mod n) mod n // mpz_set_str(k, "DC87789C4C1A09C97FF4DE72C0D0351F261F10A2B9009C80AEE70DDEC77201A0", 16);
//number_theory_inverse(t1, k, curve->n);//t1 = k¯¹ mod n //mpz_set_str(k,"29932781130098090011281004827843485745127563886526054275935615017309884975795",10);
mpz_invert(t1, k, curve->n);
mpz_mul(t2, private_key, r); //t2 = d*r
mpz_add(t3, message, t2); //t3 = e+t2
mpz_mod(t4, t3, curve->n); //t2 = t3 mod n
mpz_mul(t5, t4, t1); //t3 = t2 * t1
mpz_mod(s, t5, curve->n); //s = t3 mod n
//Calculate v //Calculate x
point_multiplication(Q, k, curve->G, curve);
mpz_set(x, Q->x);
mpz_mod_ui(rem, Q->y, 2); //Calculate r
mpz_t s_mul_2; mpz_mod(r, x, curve->n);
mpz_init(s_mul_2); if (!mpz_sgn(r)) //Start over if r=0, note haven't been tested memory might die :)
mpz_mul_ui(s_mul_2, s, 2); goto signature_sign_start;
unsigned b = 0;
if (mpz_cmp(s_mul_2, curve->n) > 0) {
b = 1;
}
sig->v = mpz_get_ui(rem) ^ b;
mpz_cdiv_q_ui(n_div_2, curve->n, 2); //Calculate s
//s = k¯¹(e+d*r) mod n = (k¯¹ mod n) * ((e+d*r) mod n) mod n
//number_theory_inverse(t1, k, curve->n);//t1 = k¯¹ mod n
mpz_invert(t1, k, curve->n);
mpz_mul(t2, private_key, r); //t2 = d*r
mpz_add(t3, message, t2); //t3 = e+t2
mpz_mod(t4, t3, curve->n); //t2 = t3 mod n
mpz_mul(t5, t4, t1); //t3 = t2 * t1
mpz_mod(s, t5, curve->n); //s = t3 mod n
if (mpz_cmp(s, n_div_2) > 0) { //Calculate v
mpz_sub(neg, curve->n, s);
mpz_set(s, neg);
}
//Set signature mpz_mod_ui(rem, Q->y, 2);
mpz_set(sig->r, r); mpz_t s_mul_2;
mpz_set(sig->s, s); mpz_init(s_mul_2);
mpz_mul_ui(s_mul_2, s, 2);
clean: unsigned b = 0;
if (mpz_cmp(s_mul_2, curve->n) > 0) {
b = 1;
}
sig->v = mpz_get_ui(rem) ^ b;
mpz_cdiv_q_ui(n_div_2, curve->n, 2);
if (mpz_cmp(s, n_div_2) > 0) {
mpz_sub(neg, curve->n, s);
mpz_set(s, neg);
}
free(rand_char); //Set signature
point_clear(Q); mpz_set(sig->r, r);
mpz_set(sig->s, s);
mpz_clear(k); mpz_clear(r); mpz_clear(s); mpz_clear(x); mpz_clear(rem); mpz_clear(neg); clean:
mpz_clear(t1); mpz_clear(t2); mpz_clear(t3); mpz_clear(seed); mpz_clear(n_div_2);
mpz_clear(s_mul_2); free(rand_char);
point_clear(Q);
mpz_clear(k);
mpz_clear(r);
mpz_clear(s);
mpz_clear(x);
mpz_clear(rem);
mpz_clear(neg);
mpz_clear(t1);
mpz_clear(t2);
mpz_clear(t3);
mpz_clear(seed);
mpz_clear(n_div_2);
mpz_clear(s_mul_2);
}
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -71,7 +71,7 @@ public: ...@@ -71,7 +71,7 @@ public:
TestFixture() { TestFixture() {
TestUtils::resetDB(); TestUtils::resetDB();
setOptions(false, false, false, true); setOptions(false, false, false, true);
initAll(0, false, true); initAll(2, false, true);
} }
~TestFixture() { ~TestFixture() {
...@@ -111,9 +111,15 @@ TEST_CASE_METHOD(TestFixture, "ECDSA keygen and signature test", "[ecdsa-key-sig ...@@ -111,9 +111,15 @@ TEST_CASE_METHOD(TestFixture, "ECDSA keygen and signature test", "[ecdsa-key-sig
vector<char> signatureS(BUF_LEN, 0); vector<char> signatureS(BUF_LEN, 0);
uint8_t signatureV = 0; uint8_t signatureV = 0;
status = trustedEcdsaSign(eid, &errStatus, errMsg.data(), encrPrivKey.data(), encLen, (unsigned char *) hex.data(),
signatureR.data(),
signatureS.data(), &signatureV, 16);
status = trustedEcdsaSign(eid, &errStatus, errMsg.data(), encrPrivKey.data(), encLen,
(unsigned char *) hex.data(),
signatureR.data(),
signatureS.data(), &signatureV, 16);
REQUIRE(status == SGX_SUCCESS); REQUIRE(status == SGX_SUCCESS);
REQUIRE(errStatus == SGX_SUCCESS); REQUIRE(errStatus == SGX_SUCCESS);
} }
...@@ -138,10 +144,13 @@ TEST_CASE_METHOD(TestFixture, "ECDSA AES keygen and signature test", "[ecdsa-aes ...@@ -138,10 +144,13 @@ TEST_CASE_METHOD(TestFixture, "ECDSA AES keygen and signature test", "[ecdsa-aes
vector<char> signatureS(BUF_LEN, 0); vector<char> signatureS(BUF_LEN, 0);
uint8_t signatureV = 0; uint8_t signatureV = 0;
status = trustedEcdsaSignAES(eid, &errStatus, errMsg.data(), encrPrivKey.data(), encLen,
(unsigned char *) hex.data(), for (int i=0; i < 50; i++) {
signatureR.data(), status = trustedEcdsaSignAES(eid, &errStatus, errMsg.data(), encrPrivKey.data(), encLen,
signatureS.data(), &signatureV, 16); (unsigned char *) hex.data(),
signatureR.data(),
signatureS.data(), &signatureV, 16);
}
REQUIRE(status == SGX_SUCCESS); REQUIRE(status == SGX_SUCCESS);
REQUIRE(errStatus == SGX_SUCCESS); REQUIRE(errStatus == SGX_SUCCESS);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment