cddl 0.8.17 → 0.8.22

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: e57d91298d6da2ed2f30060754b3c54f36ebdbf967e6e4e5f3e164fd8dfe2004
4
- data.tar.gz: c1f33e309cee195a2438d4e840fcef8748de4f50625f55ec15dbb154e1b43994
3
+ metadata.gz: 72490cb2a368cfaec3e71cae79f323665fc64f0049feeb30050a6e8275566cda
4
+ data.tar.gz: 6ad8a0c69b34745dcd41f7c5627c57e9a4292539115f4d63c502d4c0a3cd0218
5
5
  SHA512:
6
- metadata.gz: 871fba7d4ec1b1d94a28149c3c9f9c9cdc4e60ddadb9d503f9ada96b35809534ed576865133f5a78c8645f1cce67f03ef04c799528c5dfa18752398d7e193302
7
- data.tar.gz: df38f1006d6c36782609681c994fd09c8b0eb8a23d35d8de57dcd6b252a18d97d05ef42b776b276b56359e8ee212b25e923e6b337c0944a7646e7770d36b6696
6
+ metadata.gz: 1fcbc5a8d49391656566b9f4b7d03392a579b5e999d301b2dab877aa25ff6d31c4575a94a771bdf8df0d0c3b88dd086bafe952359bb297690325204fbf732c11
7
+ data.tar.gz: 15ce2e416c02c834d3853520ca2fc8baa8b26359623dff75f6615a755a6ef4007abc2fb0170248ae5b57783e52fd779bc5c88be9cea70e7534ac9104cbfc67a8
data/bin/cddl CHANGED
@@ -14,8 +14,8 @@ def usage
14
14
  warn "Usage:"
15
15
  warn "#$0 spec.cddl generate [n]"
16
16
  warn "#$0 spec.cddl json-generate [n]"
17
- warn "#$0 spec.cddl validate instance.cbor"
18
- warn "#$0 spec.cddl validate instance.json"
17
+ warn "#$0 spec.cddl validate instance.cbor..."
18
+ warn "#$0 spec.cddl validate instance.json..."
19
19
  exit EX_USAGE
20
20
  end
21
21
 
@@ -48,6 +48,8 @@ def my_diag(v)
48
48
  end
49
49
  end
50
50
 
51
+ retcode = 0
52
+
51
53
  begin
52
54
  case ARGV[1]
53
55
  when /\A..*p/
@@ -85,19 +87,25 @@ begin
85
87
  g = parser.generate
86
88
  puts JSON.pretty_generate(g)
87
89
  end
88
- when /\Av/
89
- instance = read_arg(ARGV[2])
90
- instance = if $sequence
91
- CBOR.decode("\x9f".b << instance.b << "\xff".b)
92
- else
93
- CBOR.decode(instance.b) rescue JSON.load(instance)
90
+ when /\Av(v)?/
91
+ verbose = $1
92
+ ARGV[2..-1].each do |fn|
93
+ instance = read_arg(fn)
94
+ instance = if $sequence
95
+ CBOR.decode("\x9f".b << instance.b << "\xff".b)
96
+ else
97
+ CBOR.decode(instance.b) rescue JSON.load(instance)
98
+ end
99
+ instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
100
+ warn "#{fn}:" if verbose
101
+ ann = parser.validate(instance)
102
+ # my_pp ann
103
+ instance.cbor_add_annotations_from(ann) rescue nil
104
+ my_diag(instance) if $annotate
105
+ unless ann
106
+ retcode = 1
107
+ end
94
108
  end
95
- instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
96
- ann = parser.validate(instance)
97
- # my_pp ann
98
- instance.cbor_add_annotations_from(ann) rescue nil
99
- my_diag(instance) if $annotate
100
- exit 1 unless ann
101
109
  else
102
110
  usage
103
111
  end
@@ -105,3 +113,5 @@ rescue CDDL::ParseError => e
105
113
  warn e.message
106
114
  exit EX_DATAERR
107
115
  end
