[zeromq-dev] CZMQ a requirement for curve and ZeroMQ?

Luca Boccassi luca.boccassi at gmail.com
Fri Mar 24 13:01:13 CET 2017


On Fri, 2017-03-24 at 05:40 -0500, Brian Sellden wrote:
> Hello,
> 
> I've done some looking around on this and am just confused about what
> support there is for curve without using czmq.  Some references say
> that the
> support for reading/writing certs and such in the C++ ZeroMQ core is
> not
> that great so just use CZMQ.
> 
> So perhaps misguided, I attempted to load a secret key from a zcert_t
> and
> stuff it into a zmq::socket_t with setsockopt.  Doing so always
> throws an
> 'invalid argument' exception so I guess I just need some
> guidance.  Here's
> my code:
> 
>  
> 
> zmq::socket_t newSocket(zmq::context_t &context, int socketType,
> 
> const char* endpoint) {
> 
>                 // Create the socket
> 
>                 zmq::socket_t socket(context, socketType);
> 
>  
> 
>                 // Configure as a curve server, Stonehouse.
> 
>                 int server = 1;
> 
>                 socket.setsockopt(ZMQ_CURVE_SERVER, &server,
> sizeof(server));
> 
>                 std::cout << "Configured socket as curve server" <<
> std::endl;
> 
>  
> 
>                 // Read secret key and set on socket.
> 
>                 zcert_t* cert =
> zcert_load("certs/session_logging_daemon.txt_secret");
> 
>                 std::cout << "Loaded keyfile." << std::endl;
> 
>                 // const byte* secret = zcert_secret_key(cert);
> 
>                 const char* secret = zcert_secret_txt(cert);
> 
>                 std::cout << "Retrieved secret key of length " <<
> sizeof(secret)
> 
>                                                 << std::endl;
> 
>                 socket.setsockopt(ZMQ_CURVE_SECRETKEY, secret,
> sizeof(secret));
> 
>                 std::cout << "Added secret key to socket" <<
> std::endl;
> 
>                 zcert_destroy(&cert);
> 
>  
> 
> // Bind the socket
> 
>                 socket.bind(endpoint);
> 
>  
> 
>                 return socket;
> 
> }
> 
>  
> 
> And the output is:
> 
> Configured socket as curve server
> 
> Loaded keyfile.
> 
> Retrieved secret key of length 8
> 
> terminate called after throwing an instance of 'zmq::error_t'
> 
>   what():  Invalid argument
> 
>  
> 
> Thanks -
> 
>  
> 
> Brian.

Hi,

Curve can be used with just libzmq, see a working example in the unit
test:

https://github.com/zeromq/libzmq/blob/master/tests/test_security_curve.cpp

CZMQ will make your life easier with a higher level abstraction and
classes to manage certificates, see examples:

https://github.com/zeromq/czmq/tree/master/examples/security

Kind regards,
Luca Boccassi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20170324/fc85ab8b/attachment.sig>


More information about the zeromq-dev mailing list