@noeos/verification-engine 0.0.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.
Files changed (184) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +11 -0
  4. package/README.md +7 -0
  5. package/dist/cjs/api/engine.js +271 -0
  6. package/dist/cjs/api/types.js +10 -0
  7. package/dist/cjs/chains/chain-builder.js +541 -0
  8. package/dist/cjs/chains/duplicate-detector.js +208 -0
  9. package/dist/cjs/chains/verify-chain.js +656 -0
  10. package/dist/cjs/contracts/generated.js +512 -0
  11. package/dist/cjs/contracts/schema-assets.js +6 -0
  12. package/dist/cjs/contracts/vector-assets.js +6 -0
  13. package/dist/cjs/domain/algorithm-id.js +5 -0
  14. package/dist/cjs/domain/byte-view.js +7 -0
  15. package/dist/cjs/domain/chain.js +3 -0
  16. package/dist/cjs/domain/diagnostic.js +6 -0
  17. package/dist/cjs/domain/digest.js +37 -0
  18. package/dist/cjs/domain/duplicate-policy.js +3 -0
  19. package/dist/cjs/domain/evidence.js +10 -0
  20. package/dist/cjs/domain/identifiers.js +52 -0
  21. package/dist/cjs/domain/json-value.js +3 -0
  22. package/dist/cjs/domain/limits.js +24 -0
  23. package/dist/cjs/domain/operation-result.js +19 -0
  24. package/dist/cjs/domain/position.js +16 -0
  25. package/dist/cjs/domain/protocol-version.js +5 -0
  26. package/dist/cjs/domain/rule.js +3 -0
  27. package/dist/cjs/domain/stream.js +3 -0
  28. package/dist/cjs/domain/version.js +16 -0
  29. package/dist/cjs/evidence/digest-evidence.js +22 -0
  30. package/dist/cjs/evidence/evidence-parser.js +288 -0
  31. package/dist/cjs/framing/frame-builders.js +124 -0
  32. package/dist/cjs/framing/frame-encoder.js +238 -0
  33. package/dist/cjs/framing/frame-parser.js +173 -0
  34. package/dist/cjs/framing/frame-types.js +3 -0
  35. package/dist/cjs/hashing/hash-adapter.js +90 -0
  36. package/dist/cjs/hashing/hash-frame.js +16 -0
  37. package/dist/cjs/index.js +16 -0
  38. package/dist/cjs/normalization/byte-sink.js +70 -0
  39. package/dist/cjs/normalization/jcs-profile.js +154 -0
  40. package/dist/cjs/normalization/normalize.js +56 -0
  41. package/dist/cjs/normalization/profile-registry.js +66 -0
  42. package/dist/cjs/normalization/profile.js +3 -0
  43. package/dist/cjs/normalization/raw-bytes-profile.js +27 -0
  44. package/dist/cjs/package.json +3 -0
  45. package/dist/cjs/profiles.js +9 -0
  46. package/dist/cjs/records/record-service.js +278 -0
  47. package/dist/cjs/rules/rule-set.js +211 -0
  48. package/dist/cjs/schemas.js +6 -0
  49. package/dist/cjs/validation/algorithm-validation.js +12 -0
  50. package/dist/cjs/validation/diagnostic-collector.js +159 -0
  51. package/dist/cjs/validation/digest-validation.js +48 -0
  52. package/dist/cjs/validation/identifier-validation.js +33 -0
  53. package/dist/cjs/validation/json-text-parser.js +297 -0
  54. package/dist/cjs/validation/json-value-validation.js +155 -0
  55. package/dist/cjs/validation/limit-validation.js +75 -0
  56. package/dist/cjs/validation/object-inspection.js +60 -0
  57. package/dist/cjs/validation/position-validation.js +13 -0
  58. package/dist/cjs/validation/result-helpers.js +9 -0
  59. package/dist/cjs/validation/utf8-validation.js +69 -0
  60. package/dist/cjs/validation/version-validation.js +31 -0
  61. package/dist/cjs/vectors.js +6 -0
  62. package/dist/esm/api/engine.js +266 -0
  63. package/dist/esm/api/types.js +4 -0
  64. package/dist/esm/chains/chain-builder.js +536 -0
  65. package/dist/esm/chains/duplicate-detector.js +204 -0
  66. package/dist/esm/chains/verify-chain.js +652 -0
  67. package/dist/esm/contracts/generated.js +509 -0
  68. package/dist/esm/contracts/schema-assets.js +2 -0
  69. package/dist/esm/contracts/vector-assets.js +2 -0
  70. package/dist/esm/domain/algorithm-id.js +2 -0
  71. package/dist/esm/domain/byte-view.js +4 -0
  72. package/dist/esm/domain/chain.js +2 -0
  73. package/dist/esm/domain/diagnostic.js +3 -0
  74. package/dist/esm/domain/digest.js +32 -0
  75. package/dist/esm/domain/duplicate-policy.js +2 -0
  76. package/dist/esm/domain/evidence.js +7 -0
  77. package/dist/esm/domain/identifiers.js +45 -0
  78. package/dist/esm/domain/json-value.js +2 -0
  79. package/dist/esm/domain/limits.js +21 -0
  80. package/dist/esm/domain/operation-result.js +15 -0
  81. package/dist/esm/domain/position.js +12 -0
  82. package/dist/esm/domain/protocol-version.js +2 -0
  83. package/dist/esm/domain/rule.js +2 -0
  84. package/dist/esm/domain/stream.js +2 -0
  85. package/dist/esm/domain/version.js +12 -0
  86. package/dist/esm/evidence/digest-evidence.js +19 -0
  87. package/dist/esm/evidence/evidence-parser.js +281 -0
  88. package/dist/esm/framing/frame-builders.js +114 -0
  89. package/dist/esm/framing/frame-encoder.js +234 -0
  90. package/dist/esm/framing/frame-parser.js +170 -0
  91. package/dist/esm/framing/frame-types.js +2 -0
  92. package/dist/esm/hashing/hash-adapter.js +84 -0
  93. package/dist/esm/hashing/hash-frame.js +12 -0
  94. package/dist/esm/index.js +5 -0
  95. package/dist/esm/normalization/byte-sink.js +66 -0
  96. package/dist/esm/normalization/jcs-profile.js +151 -0
  97. package/dist/esm/normalization/normalize.js +52 -0
  98. package/dist/esm/normalization/profile-registry.js +62 -0
  99. package/dist/esm/normalization/profile.js +2 -0
  100. package/dist/esm/normalization/raw-bytes-profile.js +24 -0
  101. package/dist/esm/profiles.js +6 -0
  102. package/dist/esm/records/record-service.js +270 -0
  103. package/dist/esm/rules/rule-set.js +206 -0
  104. package/dist/esm/schemas.js +2 -0
  105. package/dist/esm/validation/algorithm-validation.js +9 -0
  106. package/dist/esm/validation/diagnostic-collector.js +154 -0
  107. package/dist/esm/validation/digest-validation.js +43 -0
  108. package/dist/esm/validation/identifier-validation.js +27 -0
  109. package/dist/esm/validation/json-text-parser.js +294 -0
  110. package/dist/esm/validation/json-value-validation.js +152 -0
  111. package/dist/esm/validation/limit-validation.js +71 -0
  112. package/dist/esm/validation/object-inspection.js +54 -0
  113. package/dist/esm/validation/position-validation.js +10 -0
  114. package/dist/esm/validation/result-helpers.js +6 -0
  115. package/dist/esm/validation/utf8-validation.js +63 -0
  116. package/dist/esm/validation/version-validation.js +26 -0
  117. package/dist/esm/vectors.js +2 -0
  118. package/dist/types/api/engine.d.ts +8 -0
  119. package/dist/types/api/types.d.ts +124 -0
  120. package/dist/types/chains/chain-builder.d.ts +42 -0
  121. package/dist/types/chains/duplicate-detector.d.ts +18 -0
  122. package/dist/types/chains/verify-chain.d.ts +9 -0
  123. package/dist/types/contracts/generated.d.ts +442 -0
  124. package/dist/types/contracts/schema-assets.d.ts +2 -0
  125. package/dist/types/contracts/vector-assets.d.ts +2 -0
  126. package/dist/types/domain/algorithm-id.d.ts +4 -0
  127. package/dist/types/domain/byte-view.d.ts +1 -0
  128. package/dist/types/domain/chain.d.ts +43 -0
  129. package/dist/types/domain/diagnostic.d.ts +23 -0
  130. package/dist/types/domain/digest.d.ts +12 -0
  131. package/dist/types/domain/duplicate-policy.d.ts +26 -0
  132. package/dist/types/domain/evidence.d.ts +100 -0
  133. package/dist/types/domain/identifiers.d.ts +29 -0
  134. package/dist/types/domain/json-value.d.ts +6 -0
  135. package/dist/types/domain/limits.d.ts +13 -0
  136. package/dist/types/domain/operation-result.d.ts +12 -0
  137. package/dist/types/domain/position.d.ts +8 -0
  138. package/dist/types/domain/protocol-version.d.ts +2 -0
  139. package/dist/types/domain/rule.d.ts +34 -0
  140. package/dist/types/domain/stream.d.ts +5 -0
  141. package/dist/types/domain/version.d.ts +8 -0
  142. package/dist/types/evidence/digest-evidence.d.ts +4 -0
  143. package/dist/types/evidence/evidence-parser.d.ts +8 -0
  144. package/dist/types/framing/frame-builders.d.ts +40 -0
  145. package/dist/types/framing/frame-encoder.d.ts +6 -0
  146. package/dist/types/framing/frame-parser.d.ts +4 -0
  147. package/dist/types/framing/frame-types.d.ts +27 -0
  148. package/dist/types/hashing/hash-adapter.d.ts +12 -0
  149. package/dist/types/hashing/hash-frame.d.ts +6 -0
  150. package/dist/types/index.d.ts +8 -0
  151. package/dist/types/normalization/byte-sink.d.ts +19 -0
  152. package/dist/types/normalization/jcs-profile.d.ts +3 -0
  153. package/dist/types/normalization/normalize.d.ts +11 -0
  154. package/dist/types/normalization/profile-registry.d.ts +26 -0
  155. package/dist/types/normalization/profile.d.ts +22 -0
  156. package/dist/types/normalization/raw-bytes-profile.d.ts +2 -0
  157. package/dist/types/profiles.d.ts +8 -0
  158. package/dist/types/records/record-service.d.ts +38 -0
  159. package/dist/types/rules/rule-set.d.ts +13 -0
  160. package/dist/types/schemas.d.ts +2 -0
  161. package/dist/types/validation/algorithm-validation.d.ts +3 -0
  162. package/dist/types/validation/diagnostic-collector.d.ts +24 -0
  163. package/dist/types/validation/digest-validation.d.ts +6 -0
  164. package/dist/types/validation/identifier-validation.d.ts +6 -0
  165. package/dist/types/validation/json-text-parser.d.ts +4 -0
  166. package/dist/types/validation/json-value-validation.d.ts +4 -0
  167. package/dist/types/validation/limit-validation.d.ts +4 -0
  168. package/dist/types/validation/object-inspection.d.ts +11 -0
  169. package/dist/types/validation/position-validation.d.ts +3 -0
  170. package/dist/types/validation/result-helpers.d.ts +3 -0
  171. package/dist/types/validation/utf8-validation.d.ts +5 -0
  172. package/dist/types/validation/version-validation.d.ts +9 -0
  173. package/dist/types/vectors.d.ts +2 -0
  174. package/package.json +61 -0
  175. package/schemas/chain-summary.v1.schema.json +156 -0
  176. package/schemas/diagnostic.v1.schema.json +107 -0
  177. package/schemas/link-evidence.v1.schema.json +165 -0
  178. package/schemas/record-evidence.v1.schema.json +91 -0
  179. package/schemas/vector-set.v1.schema.json +52 -0
  180. package/vectors/evidence.json +26 -0
  181. package/vectors/framing.json +136 -0
  182. package/vectors/hashing.json +58 -0
  183. package/vectors/invalid.json +56 -0
  184. package/vectors/manifest.json +46 -0
@@ -0,0 +1,91 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:noeos:verification-engine:record-evidence:1",
4
+ "title": "Noeos Verification Engine Record Evidence v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "$schema",
9
+ "protocolVersion",
10
+ "contextId",
11
+ "recordId",
12
+ "profile",
13
+ "algorithm",
14
+ "normalizedByteLength",
15
+ "contentDigest",
16
+ "recordDigest"
17
+ ],
18
+ "properties": {
19
+ "$schema": { "const": "urn:noeos:verification-engine:record-evidence:1" },
20
+ "protocolVersion": { "const": 1 },
21
+ "contextId": { "$ref": "#/$defs/identifier" },
22
+ "recordId": { "$ref": "#/$defs/identifier" },
23
+ "profile": { "$ref": "#/$defs/profile" },
24
+ "algorithm": { "$ref": "#/$defs/algorithm" },
25
+ "normalizedByteLength": { "$ref": "#/$defs/safeInteger" },
26
+ "contentDigest": { "$ref": "#/$defs/digest" },
27
+ "recordDigest": { "$ref": "#/$defs/digest" }
28
+ },
29
+ "allOf": [{ "$ref": "#/$defs/digestLengths" }],
30
+ "$defs": {
31
+ "identifier": {
32
+ "type": "string",
33
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$",
34
+ "maxLength": 128
35
+ },
36
+ "profile": {
37
+ "type": "object",
38
+ "additionalProperties": false,
39
+ "required": ["id", "version"],
40
+ "properties": {
41
+ "id": {
42
+ "type": "string",
43
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$",
44
+ "maxLength": 128
45
+ },
46
+ "version": {
47
+ "type": "string",
48
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$",
49
+ "maxLength": 256
50
+ }
51
+ }
52
+ },
53
+ "algorithm": { "enum": ["sha-256", "sha-384", "sha-512"] },
54
+ "safeInteger": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
55
+ "digest": { "type": "string", "pattern": "^[0-9a-f]+$", "maxLength": 128 },
56
+ "digestLengths": {
57
+ "allOf": [
58
+ {
59
+ "if": { "type": "object", "properties": { "algorithm": { "const": "sha-256" } } },
60
+ "then": {
61
+ "type": "object",
62
+ "properties": {
63
+ "contentDigest": { "type": "string", "minLength": 64, "maxLength": 64 },
64
+ "recordDigest": { "type": "string", "minLength": 64, "maxLength": 64 }
65
+ }
66
+ }
67
+ },
68
+ {
69
+ "if": { "type": "object", "properties": { "algorithm": { "const": "sha-384" } } },
70
+ "then": {
71
+ "type": "object",
72
+ "properties": {
73
+ "contentDigest": { "type": "string", "minLength": 96, "maxLength": 96 },
74
+ "recordDigest": { "type": "string", "minLength": 96, "maxLength": 96 }
75
+ }
76
+ }
77
+ },
78
+ {
79
+ "if": { "type": "object", "properties": { "algorithm": { "const": "sha-512" } } },
80
+ "then": {
81
+ "type": "object",
82
+ "properties": {
83
+ "contentDigest": { "type": "string", "minLength": 128, "maxLength": 128 },
84
+ "recordDigest": { "type": "string", "minLength": 128, "maxLength": 128 }
85
+ }
86
+ }
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:noeos:verification-engine:vector-set:1",
4
+ "title": "Noeos Verification Engine Vector Set v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["$schema", "version", "protocolVersion", "license", "files", "sources"],
8
+ "properties": {
9
+ "$schema": { "const": "urn:noeos:verification-engine:vector-set:1" },
10
+ "version": {
11
+ "type": "string",
12
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
13
+ },
14
+ "protocolVersion": { "const": 1 },
15
+ "license": { "const": "Apache-2.0" },
16
+ "files": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "uniqueItems": true,
20
+ "items": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["path", "category", "caseCount", "sha256"],
24
+ "properties": {
25
+ "path": {
26
+ "type": "string",
27
+ "pattern": "^[a-z0-9][a-z0-9./-]*\\.json$",
28
+ "maxLength": 256
29
+ },
30
+ "category": { "enum": ["hashing", "framing", "evidence", "invalid"] },
31
+ "caseCount": { "type": "integer", "minimum": 1, "maximum": 100000 },
32
+ "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
33
+ }
34
+ }
35
+ },
36
+ "sources": {
37
+ "type": "array",
38
+ "minItems": 1,
39
+ "items": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["id", "url", "license"],
43
+ "properties": {
44
+ "id": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,128}$" },
45
+ "url": { "type": "string", "pattern": "^https://[^\\s]{1,2040}$", "maxLength": 2048 },
46
+ "license": { "type": "string", "maxLength": 128 },
47
+ "revision": { "type": "string", "maxLength": 128 }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "cases": [
3
+ {
4
+ "id": "EVIDENCE-CHAIN-SUMMARY-EMPTY-SHA256",
5
+ "kind": "evidence",
6
+ "requirement": "CON-006",
7
+ "source": "Noeos-VE-Protocol-1",
8
+ "algorithm": "sha-256",
9
+ "evidence": {
10
+ "$schema": "urn:noeos:verification-engine:chain-summary:1",
11
+ "protocolVersion": 1,
12
+ "contextId": "v",
13
+ "sequenceId": "s",
14
+ "profile": { "id": "dev.noeos.jcs", "version": "1.0.0" },
15
+ "algorithm": "sha-256",
16
+ "count": 0,
17
+ "boundaries": { "start": "not-applicable", "end": "not-applicable" },
18
+ "status": "valid",
19
+ "diagnostics": { "errors": 0, "warnings": 0, "info": 0, "truncated": false }
20
+ },
21
+ "expectedJcsHex": "7b2224736368656d61223a2275726e3a6e6f656f733a766572696669636174696f6e2d656e67696e653a636861696e2d73756d6d6172793a31222c22616c676f726974686d223a227368612d323536222c22626f756e646172696573223a7b22656e64223a226e6f742d6170706c696361626c65222c227374617274223a226e6f742d6170706c696361626c65227d2c22636f6e746578744964223a2276222c22636f756e74223a302c22646961676e6f7374696373223a7b226572726f7273223a302c22696e666f223a302c227472756e6361746564223a66616c73652c227761726e696e6773223a307d2c2270726f66696c65223a7b226964223a226465762e6e6f656f732e6a6373222c2276657273696f6e223a22312e302e30227d2c2270726f746f636f6c56657273696f6e223a312c2273657175656e63654964223a2273222c22737461747573223a2276616c6964227d",
22
+ "expectedFrameHex": "4e4f454f53564531040001000300010200000000000000077368612d323536000202000000000000002d75726e3a6e6f656f733a766572696669636174696f6e2d656e67696e653a636861696e2d73756d6d6172793a3100030100000000000001567b2224736368656d61223a2275726e3a6e6f656f733a766572696669636174696f6e2d656e67696e653a636861696e2d73756d6d6172793a31222c22616c676f726974686d223a227368612d323536222c22626f756e646172696573223a7b22656e64223a226e6f742d6170706c696361626c65222c227374617274223a226e6f742d6170706c696361626c65227d2c22636f6e746578744964223a2276222c22636f756e74223a302c22646961676e6f7374696373223a7b226572726f7273223a302c22696e666f223a302c227472756e6361746564223a66616c73652c227761726e696e6773223a307d2c2270726f66696c65223a7b226964223a226465762e6e6f656f732e6a6373222c2276657273696f6e223a22312e302e30227d2c2270726f746f636f6c56657273696f6e223a312c2273657175656e63654964223a2273222c22737461747573223a2276616c6964227d",
23
+ "expectedDigest": "cd9a4b495b3097c50a948cdd523eb9817075e395c70ab487ede5d6de199b353b"
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,136 @@
1
+ {
2
+ "cases": [
3
+ {
4
+ "id": "FRAME-CONTENT-SHA256-RAW-BYTES",
5
+ "kind": "framing",
6
+ "requirement": "CRY-002",
7
+ "source": "Noeos-VE-Protocol-1",
8
+ "algorithm": "sha-256",
9
+ "frame": {
10
+ "kind": "content",
11
+ "fields": [
12
+ { "tag": 1, "type": "utf8", "value": "sha-256" },
13
+ { "tag": 2, "type": "utf8", "value": "dev.noeos.raw-bytes" },
14
+ { "tag": 3, "type": "utf8", "value": "1.0.0" },
15
+ { "tag": 4, "type": "bytes", "value": "000102ff" }
16
+ ]
17
+ },
18
+ "expectedFrameHex": "4e4f454f53564531010001000400010200000000000000077368612d32353600020200000000000000136465762e6e6f656f732e7261772d62797465730003020000000000000005312e302e300004010000000000000004000102ff",
19
+ "expectedDigest": "441fcb174fba0958eb0a78ad6169a69985597b3c861f9376554dc32cd4e42a79"
20
+ },
21
+ {
22
+ "id": "FRAME-CONTENT-FIELD-LENGTH-BOUNDARIES",
23
+ "kind": "framing",
24
+ "requirement": "CRY-002",
25
+ "source": "Noeos-VE-Protocol-1",
26
+ "algorithm": "sha-256",
27
+ "frame": {
28
+ "kind": "content",
29
+ "fields": [
30
+ { "tag": 1, "type": "bytes", "value": "" },
31
+ { "tag": 2, "type": "bytes", "value": "00" },
32
+ { "tag": 3, "type": "bytes", "value": "00", "repeat": 255 },
33
+ { "tag": 4, "type": "bytes", "value": "00", "repeat": 256 }
34
+ ]
35
+ },
36
+ "expectedFrameHex": "4e4f454f535645310100010004000101000000000000000000020100000000000000010000030100000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000401000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
37
+ "expectedDigest": "fc70d1d41448ff74c3c2a61c0c9de9b98e318c0ee05bd43056891558df1d646b"
38
+ },
39
+ {
40
+ "id": "FRAME-RECORD-SHA384-MAX-SAFE-LENGTH",
41
+ "kind": "framing",
42
+ "requirement": "CRY-002",
43
+ "source": "Noeos-VE-Protocol-1",
44
+ "algorithm": "sha-384",
45
+ "frame": {
46
+ "kind": "record",
47
+ "fields": [
48
+ { "tag": 1, "type": "utf8", "value": "sha-384" },
49
+ { "tag": 2, "type": "utf8", "value": "example.context" },
50
+ { "tag": 3, "type": "utf8", "value": "record-0001" },
51
+ { "tag": 4, "type": "utf8", "value": "dev.noeos.jcs" },
52
+ { "tag": 5, "type": "utf8", "value": "1.0.0" },
53
+ { "tag": 6, "type": "uint64", "value": 9007199254740991 },
54
+ {
55
+ "tag": 7,
56
+ "type": "bytes",
57
+ "value": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
58
+ }
59
+ ]
60
+ },
61
+ "expectedFrameHex": "4e4f454f53564531020001000700010200000000000000077368612d333834000202000000000000000f6578616d706c652e636f6e74657874000302000000000000000b7265636f72642d30303031000402000000000000000d6465762e6e6f656f732e6a63730005020000000000000005312e302e300006030000000000000008001fffffffffffff0007010000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
62
+ "expectedDigest": "ce0a07363fb9285a32f4e8ad119f0c3d302f6a262a8b2542b55534d8d81d01b253478bc7756ca791671631a78d0da755"
63
+ },
64
+ {
65
+ "id": "FRAME-LINK-GENESIS-SHA256",
66
+ "kind": "framing",
67
+ "requirement": "CRY-002",
68
+ "source": "Noeos-VE-Protocol-1",
69
+ "algorithm": "sha-256",
70
+ "frame": {
71
+ "kind": "link",
72
+ "fields": [
73
+ { "tag": 1, "type": "utf8", "value": "sha-256" },
74
+ { "tag": 2, "type": "utf8", "value": "example.context" },
75
+ { "tag": 3, "type": "utf8", "value": "sequence-2026" },
76
+ { "tag": 4, "type": "uint64", "value": 0 },
77
+ { "tag": 5, "type": "utf8", "value": "record-0001" },
78
+ {
79
+ "tag": 6,
80
+ "type": "bytes",
81
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
82
+ },
83
+ { "tag": 7, "type": "none" }
84
+ ]
85
+ },
86
+ "expectedFrameHex": "4e4f454f53564531030001000700010200000000000000077368612d323536000202000000000000000f6578616d706c652e636f6e74657874000302000000000000000d73657175656e63652d3230323600040300000000000000080000000000000000000502000000000000000b7265636f72642d30303031000601000000000000002000000000000000000000000000000000000000000000000000000000000000000007040000000000000000",
87
+ "expectedDigest": "1f247fac2ba5a3c217b406dc63832ed1d0f73e03af1ef832d66758e612eb6b0d"
88
+ },
89
+ {
90
+ "id": "FRAME-LINK-POSITION-256-SHA256",
91
+ "kind": "framing",
92
+ "requirement": "CRY-002",
93
+ "source": "Noeos-VE-Protocol-1",
94
+ "algorithm": "sha-256",
95
+ "frame": {
96
+ "kind": "link",
97
+ "fields": [
98
+ { "tag": 1, "type": "utf8", "value": "sha-256" },
99
+ { "tag": 2, "type": "utf8", "value": "example.context" },
100
+ { "tag": 3, "type": "utf8", "value": "sequence-2026" },
101
+ { "tag": 4, "type": "uint64", "value": 256 },
102
+ { "tag": 5, "type": "utf8", "value": "record-0256" },
103
+ {
104
+ "tag": 6,
105
+ "type": "bytes",
106
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
107
+ },
108
+ {
109
+ "tag": 7,
110
+ "type": "bytes",
111
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
112
+ }
113
+ ]
114
+ },
115
+ "expectedFrameHex": "4e4f454f53564531030001000700010200000000000000077368612d323536000202000000000000000f6578616d706c652e636f6e74657874000302000000000000000d73657175656e63652d3230323600040300000000000000080000000000000100000502000000000000000b7265636f72642d303235360006010000000000000020111111111111111111111111111111111111111111111111111111111111111100070100000000000000202222222222222222222222222222222222222222222222222222222222222222",
116
+ "expectedDigest": "657d9f97cc8d20c706ecd01d89e1b350a82f38992ada8c206adb1b65db024b49"
117
+ },
118
+ {
119
+ "id": "FRAME-EVIDENCE-SHA512",
120
+ "kind": "framing",
121
+ "requirement": "CRY-002",
122
+ "source": "Noeos-VE-Protocol-1",
123
+ "algorithm": "sha-512",
124
+ "frame": {
125
+ "kind": "evidence",
126
+ "fields": [
127
+ { "tag": 1, "type": "utf8", "value": "sha-512" },
128
+ { "tag": 2, "type": "utf8", "value": "urn:noeos:verification-engine:record-evidence:1" },
129
+ { "tag": 3, "type": "bytes", "value": "7b7d" }
130
+ ]
131
+ },
132
+ "expectedFrameHex": "4e4f454f53564531040001000300010200000000000000077368612d353132000202000000000000002f75726e3a6e6f656f733a766572696669636174696f6e2d656e67696e653a7265636f72642d65766964656e63653a3100030100000000000000027b7d",
133
+ "expectedDigest": "b2132aae41e683bd51b91466757351e2a1f349c54fe7879e6495a608017bf8c06a00976181b05dc1ba104ae80ceca08e34489c160a0f852887188cab84aef027"
134
+ }
135
+ ]
136
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "cases": [
3
+ {
4
+ "id": "HASH-SHA256-EMPTY",
5
+ "kind": "hashing",
6
+ "requirement": "CRY-003",
7
+ "source": "FIPS-180-4",
8
+ "algorithm": "sha-256",
9
+ "inputHex": "",
10
+ "expectedDigest": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
11
+ },
12
+ {
13
+ "id": "HASH-SHA256-ABC",
14
+ "kind": "hashing",
15
+ "requirement": "CRY-003",
16
+ "source": "FIPS-180-4",
17
+ "algorithm": "sha-256",
18
+ "inputHex": "616263",
19
+ "expectedDigest": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
20
+ },
21
+ {
22
+ "id": "HASH-SHA384-EMPTY",
23
+ "kind": "hashing",
24
+ "requirement": "CRY-003",
25
+ "source": "FIPS-180-4",
26
+ "algorithm": "sha-384",
27
+ "inputHex": "",
28
+ "expectedDigest": "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b"
29
+ },
30
+ {
31
+ "id": "HASH-SHA384-ABC",
32
+ "kind": "hashing",
33
+ "requirement": "CRY-003",
34
+ "source": "FIPS-180-4",
35
+ "algorithm": "sha-384",
36
+ "inputHex": "616263",
37
+ "expectedDigest": "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7"
38
+ },
39
+ {
40
+ "id": "HASH-SHA512-EMPTY",
41
+ "kind": "hashing",
42
+ "requirement": "CRY-003",
43
+ "source": "FIPS-180-4",
44
+ "algorithm": "sha-512",
45
+ "inputHex": "",
46
+ "expectedDigest": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
47
+ },
48
+ {
49
+ "id": "HASH-SHA512-ABC",
50
+ "kind": "hashing",
51
+ "requirement": "CRY-003",
52
+ "source": "FIPS-180-4",
53
+ "algorithm": "sha-512",
54
+ "inputHex": "616263",
55
+ "expectedDigest": "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
56
+ }
57
+ ]
58
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "cases": [
3
+ {
4
+ "id": "INVALID-DUPLICATE-TAG",
5
+ "kind": "invalid",
6
+ "requirement": "CRY-002",
7
+ "source": "Noeos-VE-Protocol-1",
8
+ "frame": {
9
+ "kind": "content",
10
+ "fields": [
11
+ { "tag": 1, "type": "utf8", "value": "sha-256" },
12
+ { "tag": 1, "type": "utf8", "value": "sha-256" }
13
+ ]
14
+ },
15
+ "expectedCode": "FRAME_FIELD_DUPLICATE"
16
+ },
17
+ {
18
+ "id": "INVALID-DESCENDING-TAG",
19
+ "kind": "invalid",
20
+ "requirement": "CRY-002",
21
+ "source": "Noeos-VE-Protocol-1",
22
+ "frame": {
23
+ "kind": "content",
24
+ "fields": [
25
+ { "tag": 2, "type": "utf8", "value": "b" },
26
+ { "tag": 1, "type": "utf8", "value": "a" }
27
+ ]
28
+ },
29
+ "expectedCode": "FRAME_FIELD_ORDER_INVALID"
30
+ },
31
+ {
32
+ "id": "INVALID-BYTES-UPPERCASE",
33
+ "kind": "invalid",
34
+ "requirement": "CRY-002",
35
+ "source": "Noeos-VE-Protocol-1",
36
+ "frame": { "kind": "content", "fields": [{ "tag": 1, "type": "bytes", "value": "AA" }] },
37
+ "expectedCode": "DIGEST_ENCODING_INVALID"
38
+ },
39
+ {
40
+ "id": "INVALID-NONE-WITH-VALUE",
41
+ "kind": "invalid",
42
+ "requirement": "CRY-002",
43
+ "source": "Noeos-VE-Protocol-1",
44
+ "frame": { "kind": "link", "fields": [{ "tag": 1, "type": "none", "value": "" }] },
45
+ "expectedCode": "FRAME_FIELD_TYPE_INVALID"
46
+ },
47
+ {
48
+ "id": "INVALID-ODD-HEX",
49
+ "kind": "invalid",
50
+ "requirement": "CRY-002",
51
+ "source": "Noeos-VE-Protocol-1",
52
+ "frame": { "kind": "content", "fields": [{ "tag": 1, "type": "bytes", "value": "0" }] },
53
+ "expectedCode": "DIGEST_ENCODING_INVALID"
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "urn:noeos:verification-engine:vector-set:1",
3
+ "version": "1.0.0",
4
+ "protocolVersion": 1,
5
+ "license": "Apache-2.0",
6
+ "files": [
7
+ {
8
+ "path": "evidence.json",
9
+ "category": "evidence",
10
+ "caseCount": 1,
11
+ "sha256": "b4e3b4a38f67e7489eafb05528fd309ee931db66e1a0c230ffbd0e103db1f032"
12
+ },
13
+ {
14
+ "path": "framing.json",
15
+ "category": "framing",
16
+ "caseCount": 6,
17
+ "sha256": "bacc590419dcee44ad0fa3e707d00a9bf322ac51243efc0a0418821fc6c92ea8"
18
+ },
19
+ {
20
+ "path": "hashing.json",
21
+ "category": "hashing",
22
+ "caseCount": 6,
23
+ "sha256": "8722eba9ec01c80bdfa5f08fe13bc4c010b4712f61f417e5e2f748a8cbad44b3"
24
+ },
25
+ {
26
+ "path": "invalid.json",
27
+ "category": "invalid",
28
+ "caseCount": 5,
29
+ "sha256": "05d098aa80412ce8d85aafea1b4ce4add53381e2fe4a4cda1cad88d9fa286fa6"
30
+ }
31
+ ],
32
+ "sources": [
33
+ {
34
+ "id": "FIPS-180-4",
35
+ "url": "https://csrc.nist.gov/pubs/fips/180-4/upd1/final",
36
+ "license": "US Government work",
37
+ "revision": "FIPS PUB 180-4"
38
+ },
39
+ {
40
+ "id": "Noeos-VE-Protocol-1",
41
+ "url": "https://github.com/noeos/verification-engine/blob/main/docs/04-normalizacion-criptografia/02-hash-framing.md",
42
+ "license": "Apache-2.0",
43
+ "revision": "protocol-1"
44
+ }
45
+ ]
46
+ }