cddl 0.10.2 → 0.10.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cddl.gemspec +5 -3
- data/data/cddl.abnf +3 -1
- data/lib/cddl.rb +152 -39
- data/test-data/b64c-sloppy.cddl +1 -0
- data/test-data/printf.cddl +2 -0
- data/test-data/printf0.cddl +1 -0
- data/test-data/printf1.cddl +2 -0
- data/test-data/printf2.cddl +2 -0
- data/test-data/printf3.cddl +2 -0
- metadata +42 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3b0177b945919083ba2e0595570d098809b87839cb86e823dd54c62f225ad6b
|
4
|
+
data.tar.gz: 45302758ba30682f746f9b515cd293a5ac0883b2b126d6f74cd13a4911286e9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d613c36a0b4e7e1a18c68c1a2c5df9b0c46389936fdc063465bc8c130ba470b5c6467872fd55befa47972ea8cce8362f45a2164e2ee32c02539f29bd45fb1279
|
7
|
+
data.tar.gz: 6dca2e75e676eb00aba31e03671b2baf37568a2e4eb8fb0b506c8b02829efb88d6efda323891962e6ca3644be4added36482ee555bbf4d13565517c59cbaf397
|
data/cddl.gemspec
CHANGED
@@ -1,21 +1,23 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'cddl'
|
3
|
-
s.version = '0.10.
|
3
|
+
s.version = '0.10.5'
|
4
4
|
s.summary = "CDDL generator and validator."
|
5
5
|
s.description = %{A parser, generator, and validator for CDDL}
|
6
6
|
s.add_dependency('cbor-diag')
|
7
|
-
s.add_dependency('abnc')
|
7
|
+
s.add_dependency('abnc', '~> 0.1.1')
|
8
8
|
s.add_dependency('json_pure')
|
9
9
|
s.add_dependency('abnftt')
|
10
10
|
s.add_dependency('regexp-examples') # , '1.1.0')
|
11
11
|
s.add_dependency('colorize')
|
12
12
|
s.add_dependency('base32', '~> 0.3')
|
13
|
+
s.add_dependency('base45_lite', '~> 1.0')
|
14
|
+
s.add_dependency('scanf', '~> 1.0')
|
13
15
|
s.files = `git ls-files`.split("\n").grep(/^[a-z]/)
|
14
16
|
s.files = Dir['lib/**/*.rb'] + %w(cddl.gemspec) + Dir['data/**/*.abnf'] + Dir['data/**/*.cddl'] + Dir['test-data/**/*.cddl'] + Dir['test/**/*.rb']
|
15
17
|
s.require_path = 'lib'
|
16
18
|
s.executables = ['cddl']
|
17
19
|
s.default_executable = 'cddl'
|
18
|
-
s.required_ruby_version = '>= 2.
|
20
|
+
s.required_ruby_version = '>= 2.3'
|
19
21
|
s.author = "Carsten Bormann"
|
20
22
|
s.email = "cabo@tzi.org"
|
21
23
|
s.homepage = "http://github.com/cabo/cddl"
|
data/data/cddl.abnf
CHANGED
@@ -13,7 +13,7 @@ genericarg = "<" S type1 S *("," S type1 S ) ">"
|
|
13
13
|
type = type1 S *("/" S type1 S)
|
14
14
|
|
15
15
|
type1 = type2 [S (rangeop / annotator) S type2]
|
16
|
-
/ "#" "6" ["."
|
16
|
+
/ "#" "6" ["." tagnumber] "(" S type S ")" ; note no space!
|
17
17
|
/ "#" DIGIT ["." uint] ; major/ai
|
18
18
|
/ "#" ; any
|
19
19
|
/ "~" S typename [genericarg]
|
@@ -22,6 +22,8 @@ type1 = type2 [S (rangeop / annotator) S type2]
|
|
22
22
|
/ "&" S "(" S group S ")"
|
23
23
|
/ "&" S groupname [genericarg]
|
24
24
|
|
25
|
+
tagnumber = uint / ("<" type ">")
|
26
|
+
|
25
27
|
type2 = value
|
26
28
|
/ typename [genericarg]
|
27
29
|
/ "(" type ")"
|
data/lib/cddl.rb
CHANGED
@@ -2,11 +2,14 @@ require 'abnc'
|
|
2
2
|
require 'pp'
|
3
3
|
require 'pathname'
|
4
4
|
require 'cbor-pure' unless defined?(CBOR::Tagged)
|
5
|
+
require 'cbor-deterministic'
|
5
6
|
require 'regexp-examples'
|
6
7
|
require 'abnftt'
|
7
8
|
require 'colorize'
|
8
9
|
require 'base64'
|
9
10
|
require 'base32'
|
11
|
+
require 'base45_lite'
|
12
|
+
require 'scanf'
|
10
13
|
|
11
14
|
module CDDL
|
12
15
|
|
@@ -267,6 +270,21 @@ module CDDL
|
|
267
270
|
l.map {|l| l.sub(/^ {0,#{indent}}/, "")}.join
|
268
271
|
end
|
269
272
|
|
273
|
+
def unpack_array_to_sequence(content, where)
|
274
|
+
# remove the first head
|
275
|
+
n = case content.getbyte(0) - (4 << 5)
|
276
|
+
when 0..23; 1
|
277
|
+
when 24; 2
|
278
|
+
when 25; 3
|
279
|
+
when 26; 5
|
280
|
+
when 27; 9 # unlikely :-)
|
281
|
+
else fail ".cborseq sequence for #{where} not an array"
|
282
|
+
end
|
283
|
+
content[0...n] = ''
|
284
|
+
content
|
285
|
+
end
|
286
|
+
|
287
|
+
|
270
288
|
# Memoize a bit here
|
271
289
|
|
272
290
|
REGEXP_FOR_STRING = Hash.new {|h, k|
|
@@ -405,7 +423,11 @@ module CDDL
|
|
405
423
|
when 3
|
406
424
|
gen_word
|
407
425
|
when 6
|
408
|
-
|
426
|
+
tn = Integer === where[2] ? where[2] : generate1(where[2])
|
427
|
+
unless Integer === tn && tn >= 0
|
428
|
+
fail "Can't generate a tag number out of #{where[2]}"
|
429
|
+
end
|
430
|
+
CBOR::Tagged.new(tn, generate1(where[3]))
|
409
431
|
when 7
|
410
432
|
case where[2]
|
411
433
|
when nil
|
@@ -534,8 +556,7 @@ module CDDL
|
|
534
556
|
warn "HUH gen #{where.inspect} #{try.inspect}" unless try.nil?
|
535
557
|
end
|
536
558
|
end
|
537
|
-
|
538
|
-
content = generate1(target)
|
559
|
+
try_generate(target) do |content|
|
539
560
|
if validate1(content, where)
|
540
561
|
return content
|
541
562
|
end
|
@@ -561,22 +582,18 @@ module CDDL
|
|
561
582
|
end
|
562
583
|
enc = bytes ? Encoding::BINARY : Encoding::UTF_8
|
563
584
|
out.force_encoding(enc)
|
564
|
-
when :cbor, :cborseq
|
585
|
+
when :cbor, :cborseq, :cbordet, :cborseqdet
|
565
586
|
unless target == [:prim, 2]
|
566
587
|
fail "Don't know yet how to generate #{where}"
|
567
588
|
end
|
568
|
-
|
569
|
-
if conop == :
|
589
|
+
input = generate1(control)
|
590
|
+
if conop == :cbordet || conop == :cborseqdet
|
591
|
+
input = input.cbor_prepare_deterministic
|
592
|
+
end
|
593
|
+
content = CBOR::encode(input)
|
594
|
+
if conop == :cborseq || conop == :cborseqdet
|
570
595
|
# remove the first head
|
571
|
-
|
572
|
-
when 0..23; 1
|
573
|
-
when 24; 2
|
574
|
-
when 25; 3
|
575
|
-
when 26; 5
|
576
|
-
when 27; 9 # unlikely :-)
|
577
|
-
else fail "Generated .cborseq sequence for #{where} not an array"
|
578
|
-
end
|
579
|
-
content[0...n] = ''
|
596
|
+
content = unpack_array_to_sequence(content, where)
|
580
597
|
end
|
581
598
|
content
|
582
599
|
when :json
|
@@ -592,25 +609,28 @@ module CDDL
|
|
592
609
|
content = Integer(generate1(control)).to_s
|
593
610
|
content
|
594
611
|
when :join
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
when :b64u, :b64c, :b32, :h32, :hex, :hexlc, :hexuc
|
605
|
-
content = generate1(control)
|
606
|
-
unless String === content
|
607
|
-
fail "Don't know yet how to generate #{where}"
|
612
|
+
try_generate(control) do |content|
|
613
|
+
if Array === content &&
|
614
|
+
content.all? {|x| String === x} &&
|
615
|
+
Set[content.map {|x| x.encoding}].size == 1
|
616
|
+
content = content.join
|
617
|
+
if validate1(content, target)
|
618
|
+
return content
|
619
|
+
end
|
620
|
+
end
|
608
621
|
end
|
609
|
-
|
610
|
-
|
622
|
+
fail "Don't know yet how to generate #{where}"
|
623
|
+
when :b64u, :"b64u-sloppy", :b64c, :"b64c-sloppy",
|
624
|
+
:b45, :b32, :h32, :hex, :hexlc, :hexuc
|
625
|
+
try_generate(control) do |content|
|
626
|
+
if String === content
|
627
|
+
content = case conop
|
628
|
+
when :b64u, :"b64u-sloppy"
|
611
629
|
Base64.urlsafe_encode64(content, padding: false)
|
612
|
-
when :b64c
|
630
|
+
when :b64c, :"b64c-sloppy"
|
613
631
|
Base64.strict_encode64(content)
|
632
|
+
when :b45
|
633
|
+
Base45Lite.encode(content)
|
614
634
|
when :b32
|
615
635
|
Base32.table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
|
616
636
|
Base32.encode(content).gsub("=", "")
|
@@ -623,10 +643,32 @@ module CDDL
|
|
623
643
|
content.unpack("H*")[0]
|
624
644
|
else fail "Cannot happen"
|
625
645
|
end
|
626
|
-
|
646
|
+
if validate1(content, target)
|
647
|
+
return content
|
648
|
+
end
|
649
|
+
end
|
650
|
+
end
|
651
|
+
fail "Not smart enough to generate #{where}"
|
652
|
+
when :printf
|
653
|
+
try_generate(control) do |content|
|
654
|
+
if Array === content && content.size >= 1
|
655
|
+
fmt, *data = content
|
656
|
+
if String === fmt
|
657
|
+
begin
|
658
|
+
content = fmt % data
|
659
|
+
if validate1(content, target)
|
660
|
+
return content
|
661
|
+
end
|
662
|
+
rescue ArgumentError => e
|
663
|
+
# be verbose about mismatches here
|
664
|
+
@last_message << "\n** #{fmt.inspect} ArgumentError #{e}"
|
665
|
+
end
|
666
|
+
end
|
667
|
+
end
|
668
|
+
end
|
669
|
+
fail "Not smart enough to generate #{where}#{@last_message}"
|
627
670
|
when :within, :and
|
628
|
-
|
629
|
-
content = generate1(target)
|
671
|
+
try_generate(target) do |content|
|
630
672
|
if validate1(content, control)
|
631
673
|
return content
|
632
674
|
elsif conop == :within
|
@@ -654,6 +696,13 @@ module CDDL
|
|
654
696
|
end
|
655
697
|
end
|
656
698
|
|
699
|
+
def try_generate(target)
|
700
|
+
32.times do
|
701
|
+
content = generate1(target)
|
702
|
+
yield content # should return if success
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
657
706
|
VALUE_TYPE = {text: String, bytes: String, int: Integer, float: Float}
|
658
707
|
SIMPLE_VALUE = {
|
659
708
|
[:prim, 7, 20] => [true, false, :bool],
|
@@ -701,6 +750,19 @@ module CDDL
|
|
701
750
|
}]
|
702
751
|
end
|
703
752
|
|
753
|
+
|
754
|
+
def extract_arg0(t)
|
755
|
+
return [false] unless t[0] == :array
|
756
|
+
[true,
|
757
|
+
(el = t[1]
|
758
|
+
return [false] unless el[0..3] == [:member, 1, 1, nil]
|
759
|
+
ok, v, vt = extract_value(el[4])
|
760
|
+
return [false] unless ok
|
761
|
+
[v, vt]
|
762
|
+
),
|
763
|
+
*t[2..-1]]
|
764
|
+
end
|
765
|
+
|
704
766
|
def extract_feature(control, d)
|
705
767
|
ok, v, vt = extract_value(control)
|
706
768
|
if ok
|
@@ -1040,6 +1102,22 @@ module CDDL
|
|
1040
1102
|
ann if validate1((CBOR::decode(d) rescue :BAD_CBOR), control)
|
1041
1103
|
when :cborseq
|
1042
1104
|
ann if validate1((CBOR::decode("\x9f".b << d << "\xff".b) rescue :BAD_CBOR), control)
|
1105
|
+
when :cbordet
|
1106
|
+
decoded = CBOR::decode(d) rescue :BAD_CBOR
|
1107
|
+
if d != decoded.to_deterministic_cbor
|
1108
|
+
@last_message = "CBOR #{d.inspect} not deterministically encoded"
|
1109
|
+
nil
|
1110
|
+
else
|
1111
|
+
ann if validate1(decoded, control)
|
1112
|
+
end
|
1113
|
+
when :cborseqdet
|
1114
|
+
decoded = CBOR::decode("\x9f".b << d << "\xff".b) rescue :BAD_CBOR
|
1115
|
+
if d != unpack_array_to_sequence(decoded.to_deterministic_cbor, d.inspect)
|
1116
|
+
@last_message = "CBOR Sequence #{d.inspect} not deterministically encoded"
|
1117
|
+
nil
|
1118
|
+
else
|
1119
|
+
ann if validate1(decoded, control)
|
1120
|
+
end
|
1043
1121
|
when :json
|
1044
1122
|
ann if validate1((JSON::load(d) rescue :BAD_JSON), control)
|
1045
1123
|
when :decimal
|
@@ -1060,19 +1138,26 @@ module CDDL
|
|
1060
1138
|
else
|
1061
1139
|
fail "Don't know yet how to validate against #{where}"
|
1062
1140
|
end
|
1063
|
-
when :b64u, :b64c, :b32, :h32, :hex, :hexlc, :hexuc
|
1141
|
+
when :b64u, :"b64u-sloppy", :b64c, :"b64c-sloppy", :b45, :b32, :h32, :hex, :hexlc, :hexuc
|
1064
1142
|
ann if (
|
1065
1143
|
String === d && (
|
1066
1144
|
decoded = case conop
|
1067
1145
|
when :b64u
|
1068
1146
|
/=/ !~ d &&
|
1069
1147
|
Base64.urlsafe_decode64(d)
|
1148
|
+
when :"b64u-sloppy"
|
1149
|
+
/[-_=]/ !~ d &&
|
1150
|
+
Base64.decode64(d.tr("+/", "-_"))
|
1070
1151
|
when :b64c
|
1071
1152
|
Base64.strict_decode64(d)
|
1153
|
+
when :"b64c-sloppy"
|
1154
|
+
Base64.decode64(d)
|
1072
1155
|
when :b32
|
1073
1156
|
/=/ !~ d &&
|
1074
1157
|
(Base32.table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567") &&
|
1075
1158
|
Base32.decode(d)
|
1159
|
+
when :b45
|
1160
|
+
Base45Lite.decode(d)
|
1076
1161
|
when :h32
|
1077
1162
|
/=/ !~ d &&
|
1078
1163
|
(Base32.table = "0123456789ABCDEFGHIJKLMNOPQRSTUV") &&
|
@@ -1087,6 +1172,21 @@ module CDDL
|
|
1087
1172
|
end
|
1088
1173
|
) && validate1(decoded.b, control)
|
1089
1174
|
)
|
1175
|
+
when :printf
|
1176
|
+
ann if String === d && (
|
1177
|
+
ok, fmt, *v = extract_arg0(control)
|
1178
|
+
if ok && String == fmt[1]
|
1179
|
+
fmt = fmt[0]
|
1180
|
+
# warn "** ok #{ok.inspect} fmt #{fmt.inspect} v #{v.inspect}"
|
1181
|
+
decoded = d.scanf(fmt) # this is a bit too lenient, so let's do:
|
1182
|
+
encode_again = fmt % decoded
|
1183
|
+
if encode_again != d
|
1184
|
+
warn "** fmt #{fmt.inspect} d #{d.inspect} decoded #{decoded.inspect} encode_again #{encode_again.inspect}"
|
1185
|
+
else
|
1186
|
+
validate1(decoded, [:array, *v])
|
1187
|
+
end
|
1188
|
+
end
|
1189
|
+
)
|
1090
1190
|
when :within
|
1091
1191
|
if validate1(d, control)
|
1092
1192
|
ann
|
@@ -1122,7 +1222,9 @@ module CDDL
|
|
1122
1222
|
end
|
1123
1223
|
d = CBOR::Tagged.new(t, d == 0 ? "".b : d.digits(256).reverse!.pack("C*"))
|
1124
1224
|
end
|
1125
|
-
CBOR::Tagged === d &&
|
1225
|
+
CBOR::Tagged === d && (
|
1226
|
+
Integer === where[2] ? d.tag == where[2] : validate1a(d.tag, where[2])
|
1227
|
+
) && validate1a(d.data, where[3])
|
1126
1228
|
when 7
|
1127
1229
|
t, v = extract_value(where)
|
1128
1230
|
if t
|
@@ -1441,11 +1543,15 @@ module CDDL
|
|
1441
1543
|
|
1442
1544
|
BRACE = {"{" => :map, "[" => :array}
|
1443
1545
|
RANGE_EXCLUDE_END = {".." => false, "..." => true}
|
1444
|
-
SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp,
|
1546
|
+
SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp,
|
1547
|
+
:cbor, :cborseq, :cbordet, :cborseqdet,
|
1548
|
+
:within, :and,
|
1445
1549
|
:default, :lt, :le, :gt, :ge, :eq, :ne,
|
1446
1550
|
:feature, :abnf, :abnfb, :det, :cat, :plus,
|
1447
1551
|
:json, :decimal, :join,
|
1448
|
-
:b64u, :
|
1552
|
+
:b64u, :"b64u-sloppy", :b64c, :"b64c-sloppy",
|
1553
|
+
:b45, :b32, :h32, :hex, :hexlc, :hexuc,
|
1554
|
+
:printf,
|
1449
1555
|
]
|
1450
1556
|
|
1451
1557
|
def type1(n, canbegroup = false)
|
@@ -1477,7 +1583,14 @@ module CDDL
|
|
1477
1583
|
[:prim]
|
1478
1584
|
when /\A#(\d+)/
|
1479
1585
|
maj = $1.to_i
|
1480
|
-
s = [:prim, maj
|
1586
|
+
s = [:prim, maj]
|
1587
|
+
if tn = n.tagnumber
|
1588
|
+
if ui = tn.uint
|
1589
|
+
s << ui.to_s.to_i
|
1590
|
+
elsif tt = tn.type
|
1591
|
+
s << type(tt)
|
1592
|
+
end
|
1593
|
+
end
|
1481
1594
|
if tagged_type = n.type
|
1482
1595
|
s << type(tagged_type)
|
1483
1596
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
a = text .b64c-sloppy 'mnoabcdue=='
|
@@ -0,0 +1 @@
|
|
1
|
+
my_label = text .printf (["0x%x: %a", 4711, 81.5])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cddl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: abnc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.1.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.1.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json_pure
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: base45_lite
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: scanf
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
111
139
|
description: A parser, generator, and validator for CDDL
|
112
140
|
email: cabo@tzi.org
|
113
141
|
executables:
|
@@ -133,6 +161,7 @@ files:
|
|
133
161
|
- test-data/abnf3.cddl
|
134
162
|
- test-data/ambig.cddl
|
135
163
|
- test-data/b.cddl
|
164
|
+
- test-data/b64c-sloppy.cddl
|
136
165
|
- test-data/b64c.cddl
|
137
166
|
- test-data/b64u.cddl
|
138
167
|
- test-data/badaddr.cddl
|
@@ -206,6 +235,11 @@ files:
|
|
206
235
|
- test-data/oidbat.cddl
|
207
236
|
- test-data/patch1.cddl
|
208
237
|
- test-data/plus.cddl
|
238
|
+
- test-data/printf.cddl
|
239
|
+
- test-data/printf0.cddl
|
240
|
+
- test-data/printf1.cddl
|
241
|
+
- test-data/printf2.cddl
|
242
|
+
- test-data/printf3.cddl
|
209
243
|
- test-data/reused_named_group.cddl
|
210
244
|
- test-data/sasl.cddl
|
211
245
|
- test-data/sequence.cddl
|
@@ -238,14 +272,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
238
272
|
requirements:
|
239
273
|
- - ">="
|
240
274
|
- !ruby/object:Gem::Version
|
241
|
-
version: '2.
|
275
|
+
version: '2.3'
|
242
276
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
277
|
requirements:
|
244
278
|
- - ">="
|
245
279
|
- !ruby/object:Gem::Version
|
246
280
|
version: '0'
|
247
281
|
requirements: []
|
248
|
-
rubygems_version: 3.4.
|
282
|
+
rubygems_version: 3.4.10
|
249
283
|
signing_key:
|
250
284
|
specification_version: 4
|
251
285
|
summary: CDDL generator and validator.
|