Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
sgxwallet
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董子豪
sgxwallet
Commits
7483a230
Unverified
Commit
7483a230
authored
Jan 13, 2021
by
kladko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug/SKALE-3751-enable-zeromq
parent
4b0ff8a5
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
110 additions
and
69 deletions
+110
-69
BLSSignRspMessage.h
BLSSignRspMessage.h
+5
-0
ECDSASignReqMessage.h
ECDSASignReqMessage.h
+1
-0
ECDSASignRspMessage.cpp
ECDSASignRspMessage.cpp
+12
-1
ECDSASignRspMessage.h
ECDSASignRspMessage.h
+3
-0
Makefile.am
Makefile.am
+2
-2
ZMQClient.cpp
ZMQClient.cpp
+79
-1
ZMQClient.h
ZMQClient.h
+7
-65
ZMQMessage.h
ZMQMessage.h
+1
-0
No files found.
BLSSignRspMessage.h
View file @
7483a230
...
...
@@ -28,10 +28,15 @@
class
BLSSignRspMessage
:
public
ZMQMessage
{
public
:
BLSSignRspMessage
(
shared_ptr
<
rapidjson
::
Document
>&
_d
)
:
ZMQMessage
(
_d
)
{};
virtual
Json
::
Value
process
();
string
getSigShare
()
{
return
getStringRapid
(
"sigShare"
);
}
};
...
...
ECDSASignReqMessage.h
View file @
7483a230
...
...
@@ -33,6 +33,7 @@ public:
virtual
Json
::
Value
process
();
};
...
...
ECDSASignRspMessage.cpp
View file @
7483a230
...
...
@@ -30,4 +30,15 @@
Json
::
Value
ECDSASignRspMessage
::
process
()
{
// never called
assert
(
false
);
}
\ No newline at end of file
}
string
ECDSASignRspMessage
::
getSignature
()
{
string
r
=
getStringRapid
(
"signature_r"
);
string
v
=
getStringRapid
(
"signature_v"
);
string
s
=
getStringRapid
(
"signature_s"
);
auto
ret
=
v
+
":"
+
r
.
substr
(
2
)
+
":"
+
s
.
substr
(
2
);
return
ret
;
}
ECDSASignRspMessage.h
View file @
7483a230
...
...
@@ -33,6 +33,9 @@ public:
virtual
Json
::
Value
process
();
string
getSignature
();
};
...
...
Makefile.am
View file @
7483a230
...
...
@@ -70,11 +70,11 @@ bin_PROGRAMS = sgxwallet testw sgx_util
## have to be explicitly listed
COMMON_SRC
=
BLSSignRspMessage.cpp ECDSASignRspMessage.cpp ECDSASignReqMessage.cpp BLSSignReqMessage.cpp ZMQMessage.cpp ZMQServer.cpp ServerWorker.cpp InvalidStateException.cpp Exception.cpp InvalidArgumentException.cpp Log.cpp
\
COMMON_SRC
=
ZMQClient.cpp
BLSSignRspMessage.cpp ECDSASignRspMessage.cpp ECDSASignReqMessage.cpp BLSSignReqMessage.cpp ZMQMessage.cpp ZMQServer.cpp ServerWorker.cpp InvalidStateException.cpp Exception.cpp InvalidArgumentException.cpp Log.cpp
\
SGXWalletServer.cpp SGXRegistrationServer.cpp CSRManagerServer.cpp BLSCrypto.cpp
\
DKGCrypto.cpp ServerInit.cpp BLSPrivateKeyShareSGX.cpp LevelDB.cpp ServerDataChecker.cpp SEKManager.cpp
\
third_party/intel/sgx_stub.c third_party/intel/sgx_detect_linux.c third_party/intel/create_enclave.c third_party/intel/oc_alloc.c
\
ECDSAImpl.c TestUtils.cpp sgxwallet.c SGXInfoServer.cpp ECDSACrypto.cpp
ZMQClient.cpp
ECDSAImpl.c TestUtils.cpp sgxwallet.c SGXInfoServer.cpp ECDSACrypto.cpp
COMMON_ENCLAVE_SRC
=
secure_enclave_u.c secure_enclave_u.h
sgxwallet_SOURCES
=
sgxwall.cpp
$(COMMON_SRC)
...
...
ZMQClient.cpp
View file @
7483a230
...
...
@@ -20,5 +20,83 @@
@author Stan Kladko
@date 2020
*/
#include "common.h"
#include "BLSSignReqMessage.h"
#include "BLSSignRspMessage.h"
#include "ECDSASignReqMessage.h"
#include "ECDSASignRspMessage.h"
#include "ZMQClient.h"
shared_ptr
<
ZMQMessage
>
ZMQClient
::
doRequestReply
(
Json
::
Value
&
_req
)
{
Json
::
FastWriter
fastWriter
;
string
reqStr
=
fastWriter
.
write
(
_req
);
auto
resultStr
=
doZmqRequestReply
(
reqStr
);
return
ZMQMessage
::
parse
(
resultStr
.
c_str
(),
resultStr
.
size
(),
false
);
}
string
ZMQClient
::
doZmqRequestReply
(
string
&
_req
)
{
stringstream
request
;
s_send
(
*
clientSocket
,
_req
);
while
(
true
)
{
// Poll socket for a reply, with timeout
zmq
::
pollitem_t
items
[]
=
{
{
static_cast
<
void
*>
(
*
clientSocket
),
0
,
ZMQ_POLLIN
,
0
}};
zmq
::
poll
(
&
items
[
0
],
1
,
REQUEST_TIMEOUT
);
// If we got a reply, process it
if
(
items
[
0
].
revents
&
ZMQ_POLLIN
)
{
string
reply
=
s_recv
(
*
clientSocket
);
return
reply
;
}
else
{
spdlog
::
error
(
"W: no response from server, retrying..."
);
reconnect
();
// Send request again, on new socket
s_send
(
*
clientSocket
,
_req
);
}
}
}
ZMQClient
::
ZMQClient
(
string
&
ip
,
uint16_t
port
)
:
ctx
(
1
)
{
url
=
"tcp://"
+
ip
+
":"
+
to_string
(
port
);
}
void
ZMQClient
::
reconnect
()
{
clientSocket
=
nullptr
;
// delete previous
clientSocket
=
make_unique
<
zmq
::
socket_t
>
(
ctx
,
ZMQ_REQ
);
clientSocket
->
connect
(
url
);
// Configure socket to not wait at close time
int
linger
=
0
;
clientSocket
->
setsockopt
(
ZMQ_LINGER
,
&
linger
,
sizeof
(
linger
));
}
string
ZMQClient
::
blsSignMessageHash
(
const
std
::
string
&
keyShareName
,
const
std
::
string
&
messageHash
,
int
t
,
int
n
)
{
Json
::
Value
p
;
p
[
"type"
]
=
ZMQMessage
::
BLS_SIGN_REQ
;
p
[
"keyShareName"
]
=
keyShareName
;
p
[
"messageHash"
]
=
messageHash
;
p
[
"n"
]
=
n
;
p
[
"t"
]
=
t
;
auto
result
=
dynamic_pointer_cast
<
BLSSignRspMessage
>
(
doRequestReply
(
p
));
CHECK_STATE
(
result
);
return
result
->
getSigShare
();
}
string
ZMQClient
::
ecdsaSignMessageHash
(
int
base
,
const
std
::
string
&
keyName
,
const
std
::
string
&
messageHash
)
{
Json
::
Value
p
;
p
[
"type"
]
=
ZMQMessage
::
ECDSA_SIGN_REQ
;
p
[
"base"
]
=
base
;
p
[
"keyName"
]
=
keyName
;
p
[
"messageHash"
]
=
messageHash
;
auto
result
=
dynamic_pointer_cast
<
ECDSASignRspMessage
>
(
doRequestReply
(
p
));
CHECK_STATE
(
result
);
return
result
->
getSignature
();
}
\ No newline at end of file
ZMQClient.h
View file @
7483a230
...
...
@@ -46,79 +46,21 @@ private:
std
::
unique_ptr
<
zmq
::
socket_t
>
clientSocket
;
string
url
;
shared_ptr
<
ZMQMessage
>
doRequestReply
(
Json
::
Value
&
_req
)
{
shared_ptr
<
ZMQMessage
>
doRequestReply
(
Json
::
Value
&
_req
)
;
Json
::
FastWriter
fastWriter
;
string
reqStr
=
fastWriter
.
write
(
_req
);
string
doZmqRequestReply
(
string
&
_req
);
auto
resultStr
=
doZmqRequestReply
(
reqStr
);
return
ZMQMessage
::
parse
(
resultStr
.
c_str
(),
resultStr
.
size
(),
false
);
}
string
doZmqRequestReply
(
string
&
_req
)
{
stringstream
request
;
s_send
(
*
clientSocket
,
_req
);
public
:
while
(
true
)
{
// Poll socket for a reply, with timeout
zmq
::
pollitem_t
items
[]
=
{
{
static_cast
<
void
*>
(
*
clientSocket
),
0
,
ZMQ_POLLIN
,
0
}};
zmq
::
poll
(
&
items
[
0
],
1
,
REQUEST_TIMEOUT
);
// If we got a reply, process it
if
(
items
[
0
].
revents
&
ZMQ_POLLIN
)
{
string
reply
=
s_recv
(
*
clientSocket
);
return
reply
;
}
else
{
spdlog
::
error
(
"W: no response from server, retrying..."
);
reconnect
();
// Send request again, on new socket
s_send
(
*
clientSocket
,
_req
);
}
}
}
ZMQClient
(
string
&
ip
,
uint16_t
port
);
public
:
void
reconnect
()
;
string
blsSignMessageHash
(
const
std
::
string
&
keyShareName
,
const
std
::
string
&
messageHash
,
int
t
,
int
n
);
ZMQClient
(
string
&
ip
,
uint16_t
port
)
:
ctx
(
1
)
{
url
=
"tcp://"
+
ip
+
":"
+
to_string
(
port
);
}
void
reconnect
()
{
clientSocket
=
nullptr
;
// delete previous
clientSocket
=
make_unique
<
zmq
::
socket_t
>
(
ctx
,
ZMQ_REQ
);
clientSocket
->
connect
(
url
);
// Configure socket to not wait at close time
int
linger
=
0
;
clientSocket
->
setsockopt
(
ZMQ_LINGER
,
&
linger
,
sizeof
(
linger
));
}
string
blsSignMessageHash
(
const
std
::
string
&
keyShareName
,
const
std
::
string
&
messageHash
,
int
t
,
int
n
)
{
Json
::
Value
p
;
p
[
"type"
]
=
ZMQMessage
::
BLS_SIGN_REQ
;
p
[
"keyShareName"
]
=
keyShareName
;
p
[
"messageHash"
]
=
messageHash
;
p
[
"n"
]
=
n
;
p
[
"t"
]
=
t
;
auto
result
=
doRequestReply
(
p
);
return
""
;
}
string
ecdsaSignMessageHash
(
int
base
,
const
std
::
string
&
keyName
,
const
std
::
string
&
messageHash
)
{
Json
::
Value
p
;
p
[
"type"
]
=
ZMQMessage
::
ECDSA_SIGN_REQ
;
p
[
"base"
]
=
base
;
p
[
"keyName"
]
=
keyName
;
p
[
"messageHash"
]
=
messageHash
;
auto
result
=
doRequestReply
(
p
);
return
""
;
}
string
ecdsaSignMessageHash
(
int
base
,
const
std
::
string
&
keyName
,
const
std
::
string
&
messageHash
);
};
...
...
ZMQMessage.h
View file @
7483a230
...
...
@@ -64,4 +64,5 @@ public:
virtual
Json
::
Value
process
()
=
0
;
};
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment