edhoc 1.0.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/README.md +170 -0
  2. package/binding.gyp +13 -11
  3. package/dist/crypto.d.ts +9 -2
  4. package/dist/crypto.d.ts.map +1 -1
  5. package/dist/crypto.js +112 -84
  6. package/dist/edhoc.d.ts +31 -9
  7. package/dist/edhoc.d.ts.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/x509credentials.d.ts +20 -0
  12. package/dist/x509credentials.d.ts.map +1 -0
  13. package/dist/x509credentials.js +140 -0
  14. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_decode.h +1 -1
  15. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_encode.h +1 -1
  16. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_types.h +1 -1
  17. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_decode.h +2 -2
  18. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_encode.h +2 -2
  19. package/external/libedhoc/backends/cbor/include/backend_cbor_edhoc_types.h +48 -43
  20. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_decode.h +1 -1
  21. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_encode.h +1 -1
  22. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_types.h +3 -3
  23. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_decode.h +1 -1
  24. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_encode.h +1 -1
  25. package/external/libedhoc/backends/cbor/include/backend_cbor_info_decode.h +1 -1
  26. package/external/libedhoc/backends/cbor/include/backend_cbor_info_encode.h +1 -1
  27. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_decode.h +1 -1
  28. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_encode.h +1 -1
  29. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_types.h +1 -1
  30. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_decode.h +1 -1
  31. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_encode.h +1 -1
  32. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_decode.h +1 -1
  33. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_encode.h +1 -1
  34. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_decode.h +1 -1
  35. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_encode.h +1 -1
  36. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_decode.h +1 -1
  37. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_encode.h +1 -1
  38. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_decode.h +1 -1
  39. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_encode.h +1 -1
  40. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_decode.h +1 -1
  41. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_encode.h +1 -1
  42. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_decode.h +1 -1
  43. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_encode.h +1 -1
  44. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_decode.h +3 -3
  45. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_encode.h +3 -3
  46. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_decode.h +1 -1
  47. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_encode.h +1 -1
  48. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_types.h +4 -4
  49. package/external/libedhoc/backends/cbor/include/backend_cbor_x509_types.h +93 -83
  50. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_decode.c +11 -20
  51. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_encode.c +11 -20
  52. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_decode.c +27 -32
  53. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_encode.c +27 -32
  54. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_decode.c +14 -23
  55. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_encode.c +14 -23
  56. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_decode.c +63 -52
  57. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_encode.c +62 -51
  58. package/external/libedhoc/backends/cbor/src/backend_cbor_info_decode.c +14 -23
  59. package/external/libedhoc/backends/cbor/src/backend_cbor_info_encode.c +14 -23
  60. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_decode.c +11 -20
  61. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_encode.c +11 -20
  62. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_decode.c +54 -51
  63. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_encode.c +54 -51
  64. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_decode.c +11 -20
  65. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_encode.c +11 -20
  66. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_decode.c +11 -20
  67. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_encode.c +11 -20
  68. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_decode.c +11 -20
  69. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_encode.c +11 -20
  70. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_decode.c +36 -37
  71. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_encode.c +36 -37
  72. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_decode.c +103 -80
  73. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_encode.c +102 -79
  74. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_decode.c +99 -76
  75. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_encode.c +98 -75
  76. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_decode.c +40 -41
  77. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_encode.c +40 -41
  78. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_decode.c +15 -24
  79. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_encode.c +15 -24
  80. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.c +31 -0
  81. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.h +10 -0
  82. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.c +18 -0
  83. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.h +9 -0
  84. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode.c +69 -0
  85. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode2.c +38 -0
  86. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  87. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  88. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.c +31 -0
  89. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.h +10 -0
  90. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.c +18 -0
  91. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.h +9 -0
  92. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode.c +71 -0
  93. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode2.c +40 -0
  94. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +16 -0
  95. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +18 -0
  96. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/all_tests.c +19 -0
  97. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.c +17 -0
  98. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.h +19 -0
  99. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.c +31 -0
  100. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.h +10 -0
  101. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.c +18 -0
  102. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.h +9 -0
  103. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode.c +69 -0
  104. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode2.c +38 -0
  105. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.c +31 -0
  106. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.h +10 -0
  107. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.c +18 -0
  108. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.h +9 -0
  109. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode.c +70 -0
  110. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode2.c +42 -0
  111. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  112. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  113. package/external/libedhoc/externals/Unity/examples/unity_config.h +251 -0
  114. package/external/libedhoc/externals/Unity/extras/bdd/src/unity_bdd.h +44 -0
  115. package/external/libedhoc/externals/Unity/extras/bdd/test/test_bdd.c +129 -0
  116. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.c +310 -0
  117. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.h +95 -0
  118. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  119. package/external/libedhoc/externals/Unity/extras/fixture/test/main/AllTests.c +20 -0
  120. package/external/libedhoc/externals/Unity/extras/fixture/test/template_fixture_tests.c +40 -0
  121. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_Test.c +246 -0
  122. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_TestRunner.c +33 -0
  123. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.c +203 -0
  124. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.h +61 -0
  125. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_Test.c +326 -0
  126. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_TestRunner.c +50 -0
  127. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.c +57 -0
  128. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.h +17 -0
  129. package/external/libedhoc/externals/Unity/src/unity.c +2501 -0
  130. package/external/libedhoc/externals/Unity/src/unity.h +698 -0
  131. package/external/libedhoc/externals/Unity/src/unity_internals.h +1183 -0
  132. package/external/libedhoc/externals/Unity/test/expectdata/testsample_cmd.c +61 -0
  133. package/external/libedhoc/externals/Unity/test/expectdata/testsample_def.c +57 -0
  134. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.c +55 -0
  135. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.h +15 -0
  136. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_cmd.c +80 -0
  137. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_def.c +76 -0
  138. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.c +75 -0
  139. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.h +13 -0
  140. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new1.c +89 -0
  141. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new2.c +89 -0
  142. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_param.c +77 -0
  143. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run1.c +89 -0
  144. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run2.c +89 -0
  145. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_yaml.c +90 -0
  146. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new1.c +67 -0
  147. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new2.c +70 -0
  148. package/external/libedhoc/externals/Unity/test/expectdata/testsample_param.c +58 -0
  149. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run1.c +67 -0
  150. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run2.c +70 -0
  151. package/external/libedhoc/externals/Unity/test/expectdata/testsample_yaml.c +71 -0
  152. package/external/libedhoc/externals/Unity/test/testdata/CException.h +18 -0
  153. package/external/libedhoc/externals/Unity/test/testdata/Defs.h +16 -0
  154. package/external/libedhoc/externals/Unity/test/testdata/cmock.h +21 -0
  155. package/external/libedhoc/externals/Unity/test/testdata/mockMock.h +20 -0
  156. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGenerator.c +204 -0
  157. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorSmall.c +73 -0
  158. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorWithMocks.c +200 -0
  159. package/external/libedhoc/externals/Unity/test/tests/self_assessment_utils.h +151 -0
  160. package/external/libedhoc/externals/Unity/test/tests/test_unity_arrays.c +2941 -0
  161. package/external/libedhoc/externals/Unity/test/tests/test_unity_core.c +375 -0
  162. package/external/libedhoc/externals/Unity/test/tests/test_unity_doubles.c +1285 -0
  163. package/external/libedhoc/externals/Unity/test/tests/test_unity_floats.c +1395 -0
  164. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers.c +2863 -0
  165. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers_64.c +783 -0
  166. package/external/libedhoc/externals/Unity/test/tests/test_unity_memory.c +82 -0
  167. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterized.c +309 -0
  168. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterizedDemo.c +28 -0
  169. package/external/libedhoc/externals/Unity/test/tests/test_unity_strings.c +330 -0
  170. package/external/libedhoc/externals/Unity/test/tests/types_for_test.h +21 -0
  171. package/external/libedhoc/externals/zcbor/include/zcbor_common.h +147 -60
  172. package/external/libedhoc/externals/zcbor/include/zcbor_decode.h +291 -202
  173. package/external/libedhoc/externals/zcbor/include/zcbor_encode.h +100 -156
  174. package/external/libedhoc/externals/zcbor/include/zcbor_print.h +165 -0
  175. package/external/libedhoc/externals/zcbor/samples/hello_world/src/main.c +1 -1
  176. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_decode.h +1 -1
  177. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_encode.h +1 -1
  178. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_types.h +4 -4
  179. package/external/libedhoc/externals/zcbor/samples/pet/src/main.c +4 -4
  180. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_decode.c +15 -24
  181. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_encode.c +14 -23
  182. package/external/libedhoc/externals/zcbor/src/zcbor_common.c +202 -29
  183. package/external/libedhoc/externals/zcbor/src/zcbor_decode.c +633 -173
  184. package/external/libedhoc/externals/zcbor/src/zcbor_encode.c +71 -184
  185. package/external/libedhoc/externals/zcbor/tests/decode/test1_suit_old_formats/src/main.c +152 -153
  186. package/external/libedhoc/externals/zcbor/tests/decode/test2_suit/src/main.c +64 -64
  187. package/external/libedhoc/externals/zcbor/tests/decode/test3_simple/src/main.c +15 -16
  188. package/external/libedhoc/externals/zcbor/tests/decode/test5_corner_cases/src/main.c +228 -84
  189. package/external/libedhoc/externals/zcbor/tests/decode/test7_suit9_simple/src/main.c +9 -9
  190. package/external/libedhoc/externals/zcbor/tests/decode/test8_suit12/src/main.c +0 -1
  191. package/external/libedhoc/externals/zcbor/tests/decode/test9_manifest14/src/main.c +172 -173
  192. package/external/libedhoc/externals/zcbor/tests/encode/test1_suit/src/main.c +73 -73
  193. package/external/libedhoc/externals/zcbor/tests/encode/test2_simple/src/main.c +1 -2
  194. package/external/libedhoc/externals/zcbor/tests/encode/test3_corner_cases/src/main.c +83 -56
  195. package/external/libedhoc/externals/zcbor/tests/encode/test4_senml/src/main.c +15 -16
  196. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_everything.c +12 -0
  197. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_manifest12.c +69 -69
  198. package/external/libedhoc/externals/zcbor/tests/unit/test1_unit_tests/src/main.c +448 -55
  199. package/external/libedhoc/externals/zcbor/tests/unit/test3_float16/src/main.c +49 -48
  200. package/external/libedhoc/include/edhoc.h +348 -54
  201. package/external/libedhoc/include/edhoc_common.h +289 -0
  202. package/external/libedhoc/include/edhoc_context.h +60 -35
  203. package/external/libedhoc/include/edhoc_credentials.h +55 -7
  204. package/external/libedhoc/include/edhoc_crypto.h +10 -10
  205. package/external/libedhoc/include/edhoc_ead.h +13 -10
  206. package/external/libedhoc/include/edhoc_macros.h +20 -11
  207. package/external/libedhoc/include/edhoc_values.h +2 -2
  208. package/external/libedhoc/library/edhoc.c +70 -36
  209. package/external/libedhoc/library/edhoc_common.c +1314 -0
  210. package/external/libedhoc/library/edhoc_exporter.c +45 -46
  211. package/external/libedhoc/library/edhoc_message_1.c +107 -72
  212. package/external/libedhoc/library/edhoc_message_2.c +396 -1693
  213. package/external/libedhoc/library/edhoc_message_3.c +465 -1656
  214. package/external/libedhoc/library/edhoc_message_4.c +93 -91
  215. package/external/libedhoc/library/edhoc_message_error.c +41 -41
  216. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_0.h → cipher_suite_0.h} +131 -134
  217. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_2.h → cipher_suite_2.h} +139 -140
  218. package/external/libedhoc/tests/include/{edhoc_trace_1/test_vector_1.h → test_vector_rfc9529_chapter_2.h} +786 -738
  219. package/external/libedhoc/tests/include/{edhoc_trace_2/test_vector_2.h → test_vector_rfc9529_chapter_3.h} +14 -10
  220. package/external/libedhoc/tests/include/{x509_chain_cs_0/test_vector_x5chain_cs_0.h → test_vector_x5chain_sign_keys_suite_0.h} +137 -140
  221. package/external/libedhoc/tests/include/{x509_chain_cs_2/test_vector_x5chain_cs_2.h → test_vector_x5chain_sign_keys_suite_2.h} +7 -8
  222. package/external/libedhoc/tests/include/{x509_chain_cs_2_static_dh/test_vector_x5chain_cs_2_static_dh.h → test_vector_x5chain_static_dh_keys_suite_2.h} +7 -8
  223. package/external/libedhoc/tests/include/{x509_hash_cs_2/test_vector_x5t_cs_2.h → test_vector_x5t_sign_keys_suite_2.h} +6 -7
  224. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_0.c → cipher_suite_0.c} +445 -447
  225. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_2.c → cipher_suite_2.c} +600 -600
  226. package/external/libedhoc/tests/src/module_test_api.c +430 -0
  227. package/external/libedhoc/tests/src/module_test_cipher_suite_0.c +395 -0
  228. package/external/libedhoc/tests/src/module_test_cipher_suite_2.c +392 -0
  229. package/external/libedhoc/tests/src/{error_message/test_edhoc_error_message.c → module_test_error_message.c} +94 -69
  230. package/external/libedhoc/tests/src/module_test_main.c +49 -0
  231. package/external/libedhoc/tests/src/{cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.c → module_test_rfc9528_suites_negotiation.c} +224 -227
  232. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_2.c +2681 -0
  233. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_3.c +1635 -0
  234. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_0.c +1135 -0
  235. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_2.c +1249 -0
  236. package/external/libedhoc/tests/src/module_test_x5chain_static_dh_keys_suite_2.c +798 -0
  237. package/external/libedhoc/tests/src/module_test_x5t_sign_keys_suite_2.c +956 -0
  238. package/include/EdhocComposeAsyncWorker.h +8 -6
  239. package/include/EdhocCredentialManager.h +16 -11
  240. package/include/EdhocCryptoManager.h +28 -21
  241. package/include/EdhocEadManager.h +3 -6
  242. package/include/{EdhocExportAsyncWorker.h → EdhocExportOscoreAsyncWorker.h} +20 -17
  243. package/include/EdhocKeyExporterAsyncWorker.h +76 -0
  244. package/include/EdhocKeyUpdateAsyncWorker.h +72 -0
  245. package/include/EdhocProcessAsyncWorker.h +14 -10
  246. package/include/LibEDHOC.h +44 -20
  247. package/include/UserContext.h +7 -9
  248. package/include/Utils.h +31 -27
  249. package/package.json +14 -3
  250. package/prebuilds/android-arm/edhoc.armv7.node +0 -0
  251. package/prebuilds/android-arm64/edhoc.armv8.node +0 -0
  252. package/prebuilds/darwin-arm64/edhoc.node +0 -0
  253. package/prebuilds/darwin-x64/edhoc.node +0 -0
  254. package/prebuilds/linux-arm/edhoc.armv6.node +0 -0
  255. package/prebuilds/linux-arm/edhoc.armv7.node +0 -0
  256. package/prebuilds/linux-arm64/edhoc.armv8.node +0 -0
  257. package/prebuilds/linux-x64/edhoc.glibc.node +0 -0
  258. package/prebuilds/linux-x64/edhoc.musl.node +0 -0
  259. package/prebuilds/win32-ia32/edhoc.node +0 -0
  260. package/prebuilds/win32-x64/edhoc.node +0 -0
  261. package/src/EdhocComposeAsyncWorker.cpp +18 -35
  262. package/src/EdhocCredentialManager.cpp +160 -187
  263. package/src/EdhocCryptoManager.cpp +386 -586
  264. package/src/EdhocEadManager.cpp +10 -18
  265. package/src/EdhocExportOscoreAsyncWorker.cpp +77 -0
  266. package/src/EdhocKeyExporterAsyncWorker.cpp +49 -0
  267. package/src/EdhocKeyUpdateAsyncWorker.cpp +41 -0
  268. package/src/EdhocProcessAsyncWorker.cpp +72 -19
  269. package/src/LibEDHOC.cpp +213 -174
  270. package/src/Suites.cpp +39 -72
  271. package/src/Utils.cpp +32 -56
  272. package/test/basic.test.ts +64 -0
  273. package/test/vectors.test.ts +111 -0
  274. package/dist/credentials.d.ts +0 -16
  275. package/dist/credentials.d.ts.map +0 -1
  276. package/dist/credentials.js +0 -84
  277. package/external/libedhoc/externals/zcbor/include/zcbor_debug.h +0 -69
  278. package/external/libedhoc/tests/include/cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.h +0 -37
  279. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_0.h +0 -48
  280. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_2.h +0 -48
  281. package/external/libedhoc/tests/include/edhoc_trace_1/authentication_credentials_1.h +0 -60
  282. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_1.h +0 -208
  283. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_ead_1.h +0 -59
  284. package/external/libedhoc/tests/include/edhoc_trace_2/authentication_credentials_2.h +0 -60
  285. package/external/libedhoc/tests/include/edhoc_trace_2/test_edhoc_handshake_2.h +0 -199
  286. package/external/libedhoc/tests/include/error_message/test_edhoc_error_message.h +0 -48
  287. package/external/libedhoc/tests/include/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.h +0 -92
  288. package/external/libedhoc/tests/include/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.h +0 -96
  289. package/external/libedhoc/tests/include/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.h +0 -58
  290. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.h +0 -56
  291. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.h +0 -57
  292. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.h +0 -59
  293. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.h +0 -57
  294. package/external/libedhoc/tests/include/x509_hash_cs_2/authentication_credentials_x5t_cs_2.h +0 -60
  295. package/external/libedhoc/tests/include/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.h +0 -57
  296. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_0.c +0 -475
  297. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_2.c +0 -473
  298. package/external/libedhoc/tests/src/edhoc_trace_1/authentication_credentials_1.c +0 -252
  299. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_1.c +0 -1829
  300. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_ead_1.c +0 -1247
  301. package/external/libedhoc/tests/src/edhoc_trace_2/authentication_credentials_2.c +0 -170
  302. package/external/libedhoc/tests/src/edhoc_trace_2/test_edhoc_handshake_2.c +0 -1783
  303. package/external/libedhoc/tests/src/tests.c +0 -228
  304. package/external/libedhoc/tests/src/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.c +0 -332
  305. package/external/libedhoc/tests/src/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.c +0 -936
  306. package/external/libedhoc/tests/src/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.c +0 -166
  307. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.c +0 -587
  308. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.c +0 -917
  309. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.c +0 -186
  310. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.c +0 -743
  311. package/external/libedhoc/tests/src/x509_hash_cs_2/authentication_credentials_x5t_cs_2.c +0 -261
  312. package/external/libedhoc/tests/src/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.c +0 -854
  313. package/src/EdhocExportAsyncWorker.cpp +0 -82
