edhoc 1.0.5 → 1.1.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 (313) hide show
  1. package/README.md +170 -0
  2. package/binding.gyp +13 -11
  3. package/dist/crypto.d.ts +9 -2
  4. package/dist/crypto.d.ts.map +1 -1
  5. package/dist/crypto.js +112 -84
  6. package/dist/edhoc.d.ts +31 -9
  7. package/dist/edhoc.d.ts.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/x509credentials.d.ts +20 -0
  12. package/dist/x509credentials.d.ts.map +1 -0
  13. package/dist/x509credentials.js +140 -0
  14. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_decode.h +1 -1
  15. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_encode.h +1 -1
  16. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_types.h +1 -1
  17. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_decode.h +2 -2
  18. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_encode.h +2 -2
  19. package/external/libedhoc/backends/cbor/include/backend_cbor_edhoc_types.h +48 -43
  20. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_decode.h +1 -1
  21. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_encode.h +1 -1
  22. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_types.h +3 -3
  23. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_decode.h +1 -1
  24. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_encode.h +1 -1
  25. package/external/libedhoc/backends/cbor/include/backend_cbor_info_decode.h +1 -1
  26. package/external/libedhoc/backends/cbor/include/backend_cbor_info_encode.h +1 -1
  27. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_decode.h +1 -1
  28. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_encode.h +1 -1
  29. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_types.h +1 -1
  30. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_decode.h +1 -1
  31. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_encode.h +1 -1
  32. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_decode.h +1 -1
  33. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_encode.h +1 -1
  34. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_decode.h +1 -1
  35. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_encode.h +1 -1
  36. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_decode.h +1 -1
  37. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_encode.h +1 -1
  38. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_decode.h +1 -1
  39. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_encode.h +1 -1
  40. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_decode.h +1 -1
  41. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_encode.h +1 -1
  42. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_decode.h +1 -1
  43. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_encode.h +1 -1
  44. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_decode.h +3 -3
  45. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_encode.h +3 -3
  46. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_decode.h +1 -1
  47. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_encode.h +1 -1
  48. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_types.h +4 -4
  49. package/external/libedhoc/backends/cbor/include/backend_cbor_x509_types.h +93 -83
  50. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_decode.c +11 -20
  51. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_encode.c +11 -20
  52. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_decode.c +27 -32
  53. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_encode.c +27 -32
  54. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_decode.c +14 -23
  55. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_encode.c +14 -23
  56. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_decode.c +63 -52
  57. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_encode.c +62 -51
  58. package/external/libedhoc/backends/cbor/src/backend_cbor_info_decode.c +14 -23
  59. package/external/libedhoc/backends/cbor/src/backend_cbor_info_encode.c +14 -23
  60. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_decode.c +11 -20
  61. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_encode.c +11 -20
  62. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_decode.c +54 -51
  63. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_encode.c +54 -51
  64. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_decode.c +11 -20
  65. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_encode.c +11 -20
  66. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_decode.c +11 -20
  67. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_encode.c +11 -20
  68. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_decode.c +11 -20
  69. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_encode.c +11 -20
  70. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_decode.c +36 -37
  71. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_encode.c +36 -37
  72. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_decode.c +103 -80
  73. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_encode.c +102 -79
  74. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_decode.c +99 -76
  75. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_encode.c +98 -75
  76. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_decode.c +40 -41
  77. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_encode.c +40 -41
  78. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_decode.c +15 -24
  79. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_encode.c +15 -24
  80. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.c +31 -0
  81. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.h +10 -0
  82. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.c +18 -0
  83. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.h +9 -0
  84. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode.c +69 -0
  85. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode2.c +38 -0
  86. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  87. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  88. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.c +31 -0
  89. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.h +10 -0
  90. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.c +18 -0
  91. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.h +9 -0
  92. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode.c +71 -0
  93. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode2.c +40 -0
  94. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +16 -0
  95. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +18 -0
  96. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/all_tests.c +19 -0
  97. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.c +17 -0
  98. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.h +19 -0
  99. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.c +31 -0
  100. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.h +10 -0
  101. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.c +18 -0
  102. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.h +9 -0
  103. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode.c +69 -0
  104. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode2.c +38 -0
  105. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.c +31 -0
  106. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.h +10 -0
  107. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.c +18 -0
  108. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.h +9 -0
  109. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode.c +70 -0
  110. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode2.c +42 -0
  111. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  112. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  113. package/external/libedhoc/externals/Unity/examples/unity_config.h +251 -0
  114. package/external/libedhoc/externals/Unity/extras/bdd/src/unity_bdd.h +44 -0
  115. package/external/libedhoc/externals/Unity/extras/bdd/test/test_bdd.c +129 -0
  116. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.c +310 -0
  117. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.h +95 -0
  118. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  119. package/external/libedhoc/externals/Unity/extras/fixture/test/main/AllTests.c +20 -0
  120. package/external/libedhoc/externals/Unity/extras/fixture/test/template_fixture_tests.c +40 -0
  121. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_Test.c +246 -0
  122. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_TestRunner.c +33 -0
  123. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.c +203 -0
  124. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.h +61 -0
  125. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_Test.c +326 -0
  126. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_TestRunner.c +50 -0
  127. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.c +57 -0
  128. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.h +17 -0
  129. package/external/libedhoc/externals/Unity/src/unity.c +2501 -0
  130. package/external/libedhoc/externals/Unity/src/unity.h +698 -0
  131. package/external/libedhoc/externals/Unity/src/unity_internals.h +1183 -0
  132. package/external/libedhoc/externals/Unity/test/expectdata/testsample_cmd.c +61 -0
  133. package/external/libedhoc/externals/Unity/test/expectdata/testsample_def.c +57 -0
  134. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.c +55 -0
  135. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.h +15 -0
  136. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_cmd.c +80 -0
  137. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_def.c +76 -0
  138. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.c +75 -0
  139. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.h +13 -0
  140. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new1.c +89 -0
  141. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new2.c +89 -0
  142. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_param.c +77 -0
  143. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run1.c +89 -0
  144. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run2.c +89 -0
  145. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_yaml.c +90 -0
  146. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new1.c +67 -0
  147. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new2.c +70 -0
  148. package/external/libedhoc/externals/Unity/test/expectdata/testsample_param.c +58 -0
  149. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run1.c +67 -0
  150. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run2.c +70 -0
  151. package/external/libedhoc/externals/Unity/test/expectdata/testsample_yaml.c +71 -0
  152. package/external/libedhoc/externals/Unity/test/testdata/CException.h +18 -0
  153. package/external/libedhoc/externals/Unity/test/testdata/Defs.h +16 -0
  154. package/external/libedhoc/externals/Unity/test/testdata/cmock.h +21 -0
  155. package/external/libedhoc/externals/Unity/test/testdata/mockMock.h +20 -0
  156. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGenerator.c +204 -0
  157. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorSmall.c +73 -0
  158. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorWithMocks.c +200 -0
  159. package/external/libedhoc/externals/Unity/test/tests/self_assessment_utils.h +151 -0
  160. package/external/libedhoc/externals/Unity/test/tests/test_unity_arrays.c +2941 -0
  161. package/external/libedhoc/externals/Unity/test/tests/test_unity_core.c +375 -0
  162. package/external/libedhoc/externals/Unity/test/tests/test_unity_doubles.c +1285 -0
  163. package/external/libedhoc/externals/Unity/test/tests/test_unity_floats.c +1395 -0
  164. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers.c +2863 -0
  165. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers_64.c +783 -0
  166. package/external/libedhoc/externals/Unity/test/tests/test_unity_memory.c +82 -0
  167. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterized.c +309 -0
  168. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterizedDemo.c +28 -0
  169. package/external/libedhoc/externals/Unity/test/tests/test_unity_strings.c +330 -0
  170. package/external/libedhoc/externals/Unity/test/tests/types_for_test.h +21 -0
  171. package/external/libedhoc/externals/zcbor/include/zcbor_common.h +147 -60
  172. package/external/libedhoc/externals/zcbor/include/zcbor_decode.h +291 -202
  173. package/external/libedhoc/externals/zcbor/include/zcbor_encode.h +100 -156
  174. package/external/libedhoc/externals/zcbor/include/zcbor_print.h +165 -0
  175. package/external/libedhoc/externals/zcbor/samples/hello_world/src/main.c +1 -1
  176. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_decode.h +1 -1
  177. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_encode.h +1 -1
  178. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_types.h +4 -4
  179. package/external/libedhoc/externals/zcbor/samples/pet/src/main.c +4 -4
  180. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_decode.c +15 -24
  181. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_encode.c +14 -23
  182. package/external/libedhoc/externals/zcbor/src/zcbor_common.c +202 -29
  183. package/external/libedhoc/externals/zcbor/src/zcbor_decode.c +633 -173
  184. package/external/libedhoc/externals/zcbor/src/zcbor_encode.c +71 -184
  185. package/external/libedhoc/externals/zcbor/tests/decode/test1_suit_old_formats/src/main.c +152 -153
  186. package/external/libedhoc/externals/zcbor/tests/decode/test2_suit/src/main.c +64 -64
  187. package/external/libedhoc/externals/zcbor/tests/decode/test3_simple/src/main.c +15 -16
  188. package/external/libedhoc/externals/zcbor/tests/decode/test5_corner_cases/src/main.c +228 -84
  189. package/external/libedhoc/externals/zcbor/tests/decode/test7_suit9_simple/src/main.c +9 -9
  190. package/external/libedhoc/externals/zcbor/tests/decode/test8_suit12/src/main.c +0 -1
  191. package/external/libedhoc/externals/zcbor/tests/decode/test9_manifest14/src/main.c +172 -173
  192. package/external/libedhoc/externals/zcbor/tests/encode/test1_suit/src/main.c +73 -73
  193. package/external/libedhoc/externals/zcbor/tests/encode/test2_simple/src/main.c +1 -2
  194. package/external/libedhoc/externals/zcbor/tests/encode/test3_corner_cases/src/main.c +83 -56
  195. package/external/libedhoc/externals/zcbor/tests/encode/test4_senml/src/main.c +15 -16
  196. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_everything.c +12 -0
  197. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_manifest12.c +69 -69
  198. package/external/libedhoc/externals/zcbor/tests/unit/test1_unit_tests/src/main.c +448 -55
  199. package/external/libedhoc/externals/zcbor/tests/unit/test3_float16/src/main.c +49 -48
  200. package/external/libedhoc/include/edhoc.h +348 -54
  201. package/external/libedhoc/include/edhoc_common.h +289 -0
  202. package/external/libedhoc/include/edhoc_context.h +60 -35
  203. package/external/libedhoc/include/edhoc_credentials.h +55 -7
  204. package/external/libedhoc/include/edhoc_crypto.h +10 -10
  205. package/external/libedhoc/include/edhoc_ead.h +13 -10
  206. package/external/libedhoc/include/edhoc_macros.h +20 -11
  207. package/external/libedhoc/include/edhoc_values.h +2 -2
  208. package/external/libedhoc/library/edhoc.c +70 -36
  209. package/external/libedhoc/library/edhoc_common.c +1314 -0
  210. package/external/libedhoc/library/edhoc_exporter.c +45 -46
  211. package/external/libedhoc/library/edhoc_message_1.c +107 -72
  212. package/external/libedhoc/library/edhoc_message_2.c +396 -1693
  213. package/external/libedhoc/library/edhoc_message_3.c +465 -1656
  214. package/external/libedhoc/library/edhoc_message_4.c +93 -91
  215. package/external/libedhoc/library/edhoc_message_error.c +41 -41
  216. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_0.h → cipher_suite_0.h} +131 -134
  217. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_2.h → cipher_suite_2.h} +139 -140
  218. package/external/libedhoc/tests/include/{edhoc_trace_1/test_vector_1.h → test_vector_rfc9529_chapter_2.h} +786 -738
  219. package/external/libedhoc/tests/include/{edhoc_trace_2/test_vector_2.h → test_vector_rfc9529_chapter_3.h} +14 -10
  220. package/external/libedhoc/tests/include/{x509_chain_cs_0/test_vector_x5chain_cs_0.h → test_vector_x5chain_sign_keys_suite_0.h} +137 -140
  221. package/external/libedhoc/tests/include/{x509_chain_cs_2/test_vector_x5chain_cs_2.h → test_vector_x5chain_sign_keys_suite_2.h} +7 -8
  222. package/external/libedhoc/tests/include/{x509_chain_cs_2_static_dh/test_vector_x5chain_cs_2_static_dh.h → test_vector_x5chain_static_dh_keys_suite_2.h} +7 -8
  223. package/external/libedhoc/tests/include/{x509_hash_cs_2/test_vector_x5t_cs_2.h → test_vector_x5t_sign_keys_suite_2.h} +6 -7
  224. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_0.c → cipher_suite_0.c} +445 -447
  225. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_2.c → cipher_suite_2.c} +600 -600
  226. package/external/libedhoc/tests/src/module_test_api.c +430 -0
  227. package/external/libedhoc/tests/src/module_test_cipher_suite_0.c +395 -0
  228. package/external/libedhoc/tests/src/module_test_cipher_suite_2.c +392 -0
  229. package/external/libedhoc/tests/src/{error_message/test_edhoc_error_message.c → module_test_error_message.c} +94 -69
  230. package/external/libedhoc/tests/src/module_test_main.c +49 -0
  231. package/external/libedhoc/tests/src/{cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.c → module_test_rfc9528_suites_negotiation.c} +224 -227
  232. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_2.c +2681 -0
  233. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_3.c +1635 -0
  234. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_0.c +1135 -0
  235. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_2.c +1249 -0
  236. package/external/libedhoc/tests/src/module_test_x5chain_static_dh_keys_suite_2.c +798 -0
  237. package/external/libedhoc/tests/src/module_test_x5t_sign_keys_suite_2.c +956 -0
  238. package/include/EdhocComposeAsyncWorker.h +8 -6
  239. package/include/EdhocCredentialManager.h +16 -11
  240. package/include/EdhocCryptoManager.h +28 -21
  241. package/include/EdhocEadManager.h +3 -6
  242. package/include/{EdhocExportAsyncWorker.h → EdhocExportOscoreAsyncWorker.h} +20 -17
  243. package/include/EdhocKeyExporterAsyncWorker.h +76 -0
  244. package/include/EdhocKeyUpdateAsyncWorker.h +72 -0
  245. package/include/EdhocProcessAsyncWorker.h +14 -10
  246. package/include/LibEDHOC.h +44 -20
  247. package/include/UserContext.h +7 -9
  248. package/include/Utils.h +31 -27
  249. package/package.json +14 -3
  250. package/prebuilds/android-arm/edhoc.armv7.node +0 -0
  251. package/prebuilds/android-arm64/edhoc.armv8.node +0 -0
  252. package/prebuilds/darwin-arm64/edhoc.node +0 -0
  253. package/prebuilds/darwin-x64/edhoc.node +0 -0
  254. package/prebuilds/linux-arm/edhoc.armv6.node +0 -0
  255. package/prebuilds/linux-arm/edhoc.armv7.node +0 -0
  256. package/prebuilds/linux-arm64/edhoc.armv8.node +0 -0
  257. package/prebuilds/linux-x64/edhoc.glibc.node +0 -0
  258. package/prebuilds/linux-x64/edhoc.musl.node +0 -0
  259. package/prebuilds/win32-ia32/edhoc.node +0 -0
  260. package/prebuilds/win32-x64/edhoc.node +0 -0
  261. package/src/EdhocComposeAsyncWorker.cpp +18 -35
  262. package/src/EdhocCredentialManager.cpp +160 -187
  263. package/src/EdhocCryptoManager.cpp +386 -586
  264. package/src/EdhocEadManager.cpp +10 -18
  265. package/src/EdhocExportOscoreAsyncWorker.cpp +77 -0
  266. package/src/EdhocKeyExporterAsyncWorker.cpp +49 -0
  267. package/src/EdhocKeyUpdateAsyncWorker.cpp +41 -0
  268. package/src/EdhocProcessAsyncWorker.cpp +72 -19
  269. package/src/LibEDHOC.cpp +213 -174
  270. package/src/Suites.cpp +39 -72
  271. package/src/Utils.cpp +32 -56
  272. package/test/basic.test.ts +64 -0
  273. package/test/vectors.test.ts +111 -0
  274. package/dist/credentials.d.ts +0 -16
  275. package/dist/credentials.d.ts.map +0 -1
  276. package/dist/credentials.js +0 -84
  277. package/external/libedhoc/externals/zcbor/include/zcbor_debug.h +0 -69
  278. package/external/libedhoc/tests/include/cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.h +0 -37
  279. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_0.h +0 -48
  280. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_2.h +0 -48
  281. package/external/libedhoc/tests/include/edhoc_trace_1/authentication_credentials_1.h +0 -60
  282. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_1.h +0 -208
  283. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_ead_1.h +0 -59
  284. package/external/libedhoc/tests/include/edhoc_trace_2/authentication_credentials_2.h +0 -60
  285. package/external/libedhoc/tests/include/edhoc_trace_2/test_edhoc_handshake_2.h +0 -199
  286. package/external/libedhoc/tests/include/error_message/test_edhoc_error_message.h +0 -48
  287. package/external/libedhoc/tests/include/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.h +0 -92
  288. package/external/libedhoc/tests/include/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.h +0 -96
  289. package/external/libedhoc/tests/include/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.h +0 -58
  290. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.h +0 -56
  291. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.h +0 -57
  292. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.h +0 -59
  293. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.h +0 -57
  294. package/external/libedhoc/tests/include/x509_hash_cs_2/authentication_credentials_x5t_cs_2.h +0 -60
  295. package/external/libedhoc/tests/include/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.h +0 -57
  296. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_0.c +0 -475
  297. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_2.c +0 -473
  298. package/external/libedhoc/tests/src/edhoc_trace_1/authentication_credentials_1.c +0 -252
  299. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_1.c +0 -1829
  300. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_ead_1.c +0 -1247
  301. package/external/libedhoc/tests/src/edhoc_trace_2/authentication_credentials_2.c +0 -170
  302. package/external/libedhoc/tests/src/edhoc_trace_2/test_edhoc_handshake_2.c +0 -1783
  303. package/external/libedhoc/tests/src/tests.c +0 -228
  304. package/external/libedhoc/tests/src/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.c +0 -332
  305. package/external/libedhoc/tests/src/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.c +0 -936
  306. package/external/libedhoc/tests/src/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.c +0 -166
  307. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.c +0 -587
  308. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.c +0 -917
  309. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.c +0 -186
  310. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.c +0 -743
  311. package/external/libedhoc/tests/src/x509_hash_cs_2/authentication_credentials_x5t_cs_2.c +0 -261
  312. package/external/libedhoc/tests/src/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.c +0 -854
  313. package/src/EdhocExportAsyncWorker.cpp +0 -82
