zyre 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b5427b9f8cbdcbec3727b0a998a82b60b70cf7a82e36f6e3a0a86e6d9aba74a
4
- data.tar.gz: 898dcb7df592fc24617fedc60d8f54b9f22f421ae04459215ee3c48adc581ff0
3
+ metadata.gz: e5ed839568df209af8c75bddfe0be453af7219319c31848556261888e3b6ee39
4
+ data.tar.gz: 778239dec2e83ac60efbccdccffa55916ff6365f82a6bc9869a796b6e0484223
5
5
  SHA512:
6
- metadata.gz: 774f4c450b24db21b8db0d52bde9334b80edf4d196b51e5f3be468b20cba83469418862b0ad862c617d2366b39cbe003d2e6e5d518c59c8b6f09ccbf2e8253da
7
- data.tar.gz: f53e49334e7b4a5dd308080addafc65a6d3dd222463651b8c038ddd2de12cf6ba2b30a3d959649ab001e44d41fbf2d41c9ac969800fdbe10d25238cfa653e24d
6
+ metadata.gz: 6bbf929517d6375ed0f27b7eac8b413a200fda2af90d0493e2d246a4e232862bcd97cb00961b7118ff617bc00c278b92af2ffeba978756d64fb56d6171a2342f
7
+ data.tar.gz: 7613fd948161ec855ab2042401304e381866b7eef9aeaf166898912e24c9fa0ede81c91a35f54075f269855322219880e972d3a712b498935786e66b48c17860
checksums.yaml.gz.sig CHANGED
Binary file
data/Authentication.md CHANGED
@@ -1,30 +1,30 @@
1
1
  # Authenticated \Zyre
2
2
 
3
- Note that authentication requires API that is still in Draft, so it requires
4
- that your libzyre be built with --enable-drafts. Also, since draft APIs are
5
- subject to change, this documentation may be out of date. A good place to check
6
- for the latest info is the built-in test suites in the Zyre source itself.
3
+ Note that authentication requires a Draft API, so it requires that your libzyre
4
+ be built with `--enable-drafts`. Also, since draft APIs are subject to change,
5
+ this documentation may be out of date. A good place to check for the latest
6
+ info is the built-in test suites in the Zyre source itself.
7
7
 
8
- Authentication isn't done yet, but when it is it'll look something like:
8
+ Authentication in Zyre is done using the mechanism built into ZeroMQ. To enable it, you start the authenticator actor ([zauth][]) and then configure the authentication you wish to use.
9
9
 
10
- cert = Zyre::Cert.new
11
- cert.save( "/usr/local/var/certs/server" )
10
+ ## Curve Authentication
12
11
 
13
- Zyre.allow( "127.0.0.1", "10.0.12.2" )
14
- Zyre.start_authenticator( :CURVE, "/usr/local/var/certs" )
12
+ To enable secure connections, you tell Zyre to enable Curve. You can either call this method with no argument, in which case any node that presents a valid cert will be allowed to connect, or you pass in the path to a [zcertstore][] that contains all the certificates of nodes which will be allowed to connect.
15
13
 
16
- node = Zyre::Node.new
17
- node.zap_domain = 'application_name'
18
- node.zcert = cert
19
- node.start
14
+ To document:
20
15
 
21
- # later...
22
-
23
- node.stop
24
- Zyre.stop_authenticator
16
+ - Creating a certstore
17
+ - Enabling the authenticator
18
+ - Enabling curve authentication
25
19
 
26
20
 
27
21
  ## References
28
22
 
29
23
  - ZAP (ZeroMQ Authentication Protocol) - https://rfc.zeromq.org/spec/27/
30
24
  - Using ZeroMQ Security (Part 2) - https://jaxenter.com/using-zeromq-security-part-2-119353.html
25
+
26
+
27
+ [zauth]: http://api.zeromq.org/czmq3-0:zauth
28
+ [zcertstore]: http://api.zeromq.org/czmq3-0:zcertstore
29
+
30
+
data/History.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # Release History for zyre
2
2
 
3
3
  ---