@@ -0,0 +1,956 @@
1
+ /**
2
+ * \file module_test_x5t_sign_keys_suite_2.c
3
+ * \author Kamil Kielbasa
4
+ * \brief Module tests for EDHOC handshake with:
5
+ * - X.509 hash.
6
+ * - signature keys.
7
+ * - cipher suite 2.
8
+ * - single EAD token.
9
+ * \version 0.6
10
+ * \date 2024-08-05
11
+ *
12
+ * \copyright Copyright (c) 2024
13
+ *
14
+ */
15
+
16
+ /* Include files ----------------------------------------------------------- */
17
+
18
+ /* Test vector header: */
19
+ #include "test_vector_x5t_sign_keys_suite_2.h"
20
+
21
+ /* Cipher suite 2 header: */
22
+ #include "cipher_suite_2.h"
23
+
24
+ /* Standard library headers: */
25
+ #include <stdio.h>
26
+ #include <string.h>
27
+ #include <stdint.h>
28
+ #include <stddef.h>
29
+ #include <stdbool.h>
30
+
31
+ /* EDHOC header: */
32
+ #define EDHOC_ALLOW_PRIVATE_ACCESS
33
+ #include <edhoc.h>
34
+
35
+ /* PSA crypto header: */
36
+ #include <psa/crypto.h>
37
+
38
+ /* Unity headers: */
39
+ #include <unity.h>
40
+ #include <unity_fixture.h>
41
+
42
+ /* Module defines ---------------------------------------------------------- */
43
+
44
+ #define OSCORE_MASTER_SECRET_LENGTH (16)
45
+ #define OSCORE_MASTER_SALT_LENGTH (8)
46
+ #define DH_KEY_AGREEMENT_LENGTH (32)
47
+ #define ENTROPY_LENGTH (16)
48
+ #define EAD_TOKEN_BUFFER_LEN (300)
49
+ #define MAX_NR_OF_EAD_TOKENS (3)
50
+ #define COSE_ALG_SHA_256_64 (-15)
51
+ #define CBOR_ENC_COSE_ALG_SHA_256_64 (0x2e)
52
+
53
+ /* Module types and type definitiones -------------------------------------- */
54
+
55
+ struct ead_token_buf {
56
+ int32_t label;
57
+ uint8_t value[EAD_TOKEN_BUFFER_LEN];
58
+ size_t value_len;
59
+ };
60
+
61
+ struct ead_context {
62
+ enum edhoc_message msg;
63
+ size_t recv_tokens;
64
+ struct ead_token_buf token[MAX_NR_OF_EAD_TOKENS];
65
+ };
66
+
67
+ /* Module interface variables and constants -------------------------------- */
68
+ /* Static function declarations -------------------------------------------- */
69
+
70
+ /**
71
+ * \brief Authentication credentials fetch callback for initiator.
72
+ */
73
+ static int auth_cred_fetch_init(void *user_ctx,
74
+ struct edhoc_auth_creds *auth_cred);
75
+
76
+ /**
77
+ * \brief Authentication credentials fetch callback for responder.
78
+ */
79
+ static int auth_cred_fetch_resp(void *user_ctx,
80
+ struct edhoc_auth_creds *auth_cred);
81
+
82
+ /**
83
+ * \brief Authentication credentials verify callback for initiator.
84
+ */
85
+ static int auth_cred_verify_init(void *user_ctx,
86
+ struct edhoc_auth_creds *auth_cred,
87
+ const uint8_t **pub_key, size_t *pub_key_len);
88
+
89
+ /**
90
+ * \brief Authentication credentials verify callback for responder.
91
+ */
92
+ static int auth_cred_verify_resp(void *user_ctx,
93
+ struct edhoc_auth_creds *auth_cred,
94
+ const uint8_t **pub_key, size_t *pub_key_len);
95
+
96
+ /**
97
+ * \brief Example EAD compose for single token.
98
+ */
99
+ static int ead_compose_single_token(void *user_context,
100
+ enum edhoc_message message,
101
+ struct edhoc_ead_token *ead_token,
102
+ size_t ead_token_size,
103
+ size_t *ead_token_len);
104
+
105
+ /**
106
+ * \brief Example EAD process for single token.
107
+ */
108
+ static int ead_process_single_token(void *user_context,
109
+ enum edhoc_message message,
110
+ const struct edhoc_ead_token *ead_token,
111
+ size_t ead_token_size);
112
+
113
+ /**
114
+ * \brief Helper function for printing arrays.
115
+ */
116
+ static inline void print_array(void *user_context, const char *name,
117
+ const uint8_t *buffer, size_t buffer_length);
118
+
119
+ /* Static variables and constants ------------------------------------------ */
120
+
121
+ static int ret = EDHOC_ERROR_GENERIC_ERROR;
122
+ static enum edhoc_error_code error_code_recv =
123
+ EDHOC_ERROR_CODE_UNSPECIFIED_ERROR;
124
+
125
+ static struct ead_context init_ead_ctx = { 0 };
126
+ static struct edhoc_context edhoc_initiator_context = { 0 };
127
+ static struct edhoc_context *init_ctx = &edhoc_initiator_context;
128
+
129
+ static struct ead_context resp_ead_ctx = { 0 };
130
+ static struct edhoc_context edhoc_responder_context = { 0 };
131
+ static struct edhoc_context *resp_ctx = &edhoc_responder_context;
132
+
133
+ static const uint8_t ead_val_msg_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
134
+ static const uint8_t ead_val_msg_2[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
135
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
136
+ 0x0c, 0x0d, 0x0e, 0x0f };
137
+ static const uint8_t ead_val_msg_3[] = {
138
+ 0x55, 0x9a, 0xea, 0xd0, 0x82, 0x64, 0xd5, 0x79, 0x5d, 0x39, 0x09, 0x71,
139
+ 0x8c, 0xdd, 0x05, 0xab, 0xd4, 0x95, 0x72, 0xe8, 0x4f, 0xe5, 0x55, 0x90,
140
+ 0xee, 0xf3, 0x1a, 0x88, 0xa0, 0x8f, 0xdf, 0xfd, 0x3c, 0xb2, 0x5f, 0x25,
141
+ 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a,
142
+ 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56,
143
+ 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18,
144
+ 0x58, 0x65, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
145
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
146
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
147
+ };
148
+
149
+ static const uint8_t ead_val_msg_4[] = { 0xff, 0xee, 0xdd, 0xcc,
150
+ 0xbb, 0xaa, 0x00 };
151
+
152
+ static const struct edhoc_ead_token ead_single_token_msg_1 = {
153
+ .label = 0,
154
+ .value = ead_val_msg_1,
155
+ .value_len = ARRAY_SIZE(ead_val_msg_1),
156
+ };
157
+
158
+ static const struct edhoc_ead_token ead_single_token_msg_2 = {
159
+ .label = 24,
160
+ .value = ead_val_msg_2,
161
+ .value_len = ARRAY_SIZE(ead_val_msg_2),
162
+ };
163
+
164
+ static const struct edhoc_ead_token ead_single_token_msg_3 = {
165
+ .label = 65535,
166
+ .value = ead_val_msg_3,
167
+ .value_len = ARRAY_SIZE(ead_val_msg_3),
168
+ };
169
+
170
+ static const struct edhoc_ead_token ead_single_token_msg_4 = {
171
+ .label = -830,
172
+ .value = ead_val_msg_4,
173
+ .value_len = ARRAY_SIZE(ead_val_msg_4),
174
+ };
175
+
176
+ static const struct edhoc_cipher_suite edhoc_cipher_suite_2 = {
177
+ .value = 2,
178
+ .aead_key_length = 16,
179
+ .aead_tag_length = 8,
180
+ .aead_iv_length = 13,
181
+ .hash_length = 32,
182
+ .mac_length = 32,
183
+ .ecc_key_length = 32,
184
+ .ecc_sign_length = 64,
185
+ };
186
+
187
+ static const struct edhoc_keys edhoc_keys = {
188
+ .import_key = cipher_suite_2_key_import,
189
+ .destroy_key = cipher_suite_2_key_destroy,
190
+ };
191
+
192
+ static const struct edhoc_crypto edhoc_crypto = {
193
+ .make_key_pair = cipher_suite_2_make_key_pair,
194
+ .key_agreement = cipher_suite_2_key_agreement,
195
+ .signature = cipher_suite_2_signature,
196
+ .verify = cipher_suite_2_verify,
197
+ .extract = cipher_suite_2_extract,
198
+ .expand = cipher_suite_2_expand,
199
+ .encrypt = cipher_suite_2_encrypt,
200
+ .decrypt = cipher_suite_2_decrypt,
201
+ .hash = cipher_suite_2_hash,
202
+ };
203
+
204
+ static const struct edhoc_credentials edhoc_auth_cred_single_cert_mocked_init = {
205
+ .fetch = auth_cred_fetch_init,
206
+ .verify = auth_cred_verify_init,
207
+ };
208
+
209
+ static const struct edhoc_credentials edhoc_auth_cred_single_cert_mocked_resp = {
210
+ .fetch = auth_cred_fetch_resp,
211
+ .verify = auth_cred_verify_resp,
212
+ };
213
+
214
+ static const struct edhoc_ead edhoc_ead_single_token = {
215
+ .compose = ead_compose_single_token,
216
+ .process = ead_process_single_token,
217
+ };
218
+
219
+ /* Static function definitions --------------------------------------------- */
220
+
221
+ static int auth_cred_fetch_init(void *user_ctx,
222
+ struct edhoc_auth_creds *auth_cred)
223
+ {
224
+ (void)user_ctx;
225
+
226
+ if (NULL == auth_cred)
227
+ return EDHOC_ERROR_INVALID_ARGUMENT;
228
+
229
+ /**
230
+ * \brief Here we check algorithm for certificate fingerprint.
231
+ * - 0x2e is CBOR encoding of the integer -15.
232
+ */
233
+ if (CBOR_ENC_COSE_ALG_SHA_256_64 != CRED_I_thumbprint_alg)
234
+ return EDHOC_ERROR_INVALID_ARGUMENT;
235
+
236
+ auth_cred->label = EDHOC_COSE_HEADER_X509_HASH;
237
+ auth_cred->x509_hash.cert = CRED_I;
238
+ auth_cred->x509_hash.cert_len = ARRAY_SIZE(CRED_I);
239
+ auth_cred->x509_hash.cert_fp = CRED_I_thumbprint;
240
+ auth_cred->x509_hash.cert_fp_len = ARRAY_SIZE(CRED_I_thumbprint);
241
+ auth_cred->x509_hash.encode_type = EDHOC_ENCODE_TYPE_INTEGER;
242
+ auth_cred->x509_hash.alg_int = COSE_ALG_SHA_256_64;
243
+
244
+ const int ret = cipher_suite_2_key_import(NULL, EDHOC_KT_SIGNATURE,
245
+ SK_I, ARRAY_SIZE(SK_I),
246
+ auth_cred->priv_key_id);
247
+
248
+ if (EDHOC_SUCCESS != ret)
249
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
250
+
251
+ return EDHOC_SUCCESS;
252
+ }
253
+
254
+ static int auth_cred_fetch_resp(void *user_ctx,
255
+ struct edhoc_auth_creds *auth_cred)
256
+ {
257
+ (void)user_ctx;
258
+
259
+ if (NULL == auth_cred)
260
+ return EDHOC_ERROR_INVALID_ARGUMENT;
261
+
262
+ /**
263
+ * \brief Here we check algorithm for certificate fingerprint.
264
+ * - 0x2e is CBOR encoding of the integer -15.
265
+ */
266
+ if (CBOR_ENC_COSE_ALG_SHA_256_64 != CRED_R_thumbprint_alg)
267
+ return EDHOC_ERROR_INVALID_ARGUMENT;
268
+
269
+ auth_cred->label = EDHOC_COSE_HEADER_X509_HASH;
270
+ auth_cred->x509_hash.cert = CRED_R;
271
+ auth_cred->x509_hash.cert_len = ARRAY_SIZE(CRED_R);
272
+ auth_cred->x509_hash.cert_fp = CRED_R_thumbprint;
273
+ auth_cred->x509_hash.cert_fp_len = ARRAY_SIZE(CRED_R_thumbprint);
274
+ auth_cred->x509_hash.encode_type = EDHOC_ENCODE_TYPE_INTEGER;
275
+ auth_cred->x509_hash.alg_int = COSE_ALG_SHA_256_64;
276
+
277
+ const int ret = cipher_suite_2_key_import(NULL, EDHOC_KT_SIGNATURE,
278
+ SK_R, ARRAY_SIZE(SK_R),
279
+ auth_cred->priv_key_id);
280
+
281
+ if (EDHOC_SUCCESS != ret)
282
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
283
+
284
+ return EDHOC_SUCCESS;
285
+ }
286
+
287
+ static int auth_cred_verify_init(void *user_ctx,
288
+ struct edhoc_auth_creds *auth_cred,
289
+ const uint8_t **pub_key, size_t *pub_key_len)
290
+ {
291
+ (void)user_ctx;
292
+
293
+ if (NULL == auth_cred || NULL == pub_key || NULL == pub_key_len)
294
+ return EDHOC_ERROR_INVALID_ARGUMENT;
295
+
296
+ /**
297
+ * \brief Verify COSE header label value.
298
+ */
299
+ if (EDHOC_COSE_HEADER_X509_HASH != auth_cred->label)
300
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
301
+
302
+ /**
303
+ * \brief Verify received COSE IANA hash algorithm value.
304
+ */
305
+ if (EDHOC_ENCODE_TYPE_INTEGER != auth_cred->x509_hash.encode_type ||
306
+ COSE_ALG_SHA_256_64 != auth_cred->x509_hash.alg_int)
307
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
308
+
309
+ /**
310
+ * \brief Verify if received certificate fingerprint matches.
311
+ */
312
+ size_t hash_len = 0;
313
+ uint8_t hash[32] = { 0 };
314
+ const psa_status_t status =
315
+ psa_hash_compute(PSA_ALG_SHA_256, CRED_R, ARRAY_SIZE(CRED_R),
316
+ hash, ARRAY_SIZE(hash), &hash_len);
317
+
318
+ if (PSA_SUCCESS != status || ARRAY_SIZE(hash) != hash_len)
319
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
320
+
321
+ uint8_t cert_fp[8] = { 0 };
322
+ memcpy(cert_fp, hash, sizeof(cert_fp));
323
+
324
+ if (ARRAY_SIZE(cert_fp) != auth_cred->x509_hash.cert_fp_len)
325
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
326
+
327
+ if (0 != memcmp(cert_fp, auth_cred->x509_hash.cert_fp,
328
+ auth_cred->x509_hash.cert_fp_len))
329
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
330
+
331
+ /**
332
+ * \brief If successful then assign certificate and public key.
333
+ */
334
+ auth_cred->x509_hash.cert = CRED_R;
335
+ auth_cred->x509_hash.cert_len = ARRAY_SIZE(CRED_R);
336
+
337
+ *pub_key = PK_R;
338
+ *pub_key_len = ARRAY_SIZE(PK_R);
339
+
340
+ return EDHOC_SUCCESS;
341
+ }
342
+
343
+ static int auth_cred_verify_resp(void *user_ctx,
344
+ struct edhoc_auth_creds *auth_cred,
345
+ const uint8_t **pub_key, size_t *pub_key_len)
346
+ {
347
+ (void)user_ctx;
348
+
349
+ if (NULL == auth_cred || NULL == pub_key || NULL == pub_key_len)
350
+ return EDHOC_ERROR_INVALID_ARGUMENT;
351
+
352
+ /**
353
+ * \brief Verify COSE header label value.
354
+ */
355
+ if (EDHOC_COSE_HEADER_X509_HASH != auth_cred->label)
356
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
357
+
358
+ /**
359
+ * \brief Verify received COSE IANA hash algorithm value.
360
+ */
361
+ if (EDHOC_ENCODE_TYPE_INTEGER != auth_cred->x509_hash.encode_type ||
362
+ COSE_ALG_SHA_256_64 != auth_cred->x509_hash.alg_int)
363
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
364
+
365
+ /**
366
+ * \brief Verify if received certificate fingerprint matches.
367
+ */
368
+ size_t hash_len = 0;
369
+ uint8_t hash[32] = { 0 };
370
+ const psa_status_t status =
371
+ psa_hash_compute(PSA_ALG_SHA_256, CRED_I, ARRAY_SIZE(CRED_I),
372
+ hash, ARRAY_SIZE(hash), &hash_len);
373
+
374
+ if (PSA_SUCCESS != status || ARRAY_SIZE(hash) != hash_len)
375
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
376
+
377
+ uint8_t cert_fp[8] = { 0 };
378
+ memcpy(cert_fp, hash, sizeof(cert_fp));
379
+
380
+ if (ARRAY_SIZE(cert_fp) != auth_cred->x509_hash.cert_fp_len)
381
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
382
+
383
+ if (0 != memcmp(cert_fp, auth_cred->x509_hash.cert_fp,
384
+ auth_cred->x509_hash.cert_fp_len))
385
+ return EDHOC_ERROR_CREDENTIALS_FAILURE;
386
+
387
+ /**
388
+ * \brief If successful then assign certificate and public key.
389
+ */
390
+ auth_cred->x509_hash.cert = CRED_I;
391
+ auth_cred->x509_hash.cert_len = ARRAY_SIZE(CRED_I);
392
+
393
+ *pub_key = PK_I;
394
+ *pub_key_len = ARRAY_SIZE(PK_I);
395
+
396
+ return EDHOC_SUCCESS;
397
+ }
398
+
399
+ static int ead_compose_single_token(void *user_ctx, enum edhoc_message msg,
400
+ struct edhoc_ead_token *ead_token,
401
+ size_t ead_token_size,
402
+ size_t *ead_token_len)
403
+ {
404
+ if (NULL == user_ctx || NULL == ead_token || 0 == ead_token_size ||
405
+ NULL == ead_token_len)
406
+ return EDHOC_ERROR_EAD_PROCESS_FAILURE;
407
+
408
+ const struct edhoc_ead_token *token = NULL;
409
+
410
+ switch (msg) {
411
+ case EDHOC_MSG_1:
412
+ token = &ead_single_token_msg_1;
413
+ break;
414
+ case EDHOC_MSG_2:
415
+ token = &ead_single_token_msg_2;
416
+ break;
417
+ case EDHOC_MSG_3:
418
+ token = &ead_single_token_msg_3;
419
+ break;
420
+ case EDHOC_MSG_4:
421
+ token = &ead_single_token_msg_4;
422
+ break;
423
+ default:
424
+ return EDHOC_ERROR_EAD_COMPOSE_FAILURE;
425
+ }
426
+
427
+ ead_token[0] = *token;
428
+ *ead_token_len = 1;
429
+
430
+ struct ead_context *ead_ctx = user_ctx;
431
+
432
+ ead_ctx->msg = msg;
433
+ ead_ctx->recv_tokens = 1;
434
+
435
+ for (size_t i = 0; i < ead_ctx->recv_tokens; ++i) {
436
+ ead_ctx->token[i].label = ead_token[i].label;
437
+ ead_ctx->token[i].value_len = ead_token[i].value_len;
438
+ memcpy(ead_ctx->token[i].value, ead_token[i].value,
439
+ ead_token[i].value_len);
440
+ }
441
+
442
+ return EDHOC_SUCCESS;
443
+ }
444
+
445
+ static int ead_process_single_token(void *user_ctx, enum edhoc_message msg,
446
+ const struct edhoc_ead_token *ead_token,
447
+ size_t ead_token_size)
448
+ {
449
+ if (NULL == user_ctx || NULL == ead_token || 0 == ead_token_size)
450
+ return EDHOC_ERROR_EAD_PROCESS_FAILURE;
451
+
452
+ struct ead_context *ead_ctx = user_ctx;
453
+
454
+ ead_ctx->msg = msg;
455
+ ead_ctx->recv_tokens = ead_token_size;
456
+
457
+ for (size_t i = 0; i < ead_token_size; ++i) {
458
+ ead_ctx->token[i].label = ead_token[i].label;
459
+ ead_ctx->token[i].value_len = ead_token[i].value_len;
460
+ memcpy(ead_ctx->token[i].value, ead_token[i].value,
461
+ ead_token[i].value_len);
462
+ }
463
+
464
+ return EDHOC_SUCCESS;
465
+ }
466
+
467
+ static inline void print_array(void *user_context, const char *name,
468
+ const uint8_t *buffer, size_t buffer_length)
469
+ {
470
+ (void)user_context;
471
+
472
+ printf("%s:\tLEN( %zu )\n", name, buffer_length);
473
+
474
+ for (size_t i = 0; i < buffer_length; ++i) {
475
+ if (0 == i % 16 && i > 0) {
476
+ printf("\n");
477
+ }
478
+
479
+ printf("%02x ", buffer[i]);
480
+ }
481
+
482
+ printf("\n\n");
483
+ }
484
+
485
+ /* Module interface function definitions ----------------------------------- */
486
+
487
+ TEST_GROUP(x5t_sign_keys_suite_2);
488
+
489
+ TEST_SETUP(x5t_sign_keys_suite_2)
490
+ {
491
+ ret = psa_crypto_init();
492
+ TEST_ASSERT_EQUAL(PSA_SUCCESS, ret);
493
+
494
+ const enum edhoc_method methods[] = { METHOD };
495
+ const struct edhoc_cipher_suite cipher_suites[] = {
496
+ edhoc_cipher_suite_2,
497
+ };
498
+
499
+ const struct edhoc_connection_id init_cid = {
500
+ .encode_type = EDHOC_CID_TYPE_ONE_BYTE_INTEGER,
501
+ .int_value = (int8_t)C_I[0],
502
+ };
503
+
504
+ struct edhoc_connection_id resp_cid = {
505
+ .encode_type = EDHOC_CID_TYPE_BYTE_STRING,
506
+ .bstr_length = ARRAY_SIZE(C_R),
507
+ };
508
+ memcpy(&resp_cid.bstr_value, C_R, ARRAY_SIZE(C_R));
509
+
510
+ ret = edhoc_context_init(init_ctx);
511
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
512
+
513
+ ret = edhoc_set_methods(init_ctx, methods, ARRAY_SIZE(methods));
514
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
515
+
516
+ ret = edhoc_set_cipher_suites(init_ctx, cipher_suites,
517
+ ARRAY_SIZE(cipher_suites));
518
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
519
+
520
+ ret = edhoc_set_connection_id(init_ctx, &init_cid);
521
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
522
+
523
+ ret = edhoc_set_user_context(init_ctx, &init_ead_ctx);
524
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
525
+
526
+ ret = edhoc_bind_ead(init_ctx, &edhoc_ead_single_token);
527
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
528
+
529
+ ret = edhoc_bind_keys(init_ctx, &edhoc_keys);
530
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
531
+
532
+ ret = edhoc_bind_crypto(init_ctx, &edhoc_crypto);
533
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
534
+
535
+ ret = edhoc_bind_credentials(init_ctx,
536
+ &edhoc_auth_cred_single_cert_mocked_init);
537
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
538
+
539
+ ret = edhoc_context_init(resp_ctx);
540
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
541
+
542
+ ret = edhoc_set_methods(resp_ctx, methods, ARRAY_SIZE(methods));
543
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
544
+
545
+ ret = edhoc_set_cipher_suites(resp_ctx, cipher_suites,
546
+ ARRAY_SIZE(cipher_suites));
547
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
548
+
549
+ ret = edhoc_set_connection_id(resp_ctx, &resp_cid);
550
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
551
+
552
+ ret = edhoc_set_user_context(resp_ctx, &resp_ead_ctx);
553
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
554
+
555
+ ret = edhoc_bind_ead(resp_ctx, &edhoc_ead_single_token);
556
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
557
+
558
+ ret = edhoc_bind_keys(resp_ctx, &edhoc_keys);
559
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
560
+
561
+ ret = edhoc_bind_crypto(resp_ctx, &edhoc_crypto);
562
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
563
+
564
+ ret = edhoc_bind_credentials(resp_ctx,
565
+ &edhoc_auth_cred_single_cert_mocked_resp);
566
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
567
+
568
+ #if defined(TEST_TRACES)
569
+ init_ctx->logger = print_array;
570
+ resp_ctx->logger = print_array;
571
+ #endif
572
+ }
573
+
574
+ TEST_TEAR_DOWN(x5t_sign_keys_suite_2)
575
+ {
576
+ mbedtls_psa_crypto_free();
577
+
578
+ ret = edhoc_context_deinit(init_ctx);
579
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
580
+
581
+ ret = edhoc_context_deinit(resp_ctx);
582
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
583
+ }
584
+
585
+ TEST(x5t_sign_keys_suite_2, handshake)
586
+ {
587
+ uint8_t buffer[1000] = { 0 };
588
+
589
+ memset(&init_ead_ctx, 0, sizeof(init_ead_ctx));
590
+ memset(&resp_ead_ctx, 0, sizeof(resp_ead_ctx));
591
+
592
+ memset(buffer, 0, sizeof(buffer));
593
+ size_t msg_1_len = 0;
594
+ uint8_t *msg_1 = buffer;
595
+
596
+ /* EDHOC message 1 compose. */
597
+ ret = edhoc_message_1_compose(init_ctx, msg_1, ARRAY_SIZE(buffer),
598
+ &msg_1_len);
599
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
600
+ TEST_ASSERT_EQUAL(EDHOC_SM_WAIT_M2, init_ctx->status);
601
+ TEST_ASSERT_EQUAL(false, init_ctx->is_oscore_export_allowed);
602
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_INVALID, init_ctx->prk_state);
603
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_1, init_ctx->th_state);
604
+
605
+ ret = edhoc_error_get_code(init_ctx, &error_code_recv);
606
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
607
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
608
+
609
+ /* Verify EAD_1 compose. */
610
+ TEST_ASSERT_EQUAL(EDHOC_MSG_1, init_ead_ctx.msg);
611
+ TEST_ASSERT_EQUAL(1, init_ead_ctx.recv_tokens);
612
+ TEST_ASSERT_EQUAL(ead_single_token_msg_1.label,
613
+ init_ead_ctx.token[0].label);
614
+ TEST_ASSERT_EQUAL(ead_single_token_msg_1.value_len,
615
+ init_ead_ctx.token[0].value_len);
616
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_1.value,
617
+ init_ead_ctx.token[0].value,
618
+ init_ead_ctx.token[0].value_len);
619
+
620
+ /* EDHOC message 1 process. */
621
+ ret = edhoc_message_1_process(resp_ctx, msg_1, msg_1_len);
622
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
623
+ TEST_ASSERT_EQUAL(EDHOC_SM_RECEIVED_M1, resp_ctx->status);
624
+ TEST_ASSERT_EQUAL(false, resp_ctx->is_oscore_export_allowed);
625
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_1, resp_ctx->th_state);
626
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_INVALID, resp_ctx->prk_state);
627
+
628
+ ret = edhoc_error_get_code(resp_ctx, &error_code_recv);
629
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
630
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
631
+
632
+ TEST_ASSERT_EQUAL(EDHOC_CID_TYPE_ONE_BYTE_INTEGER,
633
+ resp_ctx->peer_cid.encode_type);
634
+ TEST_ASSERT_EQUAL((int8_t)C_I[0], resp_ctx->peer_cid.int_value);
635
+
636
+ /* Verify EAD_1 process. */
637
+ TEST_ASSERT_EQUAL(EDHOC_MSG_1, resp_ead_ctx.msg);
638
+ TEST_ASSERT_EQUAL(1, resp_ead_ctx.recv_tokens);
639
+ TEST_ASSERT_EQUAL(ead_single_token_msg_1.label,
640
+ resp_ead_ctx.token[0].label);
641
+ TEST_ASSERT_EQUAL(ead_single_token_msg_1.value_len,
642
+ resp_ead_ctx.token[0].value_len);
643
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_1.value,
644
+ resp_ead_ctx.token[0].value,
645
+ resp_ead_ctx.token[0].value_len);
646
+
647
+ memset(&init_ead_ctx, 0, sizeof(init_ead_ctx));
648
+ memset(&resp_ead_ctx, 0, sizeof(resp_ead_ctx));
649
+
650
+ memset(buffer, 0, sizeof(buffer));
651
+ size_t msg_2_len = 0;
652
+ uint8_t *msg_2 = buffer;
653
+
654
+ /* EDHOC message 2 compose. */
655
+ ret = edhoc_message_2_compose(resp_ctx, msg_2, ARRAY_SIZE(buffer),
656
+ &msg_2_len);
657
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
658
+ TEST_ASSERT_EQUAL(EDHOC_SM_WAIT_M3, resp_ctx->status);
659
+ TEST_ASSERT_EQUAL(false, resp_ctx->is_oscore_export_allowed);
660
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_3, resp_ctx->th_state);
661
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_3E2M, resp_ctx->prk_state);
662
+
663
+ ret = edhoc_error_get_code(resp_ctx, &error_code_recv);
664
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
665
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
666
+
667
+ /* Verify EAD_2 compose. */
668
+ TEST_ASSERT_EQUAL(EDHOC_MSG_2, resp_ead_ctx.msg);
669
+ TEST_ASSERT_EQUAL(1, resp_ead_ctx.recv_tokens);
670
+ TEST_ASSERT_EQUAL(ead_single_token_msg_2.label,
671
+ resp_ead_ctx.token[0].label);
672
+ TEST_ASSERT_EQUAL(ead_single_token_msg_2.value_len,
673
+ resp_ead_ctx.token[0].value_len);
674
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_2.value,
675
+ resp_ead_ctx.token[0].value,
676
+ resp_ead_ctx.token[0].value_len);
677
+
678
+ /* EDHOC message 2 process. */
679
+ ret = edhoc_message_2_process(init_ctx, msg_2, msg_2_len);
680
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
681
+ TEST_ASSERT_EQUAL(EDHOC_SM_VERIFIED_M2, init_ctx->status);
682
+ TEST_ASSERT_EQUAL(false, init_ctx->is_oscore_export_allowed);
683
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_3, init_ctx->th_state);
684
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_3E2M, init_ctx->prk_state);
685
+
686
+ ret = edhoc_error_get_code(init_ctx, &error_code_recv);
687
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
688
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
689
+
690
+ TEST_ASSERT_EQUAL(EDHOC_CID_TYPE_BYTE_STRING,
691
+ init_ctx->peer_cid.encode_type);
692
+ TEST_ASSERT_EQUAL(ARRAY_SIZE(C_R), init_ctx->peer_cid.bstr_length);
693
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(C_R, init_ctx->peer_cid.bstr_value,
694
+ init_ctx->peer_cid.bstr_length);
695
+
696
+ /* Verify EAD_2 process. */
697
+ TEST_ASSERT_EQUAL(EDHOC_MSG_2, init_ead_ctx.msg);
698
+ TEST_ASSERT_EQUAL(1, init_ead_ctx.recv_tokens);
699
+ TEST_ASSERT_EQUAL(ead_single_token_msg_2.label,
700
+ init_ead_ctx.token[0].label);
701
+ TEST_ASSERT_EQUAL(ead_single_token_msg_2.value_len,
702
+ init_ead_ctx.token[0].value_len);
703
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_2.value,
704
+ init_ead_ctx.token[0].value,
705
+ init_ead_ctx.token[0].value_len);
706
+
707
+ TEST_ASSERT_EQUAL(DH_KEY_AGREEMENT_LENGTH, init_ctx->dh_secret_len);
708
+ TEST_ASSERT_EQUAL(DH_KEY_AGREEMENT_LENGTH, resp_ctx->dh_secret_len);
709
+ TEST_ASSERT_EQUAL(init_ctx->dh_secret_len, resp_ctx->dh_secret_len);
710
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_ctx->dh_secret, resp_ctx->dh_secret,
711
+ DH_KEY_AGREEMENT_LENGTH);
712
+
713
+ memset(&init_ead_ctx, 0, sizeof(init_ead_ctx));
714
+ memset(&resp_ead_ctx, 0, sizeof(resp_ead_ctx));
715
+
716
+ memset(buffer, 0, sizeof(buffer));
717
+ size_t msg_3_len = 0;
718
+ uint8_t *msg_3 = buffer;
719
+
720
+ /* EDHOC message 3 compose. */
721
+ ret = edhoc_message_3_compose(init_ctx, msg_3, ARRAY_SIZE(buffer),
722
+ &msg_3_len);
723
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
724
+ TEST_ASSERT_EQUAL(EDHOC_SM_COMPLETED, init_ctx->status);
725
+ TEST_ASSERT_EQUAL(true, init_ctx->is_oscore_export_allowed);
726
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_4, init_ctx->th_state);
727
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_4E3M, init_ctx->prk_state);
728
+
729
+ ret = edhoc_error_get_code(init_ctx, &error_code_recv);
730
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
731
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
732
+
733
+ /* Verify EAD_3 compose. */
734
+ TEST_ASSERT_EQUAL(EDHOC_MSG_3, init_ead_ctx.msg);
735
+ TEST_ASSERT_EQUAL(1, init_ead_ctx.recv_tokens);
736
+ TEST_ASSERT_EQUAL(ead_single_token_msg_3.label,
737
+ init_ead_ctx.token[0].label);
738
+ TEST_ASSERT_EQUAL(ead_single_token_msg_3.value_len,
739
+ init_ead_ctx.token[0].value_len);
740
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_3.value,
741
+ init_ead_ctx.token[0].value,
742
+ init_ead_ctx.token[0].value_len);
743
+
744
+ /* EDHOC message 3 process. */
745
+ ret = edhoc_message_3_process(resp_ctx, msg_3, msg_3_len);
746
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
747
+ TEST_ASSERT_EQUAL(EDHOC_SM_COMPLETED, resp_ctx->status);
748
+ TEST_ASSERT_EQUAL(true, resp_ctx->is_oscore_export_allowed);
749
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_4, resp_ctx->th_state);
750
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_4E3M, resp_ctx->prk_state);
751
+
752
+ ret = edhoc_error_get_code(resp_ctx, &error_code_recv);
753
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
754
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
755
+
756
+ /* Verify EAD_3 process. */
757
+ TEST_ASSERT_EQUAL(EDHOC_MSG_3, resp_ead_ctx.msg);
758
+ TEST_ASSERT_EQUAL(1, resp_ead_ctx.recv_tokens);
759
+ TEST_ASSERT_EQUAL(ead_single_token_msg_3.label,
760
+ resp_ead_ctx.token[0].label);
761
+ TEST_ASSERT_EQUAL(ead_single_token_msg_3.value_len,
762
+ resp_ead_ctx.token[0].value_len);
763
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_3.value,
764
+ resp_ead_ctx.token[0].value,
765
+ resp_ead_ctx.token[0].value_len);
766
+
767
+ memset(&init_ead_ctx, 0, sizeof(init_ead_ctx));
768
+ memset(&resp_ead_ctx, 0, sizeof(resp_ead_ctx));
769
+
770
+ memset(buffer, 0, sizeof(buffer));
771
+ size_t msg_4_len = 0;
772
+ uint8_t *msg_4 = buffer;
773
+
774
+ /* EDHOC message 4 compose. */
775
+ ret = edhoc_message_4_compose(resp_ctx, msg_4, ARRAY_SIZE(buffer),
776
+ &msg_4_len);
777
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
778
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, resp_ctx->status);
779
+ TEST_ASSERT_EQUAL(true, resp_ctx->is_oscore_export_allowed);
780
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_4, resp_ctx->th_state);
781
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_4E3M, resp_ctx->prk_state);
782
+
783
+ ret = edhoc_error_get_code(resp_ctx, &error_code_recv);
784
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
785
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
786
+
787
+ /* Verify EAD_4 compose. */
788
+ TEST_ASSERT_EQUAL(EDHOC_MSG_4, resp_ead_ctx.msg);
789
+ TEST_ASSERT_EQUAL(1, resp_ead_ctx.recv_tokens);
790
+ TEST_ASSERT_EQUAL(ead_single_token_msg_4.label,
791
+ resp_ead_ctx.token[0].label);
792
+ TEST_ASSERT_EQUAL(ead_single_token_msg_4.value_len,
793
+ resp_ead_ctx.token[0].value_len);
794
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_4.value,
795
+ resp_ead_ctx.token[0].value,
796
+ resp_ead_ctx.token[0].value_len);
797
+
798
+ /* EDHOC message 4 process. */
799
+ ret = edhoc_message_4_process(init_ctx, msg_4, msg_4_len);
800
+
801
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
802
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, init_ctx->status);
803
+ TEST_ASSERT_EQUAL(true, init_ctx->is_oscore_export_allowed);
804
+ TEST_ASSERT_EQUAL(EDHOC_TH_STATE_4, init_ctx->th_state);
805
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_4E3M, init_ctx->prk_state);
806
+
807
+ ret = edhoc_error_get_code(init_ctx, &error_code_recv);
808
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
809
+ TEST_ASSERT_EQUAL(EDHOC_ERROR_CODE_SUCCESS, error_code_recv);
810
+
811
+ /* Verify EAD_4 process. */
812
+ TEST_ASSERT_EQUAL(EDHOC_MSG_4, init_ead_ctx.msg);
813
+ TEST_ASSERT_EQUAL(1, init_ead_ctx.recv_tokens);
814
+
815
+ TEST_ASSERT_EQUAL(ead_single_token_msg_4.label,
816
+ init_ead_ctx.token[0].label);
817
+ TEST_ASSERT_EQUAL(ead_single_token_msg_4.value_len,
818
+ init_ead_ctx.token[0].value_len);
819
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(ead_single_token_msg_4.value,
820
+ init_ead_ctx.token[0].value,
821
+ init_ead_ctx.token[0].value_len);
822
+
823
+ memset(&init_ead_ctx, 0, sizeof(init_ead_ctx));
824
+ memset(&resp_ead_ctx, 0, sizeof(resp_ead_ctx));
825
+
826
+ /* Derive OSCORE master secret and master salt. */
827
+ uint8_t init_master_secret[OSCORE_MASTER_SECRET_LENGTH] = { 0 };
828
+ uint8_t init_master_salt[OSCORE_MASTER_SALT_LENGTH] = { 0 };
829
+ size_t init_sender_id_len = 0;
830
+ uint8_t init_sender_id[ARRAY_SIZE(C_R)] = { 0 };
831
+ size_t init_recipient_id_len = 0;
832
+ uint8_t init_recipient_id[ARRAY_SIZE(C_I)] = { 0 };
833
+
834
+ ret = edhoc_export_oscore_session(
835
+ init_ctx, init_master_secret, ARRAY_SIZE(init_master_secret),
836
+ init_master_salt, ARRAY_SIZE(init_master_salt), init_sender_id,
837
+ ARRAY_SIZE(init_sender_id), &init_sender_id_len,
838
+ init_recipient_id, ARRAY_SIZE(init_recipient_id),
839
+ &init_recipient_id_len);
840
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
841
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, init_ctx->status);
842
+ TEST_ASSERT_EQUAL(false, init_ctx->is_oscore_export_allowed);
843
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, init_ctx->prk_state);
844
+
845
+ /* Derive OSCORE master secret and master salt. */
846
+ uint8_t resp_master_secret[OSCORE_MASTER_SECRET_LENGTH] = { 0 };
847
+ uint8_t resp_master_salt[OSCORE_MASTER_SALT_LENGTH] = { 0 };
848
+ size_t resp_sender_id_len = 0;
849
+ uint8_t resp_sender_id[ARRAY_SIZE(C_I)] = { 0 };
850
+ size_t resp_recipient_id_len = 0;
851
+ uint8_t resp_recipient_id[ARRAY_SIZE(C_R)] = { 0 };
852
+
853
+ ret = edhoc_export_oscore_session(
854
+ resp_ctx, resp_master_secret, ARRAY_SIZE(resp_master_secret),
855
+ resp_master_salt, ARRAY_SIZE(resp_master_salt), resp_sender_id,
856
+ ARRAY_SIZE(resp_sender_id), &resp_sender_id_len,
857
+ resp_recipient_id, ARRAY_SIZE(resp_recipient_id),
858
+ &resp_recipient_id_len);
859
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
860
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, resp_ctx->status);
861
+ TEST_ASSERT_EQUAL(false, resp_ctx->is_oscore_export_allowed);
862
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, resp_ctx->prk_state);
863
+
864
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_master_secret, resp_master_secret,
865
+ ARRAY_SIZE(resp_master_secret));
866
+
867
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_master_salt, resp_master_salt,
868
+ ARRAY_SIZE(resp_master_salt));
869
+
870
+ TEST_ASSERT_EQUAL(init_sender_id_len, resp_recipient_id_len);
871
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_sender_id, resp_recipient_id,
872
+ init_sender_id_len);
873
+ TEST_ASSERT_EQUAL(init_recipient_id_len, resp_sender_id_len);
874
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_recipient_id, resp_sender_id,
875
+ resp_sender_id_len);
876
+
877
+ uint8_t entropy[ENTROPY_LENGTH] = { 0 };
878
+ ret = psa_generate_random(entropy, sizeof(entropy));
879
+ TEST_ASSERT_EQUAL(PSA_SUCCESS, ret);
880
+
881
+ /* EDHOC key update method. */
882
+ ret = edhoc_export_key_update(init_ctx, entropy, ARRAY_SIZE(entropy));
883
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
884
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, init_ctx->status);
885
+ TEST_ASSERT_EQUAL(true, init_ctx->is_oscore_export_allowed);
886
+
887
+ /* EDHOC key update method. */
888
+ ret = edhoc_export_key_update(resp_ctx, entropy, ARRAY_SIZE(entropy));
889
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
890
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, resp_ctx->status);
891
+ TEST_ASSERT_EQUAL(true, resp_ctx->is_oscore_export_allowed);
892
+
893
+ TEST_ASSERT_EQUAL(init_ctx->prk_state, resp_ctx->prk_state);
894
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, init_ctx->prk_state);
895
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, resp_ctx->prk_state);
896
+
897
+ TEST_ASSERT_EQUAL(init_ctx->prk_len, resp_ctx->prk_len);
898
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_ctx->prk, resp_ctx->prk,
899
+ resp_ctx->prk_len);
900
+
901
+ /* Derive OSCORE master secret and master salt. */
902
+ memset(init_master_secret, 0, sizeof(init_master_secret));
903
+ memset(init_master_salt, 0, sizeof(init_master_salt));
904
+ init_sender_id_len = 0;
905
+ memset(init_sender_id, 0, sizeof(init_sender_id));
906
+ init_recipient_id_len = 0;
907
+ memset(init_recipient_id, 0, sizeof(init_recipient_id));
908
+
909
+ ret = edhoc_export_oscore_session(
910
+ init_ctx, init_master_secret, ARRAY_SIZE(init_master_secret),
911
+ init_master_salt, ARRAY_SIZE(init_master_salt), init_sender_id,
912
+ ARRAY_SIZE(init_sender_id), &init_sender_id_len,
913
+ init_recipient_id, ARRAY_SIZE(init_recipient_id),
914
+ &init_recipient_id_len);
915
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
916
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, init_ctx->status);
917
+ TEST_ASSERT_EQUAL(false, init_ctx->is_oscore_export_allowed);
918
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, init_ctx->prk_state);
919
+
920
+ /* Derive OSCORE master secret and master salt. */
921
+ memset(resp_master_secret, 0, sizeof(resp_master_secret));
922
+ memset(resp_master_salt, 0, sizeof(resp_master_salt));
923
+ resp_sender_id_len = 0;
924
+ memset(resp_sender_id, 0, sizeof(resp_sender_id));
925
+ resp_recipient_id_len = 0;
926
+ memset(resp_recipient_id, 0, sizeof(resp_recipient_id));
927
+
928
+ ret = edhoc_export_oscore_session(
929
+ resp_ctx, resp_master_secret, ARRAY_SIZE(resp_master_secret),
930
+ resp_master_salt, ARRAY_SIZE(resp_master_salt), resp_sender_id,
931
+ ARRAY_SIZE(resp_sender_id), &resp_sender_id_len,
932
+ resp_recipient_id, ARRAY_SIZE(resp_recipient_id),
933
+ &resp_recipient_id_len);
934
+ TEST_ASSERT_EQUAL(EDHOC_SUCCESS, ret);
935
+ TEST_ASSERT_EQUAL(EDHOC_SM_PERSISTED, resp_ctx->status);
936
+ TEST_ASSERT_EQUAL(false, resp_ctx->is_oscore_export_allowed);
937
+ TEST_ASSERT_EQUAL(EDHOC_PRK_STATE_OUT, resp_ctx->prk_state);
938
+
939
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_master_secret, resp_master_secret,
940
+ ARRAY_SIZE(resp_master_secret));
941
+
942
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_master_salt, resp_master_salt,
943
+ ARRAY_SIZE(resp_master_salt));
944
+
945
+ TEST_ASSERT_EQUAL(init_sender_id_len, resp_recipient_id_len);
946
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_sender_id, resp_recipient_id,
947
+ init_sender_id_len);
948
+ TEST_ASSERT_EQUAL(init_recipient_id_len, resp_sender_id_len);
949
+ TEST_ASSERT_EQUAL_UINT8_ARRAY(init_recipient_id, resp_sender_id,
950
+ resp_sender_id_len);
951
+ }
952
+
953
+ TEST_GROUP_RUNNER(x5t_sign_keys_suite_2)
954
+ {
955
+ RUN_TEST_CASE(x5t_sign_keys_suite_2, handshake);
956
+ }