116
+
117
+ exit retcode
data/cddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.8.17'
3
+ s.version = '0.8.22'
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')
data/lib/cddl.rb CHANGED
@@ -56,6 +56,8 @@ module CDDL
56
56
  @ast = @abnf.ast?
57
57
  # our little argument stack for rule processing
58
58
  @insides = []
59
+ # collect error information
60
+ @last_message = ""
59
61
  end
60
62
 
61
63
  def apr # for debugging
@@ -244,6 +246,12 @@ module CDDL
244
246
  [rule[0], *rule[1]]
245
247
  end
246
248
 
249
+ def remove_indentation(s)
250
+ l = s.lines
251
+ indent = l.grep(/\S/).map {|l| l[/^\s*/].size}.min
252
+ l.map {|l| l.sub(/^ {0,#{indent}}/, "")}.join
253
+ end
254
+
247
255
  # Memoize a bit here
248
256
 
249
257
  REGEXP_FOR_STRING = Hash.new {|h, k|
@@ -255,6 +263,11 @@ module CDDL
255
263
  h[k] = ABNF.from_abnf(grammar)
256
264
  }
257
265
 
266
+ ABNF_ENCODING_FOR_CONOP = {
267
+ abnf: Encoding::UTF_8,
268
+ abnfb: Encoding::BINARY
269
+ }
270
+
258
271
  def generate
259
272
  @recursion = 0
260
273
  generate1(rules)
@@ -399,7 +412,7 @@ module CDDL
399
412
  when :anno
400
413
  target = where[2]
401
414
  control = where[3]
402
- case where[1]
415
+ case conop = where[1]
403
416
  when :size
404
417
  should_be_int = generate1(control)
405
418
  unless (Array === target && target[0] == :prim && [0, 2, 3].include?(target[1])) && Integer === should_be_int && should_be_int >= 0
@@ -447,9 +460,10 @@ module CDDL
447
460
  generate1(target, inmap)
448
461
  when :feature
449
462
  generate1(target, inmap)
450
- when :cat
463
+ when :cat, :det
451
464
  lhs = generate1(target, inmap)
452
465
  rhs = generate1(control)
466
+ rhs = remove_indentation(rhs) if conop == :det
453
467
  begin
454
468
  lhs + rhs
455
469
  rescue Exception => e
@@ -483,7 +497,7 @@ module CDDL
483
497
  content = Integer(content)
484
498
  case target[1]
485
499
  when 0
486
- case where[1]
500
+ case conop
487
501
  when :lt
488
502
  rand(0...content)
489
503
  when :le
@@ -510,18 +524,25 @@ module CDDL
510
524
  fail "Don't know yet how to generate #{where}"
511
525
  end
512
526
  REGEXP_FOR_STRING[regexp].random_example(max_repeater_variance: 5)
513
- when :abnf
527
+ when :abnf, :abnfb
514
528
  grammar = generate1(control)
515
- unless target == [:prim, 3] && String === grammar
529
+ bytes = true if target == [:prim, 2]
530
+ bytes = false if target == [:prim, 3]
531
+ unless !bytes.nil? && String === grammar
516
532
  fail "Don't know yet how to generate #{where}"
517
533
  end
518
- ABNF_PARSER_FOR_STRING[grammar].generate
534
+ out = ABNF_PARSER_FOR_STRING[grammar].generate
535
+ if conop == :abnfb
536
+ out = out.codepoints.pack("C*")
537
+ end
538
+ enc = bytes ? Encoding::BINARY : Encoding::UTF_8
539
+ out.force_encoding(enc)
519
540
  when :cbor, :cborseq
520
541
  unless target == [:prim, 2]
521
542
  fail "Don't know yet how to generate #{where}"
522
543
  end
523
544
  content = CBOR::encode(generate1(control))
524
- if where[1] == :cborseq
545
+ if conop == :cborseq
525
546
  # remove the first head
526
547
  n = case content.getbyte(0) - (4 << 5)
527
548
  when 0..23; 1
@@ -539,7 +560,7 @@ module CDDL
539
560
  content = generate1(target)
540
561
  if validate1(content, control)
541
562
  return content
542
- elsif where[1] == :within
563
+ elsif conop == :within
543
564
  warn "*** #{content.inspect} meets #{target.inspect} but not #{control.inspect}"
544
565
  end
545
566
  end
@@ -580,7 +601,7 @@ module CDDL
580
601
  elsif t[0] == :anno
581
602
  _, conop, target, control = t
582
603
  # warn ["EXV0", conop, target, control].inspect
583
- if conop == :cat || conop == :plus
604
+ if conop == :cat || conop == :plus || conop == :det
584
605
  ok1, v1, vt1 = extract_value(target)
585
606
  ok2, v2, vt2 = extract_value(control)
586
607
  # warn ["EXV", ok1, v1, vt1, ok2, v2, vt2].inspect
@@ -590,6 +611,7 @@ module CDDL
590
611
  elsif vt1 == Float
591
612
  [true, v1 + v2, vt1] if vt2 == Integer || vt2 == Float
592
613
  else
614
+ v2 = remove_indentation(v2) if conop == :det
593
615
  [true, v1 + v2, vt1] if vt1 == vt2
594
616
  end
595
617
  end rescue nil
@@ -634,7 +656,7 @@ module CDDL
634
656
 
635
657
  def validate_result(check)
636
658
  check || (
637
- @last_message = yield
659
+ @last_message << yield
638
660
  false
639
661
  )
640
662
  end
@@ -667,7 +689,9 @@ module CDDL
667
689
  ann.concat(ann2)
668
690
  end
669
691
  if occ < s
670
- @last_message = "occur not reached in array #{d} for #{where}"
692
+ # warn "*** lme #{@last_message.encoding} #{@last_message}"
693
+ # warn "*** #{"\noccur #{occ} < #{s}, not reached at #{i} in array #{d} for #{where}".encoding}"
694
+ @last_message << "\noccur #{occ} < #{s}, not reached at #{i} in array #{d} for #{where}"
671
695
  return [false, ann]
672
696
  end
673
697
  end
@@ -832,6 +856,7 @@ module CDDL
832
856
  # warn ["ANNO0", ok1, v1, vt1, ok2, v2, vt2, d].inspect
833
857
  if ok1 && ok2
834
858
  v2 = Integer(v2) if vt1 == Integer
859
+ v2 = remove_indentation(v2) if conop == :det
835
860
  # warn ["ANNO", ok1, v1, vt1, ok2, v2, vt2, d].inspect
836
861
  [] if d == v1 + v2 # XXX Focus ArgumentError
837
862
  end
@@ -908,17 +933,19 @@ module CDDL
908
933
  end
909
934
  end
910
935
  )
911
- when :abnf # XXX .abnf vs. .abnfb
936
+ when :abnf, :abnfb
912
937
  ann if (
913
938
  if String === d
914
939
  ok, v, vt = extract_value(control)
915
940
  if ok && vt == String
916
941
  begin
917
- ABNF_PARSER_FOR_STRING[v].validate(d)
942
+ ABNF_PARSER_FOR_STRING[v].validate(
943
+ d.dup.force_encoding(ABNF_ENCODING_FOR_CONOP[conop]).codepoints.pack("U*")
944
+ )
918
945
  true
919
946
  rescue => e
920
947
  # warn "*** #{e}" # XXX
921
- @last_message = e
948
+ @last_message = e.to_s.force_encoding(Encoding::UTF_8)
922
949
  nil
923
950
  end
924
951
  end
@@ -1278,7 +1305,8 @@ module CDDL
1278
1305
  BRACE = {"{" => :map, "[" => :array}
1279
1306
  RANGE_EXCLUDE_END = {".." => false, "..." => true}
1280
1307
  SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp, :cbor, :cborseq, :within, :and,
1281
- :default, :lt, :le, :gt, :ge, :eq, :ne, :feature, :abnf, :cat, :plus]
1308
+ :default, :lt, :le, :gt, :ge, :eq, :ne,
1309
+ :feature, :abnf, :abnfb, :det, :cat, :plus]
1282
1310
 
1283
1311
  def type1(n, canbegroup = false)
1284
1312
  # puts "NVALUE #{n.value.inspect}"
@@ -0,0 +1,37 @@
1
+ start = [Tag0, Tag1004]
2
+
3
+ ; for draft-ietf-cbor-date-tag
4
+ Tag1004 = #6.1004(text .abnf full-date)
5
+ ; for RFC 7049
6
+ Tag0 = #6.0(text .abnf date-time)
7
+
8
+ full-date = "full-date" .cat rfc3339
9
+ date-time = "date-time" .cat rfc3339
10
+
11
+ ; Note the trick of idiomatically starting with a newline, separating
12
+ ; off the element in the .cat from the rule-list
13
+ rfc3339 = '
14
+ date-fullyear = 4DIGIT
15
+ date-month = 2DIGIT ; 01-12
16
+ date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
17
+ ; month/year
18
+ time-hour = 2DIGIT ; 00-23
19
+ time-minute = 2DIGIT ; 00-59
20
+ time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap sec
21
+ ; rules
22
+ time-secfrac = "." 1*DIGIT
23
+ time-numoffset = ("+" / "-") time-hour ":" time-minute
24
+ time-offset = "Z" / time-numoffset
25
+
26
+ partial-time = time-hour ":" time-minute ":" time-second
27
+ [time-secfrac]
28
+ full-date = date-fullyear "-" date-month "-" date-mday
29
+ full-time = partial-time time-offset
30
+
31
+ date-time = full-date "T" full-time
32
+ ' .cat rfc5234-core
33
+
34
+ rfc5234-core = '
35
+ DIGIT = %x30-39 ; 0-9
36
+ ; abbreviated here
37
+ '
@@ -0,0 +1,32 @@
1
+ start = [tt, tb, bt, bb]
2
+
3
+
4
+ tt = text .abnf '4DIGIT 1FOO
5
+ DIGIT = %x30-39 ; 0-9
6
+ FOO = %xc0-cf
7
+ '
8
+ tb = text .abnfb '4DIGIT 1FOO
9
+ DIGIT = %x30-39 ; 0-9
10
+ FOO = %xc0-cf
11
+ '
12
+ bt = bytes .abnf '4DIGIT 1FOO
13
+ DIGIT = %x30-39 ; 0-9
14
+ FOO = %xc0-cf
15
+ '
16
+ bb = bytes .abnfb '4DIGIT 1FOO
17
+ DIGIT = %x30-39 ; 0-9
18
+ FOO = %xc0-cf
19
+ '
20
+
21
+ ; ["7408\xC6", "7073\xC3", h'30383131CD', h'32363738CD']
22
+ ; ["5892\u00ca", "2145\u00c6", h'33333338C38B', h'31343033C388']
23
+
24
+
25
+ ; ** ENCOED UTF-8
26
+ ; ** ENCOED UTF-8
27
+ ; ** ENCOED UTF-8
28
+ ; ** ENCOED UTF-8
29
+ ; ["5845\u00c6", "9329\u00cb", h'38393538C389', h'33343230C386']
30
+
31
+
32
+ ; ["1066\u00cc", "9253\xC9", h'38333533C38A', h'32373337C4']
@@ -0,0 +1,16 @@
1
+ start = [v1, v2, v3, v4]
2
+
3
+ v1 = "a" .bat "b"
4
+
5
+ v2 = "a" .bat " b"
6
+
7
+ v3 = "a" .bat '
8
+ oid = 1*arc
9
+ roid = *arc
10
+ arc = [nlsb] %x00-7f
11
+ nlsb = %x81-ff *%x80-ff
12
+ '
13
+
14
+ bbat<v1, v2> = ("" .bat v1) .bat v2
15
+
16
+ v4 = bbat<" a", " b">
@@ -0,0 +1,8 @@
1
+ oid = bytes .abnfb ("oid" .cat cbor-tags-oid)
2
+
3
+ cbor-tags-oid = '
4
+ oid = 1*arc
5
+ roid = *arc
6
+ arc = [nlsb] %x00-7f
7
+ nlsb = %x81-ff *%x80-ff
8
+ '
@@ -0,0 +1,8 @@
1
+ oid = bytes .abnfb ("oid" .bat cbor-tags-oid)
2
+
3
+ cbor-tags-oid = '
4
+ oid = 1*arc
5
+ roid = *arc
6
+ arc = [nlsb] %x00-7f
7
+ nlsb = %x81-ff *%x80-ff
8
+ '
@@ -0,0 +1,24 @@
1
+ message = text .abnfb ("message" .cat rfc4505)
2
+
3
+ rfc4505 = '
4
+ message = [ email / token ]
5
+ ;; to be prepared in accordance with Section 3
6
+
7
+ UTF1 = %x00-3F / %x41-7F ;; less "@" (U+0040)
8
+ UTF2 = %xC2-DF UTF0
9
+ UTF3 = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /
10
+ %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)
11
+ UTF4 = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /
12
+ %xF4 %x80-8F 2(UTF0)
13
+ UTF0 = %x80-BF
14
+
15
+ TCHAR = UTF1 / UTF2 / UTF3 / UTF4
16
+ ;; any UTF-8 encoded Unicode character
17
+ ;; except "@" (U+0040)
18
+
19
+ email = "too@much.work"; for this example
20
+ ;email = addr-spec
21
+ ;; as defined in [IMAIL]
22
+
23
+ token = 1*255TCHAR
24
+ '
@@ -0,0 +1,95 @@
1
+ csr-template-schema = {
2
+ keyTypes: [ 1* $keyType ]
3
+ ? subject: distinguishedName
4
+ extensions: extensions
5
+ }
6
+
7
+ mandatory-wildcard = "**"
8
+ optional-wildcard = "*"
9
+ wildcard = mandatory-wildcard / optional-wildcard
10
+
11
+ ; regtext matches all text strings but "*" and "**"
12
+ regtext = text .regexp "([^\*].*)|([\*][^\*].*)|([\*][\*].+)"
13
+
14
+ regtext-or-wildcard = regtext / wildcard
15
+
16
+ distinguishedName = {
17
+ ? country: regtext-or-wildcard
18
+ ? stateOrProvince: regtext-or-wildcard
19
+ ? locality: regtext-or-wildcard
20
+ ? organization: regtext-or-wildcard
21
+ ? organizationalUnit: regtext-or-wildcard
22
+ ? emailAddress: regtext-or-wildcard
23
+ ? commonName: regtext-or-wildcard
24
+ }
25
+
26
+ $keyType /= rsaKeyType
27
+ $keyType /= ecdsaKeyType
28
+
29
+ rsaKeyType = {
30
+ PublicKeyType: "rsaEncryption" ; OID: 1.2.840.113549.1.1.1
31
+ PublicKeyLength: rsaKeySize
32
+ SignatureType: $rsaSignatureType
33
+ }
34
+
35
+ rsaKeySize = int .ge 2048
36
+
37
+ ; RSASSA-PKCS1-v1_5 with SHA-256
38
+ $rsaSignatureType /= "sha256WithRSAEncryption"
39
+ ; RSASSA-PCKS1-v1_5 with SHA-384
40
+ $rsaSignatureType /= "sha384WithRSAEncryption"
41
+ ; RSASSA-PCKS1-v1_5 with SHA-512
42
+ $rsaSignatureType /= "sha512WithRSAEncryption"
43
+ ; RSASSA-PSS with SHA-256, MGF-1 with SHA-256, and a 32 byte salt
44
+ $rsaSignatureType /= "sha256WithRSAandMGF1"
45
+ ; RSASSA-PSS with SHA-384, MGF-1 with SHA-384, and a 48 byte salt
46
+ $rsaSignatureType /= "sha384WithRSAandMGF1"
47
+ ; RSASSA-PSS with SHA-512, MGF-1 with SHA-512, and a 64 byte salt
48
+ $rsaSignatureType /= "sha512WithRSAandMGF1"
49
+
50
+ ecdsaKeyType = {
51
+ PublicKeyType: "id-ecPublicKey" ; OID: 1.2.840.10045.2.1
52
+ namedCurve: $ecdsaCurve
53
+ SignatureType: $ecdsaSignatureType
54
+ }
55
+
56
+ $ecdsaCurve /= "secp256r1" ; OID: 1.2.840.10045.3.1.7
57
+ $ecdsaCurve /= "secp384r1" ; OID: 1.3.132.0.34
58
+ $ecdsaCurve /= "secp521r1" ; OID: 1.3.132.0.3
59
+
60
+ $ecdsaSignatureType /= "ecdsa-with-SHA256" ; paired with secp256r1
61
+ $ecdsaSignatureType /= "ecdsa-with-SHA384" ; paired with secp384r1
62
+ $ecdsaSignatureType /= "ecdsa-with-SHA512" ; paired with secp521r1
63
+
64
+ subjectaltname = {
65
+ ? DNS: [ 1* regtext-or-wildcard ]
66
+ ? Email: [ 1* regtext ]
67
+ ? URI: [ 1* regtext ]
68
+ * $$subjectaltname-extension
69
+ }
70
+
71
+ extensions = {
72
+ ? keyUsage: [ 1* keyUsageType ]
73
+ ? extendedKeyUsage: [ 1* extendedKeyUsageType ]
74
+ subjectAltName: subjectaltname
75
+ }
76
+
77
+ keyUsageType /= "digitalSignature"
78
+ keyUsageType /= "nonRepudiation"
79
+ keyUsageType /= "keyEncipherment"
80
+ keyUsageType /= "dataEncipherment"
81
+ keyUsageType /= "keyAgreement"
82
+ keyUsageType /= "keyCertSign"
83
+ keyUsageType /= "cRLSign"
84
+ keyUsageType /= "encipherOnly"
85
+ keyUsageType /= "decipherOnly"
86
+
87
+ extendedKeyUsageType /= "serverAuth"
88
+ extendedKeyUsageType /= "clientAuth"
89
+ extendedKeyUsageType /= "codeSigning"
90
+ extendedKeyUsageType /= "emailProtection"
91
+ extendedKeyUsageType /= "timeStamping"
92
+ extendedKeyUsageType /= "OCSPSigning"
93
+ extendedKeyUsageType /= oid
94
+
95
+ oid = text .regexp "[0-9]+(\\.[0-9]+)*"
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.8.17
4
+ version: 0.8.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-25 00:00:00.000000000 Z
11
+ date: 2021-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag
@@ -115,10 +115,13 @@ files:
115
115
  - test-data/a.cddl
