edhoc 1.0.5 → 1.1.1

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
@@ -1,447 +1,445 @@
1
- /**
2
- * \file cipher_suite_0.c
3
- * \author Kamil Kielbasa
4
- * \brief Example implementation of cipher suite 0.
5
- * \version 0.4
6
- * \date 2024-04-01
7
- *
8
- * \copyright Copyright (c) 2024
9
- *
10
- */
11
-
12
- /* Include files ----------------------------------------------------------- */
13
-
14
- /* Internal test header: */
15
- #include "cipher_suites/cipher_suite_0.h"
16
-
17
- /* Standard library header: */
18
- #include <stdint.h>
19
- #include <stddef.h>
20
- #include <string.h>
21
-
22
- /* EDHOC headers: */
23
- #include "edhoc_crypto.h"
24
- #include "edhoc_values.h"
25
- #include "edhoc_macros.h"
26
-
27
- /* PSA crypto header: */
28
- #include <psa/crypto.h>
29
-
30
- /* Compact25519 crypto headers: */
31
- #include <c25519/c25519.h>
32
- #include <compact_x25519.h>
33
- #include <compact_ed25519.h>
34
-
35
- /* Module defines ---------------------------------------------------------- */
36
- #define AEAD_TAG_LEN (8)
37
- #define AEAD_KEY_LEN (16)
38
-
39
- /* Module types and type definitiones -------------------------------------- */
40
- /* Module interface variables and constants -------------------------------- */
41
- /* Static variables and constants ------------------------------------------ */
42
- /* Static function declarations -------------------------------------------- */
43
- /* Static function definitions --------------------------------------------- */
44
-
45
- /* Module interface function definitions ----------------------------------- */
46
-
47
- int cipher_suite_0_key_generate(void *user_ctx, enum edhoc_key_type key_type,
48
- const uint8_t *raw_key, size_t raw_key_len,
49
- void *kid)
50
- {
51
- (void)user_ctx;
52
-
53
- /*
54
- * 1. Generate key attr
55
- */
56
- psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
57
- psa_set_key_lifetime(&attr, PSA_KEY_LIFETIME_VOLATILE);
58
-
59
- switch (key_type) {
60
- case EDHOC_KT_MAKE_KEY_PAIR:
61
- return EDHOC_SUCCESS;
62
-
63
- case EDHOC_KT_KEY_AGREEMENT:
64
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
65
- psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
66
- psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(X25519_SHARED_SIZE));
67
- break;
68
-
69
- case EDHOC_KT_SIGNATURE:
70
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
71
- psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
72
- psa_set_key_bits(&attr,
73
- PSA_BYTES_TO_BITS(ED25519_PRIVATE_KEY_SIZE));
74
- break;
75
-
76
- case EDHOC_KT_VERIFY:
77
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
78
- psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
79
- psa_set_key_bits(&attr,
80
- PSA_BYTES_TO_BITS(ED25519_PUBLIC_KEY_SIZE));
81
- break;
82
-
83
- case EDHOC_KT_EXTRACT:
84
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DERIVE);
85
- psa_set_key_algorithm(&attr,
86
- PSA_ALG_HKDF_EXTRACT(PSA_ALG_SHA_256));
87
- psa_set_key_type(&attr, PSA_KEY_TYPE_DERIVE);
88
- psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(raw_key_len));
89
- break;
90
-
91
- case EDHOC_KT_EXPAND:
92
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DERIVE);
93
- psa_set_key_algorithm(&attr,
94
- PSA_ALG_HKDF_EXPAND(PSA_ALG_SHA_256));
95
- psa_set_key_type(&attr, PSA_KEY_TYPE_DERIVE);
96
- psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(raw_key_len));
97
- break;
98
-
99
- case EDHOC_KT_ENCRYPT:
100
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_ENCRYPT);
101
- psa_set_key_algorithm(
102
- &attr, PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM,
103
- AEAD_TAG_LEN));
104
- psa_set_key_type(&attr, PSA_KEY_TYPE_AES);
105
- psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(AEAD_KEY_LEN));
106
- break;
107
-
108
- case EDHOC_KT_DECRYPT:
109
- psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DECRYPT);
110
- psa_set_key_algorithm(
111
- &attr, PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM,
112
- AEAD_TAG_LEN));
113
- psa_set_key_type(&attr, PSA_KEY_TYPE_AES);
114
- psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(AEAD_KEY_LEN));
115
- break;
116
-
117
- default:
118
- return EDHOC_ERROR_CRYPTO_FAILURE;
119
- }
120
-
121
- /*
122
- * 2. Import key identifier
123
- */
124
- psa_key_id_t *psa_kid = kid;
125
- *psa_kid = PSA_KEY_HANDLE_INIT;
126
-
127
- const psa_status_t ret =
128
- psa_import_key(&attr, raw_key, raw_key_len, psa_kid);
129
-
130
- return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
131
- EDHOC_ERROR_CRYPTO_FAILURE;
132
- }
133
-
134
- int cipher_suite_0_key_destroy(void *user_ctx, void *kid)
135
- {
136
- (void)user_ctx;
137
-
138
- if (NULL == kid)
139
- return EDHOC_ERROR_INVALID_ARGUMENT;
140
-
141
- psa_key_id_t *psa_kid = kid;
142
- const psa_status_t ret = psa_destroy_key(*psa_kid);
143
- *psa_kid = PSA_KEY_HANDLE_INIT;
144
-
145
- return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
146
- EDHOC_ERROR_CRYPTO_FAILURE;
147
- }
148
-
149
- int cipher_suite_0_make_key_pair(void *user_ctx, const void *kid,
150
- uint8_t *restrict priv_key,
151
- size_t priv_key_size,
152
- size_t *restrict priv_key_len,
153
- uint8_t *restrict pub_key, size_t pub_key_size,
154
- size_t *restrict pub_key_len)
155
- {
156
- (void)user_ctx;
157
-
158
- if (NULL == kid || NULL == priv_key || 0 == priv_key_size ||
159
- NULL == priv_key_len || NULL == pub_key || 0 == pub_key_size ||
160
- NULL == pub_key_len)
161
- return EDHOC_ERROR_INVALID_ARGUMENT;
162
-
163
- if (X25519_KEY_SIZE != priv_key_size || X25519_KEY_SIZE != pub_key_size)
164
- return EDHOC_ERROR_CRYPTO_FAILURE;
165
-
166
- uint8_t seed[X25519_KEY_SIZE] = { 0 };
167
- const psa_status_t ret = psa_generate_random(seed, sizeof(seed));
168
-
169
- if (PSA_SUCCESS != ret)
170
- return EDHOC_ERROR_CRYPTO_FAILURE;
171
-
172
- compact_x25519_keygen(priv_key, pub_key, seed);
173
- *priv_key_len = X25519_KEY_SIZE;
174
- *pub_key_len = X25519_KEY_SIZE;
175
-
176
- return EDHOC_SUCCESS;
177
- }
178
-
179
- int cipher_suite_0_key_agreement(void *user_ctx, const void *kid,
180
- const uint8_t *peer_pub_key,
181
- size_t peer_pub_key_len, uint8_t *shr_sec,
182
- size_t shr_sec_size, size_t *shr_sec_len)
183
- {
184
- (void)user_ctx;
185
-
186
- if (NULL == kid || NULL == peer_pub_key || 0 == peer_pub_key_len ||
187
- NULL == shr_sec || 0 == shr_sec_size || NULL == shr_sec_len)
188
- return EDHOC_ERROR_INVALID_ARGUMENT;
189
-
190
- if (X25519_KEY_SIZE != peer_pub_key_len ||
191
- X25519_SHARED_SIZE != shr_sec_size)
192
- return EDHOC_ERROR_CRYPTO_FAILURE;
193
-
194
- size_t priv_key_len = 0;
195
- uint8_t priv_key[X25519_KEY_SIZE] = { 0 };
196
-
197
- const psa_key_id_t *psa_kid = kid;
198
- const psa_status_t ret = psa_export_key(
199
- *psa_kid, priv_key, ARRAY_SIZE(priv_key), &priv_key_len);
200
-
201
- if (PSA_SUCCESS != ret || ARRAY_SIZE(priv_key) != priv_key_len)
202
- return EDHOC_ERROR_CRYPTO_FAILURE;
203
-
204
- uint8_t e[F25519_SIZE] = { 0 };
205
- f25519_copy(e, priv_key);
206
- c25519_prepare(e);
207
- c25519_smult(shr_sec, peer_pub_key, e);
208
-
209
- *shr_sec_len = X25519_SHARED_SIZE;
210
-
211
- return EDHOC_SUCCESS;
212
- }
213
-
214
- int cipher_suite_0_signature(void *user_ctx, const void *kid,
215
- const uint8_t *input, size_t input_len,
216
- uint8_t *sign, size_t sign_size, size_t *sign_len)
217
- {
218
- (void)user_ctx;
219
-
220
- if (NULL == kid || NULL == input || 0 == input_len || NULL == sign ||
221
- 0 == sign_size || NULL == sign_len)
222
- return EDHOC_ERROR_INVALID_ARGUMENT;
223
-
224
- if (ED25519_SIGNATURE_SIZE != sign_size)
225
- return EDHOC_ERROR_CRYPTO_FAILURE;
226
-
227
- size_t priv_key_len = 0;
228
- uint8_t priv_key[ED25519_PRIVATE_KEY_SIZE] = { 0 };
229
-
230
- const psa_key_id_t *psa_kid = kid;
231
- const psa_status_t ret = psa_export_key(
232
- *psa_kid, priv_key, ARRAY_SIZE(priv_key), &priv_key_len);
233
-
234
- if (PSA_SUCCESS != ret || ARRAY_SIZE(priv_key) != priv_key_len)
235
- return EDHOC_ERROR_CRYPTO_FAILURE;
236
-
237
- compact_ed25519_sign(sign, priv_key, input, input_len);
238
- *sign_len = ED25519_SIGNATURE_SIZE;
239
-
240
- return EDHOC_SUCCESS;
241
- }
242
-
243
- int cipher_suite_0_verify(void *user_ctx, const void *kid, const uint8_t *input,
244
- size_t input_len, const uint8_t *sign,
245
- size_t sign_len)
246
- {
247
- (void)user_ctx;
248
-
249
- if (NULL == kid || NULL == input || 0 == input_len || NULL == sign ||
250
- 0 == sign_len)
251
- return EDHOC_ERROR_INVALID_ARGUMENT;
252
-
253
- if (ED25519_SIGNATURE_SIZE != sign_len)
254
- return EDHOC_ERROR_CRYPTO_FAILURE;
255
-
256
- size_t pub_key_len = 0;
257
- uint8_t pub_key[ED25519_PUBLIC_KEY_SIZE] = { 0 };
258
-
259
- const psa_key_id_t *psa_kid = kid;
260
- const psa_status_t ret = psa_export_key(
261
- *psa_kid, pub_key, ARRAY_SIZE(pub_key), &pub_key_len);
262
-
263
- if (PSA_SUCCESS != ret || ARRAY_SIZE(pub_key) != pub_key_len)
264
- return EDHOC_ERROR_CRYPTO_FAILURE;
265
-
266
- const bool verified =
267
- compact_ed25519_verify(sign, pub_key, input, input_len);
268
-
269
- return (true == verified) ? EDHOC_SUCCESS : EDHOC_ERROR_CRYPTO_FAILURE;
270
- }
271
-
272
- int cipher_suite_0_extract(void *user_ctx, const void *kid, const uint8_t *salt,
273
- size_t salt_len, uint8_t *prk, size_t prk_size,
274
- size_t *prk_len)
275
- {
276
- (void)user_ctx;
277
-
278
- if (NULL == kid || NULL == salt || 0 == salt_len || NULL == prk ||
279
- 0 == prk_size || NULL == prk_len)
280
- return EDHOC_ERROR_INVALID_ARGUMENT;
281
-
282
- psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
283
-
284
- const psa_key_id_t *psa_kid = kid;
285
- psa_key_derivation_operation_t ctx = PSA_KEY_DERIVATION_OPERATION_INIT;
286
-
287
- psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
288
- ret = psa_get_key_attributes(*psa_kid, &attr);
289
- if (PSA_SUCCESS != ret)
290
- goto psa_error;
291
-
292
- ret = psa_key_derivation_setup(&ctx, psa_get_key_algorithm(&attr));
293
- if (PSA_SUCCESS != ret)
294
- goto psa_error;
295
-
296
- ret = psa_key_derivation_input_bytes(
297
- &ctx, PSA_KEY_DERIVATION_INPUT_SALT, salt, salt_len);
298
- if (PSA_SUCCESS != ret)
299
- goto psa_error;
300
-
301
- ret = psa_key_derivation_input_key(
302
- &ctx, PSA_KEY_DERIVATION_INPUT_SECRET, *psa_kid);
303
- if (PSA_SUCCESS != ret)
304
- goto psa_error;
305
-
306
- ret = psa_key_derivation_set_capacity(&ctx, prk_size);
307
- if (PSA_SUCCESS != ret)
308
- goto psa_error;
309
-
310
- ret = psa_key_derivation_output_bytes(&ctx, prk, prk_size);
311
- if (PSA_SUCCESS != ret)
312
- goto psa_error;
313
-
314
- *prk_len = prk_size;
315
- psa_key_derivation_abort(&ctx);
316
-
317
- return EDHOC_SUCCESS;
318
-
319
- psa_error:
320
- psa_key_derivation_abort(&ctx);
321
- return EDHOC_ERROR_CRYPTO_FAILURE;
322
- }
323
-
324
- int cipher_suite_0_expand(void *user_ctx, const void *kid, const uint8_t *info,
325
- size_t info_len, uint8_t *okm, size_t okm_len)
326
- {
327
- (void)user_ctx;
328
-
329
- if (NULL == kid || NULL == info || 0 == info_len || NULL == okm ||
330
- 0 == okm_len)
331
- return EDHOC_ERROR_INVALID_ARGUMENT;
332
-
333
- psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
334
-
335
- const psa_key_id_t *psa_kid = kid;
336
- psa_key_derivation_operation_t ctx = PSA_KEY_DERIVATION_OPERATION_INIT;
337
-
338
- psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
339
- ret = psa_get_key_attributes(*psa_kid, &attr);
340
- if (PSA_SUCCESS != ret)
341
- goto psa_error;
342
-
343
- ret = psa_key_derivation_setup(&ctx, psa_get_key_algorithm(&attr));
344
- if (PSA_SUCCESS != ret)
345
- goto psa_error;
346
-
347
- ret = psa_key_derivation_input_key(
348
- &ctx, PSA_KEY_DERIVATION_INPUT_SECRET, *psa_kid);
349
- if (PSA_SUCCESS != ret)
350
- goto psa_error;
351
-
352
- ret = psa_key_derivation_input_bytes(
353
- &ctx, PSA_KEY_DERIVATION_INPUT_INFO, info, info_len);
354
- if (PSA_SUCCESS != ret)
355
- goto psa_error;
356
-
357
- ret = psa_key_derivation_set_capacity(&ctx, okm_len);
358
- if (PSA_SUCCESS != ret)
359
- goto psa_error;
360
-
361
- ret = psa_key_derivation_output_bytes(&ctx, okm, okm_len);
362
- if (PSA_SUCCESS != ret)
363
- goto psa_error;
364
-
365
- psa_key_derivation_abort(&ctx);
366
- return EDHOC_SUCCESS;
367
-
368
- psa_error:
369
- psa_key_derivation_abort(&ctx);
370
- return EDHOC_ERROR_CRYPTO_FAILURE;
371
- }
372
-
373
- int cipher_suite_0_encrypt(void *user_ctx, const void *kid,
374
- const uint8_t *nonce, size_t nonce_len,
375
- const uint8_t *ad, size_t ad_len,
376
- const uint8_t *ptxt, size_t ptxt_len, uint8_t *ctxt,
377
- size_t ctxt_size, size_t *ctxt_len)
378
- {
379
- (void)user_ctx;
380
-
381
- /* Plaintext might be zero length buffer. */
382
- if (NULL == kid || NULL == nonce || 0 == nonce_len || NULL == ad ||
383
- 0 == ad_len || NULL == ctxt || 0 == ctxt_size || NULL == ctxt_len)
384
- return EDHOC_ERROR_INVALID_ARGUMENT;
385
-
386
- psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
387
- const psa_key_id_t *psa_kid = kid;
388
-
389
- psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
390
- ret = psa_get_key_attributes(*psa_kid, &attr);
391
-
392
- if (PSA_SUCCESS != ret)
393
- return EDHOC_ERROR_CRYPTO_FAILURE;
394
-
395
- ret = psa_aead_encrypt(*psa_kid, psa_get_key_algorithm(&attr), nonce,
396
- nonce_len, ad, ad_len, ptxt, ptxt_len, ctxt,
397
- ctxt_size, ctxt_len);
398
-
399
- return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
400
- EDHOC_ERROR_CRYPTO_FAILURE;
401
- }
402
-
403
- int cipher_suite_0_decrypt(void *user_ctx, const void *kid,
404
- const uint8_t *nonce, size_t nonce_len,
405
- const uint8_t *ad, size_t ad_len,
406
- const uint8_t *ctxt, size_t ctxt_len, uint8_t *ptxt,
407
- size_t ptxt_size, size_t *ptxt_len)
408
- {
409
- (void)user_ctx;
410
-
411
- /* Plaintext might be zero length buffer. */
412
- if (NULL == kid || NULL == nonce || 0 == nonce_len || NULL == ad ||
413
- 0 == ad_len || NULL == ctxt || 0 == ctxt_len || NULL == ptxt_len)
414
- return EDHOC_ERROR_INVALID_ARGUMENT;
415
-
416
- psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
417
- const psa_key_id_t *psa_kid = kid;
418
-
419
- psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
420
- ret = psa_get_key_attributes(*psa_kid, &attr);
421
-
422
- if (PSA_SUCCESS != ret)
423
- return EDHOC_ERROR_CRYPTO_FAILURE;
424
-
425
- ret = psa_aead_decrypt(*psa_kid, psa_get_key_algorithm(&attr), nonce,
426
- nonce_len, ad, ad_len, ctxt, ctxt_len, ptxt,
427
- ptxt_size, ptxt_len);
428
-
429
- return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
430
- EDHOC_ERROR_CRYPTO_FAILURE;
431
- }
432
-
433
- int cipher_suite_0_hash(void *user_ctx, const uint8_t *input, size_t input_len,
434
- uint8_t *hash, size_t hash_size, size_t *hash_len)
435
- {
436
- (void)user_ctx;
437
-
438
- if (NULL == input || 0 == input_len || NULL == hash || 0 == hash_size ||
439
- NULL == hash_len)
440
- return EDHOC_ERROR_INVALID_ARGUMENT;
441
-
442
- const psa_status_t ret = psa_hash_compute(
443
- PSA_ALG_SHA_256, input, input_len, hash, hash_size, hash_len);
444
-
445
- return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
446
- EDHOC_ERROR_CRYPTO_FAILURE;
447
- }
1
+ /**
2
+ * \file cipher_suite_0.c
3
+ * \author Kamil Kielbasa
4
+ * \brief Example implementation of cipher suite 0.
5
+ * \version 0.6
6
+ * \date 2024-08-05
7
+ *
8
+ * \copyright Copyright (c) 2024
9
+ *
10
+ */
11
+
12
+ /* Include files ----------------------------------------------------------- */
13
+
14
+ /* Internal test header: */
15
+ #include "cipher_suite_0.h"
16
+
17
+ /* Standard library header: */
18
+ #include <stdint.h>
19
+ #include <stddef.h>
20
+ #include <string.h>
21
+
22
+ /* EDHOC headers: */
23
+ #include "edhoc_crypto.h"
24
+ #include "edhoc_values.h"
25
+ #include "edhoc_macros.h"
26
+
27
+ /* PSA crypto header: */
28
+ #include <psa/crypto.h>
29
+
30
+ /* Compact25519 crypto headers: */
31
+ #include <c25519/c25519.h>
32
+ #include <compact_x25519.h>
33
+ #include <compact_ed25519.h>
34
+
35
+ /* Module defines ---------------------------------------------------------- */
36
+ #define AEAD_TAG_LEN (8)
37
+ #define AEAD_KEY_LEN (16)
38
+
39
+ /* Module types and type definitiones -------------------------------------- */
40
+ /* Module interface variables and constants -------------------------------- */
41
+ /* Static variables and constants ------------------------------------------ */
42
+ /* Static function declarations -------------------------------------------- */
43
+ /* Static function definitions --------------------------------------------- */
44
+
45
+ /* Module interface function definitions ----------------------------------- */
46
+
47
+ int cipher_suite_0_key_import(void *user_ctx, enum edhoc_key_type key_type,
48
+ const uint8_t *raw_key, size_t raw_key_len,
49
+ void *kid)
50
+ {
51
+ (void)user_ctx;
52
+
53
+ /*
54
+ * 1. Generate key attr
55
+ */
56
+ psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
57
+ psa_set_key_lifetime(&attr, PSA_KEY_LIFETIME_VOLATILE);
58
+
59
+ switch (key_type) {
60
+ case EDHOC_KT_MAKE_KEY_PAIR:
61
+ return EDHOC_SUCCESS;
62
+
63
+ case EDHOC_KT_KEY_AGREEMENT:
64
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
65
+ psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
66
+ psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(X25519_SHARED_SIZE));
67
+ break;
68
+
69
+ case EDHOC_KT_SIGNATURE:
70
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
71
+ psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
72
+ psa_set_key_bits(&attr,
73
+ PSA_BYTES_TO_BITS(ED25519_PRIVATE_KEY_SIZE));
74
+ break;
75
+
76
+ case EDHOC_KT_VERIFY:
77
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_EXPORT);
78
+ psa_set_key_type(&attr, PSA_KEY_TYPE_RAW_DATA);
79
+ psa_set_key_bits(&attr,
80
+ PSA_BYTES_TO_BITS(ED25519_PUBLIC_KEY_SIZE));
81
+ break;
82
+
83
+ case EDHOC_KT_EXTRACT:
84
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DERIVE);
85
+ psa_set_key_algorithm(&attr,
86
+ PSA_ALG_HKDF_EXTRACT(PSA_ALG_SHA_256));
87
+ psa_set_key_type(&attr, PSA_KEY_TYPE_DERIVE);
88
+ psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(raw_key_len));
89
+ break;
90
+
91
+ case EDHOC_KT_EXPAND:
92
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DERIVE);
93
+ psa_set_key_algorithm(&attr,
94
+ PSA_ALG_HKDF_EXPAND(PSA_ALG_SHA_256));
95
+ psa_set_key_type(&attr, PSA_KEY_TYPE_DERIVE);
96
+ psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(raw_key_len));
97
+ break;
98
+
99
+ case EDHOC_KT_ENCRYPT:
100
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_ENCRYPT);
101
+ psa_set_key_algorithm(
102
+ &attr, PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM,
103
+ AEAD_TAG_LEN));
104
+ psa_set_key_type(&attr, PSA_KEY_TYPE_AES);
105
+ psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(AEAD_KEY_LEN));
106
+ break;
107
+
108
+ case EDHOC_KT_DECRYPT:
109
+ psa_set_key_usage_flags(&attr, PSA_KEY_USAGE_DECRYPT);
110
+ psa_set_key_algorithm(
111
+ &attr, PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM,
112
+ AEAD_TAG_LEN));
113
+ psa_set_key_type(&attr, PSA_KEY_TYPE_AES);
114
+ psa_set_key_bits(&attr, PSA_BYTES_TO_BITS(AEAD_KEY_LEN));
115
+ break;
116
+
117
+ default:
118
+ return EDHOC_ERROR_CRYPTO_FAILURE;
119
+ }
120
+
121
+ /*
122
+ * 2. Import key identifier
123
+ */
124
+ psa_key_id_t *psa_kid = kid;
125
+ *psa_kid = PSA_KEY_HANDLE_INIT;
126
+
127
+ const psa_status_t ret =
128
+ psa_import_key(&attr, raw_key, raw_key_len, psa_kid);
129
+
130
+ return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
131
+ EDHOC_ERROR_CRYPTO_FAILURE;
132
+ }
133
+
134
+ int cipher_suite_0_key_destroy(void *user_ctx, void *kid)
135
+ {
136
+ (void)user_ctx;
137
+
138
+ if (NULL == kid)
139
+ return EDHOC_ERROR_INVALID_ARGUMENT;
140
+
141
+ psa_key_id_t *psa_kid = kid;
142
+ const psa_status_t ret = psa_destroy_key(*psa_kid);
143
+ *psa_kid = PSA_KEY_HANDLE_INIT;
144
+
145
+ return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
146
+ EDHOC_ERROR_CRYPTO_FAILURE;
147
+ }
148
+
149
+ int cipher_suite_0_make_key_pair(void *user_ctx, const void *kid,
150
+ uint8_t *priv_key, size_t priv_key_size,
151
+ size_t *priv_key_len, uint8_t *pub_key,
152
+ size_t pub_key_size, size_t *pub_key_len)
153
+ {
154
+ (void)user_ctx;
155
+
156
+ if (NULL == kid || NULL == priv_key || 0 == priv_key_size ||
157
+ NULL == priv_key_len || NULL == pub_key || 0 == pub_key_size ||
158
+ NULL == pub_key_len)
159
+ return EDHOC_ERROR_INVALID_ARGUMENT;
160
+
161
+ if (X25519_KEY_SIZE != priv_key_size || X25519_KEY_SIZE != pub_key_size)
162
+ return EDHOC_ERROR_CRYPTO_FAILURE;
163
+
164
+ uint8_t seed[X25519_KEY_SIZE] = { 0 };
165
+ const psa_status_t ret = psa_generate_random(seed, sizeof(seed));
166
+
167
+ if (PSA_SUCCESS != ret)
168
+ return EDHOC_ERROR_CRYPTO_FAILURE;
169
+
170
+ compact_x25519_keygen(priv_key, pub_key, seed);
171
+ *priv_key_len = X25519_KEY_SIZE;
172
+ *pub_key_len = X25519_KEY_SIZE;
173
+
174
+ return EDHOC_SUCCESS;
175
+ }
176
+
177
+ int cipher_suite_0_key_agreement(void *user_ctx, const void *kid,
178
+ const uint8_t *peer_pub_key,
179
+ size_t peer_pub_key_len, uint8_t *shr_sec,
180
+ size_t shr_sec_size, size_t *shr_sec_len)
181
+ {
182
+ (void)user_ctx;
183
+
184
+ if (NULL == kid || NULL == peer_pub_key || 0 == peer_pub_key_len ||
185
+ NULL == shr_sec || 0 == shr_sec_size || NULL == shr_sec_len)
186
+ return EDHOC_ERROR_INVALID_ARGUMENT;
187
+
188
+ if (X25519_KEY_SIZE != peer_pub_key_len ||
189
+ X25519_SHARED_SIZE != shr_sec_size)
190
+ return EDHOC_ERROR_CRYPTO_FAILURE;
191
+
192
+ size_t priv_key_len = 0;
193
+ uint8_t priv_key[X25519_KEY_SIZE] = { 0 };
194
+
195
+ const psa_key_id_t *psa_kid = kid;
196
+ const psa_status_t ret = psa_export_key(
197
+ *psa_kid, priv_key, ARRAY_SIZE(priv_key), &priv_key_len);
198
+
199
+ if (PSA_SUCCESS != ret || ARRAY_SIZE(priv_key) != priv_key_len)
200
+ return EDHOC_ERROR_CRYPTO_FAILURE;
201
+
202
+ uint8_t e[F25519_SIZE] = { 0 };
203
+ f25519_copy(e, priv_key);
204
+ c25519_prepare(e);
205
+ c25519_smult(shr_sec, peer_pub_key, e);
206
+
207
+ *shr_sec_len = X25519_SHARED_SIZE;
208
+
209
+ return EDHOC_SUCCESS;
210
+ }
211
+
212
+ int cipher_suite_0_signature(void *user_ctx, const void *kid,
213
+ const uint8_t *input, size_t input_len,
214
+ uint8_t *sign, size_t sign_size, size_t *sign_len)
215
+ {
216
+ (void)user_ctx;
217
+
218
+ if (NULL == kid || NULL == input || 0 == input_len || NULL == sign ||
219
+ 0 == sign_size || NULL == sign_len)
220
+ return EDHOC_ERROR_INVALID_ARGUMENT;
221
+
222
+ if (ED25519_SIGNATURE_SIZE != sign_size)
223
+ return EDHOC_ERROR_CRYPTO_FAILURE;
224
+
225
+ size_t priv_key_len = 0;
226
+ uint8_t priv_key[ED25519_PRIVATE_KEY_SIZE] = { 0 };
227
+
228
+ const psa_key_id_t *psa_kid = kid;
229
+ const psa_status_t ret = psa_export_key(
230
+ *psa_kid, priv_key, ARRAY_SIZE(priv_key), &priv_key_len);
231
+
232
+ if (PSA_SUCCESS != ret || ARRAY_SIZE(priv_key) != priv_key_len)
233
+ return EDHOC_ERROR_CRYPTO_FAILURE;
234
+
235
+ compact_ed25519_sign(sign, priv_key, input, input_len);
236
+ *sign_len = ED25519_SIGNATURE_SIZE;
237
+
238
+ return EDHOC_SUCCESS;
239
+ }
240
+
241
+ int cipher_suite_0_verify(void *user_ctx, const void *kid, const uint8_t *input,
242
+ size_t input_len, const uint8_t *sign,
243
+ size_t sign_len)
244
+ {
245
+ (void)user_ctx;
246
+
247
+ if (NULL == kid || NULL == input || 0 == input_len || NULL == sign ||
248
+ 0 == sign_len)
249
+ return EDHOC_ERROR_INVALID_ARGUMENT;
250
+
251
+ if (ED25519_SIGNATURE_SIZE != sign_len)
252
+ return EDHOC_ERROR_CRYPTO_FAILURE;
253
+
254
+ size_t pub_key_len = 0;
255
+ uint8_t pub_key[ED25519_PUBLIC_KEY_SIZE] = { 0 };
256
+
257
+ const psa_key_id_t *psa_kid = kid;
258
+ const psa_status_t ret = psa_export_key(
259
+ *psa_kid, pub_key, ARRAY_SIZE(pub_key), &pub_key_len);
260
+
261
+ if (PSA_SUCCESS != ret || ARRAY_SIZE(pub_key) != pub_key_len)
262
+ return EDHOC_ERROR_CRYPTO_FAILURE;
263
+
264
+ const bool verified =
265
+ compact_ed25519_verify(sign, pub_key, input, input_len);
266
+
267
+ return (true == verified) ? EDHOC_SUCCESS : EDHOC_ERROR_CRYPTO_FAILURE;
268
+ }
269
+
270
+ int cipher_suite_0_extract(void *user_ctx, const void *kid, const uint8_t *salt,
271
+ size_t salt_len, uint8_t *prk, size_t prk_size,
272
+ size_t *prk_len)
273
+ {
274
+ (void)user_ctx;
275
+
276
+ if (NULL == kid || NULL == salt || 0 == salt_len || NULL == prk ||
277
+ 0 == prk_size || NULL == prk_len)
278
+ return EDHOC_ERROR_INVALID_ARGUMENT;
279
+
280
+ psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
281
+
282
+ const psa_key_id_t *psa_kid = kid;
283
+ psa_key_derivation_operation_t ctx = PSA_KEY_DERIVATION_OPERATION_INIT;
284
+
285
+ psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
286
+ ret = psa_get_key_attributes(*psa_kid, &attr);
287
+ if (PSA_SUCCESS != ret)
288
+ goto psa_error;
289
+
290
+ ret = psa_key_derivation_setup(&ctx, psa_get_key_algorithm(&attr));
291
+ if (PSA_SUCCESS != ret)
292
+ goto psa_error;
293
+
294
+ ret = psa_key_derivation_input_bytes(
295
+ &ctx, PSA_KEY_DERIVATION_INPUT_SALT, salt, salt_len);
296
+ if (PSA_SUCCESS != ret)
297
+ goto psa_error;
298
+
299
+ ret = psa_key_derivation_input_key(
300
+ &ctx, PSA_KEY_DERIVATION_INPUT_SECRET, *psa_kid);
301
+ if (PSA_SUCCESS != ret)
302
+ goto psa_error;
303
+
304
+ ret = psa_key_derivation_set_capacity(&ctx, prk_size);
305
+ if (PSA_SUCCESS != ret)
306
+ goto psa_error;
307
+
308
+ ret = psa_key_derivation_output_bytes(&ctx, prk, prk_size);
309
+ if (PSA_SUCCESS != ret)
310
+ goto psa_error;
311
+
312
+ *prk_len = prk_size;
313
+ psa_key_derivation_abort(&ctx);
314
+
315
+ return EDHOC_SUCCESS;
316
+
317
+ psa_error:
318
+ psa_key_derivation_abort(&ctx);
319
+ return EDHOC_ERROR_CRYPTO_FAILURE;
320
+ }
321
+
322
+ int cipher_suite_0_expand(void *user_ctx, const void *kid, const uint8_t *info,
323
+ size_t info_len, uint8_t *okm, size_t okm_len)
324
+ {
325
+ (void)user_ctx;
326
+
327
+ if (NULL == kid || NULL == info || 0 == info_len || NULL == okm ||
328
+ 0 == okm_len)
329
+ return EDHOC_ERROR_INVALID_ARGUMENT;
330
+
331
+ psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
332
+
333
+ const psa_key_id_t *psa_kid = kid;
334
+ psa_key_derivation_operation_t ctx = PSA_KEY_DERIVATION_OPERATION_INIT;
335
+
336
+ psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
337
+ ret = psa_get_key_attributes(*psa_kid, &attr);
338
+ if (PSA_SUCCESS != ret)
339
+ goto psa_error;
340
+
341
+ ret = psa_key_derivation_setup(&ctx, psa_get_key_algorithm(&attr));
342
+ if (PSA_SUCCESS != ret)
343
+ goto psa_error;
344
+
345
+ ret = psa_key_derivation_input_key(
346
+ &ctx, PSA_KEY_DERIVATION_INPUT_SECRET, *psa_kid);
347
+ if (PSA_SUCCESS != ret)
348
+ goto psa_error;
349
+
350
+ ret = psa_key_derivation_input_bytes(
351
+ &ctx, PSA_KEY_DERIVATION_INPUT_INFO, info, info_len);
352
+ if (PSA_SUCCESS != ret)
353
+ goto psa_error;
354
+
355
+ ret = psa_key_derivation_set_capacity(&ctx, okm_len);
356
+ if (PSA_SUCCESS != ret)
357
+ goto psa_error;
358
+
359
+ ret = psa_key_derivation_output_bytes(&ctx, okm, okm_len);
360
+ if (PSA_SUCCESS != ret)
361
+ goto psa_error;
362
+
363
+ psa_key_derivation_abort(&ctx);
364
+ return EDHOC_SUCCESS;
365
+
366
+ psa_error:
367
+ psa_key_derivation_abort(&ctx);
368
+ return EDHOC_ERROR_CRYPTO_FAILURE;
369
+ }
370
+
371
+ int cipher_suite_0_encrypt(void *user_ctx, const void *kid,
372
+ const uint8_t *nonce, size_t nonce_len,
373
+ const uint8_t *ad, size_t ad_len,
374
+ const uint8_t *ptxt, size_t ptxt_len, uint8_t *ctxt,
375
+ size_t ctxt_size, size_t *ctxt_len)
376
+ {
377
+ (void)user_ctx;
378
+
379
+ /* Plaintext might be zero length buffer. */
380
+ if (NULL == kid || NULL == nonce || 0 == nonce_len || NULL == ad ||
381
+ 0 == ad_len || NULL == ctxt || 0 == ctxt_size || NULL == ctxt_len)
382
+ return EDHOC_ERROR_INVALID_ARGUMENT;
383
+
384
+ psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
385
+ const psa_key_id_t *psa_kid = kid;
386
+
387
+ psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
388
+ ret = psa_get_key_attributes(*psa_kid, &attr);
389
+
390
+ if (PSA_SUCCESS != ret)
391
+ return EDHOC_ERROR_CRYPTO_FAILURE;
392
+
393
+ ret = psa_aead_encrypt(*psa_kid, psa_get_key_algorithm(&attr), nonce,
394
+ nonce_len, ad, ad_len, ptxt, ptxt_len, ctxt,
395
+ ctxt_size, ctxt_len);
396
+
397
+ return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
398
+ EDHOC_ERROR_CRYPTO_FAILURE;
399
+ }
400
+
401
+ int cipher_suite_0_decrypt(void *user_ctx, const void *kid,
402
+ const uint8_t *nonce, size_t nonce_len,
403
+ const uint8_t *ad, size_t ad_len,
404
+ const uint8_t *ctxt, size_t ctxt_len, uint8_t *ptxt,
405
+ size_t ptxt_size, size_t *ptxt_len)
406
+ {
407
+ (void)user_ctx;
408
+
409
+ /* Plaintext might be zero length buffer. */
410
+ if (NULL == kid || NULL == nonce || 0 == nonce_len || NULL == ad ||
411
+ 0 == ad_len || NULL == ctxt || 0 == ctxt_len || NULL == ptxt_len)
412
+ return EDHOC_ERROR_INVALID_ARGUMENT;
413
+
414
+ psa_status_t ret = PSA_ERROR_GENERIC_ERROR;
415
+ const psa_key_id_t *psa_kid = kid;
416
+
417
+ psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
418
+ ret = psa_get_key_attributes(*psa_kid, &attr);
419
+
420
+ if (PSA_SUCCESS != ret)
421
+ return EDHOC_ERROR_CRYPTO_FAILURE;
422
+
423
+ ret = psa_aead_decrypt(*psa_kid, psa_get_key_algorithm(&attr), nonce,
424
+ nonce_len, ad, ad_len, ctxt, ctxt_len, ptxt,
425
+ ptxt_size, ptxt_len);
426
+
427
+ return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
428
+ EDHOC_ERROR_CRYPTO_FAILURE;
429
+ }
430
+
431
+ int cipher_suite_0_hash(void *user_ctx, const uint8_t *input, size_t input_len,
432
+ uint8_t *hash, size_t hash_size, size_t *hash_len)
433
+ {
434
+ (void)user_ctx;
435
+
436
+ if (NULL == input || 0 == input_len || NULL == hash || 0 == hash_size ||
437
+ NULL == hash_len)
438
+ return EDHOC_ERROR_INVALID_ARGUMENT;
439
+
440
+ const psa_status_t ret = psa_hash_compute(
441
+ PSA_ALG_SHA_256, input, input_len, hash, hash_size, hash_len);
442
+
443
+ return (PSA_SUCCESS == ret) ? EDHOC_SUCCESS :
444
+ EDHOC_ERROR_CRYPTO_FAILURE;
445
+ }