cddl 0.11.5 → 0.12.5
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 +4 -4
- data/bin/cddl +15 -2
- data/cddl.gemspec +2 -2
- data/data/cddl.abnf +22 -10
- data/lib/cddl.rb +42 -3
- data/test-data/b64u-strict.cddl +2 -0
- data/test-data/valemb.cddl +16 -0
- metadata +8 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b77b45ee60d8e79876e52c98aa9ab48548edf4e8af92faa28672db533c292a39
|
|
4
|
+
data.tar.gz: f4f61374b1b0c74010f4e2f73ef87487889b1d5f5feefbedba829bba685fc959
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed08c886645ce05ad9af193ce4e2a724f1d394c731a3e5438112fd1a5a7a264db2833036d004ec249052ca9cefb42f5a5adb6a13c6ab1ef186edf524debc4b3a
|
|
7
|
+
data.tar.gz: e4bcc5a23cf88e2a20d5238a1f2ebf74fa3ae2988deaf3f71336bd009b15b38d511c0cd037a68923d24a86b5ae7d41365f1b31d5294fdeb6ab57dd0f13117ec1
|
data/bin/cddl
CHANGED
|
@@ -22,6 +22,13 @@ def usage
|
|
|
22
22
|
exit EX_USAGE
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def utfify(s)
|
|
26
|
+
s.force_encoding(Encoding::UTF_8).scrub { |c|
|
|
27
|
+
warn "*** replaced invalid UTF-8 byte sequence #{c.inspect} by U+FFFD REPLACEMENT CHARACTER"
|
|
28
|
+
0xFFFD.chr(Encoding::UTF_8)
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
25
32
|
def read_arg(arg, remember_fn = true)
|
|
26
33
|
if arg == "-"
|
|
27
34
|
$fn = "(stdin)" if remember_fn
|
|
@@ -34,7 +41,7 @@ def read_arg(arg, remember_fn = true)
|
|
|
34
41
|
end
|
|
35
42
|
|
|
36
43
|
def parser
|
|
37
|
-
@parser ||= CDDL::Parser.new(read_arg(ARGV[0], false))
|
|
44
|
+
@parser ||= CDDL::Parser.new(utfify(read_arg(ARGV[0], false)))
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
def my_pp(v)
|
|
@@ -99,7 +106,12 @@ begin
|
|
|
99
106
|
instance = if $sequence
|
|
100
107
|
CBOR.decode("\x9f".b << instance.b << "\xff".b)
|
|
101
108
|
else
|
|
102
|
-
|
|
109
|
+
begin
|
|
110
|
+
CBOR.decode(instance.b)
|
|
111
|
+
rescue => e
|
|
112
|
+
warn e.inspect if verbose
|
|
113
|
+
JSON.load(utfify(instance))
|
|
114
|
+
end
|
|
103
115
|
end
|
|
104
116
|
instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
|
|
105
117
|
warn "#{fn}:" if verbose
|
|
@@ -107,6 +119,7 @@ begin
|
|
|
107
119
|
# my_pp ann
|
|
108
120
|
instance.cbor_add_annotations_from(ann) rescue nil
|
|
109
121
|
my_diag(instance) if $annotate
|
|
122
|
+
warn "ann: #{!!ann}" if verbose
|
|
110
123
|
unless ann
|
|
111
124
|
retcode = 1
|
|
112
125
|
end
|
data/cddl.gemspec
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'cddl'
|
|
3
|
-
s.version = '0.
|
|
3
|
+
s.version = '0.12.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
7
|
s.add_dependency('abnc', '~> 0.1.1')
|
|
8
8
|
s.add_dependency('json_pure')
|
|
9
9
|
s.add_dependency('abnftt')
|
|
10
|
-
s.add_dependency('regexp-examples') # , '1.1.0')
|
|
10
|
+
s.add_dependency('regexp-examples', '~> 1.5.1') # , '1.1.0')
|
|
11
11
|
s.add_dependency('colorize')
|
|
12
12
|
s.add_dependency('base32', '~> 0.3')
|
|
13
13
|
s.add_dependency('base45_lite', '~> 1.0')
|
data/data/cddl.abnf
CHANGED
|
@@ -41,7 +41,7 @@ grpent = [occur S] [memberkey S] type optcom
|
|
|
41
41
|
/ [occur S] groupname [genericarg] optcom ; preempted by above
|
|
42
42
|
/ [occur S] "(" S group S ")" optcom
|
|
43
43
|
|
|
44
|
-
memberkey = type1 S "=>"
|
|
44
|
+
memberkey = type1 S ["^" S] "=>"
|
|
45
45
|
/ bareword S ":"
|
|
46
46
|
/ value S ":"
|
|
47
47
|
|
|
@@ -70,27 +70,39 @@ fraction = 1*DIGIT
|
|
|
70
70
|
exponent = int
|
|
71
71
|
|
|
72
72
|
text = %x22 *SCHAR %x22
|
|
73
|
-
SCHAR = %x20-21 / %x23-7E / SESC
|
|
74
|
-
|
|
73
|
+
SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC
|
|
74
|
+
|
|
75
|
+
SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\
|
|
76
|
+
%x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
|
|
77
|
+
(%x75 hexchar) ) ; \uXXXX
|
|
78
|
+
|
|
79
|
+
hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" /
|
|
80
|
+
non-surrogate / (high-surrogate "\" %x75 low-surrogate)
|
|
81
|
+
non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") HEXDIG HEXDIG HEXDIG) /
|
|
82
|
+
("D" %x30-37 HEXDIG HEXDIG)
|
|
83
|
+
high-surrogate = "D" ("8"/"9"/"A"/"B") HEXDIG HEXDIG
|
|
84
|
+
low-surrogate = "D" ("C"/"D"/"E"/"F") HEXDIG HEXDIG
|
|
85
|
+
hexscalar = "10" HEXDIG HEXDIG HEXDIG HEXDIG / HEXDIG1 HEXDIG HEXDIG HEXDIG HEXDIG
|
|
86
|
+
/ non-surrogate / HEXDIG [HEXDIG [HEXDIG]]
|
|
75
87
|
|
|
76
88
|
bytes = [bsqual] %x27 *BCHAR %x27
|
|
77
|
-
BCHAR = %x20-26 / %x28-5B / %x5D-7E / SESC / CRLF
|
|
78
|
-
bsqual =
|
|
79
|
-
/ %x62.36.34 ; "b64"
|
|
89
|
+
BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF
|
|
90
|
+
bsqual = "h" / "b64"
|
|
80
91
|
|
|
81
92
|
id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
|
|
82
93
|
ALPHA = %x41-5A / %x61-7A
|
|
83
|
-
EALPHA =
|
|
94
|
+
EALPHA = ALPHA / "@" / "_" / "$"
|
|
84
95
|
DIGIT = %x30-39
|
|
85
96
|
DIGIT1 = %x31-39
|
|
86
97
|
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
|
98
|
+
HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
|
|
87
99
|
BINDIG = %x30-31
|
|
88
100
|
|
|
89
101
|
S = *WS
|
|
90
102
|
WS = SP / NL
|
|
91
103
|
SP = %x20
|
|
92
104
|
NL = COMMENT / CRLF
|
|
93
|
-
COMMENT = ";" *
|
|
94
|
-
|
|
105
|
+
COMMENT = ";" *PCHAR CRLF
|
|
106
|
+
PCHAR = %x20-7E / NONASCII
|
|
107
|
+
NONASCII = %xA0-D7FF / %xE000-10FFFD
|
|
95
108
|
CRLF = %x0A / %x0D.0A
|
|
96
|
-
|
data/lib/cddl.rb
CHANGED
|
@@ -61,7 +61,7 @@ module CDDL
|
|
|
61
61
|
if upto - presult < 100
|
|
62
62
|
part2 = source_text[presult...upto]
|
|
63
63
|
else
|
|
64
|
-
part2 = source_text[presult, 50] + "......." + source_text[upto-50, 50]
|
|
64
|
+
part2 = source_text[presult, 50] + "......." + (source_text[upto-50, 50] || "")
|
|
65
65
|
end
|
|
66
66
|
warn "*** Look for syntax problems around the #{
|
|
67
67
|
"%%%".colorize(background: :light_yellow)} markers:\n#{
|
|
@@ -1428,6 +1428,10 @@ module CDDL
|
|
|
1428
1428
|
else
|
|
1429
1429
|
[:type1]
|
|
1430
1430
|
end
|
|
1431
|
+
elsif s = ENV["CDDL_INVENT"]
|
|
1432
|
+
s = "_" if s == ""
|
|
1433
|
+
r = [:type1, [:text, "#{s}-#{name}"]]
|
|
1434
|
+
return r
|
|
1431
1435
|
end
|
|
1432
1436
|
end
|
|
1433
1437
|
if r
|
|
@@ -1473,6 +1477,18 @@ module CDDL
|
|
|
1473
1477
|
end
|
|
1474
1478
|
end
|
|
1475
1479
|
|
|
1480
|
+
STRING_ESCAPES = {
|
|
1481
|
+
"\"" => "\"",
|
|
1482
|
+
"/" => "/",
|
|
1483
|
+
"\\" => "\\",
|
|
1484
|
+
"'" => "'",
|
|
1485
|
+
"b" => "\b",
|
|
1486
|
+
"f" => "\f",
|
|
1487
|
+
"n" => "\n",
|
|
1488
|
+
"r" => "\r",
|
|
1489
|
+
"t" => "\t",
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1476
1492
|
def value(n)
|
|
1477
1493
|
# cheat:
|
|
1478
1494
|
# warn n
|
|
@@ -1482,7 +1498,20 @@ module CDDL
|
|
|
1482
1498
|
if parts[-1] != ""
|
|
1483
1499
|
warn "*** Problem decoding byte string #{s.inspect}"
|
|
1484
1500
|
end
|
|
1485
|
-
bsval = parts[0...-1].join("'").gsub(/\\(
|
|
1501
|
+
bsval = parts[0...-1].join("'").gsub(/\\u([Dd][89AaBb][0-9a-zA-Z]{2})\\u([Dd][CcDdEeFf][0-9a-zA-Z]{2})|\\u([0-9a-zA-Z]{4})|\\u\{([0-9a-zA-Z]+)\}|\r?(\n)|\\([^u])/) {
|
|
1502
|
+
if hex = $3 || $4
|
|
1503
|
+
hex.to_i(16).chr(Encoding::UTF_8)
|
|
1504
|
+
elsif lf = $5
|
|
1505
|
+
lf
|
|
1506
|
+
elsif escaped = $6
|
|
1507
|
+
STRING_ESCAPES[$6] or (
|
|
1508
|
+
fail "Invalid String Escape #{escaped.inspect} in #{s.inspect}"
|
|
1509
|
+
)
|
|
1510
|
+
else
|
|
1511
|
+
((($1.to_i(16) & 0x3ff) << 10) +
|
|
1512
|
+
($2.to_i(16) & 0x3ff) + 0x10000).chr(Encoding::UTF_8)
|
|
1513
|
+
end
|
|
1514
|
+
}
|
|
1486
1515
|
[:bytes,
|
|
1487
1516
|
case bsqual
|
|
1488
1517
|
when ""
|
|
@@ -1496,7 +1525,17 @@ module CDDL
|
|
|
1496
1525
|
end
|
|
1497
1526
|
]
|
|
1498
1527
|
else
|
|
1499
|
-
|
|
1528
|
+
if s[-1] == '"'
|
|
1529
|
+
s.gsub!(/\\u([Dd][89AaBb][0-9a-zA-Z]{2})\\u([Dd][CcDdEeFf][0-9a-zA-Z]{2})|\\([^u]|u[0-9a-zA-Z]{4})/) {
|
|
1530
|
+
if $3
|
|
1531
|
+
"\\#$3" # skip this, use eval parser
|
|
1532
|
+
else
|
|
1533
|
+
((($1.to_i(16) & 0x3ff) << 10) +
|
|
1534
|
+
($2.to_i(16) & 0x3ff) + 0x10000).chr(Encoding::UTF_8)
|
|
1535
|
+
end
|
|
1536
|
+
}
|
|
1537
|
+
end
|
|
1538
|
+
val = eval(s)
|
|
1500
1539
|
# warn val
|
|
1501
1540
|
case val
|
|
1502
1541
|
when Integer; [:int, val]
|
data/test-data/b64u-strict.cddl
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
cwt = [
|
|
2
|
+
bstr .cbor protected-map,
|
|
3
|
+
unprotected-map,
|
|
4
|
+
bstr .cbor payload-map,
|
|
5
|
+
bstr ; signature
|
|
6
|
+
]
|
|
7
|
+
|
|
8
|
+
protected-map = {
|
|
9
|
+
&(alg: 1) => int,
|
|
10
|
+
? &(typ: 16) => text,
|
|
11
|
+
* key => any
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
unprotected-map = ()
|
|
15
|
+
key = "key"
|
|
16
|
+
payload-map = { payload: "map"}
|
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.
|
|
4
|
+
version: 0.12.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: 2024-
|
|
11
|
+
date: 2024-06-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: cbor-diag
|
|
@@ -70,16 +70,16 @@ dependencies:
|
|
|
70
70
|
name: regexp-examples
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 1.5.1
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: 1.5.1
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: colorize
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -263,6 +263,7 @@ files:
|
|
|
263
263
|
- test-data/toerless0.cddl
|
|
264
264
|
- test-data/toerless1.cddl
|
|
265
265
|
- test-data/two_anonymous_groups.cddl
|
|
266
|
+
- test-data/valemb.cddl
|
|
266
267
|
- test-data/wrong1.cddl
|
|
267
268
|
- test-data/wrong1a.cddl
|
|
268
269
|
- test-data/wrong2.cddl
|
|
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
290
291
|
- !ruby/object:Gem::Version
|
|
291
292
|
version: '0'
|
|
292
293
|
requirements: []
|
|
293
|
-
rubygems_version: 3.5.
|
|
294
|
+
rubygems_version: 3.5.11
|
|
294
295
|
signing_key:
|
|
295
296
|
specification_version: 4
|
|
296
297
|
summary: CDDL generator and validator.
|