Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
L
libzmq
Project
Project
Details
Activity
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
libzmq
Commits
825052f8
Commit
825052f8
authored
Sep 17, 2013
by
Pieter Hintjens
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "makes curve keys symetric as in libcurve + factorisation"
This reverts commit
bfd472f9
.
parent
22eb4d60
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
178 additions
and
168 deletions
+178
-168
zmq.h
include/zmq.h
+8
-13
curve_client.cpp
src/curve_client.cpp
+27
-27
curve_client.hpp
src/curve_client.hpp
+15
-15
curve_server.cpp
src/curve_server.cpp
+27
-27
curve_server.hpp
src/curve_server.hpp
+10
-10
options.cpp
src/options.cpp
+71
-49
options.hpp
src/options.hpp
+3
-7
test_security_curve.cpp
tests/test_security_curve.cpp
+17
-20
No files found.
include/zmq.h
View file @
825052f8
...
@@ -273,19 +273,14 @@ ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval);
...
@@ -273,19 +273,14 @@ ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval);
#define ZMQ_PLAIN_USERNAME 45
#define ZMQ_PLAIN_USERNAME 45
#define ZMQ_PLAIN_PASSWORD 46
#define ZMQ_PLAIN_PASSWORD 46
#define ZMQ_CURVE_SERVER 47
#define ZMQ_CURVE_SERVER 47
#define ZMQ_CURVE_OUR_PERMA_PUB_KEY 48
#define ZMQ_CURVE_PUBLICKEY 48
#define ZMQ_CURVE_OUR_PERMA_SEC_KEY 49
#define ZMQ_CURVE_SECRETKEY 49
#define ZMQ_CURVE_PEER_PERMA_PUB_KEY 50
#define ZMQ_CURVE_SERVERKEY 50
#define ZMQ_CURVE_PEER_PERMA_SEC_KEY 51
#define ZMQ_PROBE_ROUTER 51
#define ZMQ_PROBE_ROUTER 52
#define ZMQ_REQ_REQUEST_IDS 52
#define ZMQ_REQ_REQUEST_IDS 53
#define ZMQ_REQ_STRICT 53
#define ZMQ_REQ_STRICT 54
#define ZMQ_CONFLATE 54
#define ZMQ_CONFLATE 55
#define ZMQ_ZAP_DOMAIN 55
#define ZMQ_ZAP_DOMAIN 56
/* Peer type : server or client */
#define ZMQ_SERVER 1
#define ZMQ_CLIENT 0
/* Message options */
/* Message options */
#define ZMQ_MORE 1
#define ZMQ_MORE 1
...
...
src/curve_client.cpp
View file @
825052f8
...
@@ -37,12 +37,12 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
...
@@ -37,12 +37,12 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
mechanism_t
(
options_
),
mechanism_t
(
options_
),
state
(
send_hello
)
state
(
send_hello
)
{
{
memcpy
(
our_perma_pub_key
,
options_
.
curve_our_perma_pub
_key
,
crypto_box_PUBLICKEYBYTES
);
memcpy
(
public_key
,
options_
.
curve_public
_key
,
crypto_box_PUBLICKEYBYTES
);
memcpy
(
our_perma_sec_key
,
options_
.
curve_our_perma_sec
_key
,
crypto_box_SECRETKEYBYTES
);
memcpy
(
secret_key
,
options_
.
curve_secret
_key
,
crypto_box_SECRETKEYBYTES
);
memcpy
(
peer_perma_pub_key
,
options_
.
curve_peer_perma_pub
_key
,
crypto_box_PUBLICKEYBYTES
);
memcpy
(
server_key
,
options_
.
curve_server
_key
,
crypto_box_PUBLICKEYBYTES
);
// Generate
transient
key pair
// Generate
short-term
key pair
const
int
rc
=
crypto_box_keypair
(
our_trans_pub_key
,
our_trans_sec_key
);
const
int
rc
=
crypto_box_keypair
(
cn_public
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
}
}
...
@@ -111,7 +111,7 @@ int zmq::curve_client_t::encode (msg_t *msg_)
...
@@ -111,7 +111,7 @@ int zmq::curve_client_t::encode (msg_t *msg_)
uint8_t
message_nonce
[
crypto_box_NONCEBYTES
];
uint8_t
message_nonce
[
crypto_box_NONCEBYTES
];
memcpy
(
message_nonce
,
"CurveZMQMESSAGEC"
,
16
);
memcpy
(
message_nonce
,
"CurveZMQMESSAGEC"
,
16
);
memcpy
(
message_nonce
+
16
,
&
nonce
,
8
);
memcpy
(
message_nonce
+
16
,
&
cn_
nonce
,
8
);
const
size_t
mlen
=
crypto_box_ZEROBYTES
+
1
+
msg_
->
size
();
const
size_t
mlen
=
crypto_box_ZEROBYTES
+
1
+
msg_
->
size
();
...
@@ -127,7 +127,7 @@ int zmq::curve_client_t::encode (msg_t *msg_)
...
@@ -127,7 +127,7 @@ int zmq::curve_client_t::encode (msg_t *msg_)
alloc_assert
(
message_box
);
alloc_assert
(
message_box
);
int
rc
=
crypto_box_afternm
(
message_box
,
message_plaintext
,
int
rc
=
crypto_box_afternm
(
message_box
,
message_plaintext
,
mlen
,
message_nonce
,
precomputed
);
mlen
,
message_nonce
,
cn_precom
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
close
();
rc
=
msg_
->
close
();
...
@@ -139,14 +139,14 @@ int zmq::curve_client_t::encode (msg_t *msg_)
...
@@ -139,14 +139,14 @@ int zmq::curve_client_t::encode (msg_t *msg_)
uint8_t
*
message
=
static_cast
<
uint8_t
*>
(
msg_
->
data
());
uint8_t
*
message
=
static_cast
<
uint8_t
*>
(
msg_
->
data
());
memcpy
(
message
,
"
\x07
MESSAGE"
,
8
);
memcpy
(
message
,
"
\x07
MESSAGE"
,
8
);
memcpy
(
message
+
8
,
&
nonce
,
8
);
memcpy
(
message
+
8
,
&
cn_
nonce
,
8
);
memcpy
(
message
+
16
,
message_box
+
crypto_box_BOXZEROBYTES
,
memcpy
(
message
+
16
,
message_box
+
crypto_box_BOXZEROBYTES
,
mlen
-
crypto_box_BOXZEROBYTES
);
mlen
-
crypto_box_BOXZEROBYTES
);
free
(
message_plaintext
);
free
(
message_plaintext
);
free
(
message_box
);
free
(
message_box
);
nonce
++
;
cn_
nonce
++
;
return
0
;
return
0
;
}
}
...
@@ -183,7 +183,7 @@ int zmq::curve_client_t::decode (msg_t *msg_)
...
@@ -183,7 +183,7 @@ int zmq::curve_client_t::decode (msg_t *msg_)
message
+
16
,
msg_
->
size
()
-
16
);
message
+
16
,
msg_
->
size
()
-
16
);
int
rc
=
crypto_box_open_afternm
(
message_plaintext
,
message_box
,
int
rc
=
crypto_box_open_afternm
(
message_plaintext
,
message_box
,
clen
,
message_nonce
,
precomputed
);
clen
,
message_nonce
,
cn_precom
);
if
(
rc
==
0
)
{
if
(
rc
==
0
)
{
rc
=
msg_
->
close
();
rc
=
msg_
->
close
();
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
...
@@ -221,14 +221,14 @@ int zmq::curve_client_t::produce_hello (msg_t *msg_)
...
@@ -221,14 +221,14 @@ int zmq::curve_client_t::produce_hello (msg_t *msg_)
// Prepare the full nonce
// Prepare the full nonce
memcpy
(
hello_nonce
,
"CurveZMQHELLO---"
,
16
);
memcpy
(
hello_nonce
,
"CurveZMQHELLO---"
,
16
);
memcpy
(
hello_nonce
+
16
,
&
nonce
,
8
);
memcpy
(
hello_nonce
+
16
,
&
cn_
nonce
,
8
);
// Create Box [64 * %x0](C'->S)
// Create Box [64 * %x0](C'->S)
memset
(
hello_plaintext
,
0
,
sizeof
hello_plaintext
);
memset
(
hello_plaintext
,
0
,
sizeof
hello_plaintext
);
int
rc
=
crypto_box
(
hello_box
,
hello_plaintext
,
int
rc
=
crypto_box
(
hello_box
,
hello_plaintext
,
sizeof
hello_plaintext
,
sizeof
hello_plaintext
,
hello_nonce
,
peer_perma_pub_key
,
our_trans_sec_key
);
hello_nonce
,
server_key
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
init_size
(
200
);
rc
=
msg_
->
init_size
(
200
);
...
@@ -241,13 +241,13 @@ int zmq::curve_client_t::produce_hello (msg_t *msg_)
...
@@ -241,13 +241,13 @@ int zmq::curve_client_t::produce_hello (msg_t *msg_)
// Anti-amplification padding
// Anti-amplification padding
memset
(
hello
+
8
,
0
,
72
);
memset
(
hello
+
8
,
0
,
72
);
// Client public connection key
// Client public connection key
memcpy
(
hello
+
80
,
our_trans_pub_key
,
crypto_box_PUBLICKEYBYTES
);
memcpy
(
hello
+
80
,
cn_public
,
crypto_box_PUBLICKEYBYTES
);
// Short nonce, prefixed by "CurveZMQHELLO---"
// Short nonce, prefixed by "CurveZMQHELLO---"
memcpy
(
hello
+
112
,
hello_nonce
+
16
,
8
);
memcpy
(
hello
+
112
,
hello_nonce
+
16
,
8
);
// Signature, Box [64 * %x0](C'->S)
// Signature, Box [64 * %x0](C'->S)
memcpy
(
hello
+
120
,
hello_box
+
crypto_box_BOXZEROBYTES
,
80
);
memcpy
(
hello
+
120
,
hello_box
+
crypto_box_BOXZEROBYTES
,
80
);
nonce
++
;
cn_
nonce
++
;
return
0
;
return
0
;
}
}
...
@@ -278,17 +278,17 @@ int zmq::curve_client_t::process_welcome (msg_t *msg_)
...
@@ -278,17 +278,17 @@ int zmq::curve_client_t::process_welcome (msg_t *msg_)
int
rc
=
crypto_box_open
(
welcome_plaintext
,
welcome_box
,
int
rc
=
crypto_box_open
(
welcome_plaintext
,
welcome_box
,
sizeof
welcome_box
,
sizeof
welcome_box
,
welcome_nonce
,
peer_perma_pub_key
,
our_trans_sec_key
);
welcome_nonce
,
server_key
,
cn_secret
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
errno
=
EPROTO
;
errno
=
EPROTO
;
return
-
1
;
return
-
1
;
}
}
memcpy
(
peer_trans_pub_key
,
welcome_plaintext
+
crypto_box_ZEROBYTES
,
32
);
memcpy
(
cn_server
,
welcome_plaintext
+
crypto_box_ZEROBYTES
,
32
);
memcpy
(
cookie
,
welcome_plaintext
+
crypto_box_ZEROBYTES
+
32
,
16
+
80
);
memcpy
(
c
n_c
ookie
,
welcome_plaintext
+
crypto_box_ZEROBYTES
+
32
,
16
+
80
);
// Message independent precomputation
// Message independent precomputation
rc
=
crypto_box_beforenm
(
precomputed
,
peer_trans_pub_key
,
our_trans_sec_key
);
rc
=
crypto_box_beforenm
(
cn_precom
,
cn_server
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
return
0
;
return
0
;
...
@@ -302,14 +302,14 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
...
@@ -302,14 +302,14 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
// Create vouch = Box [C'](C->S)
// Create vouch = Box [C'](C->S)
memset
(
vouch_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memset
(
vouch_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memcpy
(
vouch_plaintext
+
crypto_box_ZEROBYTES
,
our_trans_pub_key
,
32
);
memcpy
(
vouch_plaintext
+
crypto_box_ZEROBYTES
,
cn_public
,
32
);
memcpy
(
vouch_nonce
,
"VOUCH---"
,
8
);
memcpy
(
vouch_nonce
,
"VOUCH---"
,
8
);
randombytes
(
vouch_nonce
+
8
,
16
);
randombytes
(
vouch_nonce
+
8
,
16
);
int
rc
=
crypto_box
(
vouch_box
,
vouch_plaintext
,
int
rc
=
crypto_box
(
vouch_box
,
vouch_plaintext
,
sizeof
vouch_plaintext
,
sizeof
vouch_plaintext
,
vouch_nonce
,
peer_perma_pub_key
,
our_perma_sec
_key
);
vouch_nonce
,
server_key
,
secret
_key
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
uint8_t
initiate_nonce
[
crypto_box_NONCEBYTES
];
uint8_t
initiate_nonce
[
crypto_box_NONCEBYTES
];
...
@@ -318,7 +318,7 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
...
@@ -318,7 +318,7 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
// Create Box [C + vouch + metadata](C'->S')
// Create Box [C + vouch + metadata](C'->S')
memset
(
initiate_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memset
(
initiate_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
,
our_perma_pub
_key
,
32
);
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
,
public
_key
,
32
);
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
+
32
,
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
+
32
,
vouch_nonce
+
8
,
16
);
vouch_nonce
+
8
,
16
);
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
+
48
,
memcpy
(
initiate_plaintext
+
crypto_box_ZEROBYTES
+
48
,
...
@@ -340,10 +340,10 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
...
@@ -340,10 +340,10 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
const
size_t
mlen
=
ptr
-
initiate_plaintext
;
const
size_t
mlen
=
ptr
-
initiate_plaintext
;
memcpy
(
initiate_nonce
,
"CurveZMQINITIATE"
,
16
);
memcpy
(
initiate_nonce
,
"CurveZMQINITIATE"
,
16
);
memcpy
(
initiate_nonce
+
16
,
&
nonce
,
8
);
memcpy
(
initiate_nonce
+
16
,
&
cn_
nonce
,
8
);
rc
=
crypto_box
(
initiate_box
,
initiate_plaintext
,
rc
=
crypto_box
(
initiate_box
,
initiate_plaintext
,
mlen
,
initiate_nonce
,
peer_trans_pub_key
,
our_trans_sec_key
);
mlen
,
initiate_nonce
,
cn_server
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
init_size
(
113
+
mlen
-
crypto_box_BOXZEROBYTES
);
rc
=
msg_
->
init_size
(
113
+
mlen
-
crypto_box_BOXZEROBYTES
);
...
@@ -353,14 +353,14 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
...
@@ -353,14 +353,14 @@ int zmq::curve_client_t::produce_initiate (msg_t *msg_)
memcpy
(
initiate
,
"
\x08
INITIATE"
,
9
);
memcpy
(
initiate
,
"
\x08
INITIATE"
,
9
);
// Cookie provided by the server in the WELCOME command
// Cookie provided by the server in the WELCOME command
memcpy
(
initiate
+
9
,
cookie
,
96
);
memcpy
(
initiate
+
9
,
c
n_c
ookie
,
96
);
// Short nonce, prefixed by "CurveZMQINITIATE"
// Short nonce, prefixed by "CurveZMQINITIATE"
memcpy
(
initiate
+
105
,
&
nonce
,
8
);
memcpy
(
initiate
+
105
,
&
cn_
nonce
,
8
);
// Box [C + vouch + metadata](C'->S')
// Box [C + vouch + metadata](C'->S')
memcpy
(
initiate
+
113
,
initiate_box
+
crypto_box_BOXZEROBYTES
,
memcpy
(
initiate
+
113
,
initiate_box
+
crypto_box_BOXZEROBYTES
,
mlen
-
crypto_box_BOXZEROBYTES
);
mlen
-
crypto_box_BOXZEROBYTES
);
nonce
++
;
cn_
nonce
++
;
return
0
;
return
0
;
}
}
...
@@ -392,7 +392,7 @@ int zmq::curve_client_t::process_ready (msg_t *msg_)
...
@@ -392,7 +392,7 @@ int zmq::curve_client_t::process_ready (msg_t *msg_)
memcpy
(
ready_nonce
+
16
,
ready
+
6
,
8
);
memcpy
(
ready_nonce
+
16
,
ready
+
6
,
8
);
int
rc
=
crypto_box_open_afternm
(
ready_plaintext
,
ready_box
,
int
rc
=
crypto_box_open_afternm
(
ready_plaintext
,
ready_box
,
clen
,
ready_nonce
,
precomputed
);
clen
,
ready_nonce
,
cn_precom
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
errno
=
EPROTO
;
errno
=
EPROTO
;
...
...
src/curve_client.hpp
View file @
825052f8
...
@@ -69,32 +69,32 @@ namespace zmq
...
@@ -69,32 +69,32 @@ namespace zmq
// Current FSM state
// Current FSM state
state_t
state
;
state_t
state
;
// Our p
ermanent p
ublic key (C)
// Our public key (C)
uint8_t
our_perma_pub
_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
public
_key
[
crypto_box_PUBLICKEYBYTES
];
// Our
permanent
secret key (c)
// Our secret key (c)
uint8_t
our_perma_sec
_key
[
crypto_box_SECRETKEYBYTES
];
uint8_t
secret
_key
[
crypto_box_SECRETKEYBYTES
];
// Our
transient
public key (C')
// Our
short-term
public key (C')
uint8_t
our_trans_pub_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
cn_public
[
crypto_box_PUBLICKEYBYTES
];
// Our
transient
secret key (c')
// Our
short-term
secret key (c')
uint8_t
our_trans_sec_key
[
crypto_box_SECRETKEYBYTES
];
uint8_t
cn_secret
[
crypto_box_SECRETKEYBYTES
];
//
Pe
er's public key (S)
//
Serv
er's public key (S)
uint8_t
peer_perma_pub
_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
server
_key
[
crypto_box_PUBLICKEYBYTES
];
// Server's
transient
public key (S')
// Server's
short-term
public key (S')
uint8_t
peer_trans_pub_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
cn_server
[
crypto_box_PUBLICKEYBYTES
];
// Cookie received from server
// Cookie received from server
uint8_t
cookie
[
16
+
80
];
uint8_t
c
n_c
ookie
[
16
+
80
];
// Intermediary buffer used to seepd up boxing and unboxing.
// Intermediary buffer used to seepd up boxing and unboxing.
uint8_t
precomputed
[
crypto_box_BEFORENMBYTES
];
uint8_t
cn_precom
[
crypto_box_BEFORENMBYTES
];
// Nonce
// Nonce
uint64_t
nonce
;
uint64_t
cn_
nonce
;
int
produce_hello
(
msg_t
*
msg_
);
int
produce_hello
(
msg_t
*
msg_
);
int
process_welcome
(
msg_t
*
msg_
);
int
process_welcome
(
msg_t
*
msg_
);
...
...
src/curve_server.cpp
View file @
825052f8
...
@@ -40,13 +40,13 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
...
@@ -40,13 +40,13 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
peer_address
(
peer_address_
),
peer_address
(
peer_address_
),
state
(
expect_hello
),
state
(
expect_hello
),
expecting_zap_reply
(
false
),
expecting_zap_reply
(
false
),
nonce
(
1
)
cn_
nonce
(
1
)
{
{
// Fetch our secret key from socket options
// Fetch our secret key from socket options
memcpy
(
our_perma_sec_key
,
options_
.
curve_our_perma_sec
_key
,
crypto_box_SECRETKEYBYTES
);
memcpy
(
secret_key
,
options_
.
curve_secret
_key
,
crypto_box_SECRETKEYBYTES
);
// Generate
transient
key pair
// Generate
short-term
key pair
const
int
rc
=
crypto_box_keypair
(
our_trans_pub_key
,
our_trans_sec_key
);
const
int
rc
=
crypto_box_keypair
(
cn_public
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
}
}
...
@@ -114,7 +114,7 @@ int zmq::curve_server_t::encode (msg_t *msg_)
...
@@ -114,7 +114,7 @@ int zmq::curve_server_t::encode (msg_t *msg_)
uint8_t
message_nonce
[
crypto_box_NONCEBYTES
];
uint8_t
message_nonce
[
crypto_box_NONCEBYTES
];
memcpy
(
message_nonce
,
"CurveZMQMESSAGES"
,
16
);
memcpy
(
message_nonce
,
"CurveZMQMESSAGES"
,
16
);
memcpy
(
message_nonce
+
16
,
&
nonce
,
8
);
memcpy
(
message_nonce
+
16
,
&
cn_
nonce
,
8
);
uint8_t
flags
=
0
;
uint8_t
flags
=
0
;
if
(
msg_
->
flags
()
&
msg_t
::
more
)
if
(
msg_
->
flags
()
&
msg_t
::
more
)
...
@@ -132,7 +132,7 @@ int zmq::curve_server_t::encode (msg_t *msg_)
...
@@ -132,7 +132,7 @@ int zmq::curve_server_t::encode (msg_t *msg_)
alloc_assert
(
message_box
);
alloc_assert
(
message_box
);
int
rc
=
crypto_box_afternm
(
message_box
,
message_plaintext
,
int
rc
=
crypto_box_afternm
(
message_box
,
message_plaintext
,
mlen
,
message_nonce
,
precomputed
);
mlen
,
message_nonce
,
cn_precom
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
close
();
rc
=
msg_
->
close
();
...
@@ -144,14 +144,14 @@ int zmq::curve_server_t::encode (msg_t *msg_)
...
@@ -144,14 +144,14 @@ int zmq::curve_server_t::encode (msg_t *msg_)
uint8_t
*
message
=
static_cast
<
uint8_t
*>
(
msg_
->
data
());
uint8_t
*
message
=
static_cast
<
uint8_t
*>
(
msg_
->
data
());
memcpy
(
message
,
"
\x07
MESSAGE"
,
8
);
memcpy
(
message
,
"
\x07
MESSAGE"
,
8
);
memcpy
(
message
+
8
,
&
nonce
,
8
);
memcpy
(
message
+
8
,
&
cn_
nonce
,
8
);
memcpy
(
message
+
16
,
message_box
+
crypto_box_BOXZEROBYTES
,
memcpy
(
message
+
16
,
message_box
+
crypto_box_BOXZEROBYTES
,
mlen
-
crypto_box_BOXZEROBYTES
);
mlen
-
crypto_box_BOXZEROBYTES
);
free
(
message_plaintext
);
free
(
message_plaintext
);
free
(
message_box
);
free
(
message_box
);
nonce
++
;
cn_
nonce
++
;
return
0
;
return
0
;
}
}
...
@@ -188,7 +188,7 @@ int zmq::curve_server_t::decode (msg_t *msg_)
...
@@ -188,7 +188,7 @@ int zmq::curve_server_t::decode (msg_t *msg_)
message
+
16
,
msg_
->
size
()
-
16
);
message
+
16
,
msg_
->
size
()
-
16
);
int
rc
=
crypto_box_open_afternm
(
message_plaintext
,
message_box
,
int
rc
=
crypto_box_open_afternm
(
message_plaintext
,
message_box
,
clen
,
message_nonce
,
precomputed
);
clen
,
message_nonce
,
cn_precom
);
if
(
rc
==
0
)
{
if
(
rc
==
0
)
{
rc
=
msg_
->
close
();
rc
=
msg_
->
close
();
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
...
@@ -251,8 +251,8 @@ int zmq::curve_server_t::process_hello (msg_t *msg_)
...
@@ -251,8 +251,8 @@ int zmq::curve_server_t::process_hello (msg_t *msg_)
return
-
1
;
return
-
1
;
}
}
// Save client's
transient
public key (C')
// Save client's
short-term
public key (C')
memcpy
(
peer_trans_pub_key
,
hello
+
80
,
32
);
memcpy
(
cn_client
,
hello
+
80
,
32
);
uint8_t
hello_nonce
[
crypto_box_NONCEBYTES
];
uint8_t
hello_nonce
[
crypto_box_NONCEBYTES
];
uint8_t
hello_plaintext
[
crypto_box_ZEROBYTES
+
64
];
uint8_t
hello_plaintext
[
crypto_box_ZEROBYTES
+
64
];
...
@@ -267,7 +267,7 @@ int zmq::curve_server_t::process_hello (msg_t *msg_)
...
@@ -267,7 +267,7 @@ int zmq::curve_server_t::process_hello (msg_t *msg_)
// Open Box [64 * %x0](C'->S)
// Open Box [64 * %x0](C'->S)
int
rc
=
crypto_box_open
(
hello_plaintext
,
hello_box
,
int
rc
=
crypto_box_open
(
hello_plaintext
,
hello_box
,
sizeof
hello_box
,
sizeof
hello_box
,
hello_nonce
,
peer_trans_pub_key
,
our_perma_sec
_key
);
hello_nonce
,
cn_client
,
secret
_key
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
errno
=
EPROTO
;
errno
=
EPROTO
;
return
-
1
;
return
-
1
;
...
@@ -290,9 +290,9 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
...
@@ -290,9 +290,9 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
// Generate cookie = Box [C' + s'](t)
// Generate cookie = Box [C' + s'](t)
memset
(
cookie_plaintext
,
0
,
crypto_secretbox_ZEROBYTES
);
memset
(
cookie_plaintext
,
0
,
crypto_secretbox_ZEROBYTES
);
memcpy
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
,
memcpy
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
,
peer_trans_pub_key
,
32
);
cn_client
,
32
);
memcpy
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
+
32
,
memcpy
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
+
32
,
our_trans_sec_key
,
32
);
cn_secret
,
32
);
// Generate fresh cookie key
// Generate fresh cookie key
randombytes
(
cookie_key
,
crypto_secretbox_KEYBYTES
);
randombytes
(
cookie_key
,
crypto_secretbox_KEYBYTES
);
...
@@ -314,7 +314,7 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
...
@@ -314,7 +314,7 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
// Create 144-byte Box [S' + cookie](S->C')
// Create 144-byte Box [S' + cookie](S->C')
memset
(
welcome_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memset
(
welcome_plaintext
,
0
,
crypto_box_ZEROBYTES
);
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
,
our_trans_pub_key
,
32
);
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
,
cn_public
,
32
);
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
+
32
,
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
+
32
,
cookie_nonce
+
8
,
16
);
cookie_nonce
+
8
,
16
);
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
+
48
,
memcpy
(
welcome_plaintext
+
crypto_box_ZEROBYTES
+
48
,
...
@@ -322,7 +322,7 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
...
@@ -322,7 +322,7 @@ int zmq::curve_server_t::produce_welcome (msg_t *msg_)
rc
=
crypto_box
(
welcome_ciphertext
,
welcome_plaintext
,
rc
=
crypto_box
(
welcome_ciphertext
,
welcome_plaintext
,
sizeof
welcome_plaintext
,
sizeof
welcome_plaintext
,
welcome_nonce
,
peer_trans_pub_key
,
our_perma_sec
_key
);
welcome_nonce
,
cn_client
,
secret
_key
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
init_size
(
168
);
rc
=
msg_
->
init_size
(
168
);
...
@@ -370,9 +370,9 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
...
@@ -370,9 +370,9 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
// Check cookie plain text is as expected [C' + s']
// Check cookie plain text is as expected [C' + s']
if
(
memcmp
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
,
if
(
memcmp
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
,
peer_trans_pub_key
,
32
)
cn_client
,
32
)
||
memcmp
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
+
32
,
||
memcmp
(
cookie_plaintext
+
crypto_secretbox_ZEROBYTES
+
32
,
our_trans_sec_key
,
32
))
{
cn_secret
,
32
))
{
errno
=
EAGAIN
;
errno
=
EAGAIN
;
return
-
1
;
return
-
1
;
}
}
...
@@ -392,7 +392,7 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
...
@@ -392,7 +392,7 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
memcpy
(
initiate_nonce
+
16
,
initiate
+
105
,
8
);
memcpy
(
initiate_nonce
+
16
,
initiate
+
105
,
8
);
rc
=
crypto_box_open
(
initiate_plaintext
,
initiate_box
,
rc
=
crypto_box_open
(
initiate_plaintext
,
initiate_box
,
clen
,
initiate_nonce
,
peer_trans_pub_key
,
our_trans_sec_key
);
clen
,
initiate_nonce
,
cn_client
,
cn_secret
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
errno
=
EPROTO
;
errno
=
EPROTO
;
return
-
1
;
return
-
1
;
...
@@ -415,20 +415,20 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
...
@@ -415,20 +415,20 @@ int zmq::curve_server_t::process_initiate (msg_t *msg_)
rc
=
crypto_box_open
(
vouch_plaintext
,
vouch_box
,
rc
=
crypto_box_open
(
vouch_plaintext
,
vouch_box
,
sizeof
vouch_box
,
sizeof
vouch_box
,
vouch_nonce
,
client_key
,
our_perma_sec
_key
);
vouch_nonce
,
client_key
,
secret
_key
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
errno
=
EPROTO
;
errno
=
EPROTO
;
return
-
1
;
return
-
1
;
}
}
// What we decrypted must be the client's
transient
public key
// What we decrypted must be the client's
short-term
public key
if
(
memcmp
(
vouch_plaintext
+
crypto_box_ZEROBYTES
,
peer_trans_pub_key
,
32
))
{
if
(
memcmp
(
vouch_plaintext
+
crypto_box_ZEROBYTES
,
cn_client
,
32
))
{
errno
=
EPROTO
;
errno
=
EPROTO
;
return
-
1
;
return
-
1
;
}
}
// Precompute connection secret from client key
// Precompute connection secret from client key
rc
=
crypto_box_beforenm
(
precomputed
,
peer_trans_pub_key
,
our_trans_sec_key
);
rc
=
crypto_box_beforenm
(
cn_precom
,
cn_client
,
cn_secret
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
// Use ZAP protocol (RFC 27) to authenticate the user.
// Use ZAP protocol (RFC 27) to authenticate the user.
...
@@ -471,10 +471,10 @@ int zmq::curve_server_t::produce_ready (msg_t *msg_)
...
@@ -471,10 +471,10 @@ int zmq::curve_server_t::produce_ready (msg_t *msg_)
const
size_t
mlen
=
ptr
-
ready_plaintext
;
const
size_t
mlen
=
ptr
-
ready_plaintext
;
memcpy
(
ready_nonce
,
"CurveZMQREADY---"
,
16
);
memcpy
(
ready_nonce
,
"CurveZMQREADY---"
,
16
);
memcpy
(
ready_nonce
+
16
,
&
nonce
,
8
);
memcpy
(
ready_nonce
+
16
,
&
cn_
nonce
,
8
);
int
rc
=
crypto_box_afternm
(
ready_box
,
ready_plaintext
,
int
rc
=
crypto_box_afternm
(
ready_box
,
ready_plaintext
,
mlen
,
ready_nonce
,
precomputed
);
mlen
,
ready_nonce
,
cn_precom
);
zmq_assert
(
rc
==
0
);
zmq_assert
(
rc
==
0
);
rc
=
msg_
->
init_size
(
14
+
mlen
-
crypto_box_BOXZEROBYTES
);
rc
=
msg_
->
init_size
(
14
+
mlen
-
crypto_box_BOXZEROBYTES
);
...
@@ -484,12 +484,12 @@ int zmq::curve_server_t::produce_ready (msg_t *msg_)
...
@@ -484,12 +484,12 @@ int zmq::curve_server_t::produce_ready (msg_t *msg_)
memcpy
(
ready
,
"
\x05
READY"
,
6
);
memcpy
(
ready
,
"
\x05
READY"
,
6
);
// Short nonce, prefixed by "CurveZMQREADY---"
// Short nonce, prefixed by "CurveZMQREADY---"
memcpy
(
ready
+
6
,
&
nonce
,
8
);
memcpy
(
ready
+
6
,
&
cn_
nonce
,
8
);
// Box [metadata](S'->C')
// Box [metadata](S'->C')
memcpy
(
ready
+
14
,
ready_box
+
crypto_box_BOXZEROBYTES
,
memcpy
(
ready
+
14
,
ready_box
+
crypto_box_BOXZEROBYTES
,
mlen
-
crypto_box_BOXZEROBYTES
);
mlen
-
crypto_box_BOXZEROBYTES
);
nonce
++
;
cn_
nonce
++
;
return
0
;
return
0
;
}
}
...
...
src/curve_server.hpp
View file @
825052f8
...
@@ -83,25 +83,25 @@ namespace zmq
...
@@ -83,25 +83,25 @@ namespace zmq
// True iff we are awaiting reply from ZAP handler.
// True iff we are awaiting reply from ZAP handler.
bool
expecting_zap_reply
;
bool
expecting_zap_reply
;
uint64_t
nonce
;
uint64_t
cn_
nonce
;
// Our
permanent
secret key (s)
// Our secret key (s)
uint8_t
our_perma_sec
_key
[
crypto_box_SECRETKEYBYTES
];
uint8_t
secret
_key
[
crypto_box_SECRETKEYBYTES
];
// Our
transient
public key (S')
// Our
short-term
public key (S')
uint8_t
our_trans_pub_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
cn_public
[
crypto_box_PUBLICKEYBYTES
];
// Our
transient
secret key (s')
// Our
short-term
secret key (s')
uint8_t
our_trans_sec_key
[
crypto_box_SECRETKEYBYTES
];
uint8_t
cn_secret
[
crypto_box_SECRETKEYBYTES
];
// Client's
transient
public key (C')
// Client's
short-term
public key (C')
uint8_t
peer_trans_pub_key
[
crypto_box_PUBLICKEYBYTES
];
uint8_t
cn_client
[
crypto_box_PUBLICKEYBYTES
];
// Key used to produce cookie
// Key used to produce cookie
uint8_t
cookie_key
[
crypto_secretbox_KEYBYTES
];
uint8_t
cookie_key
[
crypto_secretbox_KEYBYTES
];
// Intermediary buffer used to speed up boxing and unboxing.
// Intermediary buffer used to speed up boxing and unboxing.
uint8_t
precomputed
[
crypto_box_BEFORENMBYTES
];
uint8_t
cn_precom
[
crypto_box_BEFORENMBYTES
];
int
process_hello
(
msg_t
*
msg_
);
int
process_hello
(
msg_t
*
msg_
);
int
produce_welcome
(
msg_t
*
msg_
);
int
produce_welcome
(
msg_t
*
msg_
);
...
...
src/options.cpp
View file @
825052f8
...
@@ -57,32 +57,6 @@ zmq::options_t::options_t () :
...
@@ -57,32 +57,6 @@ zmq::options_t::options_t () :
{
{
}
}
int
zmq
::
options_t
::
setcurvekey
(
uint8_t
*
curve_key
,
const
void
*
optval_
,
size_t
optvallen_
)
{
if
(
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
curve_key
,
optval_
,
CURVE_KEYSIZE
);
}
else
if
(
optvallen_
==
CURVE_KEYSIZE_Z85
)
{
zmq_z85_decode
(
curve_key
,
(
char
*
)
optval_
);
}
return
0
;
}
int
zmq
::
options_t
::
getcurvekey
(
uint8_t
*
curve_key
,
void
*
optval_
,
size_t
*
optvallen_
)
{
if
(
*
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
optval_
,
curve_key
,
CURVE_KEYSIZE
);
}
else
if
(
*
optvallen_
==
CURVE_KEYSIZE_Z85
+
1
)
{
zmq_z85_encode
((
char
*
)
optval_
,
curve_key
,
CURVE_KEYSIZE
);
}
return
0
;
}
int
zmq
::
options_t
::
setsockopt
(
int
option_
,
const
void
*
optval_
,
int
zmq
::
options_t
::
setsockopt
(
int
option_
,
const
void
*
optval_
,
size_t
optvallen_
)
size_t
optvallen_
)
{
{
...
@@ -321,27 +295,55 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
...
@@ -321,27 +295,55 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
// If libsodium isn't installed, these options provoke EINVAL
// If libsodium isn't installed, these options provoke EINVAL
# ifdef HAVE_LIBSODIUM
# ifdef HAVE_LIBSODIUM
case
ZMQ_CURVE_SERVER
:
case
ZMQ_CURVE_SERVER
:
if
(
is_int
&&
(
value
==
ZMQ_CLIENT
||
value
==
ZMQ_SERVER
))
{
if
(
is_int
&&
(
value
==
0
||
value
==
1
))
{
as_server
=
value
;
as_server
=
value
;
mechanism
=
ZMQ_CURVE
;
mechanism
=
value
?
ZMQ_CURVE
:
ZMQ_NULL
;
return
0
;
return
0
;
}
}
break
;
break
;
case
ZMQ_CURVE_OUR_PERMA_PUB_KEY
:
case
ZMQ_CURVE_PUBLICKEY
:
return
setcurvekey
(
curve_our_perma_pub_key
,
optval_
,
optvallen_
);
if
(
optvallen_
==
CURVE_KEYSIZE
)
{
break
;
memcpy
(
curve_public_key
,
optval_
,
CURVE_KEYSIZE
);
mechanism
=
ZMQ_CURVE
;
case
ZMQ_CURVE_OUR_PERMA_SEC_KEY
:
return
0
;
return
setcurvekey
(
curve_our_perma_sec_key
,
optval_
,
optvallen_
);
}
else
if
(
optvallen_
==
CURVE_KEYSIZE_Z85
)
{
zmq_z85_decode
(
curve_public_key
,
(
char
*
)
optval_
);
mechanism
=
ZMQ_CURVE
;
return
0
;
}
break
;
break
;
case
ZMQ_CURVE_PEER_PERMA_PUB_KEY
:
case
ZMQ_CURVE_SECRETKEY
:
return
setcurvekey
(
curve_peer_perma_pub_key
,
optval_
,
optvallen_
);
if
(
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
curve_secret_key
,
optval_
,
CURVE_KEYSIZE
);
mechanism
=
ZMQ_CURVE
;
return
0
;
}
else
if
(
optvallen_
==
CURVE_KEYSIZE_Z85
)
{
zmq_z85_decode
(
curve_secret_key
,
(
char
*
)
optval_
);
mechanism
=
ZMQ_CURVE
;
return
0
;
}
break
;
break
;
case
ZMQ_CURVE_PEER_PERMA_SEC_KEY
:
case
ZMQ_CURVE_SERVERKEY
:
return
setcurvekey
(
curve_peer_perma_sec_key
,
optval_
,
optvallen_
);
if
(
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
curve_server_key
,
optval_
,
CURVE_KEYSIZE
);
as_server
=
0
;
mechanism
=
ZMQ_CURVE
;
return
0
;
}
else
if
(
optvallen_
==
CURVE_KEYSIZE_Z85
)
{
zmq_z85_decode
(
curve_server_key
,
(
char
*
)
optval_
);
as_server
=
0
;
mechanism
=
ZMQ_CURVE
;
return
0
;
}
break
;
break
;
# endif
# endif
...
@@ -577,25 +579,45 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)
...
@@ -577,25 +579,45 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)
# ifdef HAVE_LIBSODIUM
# ifdef HAVE_LIBSODIUM
case
ZMQ_CURVE_SERVER
:
case
ZMQ_CURVE_SERVER
:
if
(
is_int
)
{
if
(
is_int
)
{
*
value
=
as_server
;
*
value
=
as_server
&&
mechanism
==
ZMQ_CURVE
;
return
0
;
return
0
;
}
}
break
;
break
;
case
ZMQ_CURVE_OUR_PERMA_PUB_KEY
:
case
ZMQ_CURVE_PUBLICKEY
:
return
getcurvekey
(
curve_our_perma_pub_key
,
optval_
,
optvallen_
);
if
(
*
optvallen_
==
CURVE_KEYSIZE
)
{
break
;
memcpy
(
optval_
,
curve_public_key
,
CURVE_KEYSIZE
);
return
0
;
case
ZMQ_CURVE_OUR_PERMA_SEC_KEY
:
}
return
getcurvekey
(
curve_our_perma_sec_key
,
optval_
,
optvallen_
);
else
if
(
*
optvallen_
==
CURVE_KEYSIZE_Z85
+
1
)
{
zmq_z85_encode
((
char
*
)
optval_
,
curve_public_key
,
CURVE_KEYSIZE
);
return
0
;
}
break
;
break
;
case
ZMQ_CURVE_PEER_PERMA_PUB_KEY
:
case
ZMQ_CURVE_SECRETKEY
:
return
getcurvekey
(
curve_peer_perma_pub_key
,
optval_
,
optvallen_
);
if
(
*
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
optval_
,
curve_secret_key
,
CURVE_KEYSIZE
);
return
0
;
}
else
if
(
*
optvallen_
==
CURVE_KEYSIZE_Z85
+
1
)
{
zmq_z85_encode
((
char
*
)
optval_
,
curve_secret_key
,
CURVE_KEYSIZE
);
return
0
;
}
break
;
break
;
case
ZMQ_CURVE_PEER_PERMA_SEC_KEY
:
case
ZMQ_CURVE_SERVERKEY
:
return
getcurvekey
(
curve_peer_perma_sec_key
,
optval_
,
optvallen_
);
if
(
*
optvallen_
==
CURVE_KEYSIZE
)
{
memcpy
(
optval_
,
curve_server_key
,
CURVE_KEYSIZE
);
return
0
;
}
else
if
(
*
optvallen_
==
CURVE_KEYSIZE_Z85
+
1
)
{
zmq_z85_encode
((
char
*
)
optval_
,
curve_server_key
,
CURVE_KEYSIZE
);
return
0
;
}
break
;
break
;
# endif
# endif
...
...
src/options.hpp
View file @
825052f8
...
@@ -42,9 +42,6 @@ namespace zmq
...
@@ -42,9 +42,6 @@ namespace zmq
int
setsockopt
(
int
option_
,
const
void
*
optval_
,
size_t
optvallen_
);
int
setsockopt
(
int
option_
,
const
void
*
optval_
,
size_t
optvallen_
);
int
getsockopt
(
int
option_
,
void
*
optval_
,
size_t
*
optvallen_
);
int
getsockopt
(
int
option_
,
void
*
optval_
,
size_t
*
optvallen_
);
int
setcurvekey
(
uint8_t
*
curve_key
,
const
void
*
optval_
,
size_t
optvallen_
);
int
getcurvekey
(
uint8_t
*
curve_key
,
void
*
optval_
,
size_t
*
optvallen_
);
// High-water marks for message pipes.
// High-water marks for message pipes.
int
sndhwm
;
int
sndhwm
;
int
rcvhwm
;
int
rcvhwm
;
...
@@ -134,10 +131,9 @@ namespace zmq
...
@@ -134,10 +131,9 @@ namespace zmq
std
::
string
plain_password
;
std
::
string
plain_password
;
// Security credentials for CURVE mechanism
// Security credentials for CURVE mechanism
uint8_t
curve_our_perma_pub_key
[
CURVE_KEYSIZE
];
uint8_t
curve_public_key
[
CURVE_KEYSIZE
];
uint8_t
curve_our_perma_sec_key
[
CURVE_KEYSIZE
];
uint8_t
curve_secret_key
[
CURVE_KEYSIZE
];
uint8_t
curve_peer_perma_pub_key
[
CURVE_KEYSIZE
];
uint8_t
curve_server_key
[
CURVE_KEYSIZE
];
uint8_t
curve_peer_perma_sec_key
[
CURVE_KEYSIZE
];
// normally unused - for test and possible future extensions
// ID of the socket.
// ID of the socket.
int
socket_id
;
int
socket_id
;
...
...
tests/test_security_curve.cpp
View file @
825052f8
...
@@ -102,10 +102,10 @@ int main (void)
...
@@ -102,10 +102,10 @@ int main (void)
// Server socket will accept connections
// Server socket will accept connections
void
*
server
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
void
*
server
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
server
);
assert
(
server
);
int
as_server
=
ZMQ_SERVER
;
int
as_server
=
1
;
rc
=
zmq_setsockopt
(
server
,
ZMQ_CURVE_SERVER
,
&
as_server
,
sizeof
(
int
));
rc
=
zmq_setsockopt
(
server
,
ZMQ_CURVE_SERVER
,
&
as_server
,
sizeof
(
int
));
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
server
,
ZMQ_CURVE_
OUR_PERMA_SEC_
KEY
,
server_secret
,
40
);
rc
=
zmq_setsockopt
(
server
,
ZMQ_CURVE_
SECRET
KEY
,
server_secret
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
server
,
ZMQ_IDENTITY
,
"IDENT"
,
6
);
rc
=
zmq_setsockopt
(
server
,
ZMQ_IDENTITY
,
"IDENT"
,
6
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
@@ -115,14 +115,11 @@ int main (void)
...
@@ -115,14 +115,11 @@ int main (void)
// Check CURVE security with valid credentials
// Check CURVE security with valid credentials
void
*
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
void
*
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
client
);
assert
(
client
);
as_server
=
ZMQ_CLIENT
;
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_SERVERKEY
,
server_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_SERVER
,
&
as_server
,
sizeof
(
int
));
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_P
EER_PERMA_PUB_KEY
,
server
_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_P
UBLICKEY
,
client
_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_OUR_PERMA_PUB_KEY
,
client_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_SECRETKEY
,
client_secret
,
40
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_OUR_PERMA_SEC_KEY
,
client_secret
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
@@ -135,11 +132,11 @@ int main (void)
...
@@ -135,11 +132,11 @@ int main (void)
char
garbage_key
[]
=
"0000111122223333444455556666777788889999"
;
char
garbage_key
[]
=
"0000111122223333444455556666777788889999"
;
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
client
);
assert
(
client
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PEER_PERMA_PUB_
KEY
,
garbage_key
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SERVER
KEY
,
garbage_key
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_PUB_
KEY
,
client_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PUBLIC
KEY
,
client_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_SEC_
KEY
,
client_secret
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SECRET
KEY
,
client_secret
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
@@ -150,11 +147,11 @@ int main (void)
...
@@ -150,11 +147,11 @@ int main (void)
// This will be caught by the curve_server class, not passed to ZAP
// This will be caught by the curve_server class, not passed to ZAP
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
client
);
assert
(
client
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PEER_PERMA_PUB_
KEY
,
server_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SERVER
KEY
,
server_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_PUB_
KEY
,
garbage_key
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PUBLIC
KEY
,
garbage_key
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_SEC_
KEY
,
client_secret
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SECRET
KEY
,
client_secret
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
@@ -165,11 +162,11 @@ int main (void)
...
@@ -165,11 +162,11 @@ int main (void)
// This will be caught by the curve_server class, not passed to ZAP
// This will be caught by the curve_server class, not passed to ZAP
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
client
);
assert
(
client
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PEER_PERMA_PUB_
KEY
,
server_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SERVER
KEY
,
server_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_PUB_
KEY
,
client_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PUBLIC
KEY
,
client_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_SEC_
KEY
,
garbage_key
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SECRET
KEY
,
garbage_key
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
@@ -183,11 +180,11 @@ int main (void)
...
@@ -183,11 +180,11 @@ int main (void)
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
client
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
client
);
assert
(
client
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PEER_PERMA_PUB_
KEY
,
server_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SERVER
KEY
,
server_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_PUB_
KEY
,
bogus_public
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
PUBLIC
KEY
,
bogus_public
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
OUR_PERMA_SEC_
KEY
,
bogus_secret
,
40
);
rc
=
zmq_setsockopt
(
client
,
ZMQ_CURVE_
SECRET
KEY
,
bogus_secret
,
40
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
rc
=
zmq_connect
(
client
,
"tcp://localhost:9998"
);
assert
(
rc
==
0
);
assert
(
rc
==
0
);
...
...
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