4
+ ## v0.8.0 [2026-02-02] Michael Granger <ged@faeriemud.org>
5
+
6
+ Improvements:
7
+
8
+ - Add Zyre::Certstore for managing zcertstores
9
+ - Add convenience method for making public certs
10
+
4
11
 
5
12
  ## v0.7.0 [2025-08-05] Michael Granger <ged@faeriemud.org>
6
13
 
data/ext/zyre_ext/cert.c CHANGED
@@ -15,6 +15,14 @@ VALUE rzyre_cZyreCert;
15
15
  static void rzyre_cert_free( void *ptr );
16
16
 
17
17
 
18
+ static const byte EMPTY_KEY[32] = {
19
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
22
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
23
+ static const char *Z85_EMPTY_KEY = "0000000000000000000000000000000000000000";
24
+
25
+
18
26
  static const rb_data_type_t rzyre_cert_t = {
19
27
  .wrap_struct_name = "Zyre::Cert",
20
28
  .function = {
@@ -68,6 +76,24 @@ rzyre_get_cert( VALUE self )
68
76
  }
69
77
 
70
78
 
79
+
80
+ /*
81
+ * Wrap a zcert_t in a Zyre::Cert object.
82
+ */
83
+ VALUE
84
+ rzyre_wrap_cert( zcert_t *ptr )
85
+ {
86
+ VALUE wrapper = rzyre_cert_alloc( rzyre_cZyreCert );
87
+ zcert_t *copy = zcert_dup( ptr );
88
+
89
+ RTYPEDDATA_DATA( wrapper ) = copy;
90
+
91
+ return wrapper;
92
+ }
93
+
94
+
95
+
96
+
71
97
  /*
72
98
  * call-seq:
73
99
  * Zyre::Cert.from( public_key, secret_key ) -> cert
@@ -104,6 +130,42 @@ rzyre_cert_s_from( VALUE class, VALUE public_key, VALUE secret_key )
104
130
  }
105
131
 
106
132
 
133
+
134
+ /*
135
+ * call-seq:
136
+ * Zyre::Cert.from_public( public_key ) -> cert
137
+ *
138
+ * Create a public certificate from a +public_key+ string.
139
+ *
140
+ */
141
+ static VALUE
142
+ rzyre_cert_s_from_public( VALUE class, VALUE public_key )
143
+ {
144
+ VALUE self = rzyre_cert_alloc( class );
145
+ zcert_t *ptr = NULL;
146
+ const char *pub_str = StringValuePtr( public_key );
147
+
148
+ if ( RSTRING_LEN(public_key) == 32 ) {
149
+ ptr = zcert_new_from( (const byte *)pub_str, EMPTY_KEY );
150
+ } else if ( RSTRING_LEN(public_key) == 40 ) {
151
+ #ifdef HAVE_ZCERT_NEW_FROM_TXT
152
+ ptr = zcert_new_from_txt( pub_str, Z85_EMPTY_KEY );
153
+ #else
154
+ rb_raise( rb_eNotImpError,
155
+ "can't create a key from encoded keys: Czmq is too old!" );
156
+ #endif
157
+ }
158
+
159
+ if ( !ptr ) {
160
+ rb_raise( rb_eArgError, "invalid key" );
161
+ }
162
+
163
+ RTYPEDDATA_DATA( self ) = ptr;
164
+
165
+ return self;
166
+ }
167
+
168
+
107
169
  /*
108
170
  * call-seq:
109
171
  * Zyre::Cert.load( filename ) -> cert
@@ -262,7 +324,7 @@ rzyre_cert_meta( VALUE self, VALUE name )
262
324
  const char *name_str = StringValuePtr( name );
263
325
  const char *value = zcert_meta( ptr, name_str );
264
326
 
265
- if ( value ) rval = rb_str_new_cstr( value );
327
+ if ( value ) rval = rb_utf8_str_new_cstr( value );
266
328
 
267
329
  return rval;
268
330
  }
@@ -357,7 +419,8 @@ static VALUE
357
419
  rzyre_cert_save_public( VALUE self, VALUE filename )
358
420
  {
359
421
  zcert_t *ptr = rzyre_get_cert( self );
360
- const char *filename_str = StringValueCStr( filename );
422
+ VALUE filename_s = rb_funcall( filename, rb_intern("to_s"), 0 );
423
+ const char *filename_str = StringValueCStr( filename_s );
361
424
  int result;
362
425
 
363
426
  result = zcert_save_public( ptr, filename_str );
@@ -477,6 +540,7 @@ rzyre_init_cert( void ) {
477
540
  rb_define_alloc_func( rzyre_cZyreCert, rzyre_cert_alloc );
478
541
 
479
542
  rb_define_singleton_method( rzyre_cZyreCert, "from", rzyre_cert_s_from, 2 );
543
+ rb_define_singleton_method( rzyre_cZyreCert, "from_public", rzyre_cert_s_from_public, 1 );
480
544
  rb_define_singleton_method( rzyre_cZyreCert, "load", rzyre_cert_s_load, 1 );
481
545
 
482
546
  rb_define_protected_method( rzyre_cZyreCert, "initialize", rzyre_cert_initialize, 0 );
@@ -0,0 +1,208 @@
1
+ /*
2
+ * certstore.c - A curve certificate store for use with Zyre.
3
+ * $Id$
4
+ *
5
+ * Authors:
6
+ * * Michael Granger <ged@FaerieMUD.org>
7
+ *
8
+ */
9
+
10
+ #include "zyre_ext.h"
11
+
12
+ VALUE rzyre_cZyreCertstore;
13
+
14
+ // Forward declarations
15
+ static void rzyre_certstore_free( void *ptr );
16
+
17
+
18
+ static const rb_data_type_t rzyre_certstore_t = {
19
+ .wrap_struct_name = "Zyre::Certstore",
20
+ .function = {
21
+ .dmark = NULL,
22
+ .dfree = rzyre_certstore_free,
23
+ },
24
+ .data = NULL,
25
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
26
+ };
27
+
28
+
29
+ /*
30
+ * Free function
31
+ */
32
+ static void
33
+ rzyre_certstore_free( void *ptr )
34
+ {
35
+ if ( ptr ) {
36
+ zcertstore_destroy( (zcertstore_t **)&ptr );
37
+ }
38
+ }
39
+
40
+
41
+ /*
42
+ * Alloc function
43
+ */
44
+ static VALUE
45
+ rzyre_certstore_alloc( VALUE klass )
46
+ {
47
+ return TypedData_Wrap_Struct( klass, &rzyre_certstore_t, NULL );
48
+ }
49
+
50
+
51
+ /*
52
+ * Fetch the data pointer and check it for sanity.
53
+ */
54
+ inline zcertstore_t *
55
+ rzyre_get_certstore( VALUE self )
56
+ {
57
+ zcertstore_t *ptr;
58
+
59
+ if ( !IsZyreCertstore(self) ) {
60
+ rb_raise( rb_eTypeError, "wrong argument type %s (expected Zyre::Certstore)",
61
+ rb_class2name(CLASS_OF( self )) );
62
+ }
63
+
64
+ ptr = DATA_PTR( self );
65
+ assert( ptr );
66
+
67
+ return ptr;
68
+ }
69
+
70
+
71
+
72
+ /*
73
+ * call-seq:
74
+ * Zyre::Certstore.new -> certstore
75
+ * Zyre::Certstore.new( directory ) -> certstore
76
+ *
77
+ * Create a new certificate store. If not +directory+ is given, creates an
78
+ * in-memory store.
79
+ *
80
+ */
81
+ static VALUE
82
+ rzyre_certstore_initialize( int argc, VALUE *argv, VALUE self )
83
+ {
84
+ VALUE directory = Qnil;
85
+ zcertstore_t *ptr;
86
+
87
+ TypedData_Get_Struct( self, zcertstore_t, &rzyre_certstore_t, ptr );
88
+ if ( !ptr ) {
89
+ rb_scan_args( argc, argv, "01", &directory );
90
+
91
+ if ( RTEST(directory) ) {
92
+ VALUE dir_string = rb_funcall( directory, rb_intern("to_s"), 0 );
93
+ const char *location = StringValueCStr( dir_string );
94
+ ptr = zcertstore_new( location );
95
+ } else {
96
+ ptr = zcertstore_new( NULL );
97
+ }
98
+
99
+ assert( ptr );
100
+ RTYPEDDATA_DATA( self ) = ptr;
101
+ }
102
+
103
+ return self;
104
+ }
105
+
106
+
107
+
108
+ /*
109
+ * call-seq:
110
+ * certstore.lookup( public_key )
111
+ *
112
+ * Look up certificate by public key, returns Zyre::Cert object if found,
113
+ * else returns `nil`. The +public_key+ should be a String in Z85 text format.
114
+ *
115
+ */
116
+ static VALUE
117
+ rzyre_certstore_lookup( VALUE self, VALUE public_key )
118
+ {
119
+ zcertstore_t *ptr = rzyre_get_certstore( self );
120
+ const char *key_txt = StringValueCStr( public_key );
121
+ zcert_t *cert = zcertstore_lookup( ptr, key_txt );
122
+
123
+ if ( cert ) {
124
+ VALUE zyre_cert = rzyre_wrap_cert( cert );
125
+ return zyre_cert;
126
+ }
127
+
128
+ return Qnil;
129
+ }
130
+
131
+
132
+
133
+ /*
134
+ * call-seq:
135
+ * certstore.insert( certificate )
136
+ *
137
+ * Insert +certificate+ (a Zyre::Cert) into certificate store in memory. Note
138
+ * that this does not save the certificate to disk. To do that, use Zyre::Cert#save
139
+ * directly on the certificate.
140
+ *
141
+ */
142
+ static VALUE
143
+ rzyre_certstore_insert( VALUE self, VALUE cert )
144
+ {
145
+ zcertstore_t *ptr = rzyre_get_certstore( self );
146
+ zcert_t *zcert = rzyre_get_cert( cert );
147
+ zcert_t *zcert_owned = zcert_dup( zcert );
148
+
149
+ assert( zcert_owned );
150
+ zcertstore_insert( ptr, &zcert_owned );
151
+
152
+ return Qtrue;
153
+ }
154
+
155
+
156
+ /*
157
+ * call-seq:
158
+ * certstore.print
159
+ *
160
+ * Print list of certificates in store to logging facility.
161
+ *
162
+ */
163
+ static VALUE
164
+ rzyre_certstore_print( VALUE self )
165
+ {
166
+ zcertstore_t *ptr = rzyre_get_certstore( self );
167
+
168
+ zcertstore_print( ptr );
169
+
170
+ return Qtrue;
171
+ }
172
+
173
+
174
+
175
+ /*
176
+ * Initialize the Cert class.
177
+ */
178
+ void
179
+ rzyre_init_certstore( void ) {
180
+
181
+ #ifdef FOR_RDOC
182
+ rb_cData = rb_define_class( "Data" );
183
+ rzyre_mZyre = rb_define_module( "Zyre" );
184
+ #endif
185
+
186
+ /*
187
+ * Document-class: Zyre::Certstore
188
+ *
189
+ * A certificate store for Zyre curve authentication.
190
+ *
191
+ * Refs:
192
+ * - http://api.zeromq.org/czmq4-0:zcertstore
193
+ *
194
+ */
195
+ rzyre_cZyreCertstore = rb_define_class_under( rzyre_mZyre, "Certstore", rb_cObject );
196
+
197
+ rb_define_alloc_func( rzyre_cZyreCertstore, rzyre_certstore_alloc );
198
+
199
+ rb_define_protected_method( rzyre_cZyreCertstore, "initialize", rzyre_certstore_initialize, -1 );
200
+
201
+ rb_define_method( rzyre_cZyreCertstore, "lookup", rzyre_certstore_lookup, 1 );
202
+ rb_define_method( rzyre_cZyreCertstore, "insert", rzyre_certstore_insert, 1 );
203
+
204
+ rb_define_method( rzyre_cZyreCertstore, "print", rzyre_certstore_print, 0 );
205
+
206
+ rb_require( "zyre/certstore" );
207
+ }
208
+
@@ -31,6 +31,7 @@ have_func( 'zmq_z85_encode', 'zmq.h' )
31
31
  have_func( 'zmq_z85_decode', 'zmq.h' )
32
32
 
33
33
  have_func( 'zcert_unset_meta', 'czmq.h' )
34
+ have_func( 'zcert_new_from_txt', 'czmq.h' )
34
35
 
35
36
  create_header()
36
37
  create_makefile( 'zyre_ext' )
@@ -514,5 +514,6 @@ Init_zyre_ext()
514
514
  rzyre_init_event();
515
515
  rzyre_init_poller();
516
516
  rzyre_init_cert();
517
+ rzyre_init_certstore();
517
518
  }
518
519
 
@@ -87,6 +87,7 @@ extern VALUE rzyre_cZyreNode;
87
87
  extern VALUE rzyre_cZyreEvent;
88
88
  extern VALUE rzyre_cZyrePoller;
89
89
  extern VALUE rzyre_cZyreCert;
90
+ extern VALUE rzyre_cZyreCertstore;
90
91
 
91
92
  extern zactor_t *auth_actor;
92
93
 
@@ -99,6 +100,7 @@ extern zactor_t *auth_actor;
99
100
  #define IsZyreEvent( obj ) rb_obj_is_kind_of( (obj), rzyre_cZyreEvent )
100
101
  #define IsZyrePoller( obj ) rb_obj_is_kind_of( (obj), rzyre_cZyrePoller )
101
102
  #define IsZyreCert( obj ) rb_obj_is_kind_of( (obj), rzyre_cZyreCert )
103
+ #define IsZyreCertstore( obj ) rb_obj_is_kind_of( (obj), rzyre_cZyreCertstore )
102
104
 
103
105
  /* --------------------------------------------------------------
104
106
  * Utility functions
@@ -115,9 +117,11 @@ extern void rzyre_init_node _(( void ));
115
117
  extern void rzyre_init_event _(( void ));
116
118
  extern void rzyre_init_poller _(( void ));
117
119
  extern void rzyre_init_cert _(( void ));
120
+ extern void rzyre_init_certstore _(( void ));
118
121
 
119
122
  extern zyre_t * rzyre_get_node _(( VALUE ));
120
123
  extern zcert_t * rzyre_get_cert _(( VALUE ));
124
+ extern VALUE rzyre_wrap_cert _(( zcert_t * ));
121
125
 
122
126
  #endif /* end of include guard: ZYRE_EXT_H_90322ABD */
123
127
 
data/lib/zyre/cert.rb CHANGED
@@ -13,6 +13,7 @@ class Zyre::Cert
13
13
 
14
14
  # The placeholder key that is set as the secret key for a public certificate.
15
15
  EMPTY_KEY = "\x00" * 32
16
+ Z85_EMPTY_KEY = Zyre.z85_encode( EMPTY_KEY )
16
17
 
17
18
 
18
19
  # Use the Zyre module's logger
@@ -0,0 +1,14 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'loggability'
4
+
5
+ require 'zyre' unless defined?( Zyre )
6
+
7
+
8
+ #--
9
+ # See also: ext/zyre_ext/certstore.c
10
+ class Zyre::Certstore
11
+ extend Loggability
12
+
13
+
14
+ end # class Zyre::Certstore
data/lib/zyre.rb CHANGED
@@ -13,7 +13,7 @@ module Zyre
13
13
 
14
14
 
15
15
  # Gem version (semver)
16
- VERSION = '0.7.0'
16
+ VERSION = '0.8.0'
17
17
 
18
18
  # Set up a logger for Zyre classes
19
19
  log_as :zyre
@@ -27,6 +27,17 @@ RSpec.describe( Zyre::Cert ) do
27
27
  end
28
28
 
29
29
 
30
+ it "can be created from public key" do
31
+ cert = described_class.new
32
+
33
+ result = described_class.from_public( cert.public_key )
34
+
35
+ expect( result ).to be_a( described_class )
36
+ expect( result.public_txt ).to eq( cert.public_txt )
37
+ expect( result.secret_txt ).to eq( Zyre::Cert::Z85_EMPTY_KEY )
38
+ end
39
+
40
+
30
41
  it "can be saved to and loaded from a file" do
31
42
  cert = described_class.new
32
43
  cert.save( cert_file.path )
@@ -0,0 +1,60 @@
1
+ # -*- ruby -*-
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ require 'pathname'
6
+ require 'tmpdir'
7
+ require 'zyre/certstore'
8
+
9
+
10
+ RSpec.describe( Zyre::Certstore ) do
11
+
12
+ let( :certstore_location ) { Pathname(Dir::Tmpname.create(['zyre-cerstore-', '-spec']) {}) }
13
+
14
+
15
+ it "can be created as an in-memory store" do
16
+ instance = described_class.new
17
+
18
+ expect( instance ).to be_a( described_class )
19
+ end
20
+
21
+
22
+ it "can be created with a directory name" do
23
+ instance = described_class.new( certstore_location )
24
+
25
+ expect( instance ).to be_a( described_class )
26
+ end
27
+
28
+
29
+ it "can have certs added to it" do
30
+ instance = described_class.new
31
+
32
+ cert = Zyre::Cert.new
33
+ cert[:name] = 'test1'
34
+
35
+ instance.insert( cert )
36
+
37
+ res = instance.lookup( cert.public_txt )
38
+ expect( res ).to be_a( Zyre::Cert )
39
+ expect( res.public_txt ).to eq( cert.public_txt )
40
+ expect( res[:name] ).to eq( 'test1' )
41
+ end
42
+
43
+
44
+ it "can lookup certs added to a directory certstore" do
45
+ certstore_location.mkpath
46
+ instance = described_class.new( certstore_location )
47
+
48
+ cert = Zyre::Cert.new
49
+ cert[:name] = 'test23'
50
+ cert.save_public( certstore_location / 'mykey.txt' )
51
+
52
+ res = instance.lookup( cert.public_txt )
53
+
54
+ expect( res ).to be_a( Zyre::Cert )
55
+ expect( res.public_txt ).to eq( cert.public_txt )
56
+ expect( res[:name] ).to eq( 'test23' )
57
+ end
58
+
59
+ end
60
+
@@ -538,8 +538,6 @@ RSpec.describe( Zyre::Node ) do
538
538
  end
539
539
 
540
540
 
541
- it "supports CURVE authentication"
542
-
543
541
  it "supports advertised_endpoint="
544
542
  it "supports gossip_connect_curve"
545
543
  it "supports gossip_unpublish"
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zyre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -9,9 +9,9 @@ bindir: bin
9
9
  cert_chain:
10
10
  - |
11
11
  -----BEGIN CERTIFICATE-----
12
- MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
12
+ MIIEMDCCApigAwIBAgIBAjANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
13
13
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
14
- HhcNMjUwMTAxMDMzMTA5WhcNMjYwMTAxMDMzMTA5WjA+MQwwCgYDVQQDDANnZWQx
14
+ HhcNMjYwMjAyMjExMjQ0WhcNMjcwMjAyMjExMjQ0WjA+MQwwCgYDVQQDDANnZWQx
15
15
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
16
  ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
17
17
  83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
@@ -21,20 +21,19 @@ cert_chain:
21
21
  cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
22
22
  +QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
23
23
  soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
24
- /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
24
+ /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaM5MDcwCQYDVR0T
25
25
  BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
26
- MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
27
- YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQBjrBzCKWzXFigswYSPzGO8
28
- 9atBtY/eQdcN6KCL+PTzQBD9yePGF7H/xsww3awRauP+D1VUjCFbiiC3Qb0Ww0Qd
29
- OVA0s10T9KpZ8nb2XyKocSK7TfgDhcyr0V4H2MPxwK9SWYjGGh8z9z9HmT0i3PyX
30
- fXOSzzEoG6u26HIOg0nxSpitEjiAHBekQxy9ka5NuQbxoxMg+eIHU4rU9IUhu0Rf
31
- wl4wuvPVE3UQK0v0uqT6rJukEKQ1iNgK5R8klgEIv79XhQPgTkMt31FGfrwOp6HB
32
- OE0HMwOwY9B0w3aOxxdMQyyRxaZVv3eWE5RimQI7T0TUaxPngtS33ByMZjTeidxi
33
- ESIUEPVXoBCkFgLW1EVlBb+rG7WLYod4eVll4tKA42Bi2Ju90tqiJ1YQiyuRfCnp
34
- 8qAqdfV+4u6Huu1KzAuDQCheyEyISsLST37sU/irV3czV6BiFipWag1XiJciRT3A
35
- wZqCfTNVHTdtsCbfdA1DsA3RdG2iEH3TOHzv1Rqzqh4=
26
+ MA0GCSqGSIb3DQEBCwUAA4IBgQAQwvsRIJ8FV1bYadOnOg2jcSzZXjt0FVPbOQG9
27
+ eQ9UM7+bTPU0eRCGZuOPrEp8ROc1s5zwZNFv7qHWv/zWWC6sIj4gEnCZkUugK03k
28
+ bYDsSlkyjiQ4ApVV00+h/Vhxcw+RLIZuqy2QFl8YAfMJm+JS8G7SuoqpFjbv3UUF
29
+ vrObIiO7LbhJxpYzTGkGzMFigcnm6vIGMex4AgtArc2RpWOvtAXQrU7CZHUkcdQM
30
+ 4n5eVK+m3IZlD7dd4HoPT2jF2cOGmk8XFclT0GcPVYmEWFFmotN2aiMj4sqVm/Ob
31
+ V+FmyTUy4gVtcNOFO/sBnFRiQW0fxV9/97Dog9ciYesfiAhm4EpcuTmatdAuMrZR
32
+ WBmf+jXIub5S7RBw+m0mk2xhmcSkg1vY5w6IEIhSo2e2gE9rA0rIkZO5wP4sCouE
33
+ XdaRMEnt/AVHUzroBR3CWAz/6ZnDF8GS7EK1bOfM+YWqJL30g7PoxpT+UJTqWJtM
34
+ CCC1LSoBD7OEUiaIMWUo4h7xWIs=
36
35
  -----END CERTIFICATE-----
37
- date: 2025-08-05 00:00:00.000000000 Z
36
+ date: 2026-02-02 00:00:00.000000000 Z
38
37
  dependencies:
39
38
  - !ruby/object:Gem::Dependency
40
39
  name: loggability
@@ -169,6 +168,7 @@ files:
169
168
  - LICENSE.txt
170
169
  - README.md
171
170
  - ext/zyre_ext/cert.c
171
+ - ext/zyre_ext/certstore.c
172
172
  - ext/zyre_ext/event.c
173
173
  - ext/zyre_ext/extconf.rb
174
174
  - ext/zyre_ext/node.c
@@ -178,6 +178,7 @@ files:
178
178
  - lib/observability/instrumentation/zyre.rb
179
179
  - lib/zyre.rb
180
180
  - lib/zyre/cert.rb
181
+ - lib/zyre/certstore.rb
181
182
  - lib/zyre/event.rb
182
183
  - lib/zyre/event/enter.rb
183
184
  - lib/zyre/event/evasive.rb
@@ -195,6 +196,7 @@ files:
195
196
  - spec/observability/instrumentation/zyre_spec.rb
196
197
  - spec/spec_helper.rb
197
198
  - spec/zyre/cert_spec.rb
199
+ - spec/zyre/certstore_spec.rb
198
200
  - spec/zyre/event_spec.rb
199
201
  - spec/zyre/node_spec.rb
200
202
  - spec/zyre/poller_spec.rb
@@ -222,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
224
  - !ruby/object:Gem::Version
223
225
  version: '0'
224
226
  requirements: []
225
- rubygems_version: 3.6.9
227
+ rubygems_version: 4.0.3
226
228
  specification_version: 4
227
229
  summary: A ZRE library for Ruby.
228
230
  test_files: []
metadata.gz.sig CHANGED
Binary file