package/src/Suites.cpp CHANGED
@@ -5,13 +5,11 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_0 = {
5
5
  .value = 0, // Suite identifier 0
6
6
  .aead_key_length = 16, // Key length for AES-CCM-16-64-128 (16 bytes)
7
7
  .aead_tag_length = 8, // Authentication tag length for AES-CCM (8 bytes)
8
- .aead_iv_length =
9
- 13, // Initialization vector length for AES-CCM (13 bytes)
10
- .hash_length = 32, // Output length for SHA-256 (32 bytes)
11
- .mac_length = 8, // MAC length (8 bytes)
12
- .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
13
- .ecc_sign_length =
14
- 64, // Signature length for EdDSA using X25519 (64 bytes)
8
+ .aead_iv_length = 13, // Initialization vector length for AES-CCM (13 bytes)
9
+ .hash_length = 32, // Output length for SHA-256 (32 bytes)
10
+ .mac_length = 8, // MAC length (8 bytes)
11
+ .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
12
+ .ecc_sign_length = 64, // Signature length for EdDSA using X25519 (64 bytes)
15
13
  };
16
14
 
17
15
  // Cipher Suite 1
@@ -19,13 +17,11 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_1 = {
19
17
  .value = 1, // Suite identifier 1
20
18
  .aead_key_length = 16, // Key length for AES-CCM-16-128-128 (16 bytes)
21
19
  .aead_tag_length = 16, // Authentication tag length for AES-CCM (16 bytes)
22
- .aead_iv_length =
23
- 13, // Initialization vector length for AES-CCM (13 bytes)
24
- .hash_length = 32, // Output length for SHA-256 (32 bytes)
25
- .mac_length = 16, // MAC length (16 bytes)
26
- .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
27
- .ecc_sign_length =
28
- 64, // Signature length for EdDSA using X25519 (64 bytes)
20
+ .aead_iv_length = 13, // Initialization vector length for AES-CCM (13 bytes)
21
+ .hash_length = 32, // Output length for SHA-256 (32 bytes)
22
+ .mac_length = 16, // MAC length (16 bytes)
23
+ .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
24
+ .ecc_sign_length = 64, // Signature length for EdDSA using X25519 (64 bytes)
29
25
  };
30
26
 
31
27
  // Cipher Suite 2
@@ -33,10 +29,9 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_2 = {
33
29
  .value = 2, // Suite identifier 2
34
30
  .aead_key_length = 16, // Key length for AES-CCM-16-64-128 (16 bytes)
35
31
  .aead_tag_length = 8, // Authentication tag length for AES-CCM (8 bytes)
36
- .aead_iv_length =
37
- 13, // Initialization vector length for AES-CCM (13 bytes)
38
- .hash_length = 32, // Output length for SHA-256 (32 bytes)
39
- .mac_length = 8, // MAC length (8 bytes)
32
+ .aead_iv_length = 13, // Initialization vector length for AES-CCM (13 bytes)
33
+ .hash_length = 32, // Output length for SHA-256 (32 bytes)
34
+ .mac_length = 8, // MAC length (8 bytes)
40
35
  .ecc_key_length = 32, // Elliptic curve key length for P-256 (32 bytes)
41
36
  .ecc_sign_length = 64, // Signature length for ES256 using P-256 (64 bytes)
42
37
  };
@@ -46,10 +41,9 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_3 = {
46
41
  .value = 3, // Suite identifier 3
47
42
  .aead_key_length = 16, // Key length for AES-CCM-16-128-128 (16 bytes)
48
43
  .aead_tag_length = 16, // Authentication tag length for AES-CCM (16 bytes)
49
- .aead_iv_length =
50
- 13, // Initialization vector length for AES-CCM (13 bytes)
51
- .hash_length = 32, // Output length for SHA-256 (32 bytes)
52
- .mac_length = 16, // MAC length (16 bytes)
44
+ .aead_iv_length = 13, // Initialization vector length for AES-CCM (13 bytes)
45
+ .hash_length = 32, // Output length for SHA-256 (32 bytes)
46
+ .mac_length = 16, // MAC length (16 bytes)
53
47
  .ecc_key_length = 32, // Elliptic curve key length for P-256 (32 bytes)
54
48
  .ecc_sign_length = 64, // Signature length for ES256 using P-256 (64 bytes)
55
49
  };
@@ -63,8 +57,7 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_4 = {
63
57
  .hash_length = 32, // Output length for SHA-256 (32 bytes)
64
58
  .mac_length = 16, // MAC length (16 bytes)
65
59
  .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
66
- .ecc_sign_length =
67
- 64, // Signature length for EdDSA using X25519 (64 bytes)
60
+ .ecc_sign_length = 64, // Signature length for EdDSA using X25519 (64 bytes)
68
61
  };
69
62
 
70
63
  // Cipher Suite 5
@@ -84,13 +77,11 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_6 = {
84
77
  .value = 6, // Suite identifier 6
85
78
  .aead_key_length = 16, // Key length for A128GCM (16 bytes)
86
79
  .aead_tag_length = 16, // Authentication tag length for A128GCM (16 bytes)
87
- .aead_iv_length =
88
- 12, // Initialization vector length for A128GCM (12 bytes)
89
- .hash_length = 32, // Output length for SHA-256 (32 bytes)
90
- .mac_length = 16, // MAC length (16 bytes)
91
- .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
92
- .ecc_sign_length =
93
- 64, // Signature length for ES256 using X25519 (64 bytes)
80
+ .aead_iv_length = 12, // Initialization vector length for A128GCM (12 bytes)
81
+ .hash_length = 32, // Output length for SHA-256 (32 bytes)
82
+ .mac_length = 16, // MAC length (16 bytes)
83
+ .ecc_key_length = 32, // Elliptic curve key length for X25519 (32 bytes)
84
+ .ecc_sign_length = 64, // Signature length for ES256 using X25519 (64 bytes)
94
85
  };
95
86
 
96
87
  // Cipher Suite 24
@@ -98,56 +89,32 @@ static const struct edhoc_cipher_suite edhoc_cipher_suite_24 = {
98
89
  .value = 24, // Suite identifier 24
99
90
  .aead_key_length = 32, // Key length for A256GCM (32 bytes)
100
91
  .aead_tag_length = 16, // Authentication tag length for A256GCM (16 bytes)
101
- .aead_iv_length =
102
- 12, // Initialization vector length for A256GCM (12 bytes)
103
- .hash_length = 48, // Output length for SHA-384 (48 bytes)
104
- .mac_length = 16, // MAC length (16 bytes)
92
+ .aead_iv_length = 12, // Initialization vector length for A256GCM (12 bytes)
93
+ .hash_length = 48, // Output length for SHA-384 (48 bytes)
94
+ .mac_length = 16, // MAC length (16 bytes)
105
95
  .ecc_key_length = 48, // Elliptic curve key length for P-384 (48 bytes)
106
96
  .ecc_sign_length = 96, // Signature length for ES384 using P-384 (96 bytes)
107
97
  };
108
98
 
109
99
  // Cipher Suite 25
110
100
  static const struct edhoc_cipher_suite edhoc_cipher_suite_25 = {
111
- .value = 25, // Suite identifier 25
112
- .aead_key_length = 32, // Key length for ChaCha20 (32 bytes)
113
- .aead_tag_length = 16, // Authentication tag length for Poly1305 (16 bytes)
114
- .aead_iv_length = 12, // Nonce length for ChaCha20 (12 bytes)
115
- .hash_length = 64, // Output length for SHAKE256 (64 bytes)
116
- .mac_length = 16, // MAC length (16 bytes)
117
- .ecc_key_length = 56, // Elliptic curve key length for X448 (56 bytes)
118
- .ecc_sign_length =
119
- 114, // Signature length for EdDSA using X448 (114 bytes)
101
+ .value = 25, // Suite identifier 25
102
+ .aead_key_length = 32, // Key length for ChaCha20 (32 bytes)
103
+ .aead_tag_length = 16, // Authentication tag length for Poly1305 (16 bytes)
104
+ .aead_iv_length = 12, // Nonce length for ChaCha20 (12 bytes)
105
+ .hash_length = 64, // Output length for SHAKE256 (64 bytes)
106
+ .mac_length = 16, // MAC length (16 bytes)
107
+ .ecc_key_length = 56, // Elliptic curve key length for X448 (56 bytes)
108
+ .ecc_sign_length = 114, // Signature length for EdDSA using X448 (114 bytes)
120
109
  };
121
110
 
122
111
  const struct edhoc_cipher_suite* suite_pointers[] = {
123
- &edhoc_cipher_suite_0,
124
- &edhoc_cipher_suite_1,
125
- &edhoc_cipher_suite_2,
126
- &edhoc_cipher_suite_3,
127
- &edhoc_cipher_suite_4,
128
- &edhoc_cipher_suite_5,
129
- &edhoc_cipher_suite_6,
112
+ &edhoc_cipher_suite_0, &edhoc_cipher_suite_1, &edhoc_cipher_suite_2, &edhoc_cipher_suite_3, &edhoc_cipher_suite_4,
113
+ &edhoc_cipher_suite_5, &edhoc_cipher_suite_6,
130
114
  // 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
131
- nullptr,
132
- nullptr,
133
- nullptr,
134
- nullptr,
135
- nullptr,
136
- nullptr,
137
- nullptr,
138
- nullptr,
139
- nullptr,
140
- nullptr,
141
- nullptr,
142
- nullptr,
143
- nullptr,
144
- nullptr,
145
- nullptr,
146
- nullptr,
147
- nullptr,
115
+ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
116
+ nullptr, nullptr, nullptr, nullptr,
148
117
  // 24, 25
149
- &edhoc_cipher_suite_24,
150
- &edhoc_cipher_suite_25};
118
+ &edhoc_cipher_suite_24, &edhoc_cipher_suite_25};
151
119
 
152
- const size_t suite_pointers_count =
153
- sizeof(suite_pointers) / sizeof(suite_pointers[0]);
120
+ const size_t suite_pointers_count = sizeof(suite_pointers) / sizeof(suite_pointers[0]);
package/src/Utils.cpp CHANGED
@@ -1,33 +1,22 @@
1
+ #include "Utils.h"
2
+
1
3
  #include <condition_variable>
2
4
  #include <cstring>
3
5
  #include <mutex>
4
6
  #include <thread>
5
7
 
6
- #include "Utils.h"
7
-
8
8
  static constexpr const char* kStringThen = "then";
9
9
  static constexpr const char* kStringCatch = "catch";
10
- static constexpr const char* kErrorInputValueMustBeANumberOrABuffer =
11
- "Input value must be a number or a buffer";
12
-
13
- void Utils::ResetAndRelease(Napi::FunctionReference& funcRef,
14
- Napi::ThreadSafeFunction& tsfn) {
15
- if (!funcRef.IsEmpty()) {
16
- funcRef.Reset();
17
- }
18
- if (tsfn != nullptr) {
19
- tsfn.Release();
20
- tsfn = nullptr;
21
- }
22
- }
10
+ static constexpr const char* kErrorInputValueMustBeANumberOrABuffer = "Input value must be a number or a buffer";
23
11
 
24
- void Utils::InvokeJSFunctionWithPromiseHandling(
25
- Napi::Env env,
26
- Napi::Object jsObject,
27
- Napi::Function jsCallback,
28
- const std::vector<napi_value>& args,
29
- std::function<void(Napi::Env, Napi::Value)> callbackLambda) {
12
+ void Utils::InvokeJSFunctionWithPromiseHandling(Napi::Env env,
13
+ Napi::Object jsObject,
14
+ Napi::Function jsCallback,
15
+ const std::vector<napi_value>& args,
16
+ SuccessHandler successLambda,
17
+ ErrorHandler errorLambda) {
30
18
  auto deferred = Napi::Promise::Deferred::New(env);
19
+
31
20
  try {
32
21
  Napi::Value result = jsCallback.Call(jsObject, args);
33
22
  deferred.Resolve(result);
@@ -35,36 +24,28 @@ void Utils::InvokeJSFunctionWithPromiseHandling(
35
24
  deferred.Reject(e.Value());
36
25
  }
37
26
 
38
- Napi::Promise promise = deferred.Promise();
39
-
40
- auto thenCallback = Napi::Function::New(
41
- env, [callbackLambda](const Napi::CallbackInfo& info) {
42
- Napi::Env env = info.Env();
43
- Napi::HandleScope scope(env);
44
- Napi::Value result = info[0];
45
- Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(env);
46
- try {
47
- callbackLambda(env, result);
48
- deferred.Resolve(result);
49
- } catch (const Napi::Error& e) {
50
- deferred.Reject(e.Value());
51
- }
52
- return deferred.Promise();
53
- });
27
+ auto thenCallback = Napi::Function::New(env, [successLambda, errorLambda](const Napi::CallbackInfo& info) {
28
+ Napi::Env env = info.Env();
29
+ Napi::HandleScope scope(env);
30
+ try {
31
+ successLambda(env, info[0].As<Napi::Value>());
32
+ } catch (const std::exception& e) {
33
+ errorLambda(env, Napi::Error::New(env, e.what()));
34
+ }
35
+ });
54
36
 
55
- auto catchCallback =
56
- Napi::Function::New(env, [](const Napi::CallbackInfo& info) {
57
- Napi::Error error = info[0].As<Napi::Error>();
58
- throw error;
59
- });
37
+ auto catchCallback = Napi::Function::New(env, [errorLambda](const Napi::CallbackInfo& info) {
38
+ Napi::Env env = info.Env();
39
+ Napi::HandleScope scope(env);
40
+ errorLambda(env, info[0].As<Napi::Error>());
41
+ });
60
42
 
61
- promise.Get(kStringThen).As<Napi::Function>().Call(promise, {thenCallback});
43
+ Napi::Promise promise = deferred.Promise();
62
44
  promise.Get(kStringCatch).As<Napi::Function>().Call(promise, {catchCallback});
45
+ promise.Get(kStringThen).As<Napi::Function>().Call(promise, {thenCallback});
63
46
  }
64
47
 
65
- void Utils::EncodeInt64ToBuffer(int64_t value,
66
- uint8_t* buffer,
67
- size_t* length) {
48
+ void Utils::EncodeInt64ToBuffer(int64_t value, uint8_t* buffer, size_t* length) {
68
49
  size_t idx = 0;
69
50
  if (value == 0) {
70
51
  buffer[idx++] = 0;
@@ -81,10 +62,8 @@ struct edhoc_connection_id Utils::ConvertJsValueToEdhocCid(Napi::Value value) {
81
62
  struct edhoc_connection_id cid = {};
82
63
  if (value.IsNumber()) {
83
64
  int64_t numeric = value.As<Napi::Number>().Int64Value();
84
- if (numeric >= ONE_BYTE_CBOR_INT_MIN_VALUE &&
85
- numeric <= ONE_BYTE_CBOR_INT_MAX_VALUE) {
86
- cid = {.encode_type = EDHOC_CID_TYPE_ONE_BYTE_INTEGER,
87
- .int_value = (int8_t)numeric};
65
+ if (numeric >= ONE_BYTE_CBOR_INT_MIN_VALUE && numeric <= ONE_BYTE_CBOR_INT_MAX_VALUE) {
66
+ cid = {.encode_type = EDHOC_CID_TYPE_ONE_BYTE_INTEGER, .int_value = (int8_t)numeric};
88
67
  } else {
89
68
  size_t length = 0;
90
69
  Utils::EncodeInt64ToBuffer(numeric, cid.bstr_value, &length);
@@ -97,19 +76,16 @@ struct edhoc_connection_id Utils::ConvertJsValueToEdhocCid(Napi::Value value) {
97
76
  cid.bstr_length = buffer.Length();
98
77
  memcpy(cid.bstr_value, buffer.Data(), cid.bstr_length);
99
78
  } else {
100
- throw Napi::TypeError::New(value.Env(),
101
- kErrorInputValueMustBeANumberOrABuffer);
79
+ throw Napi::TypeError::New(value.Env(), kErrorInputValueMustBeANumberOrABuffer);
102
80
  }
103
81
  return cid;
104
82
  }
105
83
 
106
- Napi::Value Utils::CreateJsValueFromEdhocCid(Napi::Env env,
107
- struct edhoc_connection_id value) {
84
+ Napi::Value Utils::CreateJsValueFromEdhocCid(Napi::Env env, struct edhoc_connection_id value) {
108
85
  if (value.encode_type == EDHOC_CID_TYPE_ONE_BYTE_INTEGER) {
109
86
  return Napi::Number::New(env, value.int_value);
110
87
  } else if (value.encode_type == EDHOC_CID_TYPE_BYTE_STRING) {
111
- return Napi::Buffer<char>::Copy(
112
- env, (const char*)value.bstr_value, value.bstr_length);
88
+ return Napi::Buffer<char>::Copy(env, (const char*)value.bstr_value, value.bstr_length);
113
89
  }
114
90
  return env.Null();
115
91
  }
@@ -0,0 +1,64 @@
1
+ import { EDHOC, X509CertificateCredentialManager, DefaultEdhocCryptoManager, EdhocMethod, EdhocSuite } from '../dist/index'
2
+
3
+ describe('EDHOC Handshake', () => {
4
+ // Test setup variables
5
+ const trustedCA = Buffer.from('308201323081DAA003020102021478408C6EC18A1D452DAE70C726CB0192A6116DBB300A06082A8648CE3D040302301A3118301606035504030C0F5468697320697320434120526F6F74301E170D3234313031393138333635335A170D3235313031393138333635335A301A3118301606035504030C0F5468697320697320434120526F6F743059301306072A8648CE3D020106082A8648CE3D03010703420004B9348A8A267EF52CFDC30109A29008A2D99F6B8F78BA9EAF5D51578C06134E78CB90A073EDC2488A14174B4E2997C840C5DE7F8E35EB54A0DB6977E894D1B2CB300A06082A8648CE3D040302034700304402203B92BFEC770B0FA4E17F8F02A13CD945D914ED8123AC85C37C8C7BAA2BE3E0F102202CB2DC2EC295B5F4B7BB631ED751179C145D6B6E081559AEA38CE215369E9C31', 'hex');
6
+ let initiator: EDHOC;
7
+ let responder: EDHOC;
8
+
9
+ beforeEach(() => {
10
+ // Initialize credentials and crypto managers for both parties
11
+ const initiatorKeyID = Buffer.from('00000001', 'hex');
12
+ const initiatorCredentialManager = new X509CertificateCredentialManager(
13
+ [Buffer.from('3082012E3081D4A003020102021453423D5145C767CDC29895C3DB590192A611EA50300A06082A8648CE3D040302301A3118301606035504030C0F5468697320697320434120526F6F74301E170D3234313031393138333732345A170D3235313031393138333732345A30143112301006035504030C09696E69746961746F723059301306072A8648CE3D020106082A8648CE3D03010703420004EB0EF585F3992A1653CF310BF0F0F8035267CDAB6989C8B02E7228FBD759EF6B56263259AADF087F9849E7B7651F74C3B4F144CCCF86BB6FE2FF0EF3AA5FB5DC300A06082A8648CE3D0403020349003046022100D8C3AA7C98A730B3D4862EDAB4C1474FCD9A17A9CA3FB078914A10978FE95CC40221009F5877DD4E2C635A04ED1F6F1854C87B58521BDDFF533B1076F53D456739764C', 'hex')],
14
+ initiatorKeyID
15
+ );
16
+ initiatorCredentialManager.addTrustedCA(trustedCA);
17
+
18
+ const initiatorCryptoManager = new DefaultEdhocCryptoManager();
19
+ initiatorCryptoManager.addKey(initiatorKeyID, Buffer.from('DC1FBB05B6B08360CE5B9EEA08EBFBFC6766A21340641863D4C8A3F68F096337', 'hex'));
20
+
21
+ const responderKeyID = Buffer.from('00000002', 'hex');
22
+ const responderCredentialManager = new X509CertificateCredentialManager(
23
+ [Buffer.from('3082012E3081D4A00302010202146648869E2608FC2E16D945C10E1F0192A6125CC0300A06082A8648CE3D040302301A3118301606035504030C0F5468697320697320434120526F6F74301E170D3234313031393138333735345A170D3235313031393138333735345A30143112301006035504030C09726573706F6E6465723059301306072A8648CE3D020106082A8648CE3D03010703420004161F76A7A106C9B79B7F651156B5B095E63A6101A39020F4E86DDACE61FB395E8AEF6CD9C444EE9A43DBD62DAD44FF50FE4146247D3AFD28F60DBC01FBFC573C300A06082A8648CE3D0403020349003046022100E8AD0926518CDB61E84D171700C7158FD0E72D03A117D40133ECD10F8B9F42CE022100E7E69B4C79100B3F0792F010AE11EE5DD2859C29EFC4DBCEFD41FA5CD4D3C3C9', 'hex')],
24
+ responderKeyID
25
+ );
26
+ responderCredentialManager.addTrustedCA(trustedCA);
27
+
28
+ const responderCryptoManager = new DefaultEdhocCryptoManager();
29
+ responderCryptoManager.addKey(responderKeyID, Buffer.from('EE6287116FE27CDC539629DC87E12BF8EAA2229E7773AA67BC4C0FBA96E7FBB2', 'hex'));
30
+
31
+ // Initialize EDHOC instances
32
+ initiator = new EDHOC(10, [EdhocMethod.Method1], [EdhocSuite.Suite2], initiatorCredentialManager, initiatorCryptoManager);
33
+ responder = new EDHOC(20, [EdhocMethod.Method2, EdhocMethod.Method0, EdhocMethod.Method1], [EdhocSuite.Suite2], responderCredentialManager, responderCryptoManager);
34
+ });
35
+
36
+ test('should complete successful EDHOC handshake', async () => {
37
+ // Perform the three-message handshake
38
+ const message1 = await initiator.composeMessage1([{ label: 1, value: Buffer.from('Hello') }]);
39
+ const ead1 = await responder.processMessage1(message1);
40
+ expect(ead1[0].value.toString()).toBe('Hello');
41
+
42
+ const message2 = await responder.composeMessage2();
43
+ const ead2 = await initiator.processMessage2(message2);
44
+ expect(ead2).toEqual([]);
45
+
46
+ const message3 = await initiator.composeMessage3();
47
+ const ead3 = await responder.processMessage3(message3);
48
+ expect(ead3).toEqual([]);
49
+
50
+ // Verify that both parties derived the same OSCORE security context
51
+ const initiatorOSCORE = await initiator.exportOSCORE();
52
+ const responderOSCORE = await responder.exportOSCORE();
53
+
54
+ expect(initiatorOSCORE.masterSalt).toEqual(responderOSCORE.masterSalt);
55
+ expect(initiatorOSCORE.masterSecret).toEqual(responderOSCORE.masterSecret);
56
+ expect(initiatorOSCORE.senderId).toEqual(responderOSCORE.recipientId);
57
+ expect(initiatorOSCORE.recipientId).toEqual(responderOSCORE.senderId);
58
+
59
+ // Verify that both parties can derive the same application keys
60
+ const initiatorKey = await initiator.exportKey(40001, 32);
61
+ const responderKey = await responder.exportKey(40001, 32);
62
+ expect(initiatorKey).toEqual(responderKey);
63
+ });
64
+ });
@@ -0,0 +1,111 @@
1
+ import { EDHOC, X509CertificateCredentialManager, DefaultEdhocCryptoManager, EdhocMethod, EdhocSuite, EdhocCredentialsFormat, EdhocKeyType } from '../dist/index'
2
+
3
+ class VectorsEdhocCryptoManager extends DefaultEdhocCryptoManager {
4
+
5
+ async importKey(edhoc: EDHOC, keyType: EdhocKeyType, key: Buffer) {
6
+ // Method 0, Suite 0, Connection ID -14 - Initiator
7
+ if (keyType === EdhocKeyType.MakeKeyPair && key && edhoc.connectionID === -14) {
8
+ key = Buffer.from('892EC28E5CB6669108470539500B705E60D008D347C5817EE9F3327C8A87BB03', 'hex');
9
+ }
10
+ // Method 0, Suite 0, Connection ID 0x18 - Responder
11
+ if (keyType === EdhocKeyType.MakeKeyPair && key && Buffer.isBuffer(edhoc.connectionID) && Buffer.compare(edhoc.connectionID, Buffer.from([0x18])) === 0) {
12
+ key = Buffer.from('E69C23FBF81BC435942446837FE827BF206C8FA10A39DB47449E5A813421E1E8', 'hex');
13
+ }
14
+ return super.importKey(edhoc, keyType, key);
15
+ }
16
+ }
17
+
18
+ describe('EDHOC RFC9529 Test Vectors', () => {
19
+ // Test setup variables
20
+ const trustedCA = Buffer.from('3082010E3081C1A003020102020462319E74300506032B6570301D311B301906035504030C124544484F4320526F6F742045643235353139301E170D3232303331363038323331365A170D3239313233313233303030305A301D311B301906035504030C124544484F4320526F6F742045643235353139302A300506032B65700321002B7B3E8057C8642944D06AFE7A71D1C9BF961B6292BAC4B04F91669BBB713BE4A3233021300E0603551D0F0101FF040403020204300F0603551D130101FF040530030101FF300506032B65700341004BB52BBF1539B71A4AAF429778F29EDA7E814680698F16C48F2A6FA4DBE82541C58207BA1BC9CDB0C2FA947FFBF0F0EC0EE91A7FF37A94D9251FA5CDF1E67A0F', 'hex');
21
+ const keyUpdate = Buffer.from('d6be169602b8bceaa01158fdb820890c', 'hex');
22
+
23
+ const masterSecret = Buffer.from('1e1c6beac3a8a1cac435de7e2f9ae7ff', 'hex');
24
+ const masterSalt = Buffer.from('ce7ab844c0106d73', 'hex');
25
+
26
+ const masterSecret_Update = Buffer.from('ee0ff542c47eb0e09c69307649bdbbe5', 'hex');
27
+ const masterSalt_Update = Buffer.from('80cede2a1e5aab48', 'hex');
28
+
29
+ // Initiator Identity
30
+ const initiatorCert = Buffer.from('3081EE3081A1A003020102020462319EA0300506032B6570301D311B301906035504030C124544484F4320526F6F742045643235353139301E170D3232303331363038323430305A170D3239313233313233303030305A30223120301E06035504030C174544484F4320496E69746961746F722045643235353139302A300506032B6570032100ED06A8AE61A829BA5FA54525C9D07F48DD44A302F43E0F23D8CC20B73085141E300506032B6570034100521241D8B3A770996BCFC9B9EAD4E7E0A1C0DB353A3BDF2910B39275AE48B756015981850D27DB6734E37F67212267DD05EEFF27B9E7A813FA574B72A00B430B', 'hex');
31
+ const initiatorKey = Buffer.from('4C5B25878F507C6B9DAE68FBD4FD3FF997533DB0AF00B25D324EA28E6C213BC8', 'hex');
32
+ const initiatorKeyID = Buffer.from('00000001', 'hex');
33
+
34
+ // Responder Identity
35
+ const responderCert = Buffer.from('3081EE3081A1A003020102020462319EC4300506032B6570301D311B301906035504030C124544484F4320526F6F742045643235353139301E170D3232303331363038323433365A170D3239313233313233303030305A30223120301E06035504030C174544484F4320526573706F6E6465722045643235353139302A300506032B6570032100A1DB47B95184854AD12A0C1A354E418AACE33AA0F2C662C00B3AC55DE92F9359300506032B6570034100B723BC01EAB0928E8B2B6C98DE19CC3823D46E7D6987B032478FECFAF14537A1AF14CC8BE829C6B73044101837EB4ABC949565D86DCE51CFAE52AB82C152CB02', 'hex');
36
+ const responderKey = Buffer.from('EF140FF900B0AB03F0C08D879CBBD4B31EA71E6E7EE7FFCB7E7955777A332799', 'hex');
37
+ const responderKeyID = Buffer.from('00000002', 'hex');
38
+
39
+ let initiator: EDHOC;
40
+ let responder: EDHOC;
41
+
42
+ beforeEach(() => {
43
+ // Initiator Setup
44
+ const initiatorCredentialManager = new X509CertificateCredentialManager([initiatorCert], initiatorKeyID);
45
+ initiatorCredentialManager.addTrustedCA(trustedCA);
46
+ initiatorCredentialManager.addPeerCertificate(responderCert);
47
+ initiatorCredentialManager.fetchFormat = EdhocCredentialsFormat.x5t;
48
+
49
+ // Initiator Crypto Manager
50
+ const initiatorCryptoManager = new VectorsEdhocCryptoManager();
51
+ initiatorCryptoManager.addKey(initiatorKeyID, initiatorKey);
52
+
53
+ // Responder Setup
54
+ const responderCredentialManager = new X509CertificateCredentialManager([responderCert], responderKeyID);
55
+ responderCredentialManager.addTrustedCA(trustedCA);
56
+ responderCredentialManager.addPeerCertificate(initiatorCert);
57
+ responderCredentialManager.fetchFormat = EdhocCredentialsFormat.x5t;
58
+
59
+ // Responder Crypto Manager
60
+ const responderCryptoManager = new VectorsEdhocCryptoManager();
61
+ responderCryptoManager.addKey(responderKeyID, responderKey);
62
+
63
+ // Initialize EDHOC instances
64
+ initiator = new EDHOC(-14, [EdhocMethod.Method0], [EdhocSuite.Suite0], initiatorCredentialManager, initiatorCryptoManager);
65
+ responder = new EDHOC(Buffer.from([0x18]), [EdhocMethod.Method0], [EdhocSuite.Suite0], responderCredentialManager, responderCryptoManager);
66
+ });
67
+
68
+ test('should complete successful EDHOC handshake', async () => {
69
+ // Perform the three-message handshake
70
+ const message1 = await initiator.composeMessage1();
71
+ const ead1 = await responder.processMessage1(message1);
72
+ expect(ead1).toEqual([]);
73
+
74
+ const message2 = await responder.composeMessage2();
75
+ const ead2 = await initiator.processMessage2(message2);
76
+ expect(ead2).toEqual([]);
77
+
78
+ const message3 = await initiator.composeMessage3();
79
+ const ead3 = await responder.processMessage3(message3);
80
+ expect(ead3).toEqual([]);
81
+
82
+ const message4 = await initiator.composeMessage4();
83
+ const ead4 = await responder.processMessage4(message4);
84
+ expect(ead4).toEqual([]);
85
+
86
+ const initiatorOSCORE = await initiator.exportOSCORE();
87
+ const responderOSCORE = await responder.exportOSCORE();
88
+
89
+ expect(initiatorOSCORE.masterSalt).toEqual(responderOSCORE.masterSalt);
90
+ expect(initiatorOSCORE.masterSecret).toEqual(responderOSCORE.masterSecret);
91
+ expect(initiatorOSCORE.senderId).toEqual(responderOSCORE.recipientId);
92
+ expect(initiatorOSCORE.recipientId).toEqual(responderOSCORE.senderId);
93
+
94
+ expect(initiatorOSCORE.masterSalt).toEqual(masterSalt);
95
+ expect(initiatorOSCORE.masterSecret).toEqual(masterSecret);
96
+
97
+ await initiator.keyUpdate(keyUpdate);
98
+ await responder.keyUpdate(keyUpdate);
99
+
100
+ const initiatorOSCORE_Update = await initiator.exportOSCORE();
101
+ const responderOSCORE_Update = await responder.exportOSCORE();
102
+
103
+ expect(initiatorOSCORE_Update.masterSalt).toEqual(responderOSCORE_Update.masterSalt);
104
+ expect(initiatorOSCORE_Update.masterSecret).toEqual(responderOSCORE_Update.masterSecret);
105
+ expect(initiatorOSCORE_Update.senderId).toEqual(responderOSCORE_Update.recipientId);
106
+ expect(initiatorOSCORE_Update.recipientId).toEqual(responderOSCORE_Update.senderId);
107
+
108
+ expect(initiatorOSCORE_Update.masterSecret).toEqual(masterSecret_Update);
109
+ expect(initiatorOSCORE_Update.masterSalt).toEqual(masterSalt_Update);
110
+ });
111
+ });
@@ -1,16 +0,0 @@
1
- import { DefaultEdhocCryptoManager } from './crypto';
2
- import { EDHOC, EdhocCredentialManager, EdhocCredentials } from './edhoc';
3
- export declare class X509Credentials {
4
- certificate: Buffer;
5
- privateKey: Buffer;
6
- constructor(certificate: Buffer, privateKey: Buffer);
7
- }
8
- export declare class DefaultEdhocCredentialManager implements EdhocCredentialManager {
9
- private credentials;
10
- private trustRoots;
11
- setCredentials(cryptoManager: DefaultEdhocCryptoManager, credentials: X509Credentials, keyID?: Buffer): void;
12
- addTrustRoot(certificate: Buffer): void;
13
- fetch(edhoc: EDHOC): Promise<EdhocCredentials>;
14
- verify(edhoc: EDHOC, credentials: EdhocCredentials): Promise<EdhocCredentials>;
15
- }
16
- //# sourceMappingURL=credentials.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../lib/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAA4D,MAAM,SAAS,CAAC;AAGpI,qBAAa,eAAe;IAEjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;gBAEd,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAItD;AAED,qBAAa,6BAA8B,YAAW,sBAAsB;IAExE,OAAO,CAAC,WAAW,CAAsE;IACzF,OAAO,CAAC,UAAU,CAAyB;IAE3C,cAAc,CAAC,aAAa,EAAE,yBAAyB,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,GAAE,MAAuC;IAYrI,YAAY,CAAC,WAAW,EAAE,MAAM;IAI1B,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK9C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB;CAuD3D"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultEdhocCredentialManager = exports.X509Credentials = void 0;
4
- const edhoc_1 = require("./edhoc");
5
- const crypto_1 = require("crypto");
6
- class X509Credentials {
7
- certificate;
8
- privateKey;
9
- constructor(certificate, privateKey) {
10
- this.certificate = certificate;
11
- this.privateKey = privateKey;
12
- }
13
- }
14
- exports.X509Credentials = X509Credentials;
15
- class DefaultEdhocCredentialManager {
16
- credentials = new Map();
17
- trustRoots = [];
18
- setCredentials(cryptoManager, credentials, keyID = Buffer.from('00000001', 'hex')) {
19
- cryptoManager.addKey(keyID, credentials.privateKey);
20
- let chain = {
21
- format: edhoc_1.EdhocCredentialsFormat.x5chain,
22
- privateKeyID: keyID,
23
- x5chain: {
24
- certificates: [credentials.certificate]
25
- }
26
- };
27
- this.credentials.set(keyID.toString('hex'), chain);
28
- }
29
- addTrustRoot(certificate) {
30
- this.trustRoots.push(new crypto_1.X509Certificate(certificate));
31
- }
32
- async fetch(edhoc) {
33
- const credential = this.credentials.values().next().value;
34
- return credential;
35
- }
36
- async verify(edhoc, credentials) {
37
- if (credentials.format === edhoc_1.EdhocCredentialsFormat.x5chain) {
38
- const x5chain = credentials.x5chain;
39
- const certificates = x5chain.certificates;
40
- const numCerts = certificates.length;
41
- if (numCerts < 1) {
42
- throw new Error('Certificate chain must contain at least one certificate.');
43
- }
44
- let verified = false;
45
- // Step 1: Verify each certificate against the next one in the chain, if there are multiple certificates
46
- for (let i = 0; i < numCerts - 1; i++) {
47
- const currentCert = new crypto_1.X509Certificate(certificates[i]);
48
- const nextCert = new crypto_1.X509Certificate(certificates[i + 1]);
49
- if (!currentCert.verify(nextCert.publicKey)) {
50
- throw new Error(`Verification failed: Certificate at index ${i} is not signed by the next certificate in the chain.`);
51
- }
52
- }
53
- // Step 2: Verify the last certificate in the chain against the trust roots
54
- const lastCert = new crypto_1.X509Certificate(certificates[numCerts - 1]);
55
- for (let trustRoot of this.trustRoots) {
56
- if (lastCert.verify(trustRoot.publicKey)) {
57
- verified = true;
58
- break; // Exit the loop once verified
59
- }
60
- }
61
- if (!verified) {
62
- throw new Error('Certificate chain not verified');
63
- }
64
- let token = new crypto_1.X509Certificate(certificates[0]).publicKey.export({ format: 'jwk' });
65
- if (token.crv === 'P-256') {
66
- credentials.publicKey = Buffer.concat([
67
- Buffer.from(token.x, 'base64'),
68
- Buffer.from(token.y, 'base64')
69
- ]);
70
- return credentials;
71
- }
72
- else if (token.crv === 'Ed25519') {
73
- let publicKey = Buffer.from(token.x, 'base64');
74
- credentials.publicKey = publicKey;
75
- return credentials;
76
- }
77
- else {
78
- throw new Error('Unsupported curve');
79
- }
80
- }
81
- throw new Error('Credentials format not supported');
82
- }
83
- }
84
- exports.DefaultEdhocCredentialManager = DefaultEdhocCredentialManager;
@@ -1,69 +0,0 @@
1
- /*
2
- * Copyright (c) 2020 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- #ifndef ZCBOR_DEBUG_H__
8
- #define ZCBOR_DEBUG_H__
9
-
10
- #include <stdint.h>
11
- #include <stdbool.h>
12
- #include <stddef.h>
13
- #include "zcbor_common.h"
14
-
15
- #ifdef __cplusplus
16
- extern "C" {
17
- #endif
18
-
19
- __attribute__((used))
20
- static void zcbor_print_compare_lines(const uint8_t *str1, const uint8_t *str2, uint32_t size)
21
- {
22
- for (uint32_t j = 0; j < size; j++) {
23
- printk ("%x ", str1[j]);
24
- }
25
- printk("\r\n");
26
- for (uint32_t j = 0; j < size; j++) {
27
- printk ("%x ", str2[j]);
28
- }
29
- printk("\r\n");
30
- for (uint32_t j = 0; j < size; j++) {
31
- printk ("%x ", str1[j] != str2[j]);
32
- }
33
- printk("\r\n");
34
- printk("\r\n");
35
- }
36
-
37
- __attribute__((used))
38
- static void zcbor_print_compare_strings(const uint8_t *str1, const uint8_t *str2, uint32_t size)
39
- {
40
- for (uint32_t i = 0; i <= size / 16; i++) {
41
- printk("line %d (char %d)\r\n", i, i*16);
42
- zcbor_print_compare_lines(&str1[i*16], &str2[i*16],
43
- MIN(16, (size - i*16)));
44
- }
45
- printk("\r\n");
46
- }
47
-
48
- __attribute__((used))
49
- static void zcbor_print_compare_strings_diff(const uint8_t *str1, const uint8_t *str2, uint32_t size)
50
- {
51
- bool printed = false;
52
- for (uint32_t i = 0; i <= size / 16; i++) {
53
- if (memcmp(&str1[i*16], &str2[i*16], MIN(16, (size - i*16)) != 0)) {
54
- printk("line %d (char %d)\r\n", i, i*16);
55
- zcbor_print_compare_lines(&str1[i*16], &str2[i*16],
56
- MIN(16, (size - i*16)));
57
- printed = true;
58
- }
59
- }
60
- if (printed) {
61
- printk("\r\n");
62
- }
63
- }
64
-
65
- #ifdef __cplusplus
66
- }
67
- #endif
68
-
69
- #endif /* ZCBOR_DEBUG_H__ */