116
116
  - test-data/abignum.cddl
117
117
  - test-data/abnf1.cddl
118
+ - test-data/abnf2.cddl
119
+ - test-data/abnf3.cddl
118
120
  - test-data/ambig.cddl
119
121
  - test-data/b.cddl
120
122
  - test-data/badaddr.cddl
121
123
  - test-data/basic_syntax_example.cddl
124
+ - test-data/bat.cddl
122
125
  - test-data/bpv7.cddl
123
126
  - test-data/bpv7a.cddl
124
127
  - test-data/bpv7b.cddl
@@ -164,8 +167,11 @@ files:
164
167
  - test-data/mon-val.cddl
165
168
  - test-data/multipart-ct.cddl
166
169
  - test-data/named-group.cddl
170
+ - test-data/oid.cddl
171
+ - test-data/oidbat.cddl
167
172
  - test-data/patch1.cddl
168
173
  - test-data/reused_named_group.cddl
174
+ - test-data/sasl.cddl
169
175
  - test-data/sequence.cddl
170
176
  - test-data/structure.cddl
171
177
  - test-data/test-gen.cddl
@@ -177,6 +183,7 @@ files:
177
183
  - test-data/wrong2.cddl
178
184
  - test-data/wrong2a.cddl
179
185
  - test-data/xmlmig.cddl
186
+ - test-data/yaron1.cddl
180
187
  - test/test-cddl.rb
181
188
  homepage: http://github.com/cabo/cddl
182
189
  licenses: