confium 0.6.2-x86_64-linux → 0.7.0-x86_64-linux

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: 483fa8b781dec437fafbdfbc6fe06aa0891070c3b358c4ab2c4faa871651c253
4
- data.tar.gz: 95702d7aae525a0e4fd0eedf87b3516c1b9400ef82b25561f18053e99d1a54c0
3
+ metadata.gz: fb9023ca3c9c99f8f85682ea118c7604844a9369c23640491b731ec1d9990d9d
4
+ data.tar.gz: ffc0c63634bdaa2a6c43c295b53532a35ab7dcea7e4d864486af8df2d5abab98
5
5
  SHA512:
6
- metadata.gz: d55bc883f15562a231ab1281b4b83b9406bddb512350fd218b03e7c6522321f99c08d7060d386a000d88264ec68bf3a4c77fd61315a01b8db6ede8005e600995
7
- data.tar.gz: 34c3f2807a7ba4fb9de549cf58b38c4f15ec6fb75b7fe6e65994ba16ee628fb84b67637c7c834acd4b37aef95f4230cba03164f180a20d2fa1627148b36c0349
6
+ metadata.gz: d062e24ba4dc4fb6faf6219fbdc53d529c71a99324b419227dafbb1076fc2a800caf88c754b218b699b60607243207f1cdd6aaddabef3e755e1be8b6b72d0b51
7
+ data.tar.gz: 0f97546fed40c7a4539b3223d79e3f135abb8266f5852738fb57c139f351629bd08bb903849a5b42e1716dd3a06c869f051cedb81a1020634b8dd3a9d4510428
data/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.0] — 2026-09-07
4
+
5
+ ### Added
6
+
7
+ - `Confium::Transport::SignerClient` / `CoordinatorServer` —
8
+ coordinator sessions over any registry transport the extension
9
+ links, addressed by URL: `tcp://host:port` for local/trusted
10
+ networks, `noise://host:port` for Noise_XX
11
+ (`Noise_XX_25519_ChaChaPoly_BLAKE2s`) encrypted sessions.
12
+ `noise://` URLs take `key=<hex>` (local static private key;
13
+ ephemeral and trust-on-first-use when omitted) and `pinned=<hex>`
14
+ (SHA-256 fingerprint of the expected peer static key — the
15
+ handshake aborts on mismatch). The handshake carries a 10-second
16
+ deadline so a non-Noise peer fails fast instead of hanging.
17
+ `SignerClient` exposes `#register`, `#create_session`,
18
+ `#submit_commitment`, `#submit_share` (returns the aggregated
19
+ signature once the threshold is met, else nil);
20
+ `CoordinatorServer.new(url)` serves any linked scheme for tests
21
+ and single-process deployments.
22
+
23
+ ### Changed
24
+
25
+ - **BREAKING**: `Confium::Net` is `Confium::Transport`. Defining
26
+ `Confium::Net` shadowed Ruby stdlib `Net` for every constant
27
+ lookup under the `Confium` namespace — `Confium::Audit::OtlpSink`'s
28
+ `Net::HTTP` resolved to `Confium::Net::HTTP` and raised
29
+ `NameError`. No prior release shipped the `Net` names.
30
+
31
+ ## [0.6.3] — 2026-08-26
32
+
33
+ ### Added
34
+
35
+ - `Confium::TC::Session` — per-party threshold protocol sessions
36
+ over confium-tc-core 0.4: each signer process runs its own
37
+ session (`"FROST-ed25519-dkg"` for distributed key generation,
38
+ `"FROST-ed25519"` for signing with the DKG share and message) and
39
+ exchanges only `round_step` messages — the share never leaves the
40
+ process. `#round_step(incoming)` returns
41
+ `{ "outgoing" => [...], "complete" => bool }`; the completed DKG
42
+ session's `#result` is the party's share blob, the signing
43
+ session's `#result` an RFC 8032 Ed25519 signature verifiable under
44
+ the group public key.
45
+
3
46
  ## [0.6.2] — 2026-08-26
4
47
 
5
48
  ### Added
data/Cargo.lock CHANGED
@@ -79,6 +79,12 @@ version = "0.2.0"
79
79
  source = "registry+https://github.com/rust-lang/crates.io-index"
80
80
  checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
81
81
 
82
+ [[package]]
83
+ name = "base16ct"
84
+ version = "1.0.0"
85
+ source = "registry+https://github.com/rust-lang/crates.io-index"
86
+ checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6"
87
+
82
88
  [[package]]
83
89
  name = "base64"
84
90
  version = "0.23.1"
@@ -129,6 +135,15 @@ dependencies = [
129
135
  "wyz",
130
136
  ]
131
137
 
138
+ [[package]]
139
+ name = "blake2"
140
+ version = "0.10.6"
141
+ source = "registry+https://github.com/rust-lang/crates.io-index"
142
+ checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
143
+ dependencies = [
144
+ "digest 0.10.7",
145
+ ]
146
+
132
147
  [[package]]
133
148
  name = "block-buffer"
134
149
  version = "0.10.4"
@@ -201,6 +216,30 @@ version = "1.0.4"
201
216
  source = "registry+https://github.com/rust-lang/crates.io-index"
202
217
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
203
218
 
219
+ [[package]]
220
+ name = "chacha20"
221
+ version = "0.9.1"
222
+ source = "registry+https://github.com/rust-lang/crates.io-index"
223
+ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
224
+ dependencies = [
225
+ "cfg-if",
226
+ "cipher",
227
+ "cpufeatures 0.2.17",
228
+ ]
229
+
230
+ [[package]]
231
+ name = "chacha20poly1305"
232
+ version = "0.10.1"
233
+ source = "registry+https://github.com/rust-lang/crates.io-index"
234
+ checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
235
+ dependencies = [
236
+ "aead",
237
+ "chacha20",
238
+ "cipher",
239
+ "poly1305",
240
+ "zeroize",
241
+ ]
242
+
204
243
  [[package]]
205
244
  name = "chrono"
206
245
  version = "0.4.45"
@@ -223,6 +262,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
223
262
  dependencies = [
224
263
  "crypto-common 0.1.7",
225
264
  "inout",
265
+ "zeroize",
226
266
  ]
227
267
 
228
268
  [[package]]
@@ -245,6 +285,12 @@ dependencies = [
245
285
  "cc",
246
286
  ]
247
287
 
288
+ [[package]]
289
+ name = "cmov"
290
+ version = "0.5.4"
291
+ source = "registry+https://github.com/rust-lang/crates.io-index"
292
+ checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
293
+
248
294
  [[package]]
249
295
  name = "confium-api"
250
296
  version = "0.3.0"
@@ -273,7 +319,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
273
319
  checksum = "317ed25adf9a1aad00722a215c3397dea694fcdf90730542e82acdea559644aa"
274
320
  dependencies = [
275
321
  "ed25519-dalek",
276
- "p256",
322
+ "p256 0.13.2",
277
323
  "rand_core 0.6.4",
278
324
  "serde",
279
325
  "serde_json",
@@ -289,16 +335,16 @@ checksum = "e8c96d4d5997726cf0eb794410e3e8bbce839cfba9c4a32e26ede0c076b02e64"
289
335
  dependencies = [
290
336
  "chrono",
291
337
  "confium-api",
292
- "confium-net",
338
+ "confium-net 0.3.0",
293
339
  "confium-store 0.3.0",
294
- "confium-tc-core",
340
+ "confium-tc-core 0.3.0",
295
341
  "data-encoding",
296
342
  "hex",
297
- "hmac",
343
+ "hmac 0.12.1",
298
344
  "inventory",
299
345
  "num-bigint",
300
346
  "num-traits",
301
- "p256",
347
+ "p256 0.13.2",
302
348
  "rand_core 0.6.4",
303
349
  "serde",
304
350
  "serde_json",
@@ -309,6 +355,26 @@ dependencies = [
309
355
  "zeroize",
310
356
  ]
311
357
 
358
+ [[package]]
359
+ name = "confium-coordinator"
360
+ version = "0.8.5"
361
+ source = "registry+https://github.com/rust-lang/crates.io-index"
362
+ checksum = "52f49eae3301b6f1f2f36b2eb66d0fdd863bcecb1dc18b51ec51e5f8d1bb9dc3"
363
+ dependencies = [
364
+ "chrono",
365
+ "confium-net 0.8.5",
366
+ "getrandom 0.4.3",
367
+ "hex",
368
+ "hmac 0.13.0",
369
+ "p256 0.14.0",
370
+ "rand_core 0.6.4",
371
+ "serde",
372
+ "serde_json",
373
+ "sha2 0.11.0",
374
+ "thiserror 2.0.20",
375
+ "tracing",
376
+ ]
377
+
312
378
  [[package]]
313
379
  name = "confium-core"
314
380
  version = "0.2.0"
@@ -330,11 +396,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
330
396
  checksum = "19bea8bcb5a76b88ccca2471352176ea234e86c1360982f4a1d7357c2f89ab73"
331
397
  dependencies = [
332
398
  "hex",
333
- "hmac",
399
+ "hmac 0.12.1",
334
400
  "num-bigint",
335
401
  "num-integer",
336
402
  "num-traits",
337
- "p256",
403
+ "p256 0.13.2",
338
404
  "rand",
339
405
  "rand_core 0.6.4",
340
406
  "serde",
@@ -351,10 +417,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
351
417
  checksum = "f65c763c1e55aee550db1ba49ba0b97fbfd8373766e4ca48d9ca742897c82f34"
352
418
  dependencies = [
353
419
  "hex",
354
- "hmac",
420
+ "hmac 0.12.1",
355
421
  "num-bigint",
356
422
  "num-traits",
357
- "p256",
423
+ "p256 0.13.2",
358
424
  "rand_core 0.6.4",
359
425
  "serde",
360
426
  "serde_json",
@@ -401,6 +467,44 @@ dependencies = [
401
467
  "url",
402
468
  ]
403
469
 
470
+ [[package]]
471
+ name = "confium-net"
472
+ version = "0.8.5"
473
+ source = "registry+https://github.com/rust-lang/crates.io-index"
474
+ checksum = "2bd7098e54033a09b1f6a4ebd0c0f54d6c44da8f46cfdff7ae156895f1083fc6"
475
+ dependencies = [
476
+ "inventory",
477
+ "snafu 0.9.2",
478
+ "url",
479
+ ]
480
+
481
+ [[package]]
482
+ name = "confium-net-noise"
483
+ version = "0.8.5"
484
+ source = "registry+https://github.com/rust-lang/crates.io-index"
485
+ checksum = "213e90ce6daa40d1ec92d8e524276744a07f027c453bd32815f80c29ba947237"
486
+ dependencies = [
487
+ "confium-net 0.8.5",
488
+ "inventory",
489
+ "sha2 0.11.0",
490
+ "snafu 0.9.2",
491
+ "snow",
492
+ "url",
493
+ "x25519-dalek",
494
+ ]
495
+
496
+ [[package]]
497
+ name = "confium-net-tcp"
498
+ version = "0.8.3"
499
+ source = "registry+https://github.com/rust-lang/crates.io-index"
500
+ checksum = "1b80e3d692ed5328a72e754a0f73d81f6c8fde3714d05fc0be1953f657e05f76"
501
+ dependencies = [
502
+ "confium-net 0.8.5",
503
+ "inventory",
504
+ "snafu 0.9.2",
505
+ "url",
506
+ ]
507
+
404
508
  [[package]]
405
509
  name = "confium-observability"
406
510
  version = "0.3.0"
@@ -409,7 +513,7 @@ checksum = "767f898b6437a5cc67d403140bcf8cd1dbffa35a450afe28c64147e3175ee091"
409
513
  dependencies = [
410
514
  "chrono",
411
515
  "hex",
412
- "hmac",
516
+ "hmac 0.12.1",
413
517
  "rand_core 0.6.4",
414
518
  "serde",
415
519
  "serde_json",
@@ -440,10 +544,10 @@ checksum = "6dcbe8f16e42291a63bcc480745653aa1ad993982fb708531778270de9677dd9"
440
544
  dependencies = [
441
545
  "chrono",
442
546
  "hex",
443
- "hmac",
547
+ "hmac 0.12.1",
444
548
  "num-bigint",
445
549
  "num-traits",
446
- "p256",
550
+ "p256 0.13.2",
447
551
  "rand",
448
552
  "rand_core 0.6.4",
449
553
  "serde",
@@ -481,19 +585,19 @@ checksum = "3dd7d4965aef12324cb76d397294c317b83b774de029f1d37b387cf54ba9593c"
481
585
  dependencies = [
482
586
  "chrono",
483
587
  "confium-api",
484
- "confium-coordinator",
485
- "confium-net",
588
+ "confium-coordinator 0.3.0",
589
+ "confium-net 0.3.0",
486
590
  "confium-store 0.3.0",
487
591
  "confium-tc-keys",
488
592
  "data-encoding",
489
593
  "hex",
490
- "hmac",
594
+ "hmac 0.12.1",
491
595
  "inventory",
492
596
  "num-bigint",
493
597
  "num-integer",
494
598
  "num-prime",
495
599
  "num-traits",
496
- "p256",
600
+ "p256 0.13.2",
497
601
  "rand",
498
602
  "rand_core 0.6.4",
499
603
  "serde",
@@ -507,24 +611,42 @@ dependencies = [
507
611
  ]
508
612
 
509
613
  [[package]]
510
- name = "confium-tc-cmp20"
511
- version = "0.3.1"
614
+ name = "confium-tc"
615
+ version = "0.4.7"
512
616
  source = "registry+https://github.com/rust-lang/crates.io-index"
513
- checksum = "7f28758121e44a86beefdf54a63428ab9bd9ec7a3797f7c065351b876518815c"
617
+ checksum = "940d14f99d311c76e38500126059e2f1f027628657d0615d5bc78422618c83ee"
514
618
  dependencies = [
515
- "confium-tc",
516
- "confium-tc-core",
517
- "crypto-bigint",
518
- "elliptic-curve",
519
- "hex",
619
+ "chrono",
620
+ "confium-tc-core 0.4.7",
621
+ "hmac 0.12.1",
520
622
  "inventory",
521
623
  "num-bigint",
522
624
  "num-integer",
523
625
  "num-traits",
524
- "p256",
525
- "rand",
626
+ "rand_core 0.6.4",
627
+ "serde",
628
+ "serde_json",
526
629
  "sha2 0.10.9",
527
630
  "snafu 0.8.9",
631
+ "thiserror 1.0.69",
632
+ "zeroize",
633
+ ]
634
+
635
+ [[package]]
636
+ name = "confium-tc-cmp20"
637
+ version = "0.4.7"
638
+ source = "registry+https://github.com/rust-lang/crates.io-index"
639
+ checksum = "58d95093a36282370c3920cc0453f080d3e567afaa340063f44b3dbe1a60bca5"
640
+ dependencies = [
641
+ "confium-tc 0.4.7",
642
+ "crypto-bigint 0.7.5",
643
+ "elliptic-curve 0.14.1",
644
+ "getrandom 0.4.3",
645
+ "inventory",
646
+ "num-bigint",
647
+ "p256 0.14.0",
648
+ "rand",
649
+ "sha2 0.10.9",
528
650
  "zeroize",
529
651
  ]
530
652
 
@@ -536,13 +658,13 @@ checksum = "add3e15337ce81944f78c9ce844d870a081cbe91506a85b9a5c4e4c0da983771"
536
658
  dependencies = [
537
659
  "chrono",
538
660
  "confium-api",
539
- "confium-net",
661
+ "confium-net 0.3.0",
540
662
  "confium-store 0.3.0",
541
663
  "data-encoding",
542
664
  "hex",
543
- "hmac",
665
+ "hmac 0.12.1",
544
666
  "inventory",
545
- "p256",
667
+ "p256 0.13.2",
546
668
  "rand_core 0.6.4",
547
669
  "serde",
548
670
  "serde_json",
@@ -555,48 +677,80 @@ dependencies = [
555
677
  ]
556
678
 
557
679
  [[package]]
558
- name = "confium-tc-elgamal-p256"
559
- version = "0.3.0"
680
+ name = "confium-tc-core"
681
+ version = "0.4.7"
560
682
  source = "registry+https://github.com/rust-lang/crates.io-index"
561
- checksum = "113058b4f2c468c2b3e8c218e88bd43aa282af99c121936ae0bb73d9051371a8"
683
+ checksum = "0b09f89b929f19bef0267ea94520cdf86a57f2eb71bf409171d71f6f6e2f98f9"
562
684
  dependencies = [
563
- "elliptic-curve",
564
- "p256",
685
+ "chrono",
686
+ "getrandom 0.4.3",
687
+ "hex",
688
+ "hmac 0.12.1",
689
+ "inventory",
690
+ "p256 0.14.0",
691
+ "rand_core 0.6.4",
565
692
  "serde",
693
+ "serde_json",
566
694
  "sha2 0.10.9",
695
+ "snafu 0.8.9",
696
+ "subtle",
567
697
  "thiserror 1.0.69",
698
+ "zeroize",
568
699
  ]
569
700
 
570
701
  [[package]]
571
- name = "confium-tc-frost-p256"
572
- version = "0.3.0"
702
+ name = "confium-tc-elgamal-p256"
703
+ version = "0.4.7"
573
704
  source = "registry+https://github.com/rust-lang/crates.io-index"
574
- checksum = "f7da5dc941047eb374b15ee3a31e78df1a07036a95aab48b134ee2c3d86b621d"
705
+ checksum = "fec4a5bdef07e17ae0ae0098fd761166c8bb1586f22117bb64e7ea09c1883559"
575
706
  dependencies = [
576
- "elliptic-curve",
577
- "hex",
578
- "p256",
579
- "rand_core 0.6.4",
707
+ "getrandom 0.4.3",
708
+ "p256 0.14.0",
580
709
  "serde",
710
+ "thiserror 1.0.69",
711
+ "zeroize",
712
+ ]
713
+
714
+ [[package]]
715
+ name = "confium-tc-frost-ed25519"
716
+ version = "0.4.7"
717
+ source = "registry+https://github.com/rust-lang/crates.io-index"
718
+ checksum = "58987257f0358c9689b90ea63f4dad4c7902e6a446e3fbcb531fa2d9f69f0eef"
719
+ dependencies = [
720
+ "confium-tc 0.4.7",
721
+ "curve25519-dalek",
722
+ "inventory",
723
+ "rand_core 0.6.4",
581
724
  "sha2 0.10.9",
725
+ "snafu 0.8.9",
726
+ ]
727
+
728
+ [[package]]
729
+ name = "confium-tc-frost-p256"
730
+ version = "0.4.7"
731
+ source = "registry+https://github.com/rust-lang/crates.io-index"
732
+ checksum = "9bddf1ab23eb1cfd9d8d6823c5e473a9392a30b6e12cf4889c44612508f865d9"
733
+ dependencies = [
734
+ "elliptic-curve 0.14.1",
735
+ "getrandom 0.4.3",
736
+ "p256 0.14.0",
582
737
  "thiserror 1.0.69",
738
+ "zeroize",
583
739
  ]
584
740
 
585
741
  [[package]]
586
742
  name = "confium-tc-gg18"
587
- version = "0.3.1"
743
+ version = "0.4.7"
588
744
  source = "registry+https://github.com/rust-lang/crates.io-index"
589
- checksum = "f5e3522da6c2352ff26f1a0719781e8f392cdfb7c264c681c87d0f0207540384"
745
+ checksum = "45894d305019521a9960dfda5a8ba9d4f7b2b10d9a874905780d75e3d14d264f"
590
746
  dependencies = [
591
- "confium-tc",
592
- "confium-tc-core",
593
- "crypto-bigint",
594
- "elliptic-curve",
595
- "hex",
747
+ "confium-tc 0.4.7",
748
+ "crypto-bigint 0.7.5",
749
+ "elliptic-curve 0.14.1",
750
+ "getrandom 0.4.3",
596
751
  "inventory",
597
- "p256",
752
+ "p256 0.14.0",
598
753
  "sha2 0.10.9",
599
- "snafu 0.8.9",
600
754
  "zeroize",
601
755
  ]
602
756
 
@@ -607,10 +761,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
607
761
  checksum = "476fce2efcefa4d7a48cfe5accecd1bc3f39959b5ea719fdedac9cfcbfeeb710"
608
762
  dependencies = [
609
763
  "chrono",
610
- "confium-tc-core",
764
+ "confium-tc-core 0.3.0",
611
765
  "hex",
612
- "hmac",
613
- "p256",
766
+ "hmac 0.12.1",
767
+ "p256 0.13.2",
614
768
  "rand_core 0.6.4",
615
769
  "serde",
616
770
  "serde_json",
@@ -641,25 +795,30 @@ dependencies = [
641
795
  "chrono",
642
796
  "confium-attributes",
643
797
  "confium-composite",
798
+ "confium-coordinator 0.8.5",
644
799
  "confium-core",
645
800
  "confium-crypto-vss",
646
801
  "confium-crypto-zk",
647
802
  "confium-deployment",
803
+ "confium-net-noise",
804
+ "confium-net-tcp",
648
805
  "confium-observability",
649
806
  "confium-pki",
650
807
  "confium-privacy",
651
808
  "confium-store 0.5.8",
652
- "confium-tc",
809
+ "confium-tc 0.3.1",
653
810
  "confium-tc-cmp20",
654
- "confium-tc-core",
811
+ "confium-tc-core 0.3.0",
812
+ "confium-tc-core 0.4.7",
655
813
  "confium-tc-elgamal-p256",
814
+ "confium-tc-frost-ed25519",
656
815
  "confium-tc-frost-p256",
657
816
  "confium-tc-gg18",
658
817
  "confium-transparency",
659
818
  "ed25519-dalek",
660
819
  "hex",
661
820
  "magnus",
662
- "p256",
821
+ "p256 0.13.2",
663
822
  "rand_core 0.6.4",
664
823
  "rb-sys",
665
824
  "rnp-rs",
@@ -686,6 +845,12 @@ version = "0.8.7"
686
845
  source = "registry+https://github.com/rust-lang/crates.io-index"
687
846
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
688
847
 
848
+ [[package]]
849
+ name = "cpubits"
850
+ version = "0.1.1"
851
+ source = "registry+https://github.com/rust-lang/crates.io-index"
852
+ checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"
853
+
689
854
  [[package]]
690
855
  name = "cpufeatures"
691
856
  version = "0.2.17"
@@ -740,6 +905,22 @@ dependencies = [
740
905
  "zeroize",
741
906
  ]
742
907
 
908
+ [[package]]
909
+ name = "crypto-bigint"
910
+ version = "0.7.5"
911
+ source = "registry+https://github.com/rust-lang/crates.io-index"
912
+ checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271"
913
+ dependencies = [
914
+ "cpubits",
915
+ "ctutils",
916
+ "getrandom 0.4.3",
917
+ "hybrid-array",
918
+ "num-traits",
919
+ "rand_core 0.10.1",
920
+ "subtle",
921
+ "zeroize",
922
+ ]
923
+
743
924
  [[package]]
744
925
  name = "crypto-common"
745
926
  version = "0.1.7"
@@ -757,7 +938,9 @@ version = "0.2.2"
757
938
  source = "registry+https://github.com/rust-lang/crates.io-index"
758
939
  checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
759
940
  dependencies = [
941
+ "getrandom 0.4.3",
760
942
  "hybrid-array",
943
+ "rand_core 0.10.1",
761
944
  ]
762
945
 
763
946
  [[package]]
@@ -769,6 +952,16 @@ dependencies = [
769
952
  "cipher",
770
953
  ]
771
954
 
955
+ [[package]]
956
+ name = "ctutils"
957
+ version = "0.4.2"
958
+ source = "registry+https://github.com/rust-lang/crates.io-index"
959
+ checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"
960
+ dependencies = [
961
+ "cmov",
962
+ "subtle",
963
+ ]
964
+
772
965
  [[package]]
773
966
  name = "curve25519-dalek"
774
967
  version = "4.1.3"
@@ -780,6 +973,7 @@ dependencies = [
780
973
  "curve25519-dalek-derive",
781
974
  "digest 0.10.7",
782
975
  "fiat-crypto",
976
+ "rand_core 0.6.4",
783
977
  "rustc_version",
784
978
  "subtle",
785
979
  "zeroize",
@@ -858,6 +1052,7 @@ dependencies = [
858
1052
  "block-buffer 0.12.1",
859
1053
  "const-oid 0.10.2",
860
1054
  "crypto-common 0.2.2",
1055
+ "ctutils",
861
1056
  ]
862
1057
 
863
1058
  [[package]]
@@ -879,20 +1074,35 @@ checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
879
1074
  dependencies = [
880
1075
  "der 0.7.10",
881
1076
  "digest 0.10.7",
882
- "elliptic-curve",
883
- "rfc6979",
884
- "serdect",
1077
+ "elliptic-curve 0.13.8",
1078
+ "rfc6979 0.4.0",
885
1079
  "signature 2.2.0",
886
1080
  "spki 0.7.3",
887
1081
  ]
888
1082
 
1083
+ [[package]]
1084
+ name = "ecdsa"
1085
+ version = "0.17.0"
1086
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1087
+ checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0"
1088
+ dependencies = [
1089
+ "der 0.8.1",
1090
+ "digest 0.11.3",
1091
+ "elliptic-curve 0.14.1",
1092
+ "rfc6979 0.6.0",
1093
+ "serdect",
1094
+ "signature 3.0.0",
1095
+ "spki 0.8.0",
1096
+ "zeroize",
1097
+ ]
1098
+
889
1099
  [[package]]
890
1100
  name = "ed25519"
891
1101
  version = "2.2.3"
892
1102
  source = "registry+https://github.com/rust-lang/crates.io-index"
893
1103
  checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
894
1104
  dependencies = [
895
- "pkcs8",
1105
+ "pkcs8 0.10.2",
896
1106
  "signature 2.2.0",
897
1107
  ]
898
1108
 
@@ -923,16 +1133,37 @@ version = "0.13.8"
923
1133
  source = "registry+https://github.com/rust-lang/crates.io-index"
924
1134
  checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
925
1135
  dependencies = [
926
- "base16ct",
927
- "crypto-bigint",
1136
+ "base16ct 0.2.0",
1137
+ "crypto-bigint 0.5.5",
928
1138
  "digest 0.10.7",
929
- "ff",
1139
+ "ff 0.13.1",
930
1140
  "generic-array",
931
- "group",
1141
+ "group 0.13.0",
932
1142
  "pem-rfc7468 0.7.0",
933
- "pkcs8",
1143
+ "pkcs8 0.10.2",
934
1144
  "rand_core 0.6.4",
935
- "sec1",
1145
+ "sec1 0.7.3",
1146
+ "subtle",
1147
+ "zeroize",
1148
+ ]
1149
+
1150
+ [[package]]
1151
+ name = "elliptic-curve"
1152
+ version = "0.14.1"
1153
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1154
+ checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65"
1155
+ dependencies = [
1156
+ "base16ct 1.0.0",
1157
+ "crypto-bigint 0.7.5",
1158
+ "crypto-common 0.2.2",
1159
+ "digest 0.11.3",
1160
+ "ff 0.14.0",
1161
+ "group 0.14.0",
1162
+ "hybrid-array",
1163
+ "pem-rfc7468 1.0.0",
1164
+ "pkcs8 0.11.0",
1165
+ "rand_core 0.10.1",
1166
+ "sec1 0.8.1",
936
1167
  "serdect",
937
1168
  "subtle",
938
1169
  "zeroize",
@@ -964,6 +1195,16 @@ dependencies = [
964
1195
  "subtle",
965
1196
  ]
966
1197
 
1198
+ [[package]]
1199
+ name = "ff"
1200
+ version = "0.14.0"
1201
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1202
+ checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f"
1203
+ dependencies = [
1204
+ "rand_core 0.10.1",
1205
+ "subtle",
1206
+ ]
1207
+
967
1208
  [[package]]
968
1209
  name = "fiat-crypto"
969
1210
  version = "0.2.9"
@@ -1069,6 +1310,30 @@ dependencies = [
1069
1310
  "wasi",
1070
1311
  ]
1071
1312
 
1313
+ [[package]]
1314
+ name = "getrandom"
1315
+ version = "0.3.4"
1316
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1317
+ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1318
+ dependencies = [
1319
+ "cfg-if",
1320
+ "libc",
1321
+ "r-efi 5.3.0",
1322
+ "wasip2",
1323
+ ]
1324
+
1325
+ [[package]]
1326
+ name = "getrandom"
1327
+ version = "0.4.3"
1328
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1329
+ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
1330
+ dependencies = [
1331
+ "cfg-if",
1332
+ "libc",
1333
+ "r-efi 6.0.0",
1334
+ "rand_core 0.10.1",
1335
+ ]
1336
+
1072
1337
  [[package]]
1073
1338
  name = "ghash"
1074
1339
  version = "0.5.1"
@@ -1091,11 +1356,22 @@ version = "0.13.0"
1091
1356
  source = "registry+https://github.com/rust-lang/crates.io-index"
1092
1357
  checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
1093
1358
  dependencies = [
1094
- "ff",
1359
+ "ff 0.13.1",
1095
1360
  "rand_core 0.6.4",
1096
1361
  "subtle",
1097
1362
  ]
1098
1363
 
1364
+ [[package]]
1365
+ name = "group"
1366
+ version = "0.14.0"
1367
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1368
+ checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4"
1369
+ dependencies = [
1370
+ "ff 0.14.0",
1371
+ "rand_core 0.10.1",
1372
+ "subtle",
1373
+ ]
1374
+
1099
1375
  [[package]]
1100
1376
  name = "hashbrown"
1101
1377
  version = "0.15.5"
@@ -1134,6 +1410,15 @@ dependencies = [
1134
1410
  "digest 0.10.7",
1135
1411
  ]
1136
1412
 
1413
+ [[package]]
1414
+ name = "hmac"
1415
+ version = "0.13.0"
1416
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1417
+ checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
1418
+ dependencies = [
1419
+ "digest 0.11.3",
1420
+ ]
1421
+
1137
1422
  [[package]]
1138
1423
  name = "http"
1139
1424
  version = "1.5.0"
@@ -1156,7 +1441,9 @@ version = "0.4.14"
1156
1441
  source = "registry+https://github.com/rust-lang/crates.io-index"
1157
1442
  checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b"
1158
1443
  dependencies = [
1444
+ "subtle",
1159
1445
  "typenum",
1446
+ "zeroize",
1160
1447
  ]
1161
1448
 
1162
1449
  [[package]]
@@ -1529,13 +1816,26 @@ version = "0.13.2"
1529
1816
  source = "registry+https://github.com/rust-lang/crates.io-index"
1530
1817
  checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
1531
1818
  dependencies = [
1532
- "ecdsa",
1533
- "elliptic-curve",
1534
- "primeorder",
1535
- "serdect",
1819
+ "ecdsa 0.16.9",
1820
+ "elliptic-curve 0.13.8",
1821
+ "primeorder 0.13.6",
1536
1822
  "sha2 0.10.9",
1537
1823
  ]
1538
1824
 
1825
+ [[package]]
1826
+ name = "p256"
1827
+ version = "0.14.0"
1828
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1829
+ checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a"
1830
+ dependencies = [
1831
+ "ecdsa 0.17.0",
1832
+ "elliptic-curve 0.14.1",
1833
+ "primefield",
1834
+ "primeorder 0.14.0",
1835
+ "serdect",
1836
+ "sha2 0.11.0",
1837
+ ]
1838
+
1539
1839
  [[package]]
1540
1840
  name = "pem-rfc7468"
1541
1841
  version = "0.7.0"
@@ -1576,12 +1876,33 @@ dependencies = [
1576
1876
  "spki 0.7.3",
1577
1877
  ]
1578
1878
 
1879
+ [[package]]
1880
+ name = "pkcs8"
1881
+ version = "0.11.0"
1882
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1883
+ checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7"
1884
+ dependencies = [
1885
+ "der 0.8.1",
1886
+ "spki 0.8.0",
1887
+ ]
1888
+
1579
1889
  [[package]]
1580
1890
  name = "pkg-config"
1581
1891
  version = "0.3.34"
1582
1892
  source = "registry+https://github.com/rust-lang/crates.io-index"
1583
1893
  checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
1584
1894
 
1895
+ [[package]]
1896
+ name = "poly1305"
1897
+ version = "0.8.0"
1898
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1899
+ checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
1900
+ dependencies = [
1901
+ "cpufeatures 0.2.17",
1902
+ "opaque-debug",
1903
+ "universal-hash",
1904
+ ]
1905
+
1585
1906
  [[package]]
1586
1907
  name = "polyval"
1587
1908
  version = "0.6.2"
@@ -1622,14 +1943,40 @@ dependencies = [
1622
1943
  "syn 2.0.119",
1623
1944
  ]
1624
1945
 
1946
+ [[package]]
1947
+ name = "primefield"
1948
+ version = "0.14.0"
1949
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1950
+ checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4"
1951
+ dependencies = [
1952
+ "crypto-bigint 0.7.5",
1953
+ "crypto-common 0.2.2",
1954
+ "ff 0.14.0",
1955
+ "rand_core 0.10.1",
1956
+ "subtle",
1957
+ "zeroize",
1958
+ ]
1959
+
1625
1960
  [[package]]
1626
1961
  name = "primeorder"
1627
1962
  version = "0.13.6"
1628
1963
  source = "registry+https://github.com/rust-lang/crates.io-index"
1629
1964
  checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
1630
1965
  dependencies = [
1631
- "elliptic-curve",
1966
+ "elliptic-curve 0.13.8",
1967
+ ]
1968
+
1969
+ [[package]]
1970
+ name = "primeorder"
1971
+ version = "0.14.0"
1972
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1973
+ checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06"
1974
+ dependencies = [
1975
+ "elliptic-curve 0.14.1",
1976
+ "once_cell",
1977
+ "primefield",
1632
1978
  "serdect",
1979
+ "wnaf",
1633
1980
  ]
1634
1981
 
1635
1982
  [[package]]
@@ -1650,6 +1997,18 @@ dependencies = [
1650
1997
  "proc-macro2",
1651
1998
  ]
1652
1999
 
2000
+ [[package]]
2001
+ name = "r-efi"
2002
+ version = "5.3.0"
2003
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2004
+ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
2005
+
2006
+ [[package]]
2007
+ name = "r-efi"
2008
+ version = "6.0.0"
2009
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2010
+ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
2011
+
1653
2012
  [[package]]
1654
2013
  name = "radium"
1655
2014
  version = "0.7.0"
@@ -1683,7 +2042,7 @@ version = "0.6.4"
1683
2042
  source = "registry+https://github.com/rust-lang/crates.io-index"
1684
2043
  checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1685
2044
  dependencies = [
1686
- "getrandom",
2045
+ "getrandom 0.2.17",
1687
2046
  ]
1688
2047
 
1689
2048
  [[package]]
@@ -1757,10 +2116,20 @@ version = "0.4.0"
1757
2116
  source = "registry+https://github.com/rust-lang/crates.io-index"
1758
2117
  checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
1759
2118
  dependencies = [
1760
- "hmac",
2119
+ "hmac 0.12.1",
1761
2120
  "subtle",
1762
2121
  ]
1763
2122
 
2123
+ [[package]]
2124
+ name = "rfc6979"
2125
+ version = "0.6.0"
2126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2127
+ checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b"
2128
+ dependencies = [
2129
+ "crypto-bigint 0.7.5",
2130
+ "hmac 0.13.0",
2131
+ ]
2132
+
1764
2133
  [[package]]
1765
2134
  name = "ring"
1766
2135
  version = "0.17.14"
@@ -1769,7 +2138,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
1769
2138
  dependencies = [
1770
2139
  "cc",
1771
2140
  "cfg-if",
1772
- "getrandom",
2141
+ "getrandom 0.2.17",
1773
2142
  "libc",
1774
2143
  "untrusted",
1775
2144
  "windows-sys 0.52.0",
@@ -1875,10 +2244,24 @@ version = "0.7.3"
1875
2244
  source = "registry+https://github.com/rust-lang/crates.io-index"
1876
2245
  checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
1877
2246
  dependencies = [
1878
- "base16ct",
2247
+ "base16ct 0.2.0",
1879
2248
  "der 0.7.10",
1880
2249
  "generic-array",
1881
- "pkcs8",
2250
+ "pkcs8 0.10.2",
2251
+ "subtle",
2252
+ "zeroize",
2253
+ ]
2254
+
2255
+ [[package]]
2256
+ name = "sec1"
2257
+ version = "0.8.1"
2258
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2259
+ checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d"
2260
+ dependencies = [
2261
+ "base16ct 1.0.0",
2262
+ "ctutils",
2263
+ "der 0.8.1",
2264
+ "hybrid-array",
1882
2265
  "serdect",
1883
2266
  "subtle",
1884
2267
  "zeroize",
@@ -1950,11 +2333,11 @@ dependencies = [
1950
2333
 
1951
2334
  [[package]]
1952
2335
  name = "serdect"
1953
- version = "0.2.0"
2336
+ version = "0.4.3"
1954
2337
  source = "registry+https://github.com/rust-lang/crates.io-index"
1955
- checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177"
2338
+ checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e"
1956
2339
  dependencies = [
1957
- "base16ct",
2340
+ "base16ct 1.0.0",
1958
2341
  "serde",
1959
2342
  ]
1960
2343
 
@@ -2025,6 +2408,7 @@ version = "3.0.0"
2025
2408
  source = "registry+https://github.com/rust-lang/crates.io-index"
2026
2409
  checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5"
2027
2410
  dependencies = [
2411
+ "digest 0.11.3",
2028
2412
  "rand_core 0.10.1",
2029
2413
  ]
2030
2414
 
@@ -2088,6 +2472,23 @@ dependencies = [
2088
2472
  "syn 2.0.119",
2089
2473
  ]
2090
2474
 
2475
+ [[package]]
2476
+ name = "snow"
2477
+ version = "0.10.0"
2478
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2479
+ checksum = "599b506ccc4aff8cf7844bc42cf783009a434c1e26c964432560fb6d6ad02d82"
2480
+ dependencies = [
2481
+ "aes-gcm",
2482
+ "blake2",
2483
+ "chacha20poly1305",
2484
+ "curve25519-dalek",
2485
+ "getrandom 0.3.4",
2486
+ "ring",
2487
+ "rustc_version",
2488
+ "sha2 0.10.9",
2489
+ "subtle",
2490
+ ]
2491
+
2091
2492
  [[package]]
2092
2493
  name = "spki"
2093
2494
  version = "0.7.3"
@@ -2406,6 +2807,15 @@ version = "0.11.1+wasi-snapshot-preview1"
2406
2807
  source = "registry+https://github.com/rust-lang/crates.io-index"
2407
2808
  checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
2408
2809
 
2810
+ [[package]]
2811
+ name = "wasip2"
2812
+ version = "1.0.4+wasi-0.2.12"
2813
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2814
+ checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
2815
+ dependencies = [
2816
+ "wit-bindgen",
2817
+ ]
2818
+
2409
2819
  [[package]]
2410
2820
  name = "wasm-bindgen"
2411
2821
  version = "0.2.126"
@@ -2610,6 +3020,23 @@ dependencies = [
2610
3020
  "memchr",
2611
3021
  ]
2612
3022
 
3023
+ [[package]]
3024
+ name = "wit-bindgen"
3025
+ version = "0.57.1"
3026
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3027
+ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
3028
+
3029
+ [[package]]
3030
+ name = "wnaf"
3031
+ version = "0.14.0"
3032
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3033
+ checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1"
3034
+ dependencies = [
3035
+ "ff 0.14.0",
3036
+ "group 0.14.0",
3037
+ "hybrid-array",
3038
+ ]
3039
+
2613
3040
  [[package]]
2614
3041
  name = "writeable"
2615
3042
  version = "0.6.3"
@@ -2625,6 +3052,18 @@ dependencies = [
2625
3052
  "tap",
2626
3053
  ]
2627
3054
 
3055
+ [[package]]
3056
+ name = "x25519-dalek"
3057
+ version = "2.0.1"
3058
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3059
+ checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
3060
+ dependencies = [
3061
+ "curve25519-dalek",
3062
+ "rand_core 0.6.4",
3063
+ "serde",
3064
+ "zeroize",
3065
+ ]
3066
+
2628
3067
  [[package]]
2629
3068
  name = "x509-cert"
2630
3069
  version = "0.3.0"
data/README.adoc CHANGED
@@ -18,7 +18,7 @@ Add to your Gemfile:
18
18
 
19
19
  [source,ruby]
20
20
  ----
21
- gem "confium", "~> 0.3"
21
+ gem "confium", "~> 0.7"
22
22
  ----
23
23
 
24
24
  Or install directly:
@@ -78,18 +78,38 @@ kp = Confium::TC::FrostP256.generate_keypair
78
78
  shares = Confium::TC::FrostP256.split_secret(kp["private_key"], 3, 5)
79
79
  recovered = Confium::TC::FrostP256.recover_secret(shares.first(3).map { |s| { "x" => s.x, "y" => s.y_bytes } })
80
80
  recovered == kp["private_key"] # => true
81
+
82
+ # Distributed key generation + 2-of-3 FROST-ed25519 signing (each party
83
+ # holds its own Confium::TC::Session and only exchanges round messages)
84
+ parties = %w[alice bob carol]
85
+ sessions = parties.each_with_index.map do |id, i|
86
+ Confium::TC::Session.new("FROST-ed25519-dkg", parties: parties, threshold: 2, this_party_idx: i)
87
+ end
88
+ # run rounds: session.round_step(messages_in) -> {"outgoing" => [...], "complete" => bool}
89
+ # broadcast "outgoing" payloads between sessions until every session is complete
90
+ dkg_share = sessions.first.result # this party's share (embeds the group public key)
91
+
92
+ signers = sessions.first(2).map.with_index do |s, i|
93
+ Confium::TC::Session.new("FROST-ed25519",
94
+ parties: parties.first(2), threshold: 2, this_party_idx: i,
95
+ local_share: dkg_share, message: "authentic message")
96
+ end
97
+ # run rounds as above; the completed session's #result is an RFC 8032
98
+ # Ed25519 signature verifiable under the group public key
81
99
  ----
82
100
 
83
- == API surface (v0.3)
101
+ == API surface (v0.7)
84
102
 
85
103
  === `Confium::Transparency`
86
104
  - `MerkleTree.new` / `#append(artifact_hash)` / `#root` / `#length` / `#empty?` / `#inclusion_proof(seq)`
87
105
  - `InclusionProof#sequence` / `#steps` / `#verify(root)`
106
+ - `Ots.stamp(hash)` / `Ots.verify(receipt, hash)` — OpenTimestamps anchoring interface (pure-Ruby stub; calendar-server wiring lands with the Rust client)
88
107
 
89
108
  === `Confium::Composite` — PQ migration
90
109
  - `.generate_ed25519_keypair` → `{ private_key:, public_key: }`
91
110
  - `.sign_ed25519(private_key, message)` → component Hash
92
- - `Signature.new(components)` / `#verify(message)` / `#component_count` / `#algorithms`
111
+ - `Signature.new(components)` / `#verify(message)` / `#component_count` / `#algorithms` / `#to_json`
112
+ - `.from_json(json)` / `.components_to_json(components)` / `.canonical_json(json, data)`
93
113
  - `VerificationResult#all_verified?` / `#per_component`
94
114
 
95
115
  === `Confium::Attributes` — threshold policy DSL
@@ -99,11 +119,14 @@ recovered == kp["private_key"] # => true
99
119
  - DSL: `min_count("attr", n)`, `min_distinct("attr", n)`, `any("attr")`, `all("attr")`, `none("attr")`, `and(...)`, `or(...)`, `not(p)`
100
120
 
101
121
  === `Confium::PKI`
102
- - `Certificate.from_der(bytes)` / `.from_pem(str)` / `#to_der` / `#to_pem` / `#fingerprint_sha256` / `#serial_hex` / `#not_before` / `#not_after` / `#valid_at?(iso8601)` / `#public_key_bytes`
122
+ - `Certificate.from_der(bytes)` / `.from_pem(str)` / `#to_der` / `#to_pem` / `#fingerprint_sha256` / `#serial_hex` / `#not_before` / `#not_after` / `#valid_at?(iso8601)` / `#public_key_bytes`; DER parse failures carry a byte `offset` in the error details
123
+ - `CertificateBuilder` / `CMS::SignedDataBuilder` — build certificates and signed data in Ruby
124
+ - `PathValidator.validate(leaf, intermediates, root, now_iso8601 = nil)` → `PathValidationResult` (chain validation leaf → root at a point in time)
103
125
  - `CSR.from_der` / `.from_pem` / `#to_der` / `#to_pem`
104
126
  - `CMS::SignedData.from_json` / `#to_json` / `#signer_count` / `#content_type` / `#content` / `#certificate_count` / `#certificate_at(i)`
105
127
  - `CMS::Content#bytes` / `#length`
106
128
  - `XMLDSig.canonicalize(xml)` / `.canonicalize_exclusive(xml)` (Canonical XML RFC 3076 + Exclusive C14N)
129
+ - `Cnml` — institutional certificate workflow helpers
107
130
 
108
131
  === `Confium::Identity` — actor roles
109
132
  - `.actor_types` → `["manufacturer", "testing_lab", "issuing_authority_officer", "biml_director", "quorum_coordinator", "verifier"]`
@@ -123,6 +146,51 @@ recovered == kp["private_key"] # => true
123
146
  - `.partial_decrypt(party_index, share_bytes, ciphertext)` → `{ party_index:, bytes: }`
124
147
  - `.aggregate_partials(partials, threshold, ciphertext)` → shared_secret bytes
125
148
 
149
+ === `Confium::TC::Cmp20` / `Confium::TC::Gg18` — threshold ECDSA protocols
150
+ - `.keygen(threshold, parties)` → `{ public_key, shares }`
151
+ - `.sign(shares, public_key, message)` → DER ECDSA signature
152
+
153
+ === `Confium::TC::Session` — per-party threshold sessions (real FROST)
154
+ - `Session.new(scheme, parties:, threshold:, this_party_idx:, local_share: nil, message: nil)` — `"FROST-ed25519-dkg"` for distributed key generation, `"FROST-ed25519"` for signing (pass the DKG share and the message)
155
+ - `#scheme_name` / `#threshold` / `#party_count` / `#this_party_idx` / `#round` / `#complete?`
156
+ - `#round_step(messages)` → `{ "outgoing" => [{from, to, round, payload}...], "complete" => bool }` — feed each round's incoming messages, broadcast the outgoing ones
157
+ - `#result` — after DKG: share blob (group public key + party share); after signing: RFC 8032 Ed25519 signature
158
+
159
+ === `Confium::TC::Coordinator` — quorum signing orchestration
160
+ - `Coordinator.new(quorum_id:)` / `#create_session(message:, threshold:, scheme: "CMP20-ECDSA-P256")` / `#submit_commitment` / `#submit_share` / `#aggregate` / `#session_state`
161
+ - `SigningSession#add_commitment` / `#add_share` / `#threshold_met?` / `#aggregate` — the seam every transport adapts to
162
+ - `NetworkCoordinator` — TCP/NDJSON server (`#start` / `#stop` / `#running?`); `SignerClient` — remote submit + aggregate with typed `RemoteError`
163
+ - `ShareFile` — encrypted share-file persistence
164
+
165
+ === `Confium::Store::Keystore` — key handles and remote signing
166
+ - `Keystore.new(backend, **options)` / `.backends`
167
+ - `#sign(key_id, algorithm, message)` → signature bytes (sign-with-handle contract; cloud KMS backends `aws-kms` / `gcp-kms` / `azure-keyvault` via cargo features)
168
+
169
+ === `Confium::Audit` — structured audit trail
170
+ - `Audit.sink =` / `Audit.sink` / `Audit.enabled?` / `Audit.record(...)`
171
+ - `Sink` (base) / `MemorySink` / `StderrSink` / `FileSink`
172
+ - `OtlpSink.new(endpoint:, headers:, service_name:, ...)` — OTLP/HTTP export with retry and `#dropped` counter
173
+
174
+ === `Confium::OpenPGP`
175
+ - `.armor(data, type)` / `.dearmor(data)` — RFC 9580 §6 ASCII armor with CRC-24 (pure Ruby)
176
+ - `.verify_detached(message, signature, keys)` / `.verify(...)` — real signature verification when the extension is built with the `pgp` feature; `PGP_AVAILABLE` reports it
177
+
178
+ === `Confium::Transport` — coordinator clients over any transport
179
+ - `SignerClient.new(url)` — connect over any registry transport: `tcp://host:port` (local/trusted) or `noise://host:port?key=<hex>&pinned=<hex>` (Noise_XX encrypted, stable identity + peer pinning)
180
+ - `#register(signer_id, quorum_id)` / `#create_session(quorum_id, scheme, message, threshold, num_parties)` → session id
181
+ - `#submit_commitment(session_id, signer_id, bytes)` / `#submit_share(session_id, signer_id, bytes)`
182
+ - `CoordinatorServer.new(url)` — serve coordinator sessions over any linked scheme (test/in-process use)
183
+
184
+ === `Confium::ERS` — evidence records
185
+ - `EvidenceRecord.build_initial(...)` / `#renew(...)` / `#renewal_count` (RFC 4998 / RFC 6283 archival)
186
+
187
+ === `Confium::Policy` / `Confium::SecureBytes`
188
+ - `Policy.jurisdiction = :eu` — jurisdictional algorithm policy (EU/US profiles; SM2/SM3/SM4 for CN planned)
189
+ - `SecureBytes.wrap(raw)` — zeroize-on-clear wrapper for private keys, shares, and secrets (`#bytes` non-destructive read, `#clear`)
190
+
191
+ === Errors
192
+ - Typed error hierarchy (`ParseError`, `ThresholdError`, `VerificationError`, `PolicyViolationError`, ...) — native failures surface positional `details` hashes (including DER byte offsets for parse errors)
193
+
126
194
  == Development
127
195
 
128
196
  After checking out the repo:
data/confium.gemspec CHANGED
@@ -40,6 +40,8 @@ Gem::Specification.new do |spec|
40
40
  ]
41
41
  spec.files.reject! { |f| File.directory?(f) }
42
42
  spec.files.reject! { |f| f =~ /\.(dll|so|dylib|lib|bundle)\Z/ }
43
+ # Windows socket diagnostic crate — development-only, never shipped.
44
+ spec.files.reject! { |f| f.start_with?('ext/socket-smoke/') }
43
45
  spec.require_paths = ['lib']
44
46
 
45
47
  spec.required_ruby_version = '>= 3.1.0'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Confium
4
- VERSION = '0.6.2'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: confium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Ribose Open
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-26 00:00:00.000000000 Z
11
+ date: 2026-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake