edhoc 1.0.4 → 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 (314) hide show
  1. package/README.md +170 -0
  2. package/binding.gyp +13 -11
  3. package/dist/bindings.d.ts +5 -0
  4. package/dist/bindings.d.ts.map +1 -0
  5. package/dist/bindings.js +10 -0
  6. package/dist/crypto.d.ts +29 -0
  7. package/dist/crypto.d.ts.map +1 -0
  8. package/dist/crypto.js +205 -0
  9. package/dist/edhoc.d.ts +368 -0
  10. package/dist/edhoc.d.ts.map +1 -0
  11. package/dist/edhoc.js +76 -0
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +19 -0
  15. package/dist/x509credentials.d.ts +20 -0
  16. package/dist/x509credentials.d.ts.map +1 -0
  17. package/dist/x509credentials.js +140 -0
  18. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_decode.h +1 -1
  19. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_encode.h +1 -1
  20. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_types.h +1 -1
  21. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_decode.h +2 -2
  22. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_encode.h +2 -2
  23. package/external/libedhoc/backends/cbor/include/backend_cbor_edhoc_types.h +48 -43
  24. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_decode.h +1 -1
  25. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_encode.h +1 -1
  26. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_types.h +3 -3
  27. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_decode.h +1 -1
  28. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_encode.h +1 -1
  29. package/external/libedhoc/backends/cbor/include/backend_cbor_info_decode.h +1 -1
  30. package/external/libedhoc/backends/cbor/include/backend_cbor_info_encode.h +1 -1
  31. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_decode.h +1 -1
  32. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_encode.h +1 -1
  33. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_types.h +1 -1
  34. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_decode.h +1 -1
  35. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_encode.h +1 -1
  36. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_decode.h +1 -1
  37. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_encode.h +1 -1
  38. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_decode.h +1 -1
  39. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_encode.h +1 -1
  40. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_decode.h +1 -1
  41. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_encode.h +1 -1
  42. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_decode.h +1 -1
  43. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_encode.h +1 -1
  44. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_decode.h +1 -1
  45. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_encode.h +1 -1
  46. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_decode.h +1 -1
  47. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_encode.h +1 -1
  48. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_decode.h +3 -3
  49. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_encode.h +3 -3
  50. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_decode.h +1 -1
  51. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_encode.h +1 -1
  52. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_types.h +4 -4
  53. package/external/libedhoc/backends/cbor/include/backend_cbor_x509_types.h +93 -83
  54. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_decode.c +11 -20
  55. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_encode.c +11 -20
  56. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_decode.c +27 -32
  57. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_encode.c +27 -32
  58. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_decode.c +14 -23
  59. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_encode.c +14 -23
  60. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_decode.c +63 -52
  61. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_encode.c +62 -51
  62. package/external/libedhoc/backends/cbor/src/backend_cbor_info_decode.c +14 -23
  63. package/external/libedhoc/backends/cbor/src/backend_cbor_info_encode.c +14 -23
  64. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_decode.c +11 -20
  65. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_encode.c +11 -20
  66. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_decode.c +54 -51
  67. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_encode.c +54 -51
  68. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_decode.c +11 -20
  69. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_encode.c +11 -20
  70. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_decode.c +11 -20
  71. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_encode.c +11 -20
  72. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_decode.c +11 -20
  73. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_encode.c +11 -20
  74. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_decode.c +36 -37
  75. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_encode.c +36 -37
  76. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_decode.c +103 -80
  77. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_encode.c +102 -79
  78. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_decode.c +99 -76
  79. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_encode.c +98 -75
  80. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_decode.c +40 -41
  81. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_encode.c +40 -41
  82. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_decode.c +15 -24
  83. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_encode.c +15 -24
  84. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.c +31 -0
  85. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.h +10 -0
  86. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.c +18 -0
  87. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.h +9 -0
  88. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode.c +69 -0
  89. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode2.c +38 -0
  90. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  91. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  92. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.c +31 -0
  93. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.h +10 -0
  94. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.c +18 -0
  95. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.h +9 -0
  96. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode.c +71 -0
  97. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode2.c +40 -0
  98. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +16 -0
  99. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +18 -0
  100. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/all_tests.c +19 -0
  101. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.c +17 -0
  102. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.h +19 -0
  103. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.c +31 -0
  104. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.h +10 -0
  105. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.c +18 -0
  106. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.h +9 -0
  107. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode.c +69 -0
  108. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode2.c +38 -0
  109. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.c +31 -0
  110. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.h +10 -0
  111. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.c +18 -0
  112. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.h +9 -0
  113. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode.c +70 -0
  114. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode2.c +42 -0
  115. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  116. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  117. package/external/libedhoc/externals/Unity/examples/unity_config.h +251 -0
  118. package/external/libedhoc/externals/Unity/extras/bdd/src/unity_bdd.h +44 -0
  119. package/external/libedhoc/externals/Unity/extras/bdd/test/test_bdd.c +129 -0
  120. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.c +310 -0
  121. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.h +95 -0
  122. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  123. package/external/libedhoc/externals/Unity/extras/fixture/test/main/AllTests.c +20 -0
  124. package/external/libedhoc/externals/Unity/extras/fixture/test/template_fixture_tests.c +40 -0
  125. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_Test.c +246 -0
  126. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_TestRunner.c +33 -0
  127. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.c +203 -0
  128. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.h +61 -0
  129. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_Test.c +326 -0
  130. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_TestRunner.c +50 -0
  131. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.c +57 -0
  132. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.h +17 -0
  133. package/external/libedhoc/externals/Unity/src/unity.c +2501 -0
  134. package/external/libedhoc/externals/Unity/src/unity.h +698 -0
  135. package/external/libedhoc/externals/Unity/src/unity_internals.h +1183 -0
  136. package/external/libedhoc/externals/Unity/test/expectdata/testsample_cmd.c +61 -0
  137. package/external/libedhoc/externals/Unity/test/expectdata/testsample_def.c +57 -0
  138. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.c +55 -0
  139. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.h +15 -0
  140. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_cmd.c +80 -0
  141. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_def.c +76 -0
  142. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.c +75 -0
  143. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.h +13 -0
  144. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new1.c +89 -0
  145. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new2.c +89 -0
  146. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_param.c +77 -0
  147. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run1.c +89 -0
  148. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run2.c +89 -0
  149. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_yaml.c +90 -0
  150. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new1.c +67 -0
  151. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new2.c +70 -0
  152. package/external/libedhoc/externals/Unity/test/expectdata/testsample_param.c +58 -0
  153. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run1.c +67 -0
  154. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run2.c +70 -0
  155. package/external/libedhoc/externals/Unity/test/expectdata/testsample_yaml.c +71 -0
  156. package/external/libedhoc/externals/Unity/test/testdata/CException.h +18 -0
  157. package/external/libedhoc/externals/Unity/test/testdata/Defs.h +16 -0
  158. package/external/libedhoc/externals/Unity/test/testdata/cmock.h +21 -0
  159. package/external/libedhoc/externals/Unity/test/testdata/mockMock.h +20 -0
  160. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGenerator.c +204 -0
  161. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorSmall.c +73 -0
  162. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorWithMocks.c +200 -0
  163. package/external/libedhoc/externals/Unity/test/tests/self_assessment_utils.h +151 -0
  164. package/external/libedhoc/externals/Unity/test/tests/test_unity_arrays.c +2941 -0
  165. package/external/libedhoc/externals/Unity/test/tests/test_unity_core.c +375 -0
  166. package/external/libedhoc/externals/Unity/test/tests/test_unity_doubles.c +1285 -0
  167. package/external/libedhoc/externals/Unity/test/tests/test_unity_floats.c +1395 -0
  168. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers.c +2863 -0
  169. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers_64.c +783 -0
  170. package/external/libedhoc/externals/Unity/test/tests/test_unity_memory.c +82 -0
  171. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterized.c +309 -0
  172. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterizedDemo.c +28 -0
  173. package/external/libedhoc/externals/Unity/test/tests/test_unity_strings.c +330 -0
  174. package/external/libedhoc/externals/Unity/test/tests/types_for_test.h +21 -0
  175. package/external/libedhoc/externals/zcbor/include/zcbor_common.h +147 -60
  176. package/external/libedhoc/externals/zcbor/include/zcbor_decode.h +291 -202
  177. package/external/libedhoc/externals/zcbor/include/zcbor_encode.h +100 -156
  178. package/external/libedhoc/externals/zcbor/include/zcbor_print.h +165 -0
  179. package/external/libedhoc/externals/zcbor/samples/hello_world/src/main.c +1 -1
  180. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_decode.h +1 -1
  181. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_encode.h +1 -1
  182. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_types.h +4 -4
  183. package/external/libedhoc/externals/zcbor/samples/pet/src/main.c +4 -4
  184. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_decode.c +15 -24
  185. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_encode.c +14 -23
  186. package/external/libedhoc/externals/zcbor/src/zcbor_common.c +202 -29
  187. package/external/libedhoc/externals/zcbor/src/zcbor_decode.c +633 -173
  188. package/external/libedhoc/externals/zcbor/src/zcbor_encode.c +71 -184
  189. package/external/libedhoc/externals/zcbor/tests/decode/test1_suit_old_formats/src/main.c +152 -153
  190. package/external/libedhoc/externals/zcbor/tests/decode/test2_suit/src/main.c +64 -64
  191. package/external/libedhoc/externals/zcbor/tests/decode/test3_simple/src/main.c +15 -16
  192. package/external/libedhoc/externals/zcbor/tests/decode/test5_corner_cases/src/main.c +228 -84
  193. package/external/libedhoc/externals/zcbor/tests/decode/test7_suit9_simple/src/main.c +9 -9
  194. package/external/libedhoc/externals/zcbor/tests/decode/test8_suit12/src/main.c +0 -1
  195. package/external/libedhoc/externals/zcbor/tests/decode/test9_manifest14/src/main.c +172 -173
  196. package/external/libedhoc/externals/zcbor/tests/encode/test1_suit/src/main.c +73 -73
  197. package/external/libedhoc/externals/zcbor/tests/encode/test2_simple/src/main.c +1 -2
  198. package/external/libedhoc/externals/zcbor/tests/encode/test3_corner_cases/src/main.c +83 -56
  199. package/external/libedhoc/externals/zcbor/tests/encode/test4_senml/src/main.c +15 -16
  200. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_everything.c +12 -0
  201. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_manifest12.c +69 -69
  202. package/external/libedhoc/externals/zcbor/tests/unit/test1_unit_tests/src/main.c +448 -55
  203. package/external/libedhoc/externals/zcbor/tests/unit/test3_float16/src/main.c +49 -48
  204. package/external/libedhoc/include/edhoc.h +348 -54
  205. package/external/libedhoc/include/edhoc_common.h +289 -0
  206. package/external/libedhoc/include/edhoc_context.h +60 -35
  207. package/external/libedhoc/include/edhoc_credentials.h +55 -7
  208. package/external/libedhoc/include/edhoc_crypto.h +10 -10
  209. package/external/libedhoc/include/edhoc_ead.h +13 -10
  210. package/external/libedhoc/include/edhoc_macros.h +20 -11
  211. package/external/libedhoc/include/edhoc_values.h +2 -2
  212. package/external/libedhoc/library/edhoc.c +70 -36
  213. package/external/libedhoc/library/edhoc_common.c +1314 -0
  214. package/external/libedhoc/library/edhoc_exporter.c +45 -46
  215. package/external/libedhoc/library/edhoc_message_1.c +107 -72
  216. package/external/libedhoc/library/edhoc_message_2.c +396 -1693
  217. package/external/libedhoc/library/edhoc_message_3.c +465 -1656
  218. package/external/libedhoc/library/edhoc_message_4.c +93 -91
  219. package/external/libedhoc/library/edhoc_message_error.c +41 -41
  220. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_0.h → cipher_suite_0.h} +131 -134
  221. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_2.h → cipher_suite_2.h} +139 -140
  222. package/external/libedhoc/tests/include/{edhoc_trace_1/test_vector_1.h → test_vector_rfc9529_chapter_2.h} +786 -738
  223. package/external/libedhoc/tests/include/{edhoc_trace_2/test_vector_2.h → test_vector_rfc9529_chapter_3.h} +14 -10
  224. 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
  225. 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
  226. 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
  227. 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
  228. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_0.c → cipher_suite_0.c} +445 -447
  229. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_2.c → cipher_suite_2.c} +600 -600
  230. package/external/libedhoc/tests/src/module_test_api.c +430 -0
  231. package/external/libedhoc/tests/src/module_test_cipher_suite_0.c +395 -0
  232. package/external/libedhoc/tests/src/module_test_cipher_suite_2.c +392 -0
  233. package/external/libedhoc/tests/src/{error_message/test_edhoc_error_message.c → module_test_error_message.c} +94 -69
  234. package/external/libedhoc/tests/src/module_test_main.c +49 -0
  235. package/external/libedhoc/tests/src/{cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.c → module_test_rfc9528_suites_negotiation.c} +224 -227
  236. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_2.c +2681 -0
  237. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_3.c +1635 -0
  238. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_0.c +1135 -0
  239. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_2.c +1249 -0
  240. package/external/libedhoc/tests/src/module_test_x5chain_static_dh_keys_suite_2.c +798 -0
  241. package/external/libedhoc/tests/src/module_test_x5t_sign_keys_suite_2.c +956 -0
  242. package/include/EdhocComposeAsyncWorker.h +8 -6
  243. package/include/EdhocCredentialManager.h +16 -11
  244. package/include/EdhocCryptoManager.h +28 -21
  245. package/include/EdhocEadManager.h +3 -6
  246. package/include/{EdhocExportAsyncWorker.h → EdhocExportOscoreAsyncWorker.h} +20 -17
  247. package/include/EdhocKeyExporterAsyncWorker.h +76 -0
  248. package/include/EdhocKeyUpdateAsyncWorker.h +72 -0
  249. package/include/EdhocProcessAsyncWorker.h +14 -10
  250. package/include/LibEDHOC.h +44 -20
  251. package/include/UserContext.h +7 -9
  252. package/include/Utils.h +31 -27
  253. package/package.json +14 -3
  254. package/prebuilds/android-arm/edhoc.armv7.node +0 -0
  255. package/prebuilds/android-arm64/edhoc.armv8.node +0 -0
  256. package/prebuilds/darwin-arm64/edhoc.node +0 -0
  257. package/prebuilds/darwin-x64/edhoc.node +0 -0
  258. package/prebuilds/linux-arm/edhoc.armv6.node +0 -0
  259. package/prebuilds/linux-arm/edhoc.armv7.node +0 -0
  260. package/prebuilds/linux-arm64/edhoc.armv8.node +0 -0
  261. package/prebuilds/linux-x64/edhoc.glibc.node +0 -0
  262. package/prebuilds/linux-x64/edhoc.musl.node +0 -0
  263. package/prebuilds/win32-ia32/edhoc.node +0 -0
  264. package/prebuilds/win32-x64/edhoc.node +0 -0
  265. package/src/EdhocComposeAsyncWorker.cpp +18 -35
  266. package/src/EdhocCredentialManager.cpp +160 -187
  267. package/src/EdhocCryptoManager.cpp +386 -586
  268. package/src/EdhocEadManager.cpp +10 -18
  269. package/src/EdhocExportOscoreAsyncWorker.cpp +77 -0
  270. package/src/EdhocKeyExporterAsyncWorker.cpp +49 -0
  271. package/src/EdhocKeyUpdateAsyncWorker.cpp +41 -0
  272. package/src/EdhocProcessAsyncWorker.cpp +72 -19
  273. package/src/LibEDHOC.cpp +213 -174
  274. package/src/Suites.cpp +39 -72
  275. package/src/Utils.cpp +32 -56
  276. package/test/basic.test.ts +64 -0
  277. package/test/vectors.test.ts +111 -0
  278. package/external/libedhoc/externals/zcbor/include/zcbor_debug.h +0 -69
  279. package/external/libedhoc/tests/include/cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.h +0 -37
  280. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_0.h +0 -48
  281. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_2.h +0 -48
  282. package/external/libedhoc/tests/include/edhoc_trace_1/authentication_credentials_1.h +0 -60
  283. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_1.h +0 -208
  284. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_ead_1.h +0 -59
  285. package/external/libedhoc/tests/include/edhoc_trace_2/authentication_credentials_2.h +0 -60
  286. package/external/libedhoc/tests/include/edhoc_trace_2/test_edhoc_handshake_2.h +0 -199
  287. package/external/libedhoc/tests/include/error_message/test_edhoc_error_message.h +0 -48
  288. package/external/libedhoc/tests/include/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.h +0 -92
  289. package/external/libedhoc/tests/include/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.h +0 -96
  290. package/external/libedhoc/tests/include/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.h +0 -58
  291. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.h +0 -56
  292. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.h +0 -57
  293. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.h +0 -59
  294. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.h +0 -57
  295. package/external/libedhoc/tests/include/x509_hash_cs_2/authentication_credentials_x5t_cs_2.h +0 -60
  296. package/external/libedhoc/tests/include/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.h +0 -57
  297. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_0.c +0 -475
  298. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_2.c +0 -473
  299. package/external/libedhoc/tests/src/edhoc_trace_1/authentication_credentials_1.c +0 -252
  300. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_1.c +0 -1829
  301. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_ead_1.c +0 -1247
  302. package/external/libedhoc/tests/src/edhoc_trace_2/authentication_credentials_2.c +0 -170
  303. package/external/libedhoc/tests/src/edhoc_trace_2/test_edhoc_handshake_2.c +0 -1783
  304. package/external/libedhoc/tests/src/tests.c +0 -228
  305. package/external/libedhoc/tests/src/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.c +0 -332
  306. package/external/libedhoc/tests/src/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.c +0 -936
  307. package/external/libedhoc/tests/src/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.c +0 -166
  308. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.c +0 -587
  309. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.c +0 -917
  310. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.c +0 -186
  311. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.c +0 -743
  312. package/external/libedhoc/tests/src/x509_hash_cs_2/authentication_credentials_x5t_cs_2.c +0 -261
  313. package/external/libedhoc/tests/src/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.c +0 -854
  314. package/src/EdhocExportAsyncWorker.cpp +0 -82
@@ -2,8 +2,8 @@
2
2
  * \file edhoc_exporter.c
3
3
  * \author Kamil Kielbasa
4
4
  * \brief EDHOC exporter for PRK exporter, key update or OSCORE session.
5
- * \version 0.4
6
- * \date 2024-01-01
5
+ * \version 0.6
6
+ * \date 2024-08-05
7
7
  *
8
8
  * \copyright Copyright (c) 2024
9
9
  *
@@ -139,26 +139,26 @@ static int compute_prk_out(struct edhoc_context *ctx)
139
139
  len += ctx->th_len + cbor_bstr_overhead(ctx->th_len);
140
140
  len += cbor_int_mem_req((int32_t)csuite.hash_length);
141
141
 
142
- ALLOCATE_ARRAY(uint8_t, info, len);
143
- memset(info, 0, ALLOCATE_ARRAY_SIZEOF(info));
142
+ VLA_ALLOC(uint8_t, info, len);
143
+ memset(info, 0, VLA_SIZEOF(info));
144
144
 
145
145
  /* Generate PRK_out. */
146
146
  struct info input_info = {
147
- ._info_label = EDHOC_EXTRACT_PRK_INFO_LABEL_PRK_OUT,
148
- ._info_context.value = ctx->th,
149
- ._info_context.len = ctx->th_len,
150
- ._info_length = (uint32_t)csuite.hash_length,
147
+ .info_label = EDHOC_EXTRACT_PRK_INFO_LABEL_PRK_OUT,
148
+ .info_context.value = ctx->th,
149
+ .info_context.len = ctx->th_len,
150
+ .info_length = (uint32_t)csuite.hash_length,
151
151
  };
152
152
 
153
153
  len = 0;
154
- ret = cbor_encode_info(info, ARRAY_SIZE_VLA(info), &input_info, &len);
154
+ ret = cbor_encode_info(info, VLA_SIZE(info), &input_info, &len);
155
155
 
156
156
  if (ZCBOR_SUCCESS != ret)
157
157
  return EDHOC_ERROR_CBOR_FAILURE;
158
158
 
159
- uint8_t key_id[EDHOC_KID_LEN] = { 0 };
160
- ret = ctx->keys.generate_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
161
- ctx->prk_len, key_id);
159
+ uint8_t key_id[CONFIG_LIBEDHOC_KEY_ID_LEN] = { 0 };
160
+ ret = ctx->keys.import_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
161
+ ctx->prk_len, key_id);
162
162
 
163
163
  if (EDHOC_SUCCESS != ret)
164
164
  return EDHOC_ERROR_CRYPTO_FAILURE;
@@ -198,26 +198,26 @@ static int compute_new_prk_out(struct edhoc_context *ctx,
198
198
  len += entropy_len + cbor_bstr_overhead(entropy_len);
199
199
  len += cbor_int_mem_req((int32_t)csuite.hash_length);
200
200
 
201
- ALLOCATE_ARRAY(uint8_t, info, len);
202
- memset(info, 0, ALLOCATE_ARRAY_SIZEOF(info));
201
+ VLA_ALLOC(uint8_t, info, len);
202
+ memset(info, 0, VLA_SIZEOF(info));
203
203
 
204
204
  /* Generate PRK_out. */
205
205
  struct info input_info = {
206
- ._info_label = EDHOC_EXTRACT_PRK_INFO_LABEL_NEW_PRK_OUT,
207
- ._info_context.value = entropy,
208
- ._info_context.len = entropy_len,
209
- ._info_length = (uint32_t)csuite.hash_length,
206
+ .info_label = EDHOC_EXTRACT_PRK_INFO_LABEL_NEW_PRK_OUT,
207
+ .info_context.value = entropy,
208
+ .info_context.len = entropy_len,
209
+ .info_length = (uint32_t)csuite.hash_length,
210
210
  };
211
211
 
212
212
  len = 0;
213
- ret = cbor_encode_info(info, ARRAY_SIZE_VLA(info), &input_info, &len);
213
+ ret = cbor_encode_info(info, VLA_SIZE(info), &input_info, &len);
214
214
 
215
215
  if (ZCBOR_SUCCESS != ret)
216
216
  return EDHOC_ERROR_CBOR_FAILURE;
217
217
 
218
- uint8_t key_id[EDHOC_KID_LEN] = { 0 };
219
- ret = ctx->keys.generate_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
220
- ctx->prk_len, key_id);
218
+ uint8_t key_id[CONFIG_LIBEDHOC_KEY_ID_LEN] = { 0 };
219
+ ret = ctx->keys.import_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
220
+ ctx->prk_len, key_id);
221
221
 
222
222
  if (EDHOC_SUCCESS != ret)
223
223
  return EDHOC_ERROR_CRYPTO_FAILURE;
@@ -253,26 +253,26 @@ static int compute_prk_exporter(const struct edhoc_context *ctx,
253
253
  len += 1 + cbor_bstr_overhead(0); /* cbor empty byte string. */
254
254
  len += cbor_int_mem_req((int32_t)csuite.hash_length);
255
255
 
256
- ALLOCATE_ARRAY(uint8_t, info, len);
257
- memset(info, 0, ALLOCATE_ARRAY_SIZEOF(info));
256
+ VLA_ALLOC(uint8_t, info, len);
257
+ memset(info, 0, VLA_SIZEOF(info));
258
258
 
259
259
  struct info input_info = {
260
- ._info_label =
260
+ .info_label =
261
261
  (int32_t)EDHOC_EXTRACT_PRK_INFO_LABEL_PRK_EXPORTER,
262
- ._info_context.value = NULL,
263
- ._info_context.len = 0,
264
- ._info_length = (uint32_t)csuite.hash_length,
262
+ .info_context.value = NULL,
263
+ .info_context.len = 0,
264
+ .info_length = (uint32_t)csuite.hash_length,
265
265
  };
266
266
 
267
267
  len = 0;
268
- ret = cbor_encode_info(info, ARRAY_SIZE_VLA(info), &input_info, &len);
268
+ ret = cbor_encode_info(info, VLA_SIZE(info), &input_info, &len);
269
269
 
270
270
  if (ZCBOR_SUCCESS != ret)
271
271
  return EDHOC_ERROR_CBOR_FAILURE;
272
272
 
273
- uint8_t key_id[EDHOC_KID_LEN] = { 0 };
274
- ret = ctx->keys.generate_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
275
- ctx->prk_len, key_id);
273
+ uint8_t key_id[CONFIG_LIBEDHOC_KEY_ID_LEN] = { 0 };
274
+ ret = ctx->keys.import_key(ctx->user_ctx, EDHOC_KT_EXPAND, ctx->prk,
275
+ ctx->prk_len, key_id);
276
276
 
277
277
  if (EDHOC_SUCCESS != ret)
278
278
  return EDHOC_ERROR_CRYPTO_FAILURE;
@@ -333,10 +333,10 @@ int edhoc_export_prk_exporter(struct edhoc_context *ctx, size_t label,
333
333
  ctx->csuite[ctx->chosen_csuite_idx];
334
334
 
335
335
  /* 3. Compute pseudo random key exporter (PRK_exporter). */
336
- ALLOCATE_ARRAY(uint8_t, prk_exporter, csuite.hash_length);
337
- memset(prk_exporter, 0, ALLOCATE_ARRAY_SIZEOF(prk_exporter));
336
+ VLA_ALLOC(uint8_t, prk_exporter, csuite.hash_length);
337
+ memset(prk_exporter, 0, VLA_SIZEOF(prk_exporter));
338
338
 
339
- ret = compute_prk_exporter(ctx, prk_exporter, ARRAY_SIZE_VLA(prk_exporter));
339
+ ret = compute_prk_exporter(ctx, prk_exporter, VLA_SIZE(prk_exporter));
340
340
 
341
341
  if (EDHOC_SUCCESS != ret)
342
342
  return EDHOC_ERROR_PSEUDORANDOM_KEY_FAILURE;
@@ -347,26 +347,25 @@ int edhoc_export_prk_exporter(struct edhoc_context *ctx, size_t label,
347
347
  len += 1 + cbor_bstr_overhead(0); /* cbor empty byte string. */
348
348
  len += cbor_int_mem_req((int32_t)csuite.hash_length);
349
349
 
350
- ALLOCATE_ARRAY(uint8_t, info, len);
351
- memset(info, 0, ALLOCATE_ARRAY_SIZEOF(info));
350
+ VLA_ALLOC(uint8_t, info, len);
351
+ memset(info, 0, VLA_SIZEOF(info));
352
352
 
353
353
  const struct info input_info = (struct info){
354
- ._info_label = (int32_t)label,
355
- ._info_context.value = NULL,
356
- ._info_context.len = 0,
357
- ._info_length = (uint32_t)secret_len,
354
+ .info_label = (int32_t)label,
355
+ .info_context.value = NULL,
356
+ .info_context.len = 0,
357
+ .info_length = (uint32_t)secret_len,
358
358
  };
359
359
 
360
360
  len = 0;
361
- ret = cbor_encode_info(info, ARRAY_SIZE_VLA(info), &input_info, &len);
361
+ ret = cbor_encode_info(info, VLA_SIZE(info), &input_info, &len);
362
362
 
363
363
  if (ZCBOR_SUCCESS != ret)
364
364
  return EDHOC_ERROR_CBOR_FAILURE;
365
365
 
366
- uint8_t key_id[EDHOC_KID_LEN] = { 0 };
367
- ret = ctx->keys.generate_key(ctx->user_ctx, EDHOC_KT_EXPAND,
368
- prk_exporter, ARRAY_SIZE_VLA(prk_exporter),
369
- key_id);
366
+ uint8_t key_id[CONFIG_LIBEDHOC_KEY_ID_LEN] = { 0 };
367
+ ret = ctx->keys.import_key(ctx->user_ctx, EDHOC_KT_EXPAND, prk_exporter,
368
+ VLA_SIZE(prk_exporter), key_id);
370
369
 
371
370
  if (EDHOC_SUCCESS != ret)
372
371
  return EDHOC_ERROR_CRYPTO_FAILURE;
@@ -2,8 +2,8 @@
2
2
  * \file edhoc_message_1.c
3
3
  * \author Kamil Kielbasa
4
4
  * \brief EDHOC message 1.
5
- * \version 0.4
6
- * \date 2024-01-01
5
+ * \version 0.6
6
+ * \date 2024-08-05
7
7
  *
8
8
  * \copyright Copyright (c) 2024
9
9
  *
@@ -48,7 +48,8 @@
48
48
 
49
49
  /*
50
50
  * Steps for composition of message 1:
51
- * 1. Choose most preferred cipher suite.
51
+ * 1a. Choose most preferred cipher suite.
52
+ * 1b. Choose most preferred method.
52
53
  * 2. Generate ephemeral Diffie-Hellmann key pair.
53
54
  * 3a. Fill CBOR structure for message 1 - method.
54
55
  * 3b. Fill CBOR structure for message 1 - cipher suite.
@@ -74,33 +75,37 @@ int edhoc_message_1_compose(struct edhoc_context *ctx, uint8_t *msg_1,
74
75
 
75
76
  ctx->status = EDHOC_SM_ABORTED;
76
77
  ctx->error_code = EDHOC_ERROR_CODE_UNSPECIFIED_ERROR;
78
+ ctx->message = EDHOC_MSG_1;
79
+ ctx->role = EDHOC_INITIATOR;
77
80
 
78
- /* 1. Choose most preferred cipher suite. */
81
+ /* 1a. Choose most preferred cipher suite. */
79
82
  if (0 == ctx->csuite_len)
80
- return EDHOC_ERROR_INVALID_ARGUMENT;
83
+ return EDHOC_ERROR_BAD_STATE;
81
84
 
82
85
  ctx->chosen_csuite_idx = ctx->csuite_len - 1;
83
86
  const struct edhoc_cipher_suite csuite =
84
87
  ctx->csuite[ctx->chosen_csuite_idx];
85
88
 
89
+ /* 1b. Choose most preferred method. */
90
+ ctx->chosen_method = ctx->method[0];
91
+
86
92
  /* 2. Generate ephemeral Diffie-Hellmann key pair. */
87
- uint8_t key_id[EDHOC_KID_LEN] = { 0 };
88
- ret = ctx->keys.generate_key(ctx->user_ctx, EDHOC_KT_MAKE_KEY_PAIR,
89
- NULL, 0, key_id);
93
+ uint8_t key_id[CONFIG_LIBEDHOC_KEY_ID_LEN] = { 0 };
94
+ ret = ctx->keys.import_key(ctx->user_ctx, EDHOC_KT_MAKE_KEY_PAIR, NULL,
95
+ 0, key_id);
90
96
 
91
97
  if (EDHOC_SUCCESS != ret)
92
98
  return EDHOC_ERROR_EPHEMERAL_DIFFIE_HELLMAN_FAILURE;
93
99
 
94
- ALLOCATE_ARRAY(uint8_t, dh_pub_key, csuite.ecc_key_length);
95
- memset(dh_pub_key, 0, ALLOCATE_ARRAY_SIZEOF(dh_pub_key));
100
+ VLA_ALLOC(uint8_t, dh_pub_key, csuite.ecc_key_length);
101
+ memset(dh_pub_key, 0, VLA_SIZEOF(dh_pub_key));
96
102
 
97
103
  size_t dh_priv_key_len = 0;
98
104
  size_t dh_pub_key_len = 0;
99
105
  ret = ctx->crypto.make_key_pair(ctx->user_ctx, key_id, ctx->dh_priv_key,
100
106
  ARRAY_SIZE(ctx->dh_priv_key),
101
107
  &dh_priv_key_len, dh_pub_key,
102
- ARRAY_SIZE_VLA(dh_pub_key),
103
- &dh_pub_key_len);
108
+ VLA_SIZE(dh_pub_key), &dh_pub_key_len);
104
109
  ctx->keys.destroy_key(ctx->user_ctx, key_id);
105
110
 
106
111
  if (EDHOC_SUCCESS != ret || csuite.ecc_key_length != dh_priv_key_len ||
@@ -118,44 +123,44 @@ int edhoc_message_1_compose(struct edhoc_context *ctx, uint8_t *msg_1,
118
123
  struct message_1 cbor_enc_msg_1 = { 0 };
119
124
 
120
125
  /* 3a. Fill CBOR structure for message 1 - method. */
121
- cbor_enc_msg_1._message_1_METHOD = (int32_t)ctx->method;
126
+ cbor_enc_msg_1.message_1_METHOD = (int32_t)ctx->chosen_method;
122
127
 
123
128
  /* 3b. Fill CBOR structure for message 1 - cipher suite. */
124
129
  if (1UL == ctx->csuite_len) {
125
- cbor_enc_msg_1._message_1_SUITES_I._suites_choice = _suites_int;
126
- cbor_enc_msg_1._message_1_SUITES_I._suites_int = csuite.value;
130
+ cbor_enc_msg_1.message_1_SUITES_I.suites_choice = suites_int_c;
131
+ cbor_enc_msg_1.message_1_SUITES_I.suites_int = csuite.value;
127
132
  } else {
128
- cbor_enc_msg_1._message_1_SUITES_I._suites_choice =
129
- _suites__int;
130
- cbor_enc_msg_1._message_1_SUITES_I._suites__int_int_count =
133
+ cbor_enc_msg_1.message_1_SUITES_I.suites_choice =
134
+ suites_int_l_c;
135
+ cbor_enc_msg_1.message_1_SUITES_I.suites_int_l_int_count =
131
136
  ctx->csuite_len;
132
137
 
133
- if (ARRAY_SIZE(cbor_enc_msg_1._message_1_SUITES_I
134
- ._suites__int_int) < ctx->csuite_len) {
138
+ if (ARRAY_SIZE(cbor_enc_msg_1.message_1_SUITES_I
139
+ .suites_int_l_int) < ctx->csuite_len) {
135
140
  return EDHOC_ERROR_BUFFER_TOO_SMALL;
136
141
  }
137
142
 
138
143
  for (size_t i = 0; i < ctx->csuite_len; ++i) {
139
- cbor_enc_msg_1._message_1_SUITES_I._suites__int_int[i] =
144
+ cbor_enc_msg_1.message_1_SUITES_I.suites_int_l_int[i] =
140
145
  ctx->csuite[i].value;
141
146
  }
142
147
  }
143
148
 
144
149
  /* 3c. Fill CBOR structure for message 1 - ephemeral public key. */
145
- cbor_enc_msg_1._message_1_G_X.value = dh_pub_key;
146
- cbor_enc_msg_1._message_1_G_X.len = ARRAY_SIZE_VLA(dh_pub_key);
150
+ cbor_enc_msg_1.message_1_G_X.value = dh_pub_key;
151
+ cbor_enc_msg_1.message_1_G_X.len = VLA_SIZE(dh_pub_key);
147
152
 
148
153
  /* 3d. Fill CBOR structure for message 1 - connection identifier. */
149
154
  switch (ctx->cid.encode_type) {
150
155
  case EDHOC_CID_TYPE_ONE_BYTE_INTEGER:
151
- cbor_enc_msg_1._message_1_C_I_choice = _message_1_C_I_int;
152
- cbor_enc_msg_1._message_1_C_I_int = ctx->cid.int_value;
156
+ cbor_enc_msg_1.message_1_C_I_choice = message_1_C_I_int_c;
157
+ cbor_enc_msg_1.message_1_C_I_int = ctx->cid.int_value;
153
158
  break;
154
159
 
155
160
  case EDHOC_CID_TYPE_BYTE_STRING:
156
- cbor_enc_msg_1._message_1_C_I_choice = _message_1_C_I_bstr;
157
- cbor_enc_msg_1._message_1_C_I_bstr.value = ctx->cid.bstr_value;
158
- cbor_enc_msg_1._message_1_C_I_bstr.len = ctx->cid.bstr_length;
161
+ cbor_enc_msg_1.message_1_C_I_choice = message_1_C_I_bstr_c;
162
+ cbor_enc_msg_1.message_1_C_I_bstr.value = ctx->cid.bstr_value;
163
+ cbor_enc_msg_1.message_1_C_I_bstr.len = ctx->cid.bstr_length;
159
164
  break;
160
165
 
161
166
  default:
@@ -164,7 +169,7 @@ int edhoc_message_1_compose(struct edhoc_context *ctx, uint8_t *msg_1,
164
169
 
165
170
  /* 3e. Fill CBOR structure for message 1 - external authorization data if present. */
166
171
  if (NULL != ctx->ead.compose && 0 != ARRAY_SIZE(ctx->ead_token) - 1) {
167
- ret = ctx->ead.compose(ctx->user_ctx, EDHOC_MSG_1,
172
+ ret = ctx->ead.compose(ctx->user_ctx, ctx->message,
168
173
  ctx->ead_token,
169
174
  ARRAY_SIZE(ctx->ead_token) - 1,
170
175
  &ctx->nr_of_ead_tokens);
@@ -192,23 +197,25 @@ int edhoc_message_1_compose(struct edhoc_context *ctx, uint8_t *msg_1,
192
197
  }
193
198
 
194
199
  if (0 != ctx->nr_of_ead_tokens) {
195
- cbor_enc_msg_1._message_1_EAD_1_present = true;
196
- cbor_enc_msg_1._message_1_EAD_1._ead_count =
200
+ cbor_enc_msg_1.message_1_EAD_1_m_present = true;
201
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1_count =
197
202
  ctx->nr_of_ead_tokens;
198
203
 
199
204
  for (size_t i = 0; i < ctx->nr_of_ead_tokens; ++i) {
200
- cbor_enc_msg_1._message_1_EAD_1._ead[i]
201
- ._ead_value_present = true;
202
- cbor_enc_msg_1._message_1_EAD_1._ead[i]._ead_label =
203
- ctx->ead_token[i].label;
204
- cbor_enc_msg_1._message_1_EAD_1._ead[i]
205
- ._ead_value.value = ctx->ead_token[i].value;
206
- cbor_enc_msg_1._message_1_EAD_1._ead[i]._ead_value.len =
205
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1[i]
206
+ .ead_x_ead_value_present = true;
207
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1[i]
208
+ .ead_x_ead_label = ctx->ead_token[i].label;
209
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1[i]
210
+ .ead_x_ead_value.value =
211
+ ctx->ead_token[i].value;
212
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1[i]
213
+ .ead_x_ead_value.len =
207
214
  ctx->ead_token[i].value_len;
208
215
  }
209
216
  } else {
210
- cbor_enc_msg_1._message_1_EAD_1_present = false;
211
- cbor_enc_msg_1._message_1_EAD_1._ead_count = 0;
217
+ cbor_enc_msg_1.message_1_EAD_1_m_present = false;
218
+ cbor_enc_msg_1.message_1_EAD_1_m.EAD_1_count = 0;
212
219
  }
213
220
 
214
221
  /* 4. Encode cbor sequence of message 1. */
@@ -263,6 +270,8 @@ int edhoc_message_1_process(struct edhoc_context *ctx, const uint8_t *msg_1,
263
270
 
264
271
  ctx->status = EDHOC_SM_ABORTED;
265
272
  ctx->error_code = EDHOC_ERROR_CODE_UNSPECIFIED_ERROR;
273
+ ctx->message = EDHOC_MSG_1;
274
+ ctx->role = EDHOC_RESPONDER;
266
275
 
267
276
  int ret = EDHOC_ERROR_GENERIC_ERROR;
268
277
 
@@ -276,33 +285,59 @@ int edhoc_message_1_process(struct edhoc_context *ctx, const uint8_t *msg_1,
276
285
 
277
286
  /* 2. Choose most preferred cipher suite. */
278
287
  if (0 == ctx->csuite_len)
279
- return EDHOC_ERROR_INVALID_ARGUMENT;
288
+ return EDHOC_ERROR_BAD_STATE;
280
289
 
281
290
  ctx->chosen_csuite_idx = ctx->csuite_len - 1;
282
291
  const struct edhoc_cipher_suite csuite =
283
292
  ctx->csuite[ctx->chosen_csuite_idx];
284
293
 
285
294
  /* 3a. Verify method. */
286
- if ((int32_t)ctx->method != cbor_dec_msg_1._message_1_METHOD)
295
+ bool method_match = false;
296
+ for (size_t i = 0; i < ctx->method_len; ++i) {
297
+ if ((int32_t)ctx->method[i] ==
298
+ cbor_dec_msg_1.message_1_METHOD) {
299
+ ctx->chosen_method = ctx->method[i];
300
+ method_match = true;
301
+ break;
302
+ }
303
+ }
304
+
305
+ if (false == method_match)
287
306
  return EDHOC_ERROR_MSG_1_PROCESS_FAILURE;
288
307
 
289
308
  /* 3b. Verify cipher suite. */
290
- switch (cbor_dec_msg_1._message_1_SUITES_I._suites_choice) {
291
- case _suites_int: {
309
+ switch (cbor_dec_msg_1.message_1_SUITES_I.suites_choice) {
310
+ case suites_int_c: {
311
+ ctx->peer_csuite[ctx->peer_csuite_len].value =
312
+ cbor_dec_msg_1.message_1_SUITES_I.suites_int;
313
+ ctx->peer_csuite_len = 1;
314
+
292
315
  if (csuite.value !=
293
- cbor_dec_msg_1._message_1_SUITES_I._suites_int) {
316
+ cbor_dec_msg_1.message_1_SUITES_I.suites_int) {
294
317
  ctx->error_code =
295
318
  EDHOC_ERROR_CODE_WRONG_SELECTED_CIPHER_SUITE;
296
319
  return EDHOC_ERROR_MSG_1_PROCESS_FAILURE;
297
320
  }
321
+
298
322
  break;
299
323
  }
300
324
 
301
- case _suites__int: {
325
+ case suites_int_l_c: {
326
+ if (ARRAY_SIZE(ctx->peer_csuite) <
327
+ cbor_dec_msg_1.message_1_SUITES_I.suites_int_l_int_count)
328
+ return EDHOC_ERROR_BUFFER_TOO_SMALL;
329
+
330
+ ctx->peer_csuite_len =
331
+ cbor_dec_msg_1.message_1_SUITES_I.suites_int_l_int_count;
332
+ for (size_t i = 0; i < ctx->peer_csuite_len; ++i)
333
+ ctx->peer_csuite[i].value =
334
+ cbor_dec_msg_1.message_1_SUITES_I
335
+ .suites_int_l_int[i];
336
+
302
337
  if (csuite.value !=
303
- cbor_dec_msg_1._message_1_SUITES_I
304
- ._suites__int_int[cbor_dec_msg_1._message_1_SUITES_I
305
- ._suites__int_int_count -
338
+ cbor_dec_msg_1.message_1_SUITES_I
339
+ .suites_int_l_int[cbor_dec_msg_1.message_1_SUITES_I
340
+ .suites_int_l_int_count -
306
341
  1]) {
307
342
  ctx->error_code =
308
343
  EDHOC_ERROR_CODE_WRONG_SELECTED_CIPHER_SUITE;
@@ -317,39 +352,39 @@ int edhoc_message_1_process(struct edhoc_context *ctx, const uint8_t *msg_1,
317
352
  }
318
353
 
319
354
  /* 3c. Verify ephemeral public key. */
320
- if (cbor_dec_msg_1._message_1_G_X.len != csuite.ecc_key_length)
355
+ if (cbor_dec_msg_1.message_1_G_X.len != csuite.ecc_key_length)
321
356
  return EDHOC_ERROR_MSG_1_PROCESS_FAILURE;
322
357
 
323
- ctx->dh_peer_pub_key_len = cbor_dec_msg_1._message_1_G_X.len;
324
- memcpy(ctx->dh_peer_pub_key, cbor_dec_msg_1._message_1_G_X.value,
358
+ ctx->dh_peer_pub_key_len = cbor_dec_msg_1.message_1_G_X.len;
359
+ memcpy(ctx->dh_peer_pub_key, cbor_dec_msg_1.message_1_G_X.value,
325
360
  csuite.ecc_key_length);
326
361
 
327
362
  /* 3d. Verify connection identifier. */
328
- switch (cbor_dec_msg_1._message_1_C_I_choice) {
329
- case _message_1_C_I_int: {
363
+ switch (cbor_dec_msg_1.message_1_C_I_choice) {
364
+ case message_1_C_I_int_c: {
330
365
  if (ONE_BYTE_CBOR_INT_MIN_VALUE >
331
- cbor_dec_msg_1._message_1_C_I_int ||
366
+ cbor_dec_msg_1.message_1_C_I_int ||
332
367
  ONE_BYTE_CBOR_INT_MAX_VALUE <
333
- cbor_dec_msg_1._message_1_C_I_int)
368
+ cbor_dec_msg_1.message_1_C_I_int)
334
369
  return EDHOC_ERROR_MSG_1_PROCESS_FAILURE;
335
370
 
336
371
  ctx->peer_cid.encode_type = EDHOC_CID_TYPE_ONE_BYTE_INTEGER;
337
372
  ctx->peer_cid.int_value =
338
- (int8_t)cbor_dec_msg_1._message_1_C_I_int;
373
+ (int8_t)cbor_dec_msg_1.message_1_C_I_int;
339
374
  break;
340
375
  }
341
376
 
342
- case _message_1_C_I_bstr: {
377
+ case message_1_C_I_bstr_c: {
343
378
  if (ARRAY_SIZE(ctx->peer_cid.bstr_value) <
344
- cbor_dec_msg_1._message_1_C_I_bstr.len)
379
+ cbor_dec_msg_1.message_1_C_I_bstr.len)
345
380
  return EDHOC_ERROR_MSG_1_PROCESS_FAILURE;
346
381
 
347
382
  ctx->peer_cid.encode_type = EDHOC_CID_TYPE_BYTE_STRING;
348
383
  ctx->peer_cid.bstr_length =
349
- cbor_dec_msg_1._message_1_C_I_bstr.len;
384
+ cbor_dec_msg_1.message_1_C_I_bstr.len;
350
385
  memcpy(ctx->peer_cid.bstr_value,
351
- cbor_dec_msg_1._message_1_C_I_bstr.value,
352
- cbor_dec_msg_1._message_1_C_I_bstr.len);
386
+ cbor_dec_msg_1.message_1_C_I_bstr.value,
387
+ cbor_dec_msg_1.message_1_C_I_bstr.len);
353
388
  break;
354
389
  }
355
390
 
@@ -376,27 +411,27 @@ int edhoc_message_1_process(struct edhoc_context *ctx, const uint8_t *msg_1,
376
411
  }
377
412
 
378
413
  /* 4. Process EAD if present. */
379
- if (true == cbor_dec_msg_1._message_1_EAD_1_present &&
414
+ if (true == cbor_dec_msg_1.message_1_EAD_1_m_present &&
380
415
  NULL != ctx->ead.process) {
381
416
  if (ARRAY_SIZE(ctx->ead_token) - 1 <
382
- cbor_dec_msg_1._message_1_EAD_1._ead_count)
417
+ cbor_dec_msg_1.message_1_EAD_1_m.EAD_1_count)
383
418
  return EDHOC_ERROR_BUFFER_TOO_SMALL;
384
419
 
385
420
  ctx->nr_of_ead_tokens =
386
- cbor_dec_msg_1._message_1_EAD_1._ead_count;
421
+ cbor_dec_msg_1.message_1_EAD_1_m.EAD_1_count;
387
422
  for (size_t i = 0; i < ctx->nr_of_ead_tokens; ++i) {
388
423
  ctx->ead_token[i].label =
389
- cbor_dec_msg_1._message_1_EAD_1._ead[i]
390
- ._ead_label;
424
+ cbor_dec_msg_1.message_1_EAD_1_m.EAD_1[i]
425
+ .ead_x_ead_label;
391
426
  ctx->ead_token[i].value =
392
- cbor_dec_msg_1._message_1_EAD_1._ead[i]
393
- ._ead_value.value;
427
+ cbor_dec_msg_1.message_1_EAD_1_m.EAD_1[i]
428
+ .ead_x_ead_value.value;
394
429
  ctx->ead_token[i].value_len =
395
- cbor_dec_msg_1._message_1_EAD_1._ead[i]
396
- ._ead_value.len;
430
+ cbor_dec_msg_1.message_1_EAD_1_m.EAD_1[i]
431
+ .ead_x_ead_value.len;
397
432
  }
398
433
 
399
- ret = ctx->ead.process(ctx->user_ctx, EDHOC_MSG_1,
434
+ ret = ctx->ead.process(ctx->user_ctx, ctx->message,
400
435
  ctx->ead_token, ctx->nr_of_ead_tokens);
401
436
 
402
437
  if (EDHOC_SUCCESS == ret && NULL != ctx->logger) {