edhoc 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +170 -0
  2. package/binding.gyp +13 -11
  3. package/dist/bindings.d.ts +5 -0
  4. package/dist/bindings.d.ts.map +1 -0
  5. package/dist/bindings.js +10 -0
  6. package/dist/crypto.d.ts +29 -0
  7. package/dist/crypto.d.ts.map +1 -0
  8. package/dist/crypto.js +205 -0
  9. package/dist/edhoc.d.ts +368 -0
  10. package/dist/edhoc.d.ts.map +1 -0
  11. package/dist/edhoc.js +76 -0
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +19 -0
  15. package/dist/x509credentials.d.ts +20 -0
  16. package/dist/x509credentials.d.ts.map +1 -0
  17. package/dist/x509credentials.js +140 -0
  18. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_decode.h +1 -1
  19. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_encode.h +1 -1
  20. package/external/libedhoc/backends/cbor/include/backend_cbor_bstr_type_types.h +1 -1
  21. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_decode.h +2 -2
  22. package/external/libedhoc/backends/cbor/include/backend_cbor_ead_encode.h +2 -2
  23. package/external/libedhoc/backends/cbor/include/backend_cbor_edhoc_types.h +48 -43
  24. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_decode.h +1 -1
  25. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_encode.h +1 -1
  26. package/external/libedhoc/backends/cbor/include/backend_cbor_enc_structure_types.h +3 -3
  27. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_decode.h +1 -1
  28. package/external/libedhoc/backends/cbor/include/backend_cbor_id_cred_x_encode.h +1 -1
  29. package/external/libedhoc/backends/cbor/include/backend_cbor_info_decode.h +1 -1
  30. package/external/libedhoc/backends/cbor/include/backend_cbor_info_encode.h +1 -1
  31. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_decode.h +1 -1
  32. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_encode.h +1 -1
  33. package/external/libedhoc/backends/cbor/include/backend_cbor_int_type_types.h +1 -1
  34. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_decode.h +1 -1
  35. package/external/libedhoc/backends/cbor/include/backend_cbor_message_1_encode.h +1 -1
  36. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_decode.h +1 -1
  37. package/external/libedhoc/backends/cbor/include/backend_cbor_message_2_encode.h +1 -1
  38. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_decode.h +1 -1
  39. package/external/libedhoc/backends/cbor/include/backend_cbor_message_3_encode.h +1 -1
  40. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_decode.h +1 -1
  41. package/external/libedhoc/backends/cbor/include/backend_cbor_message_4_encode.h +1 -1
  42. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_decode.h +1 -1
  43. package/external/libedhoc/backends/cbor/include/backend_cbor_message_error_encode.h +1 -1
  44. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_decode.h +1 -1
  45. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_2_encode.h +1 -1
  46. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_decode.h +1 -1
  47. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_3_encode.h +1 -1
  48. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_decode.h +3 -3
  49. package/external/libedhoc/backends/cbor/include/backend_cbor_plaintext_4_encode.h +3 -3
  50. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_decode.h +1 -1
  51. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_encode.h +1 -1
  52. package/external/libedhoc/backends/cbor/include/backend_cbor_sig_structure_types.h +4 -4
  53. package/external/libedhoc/backends/cbor/include/backend_cbor_x509_types.h +93 -83
  54. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_decode.c +11 -20
  55. package/external/libedhoc/backends/cbor/src/backend_cbor_bstr_type_encode.c +11 -20
  56. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_decode.c +27 -32
  57. package/external/libedhoc/backends/cbor/src/backend_cbor_ead_encode.c +27 -32
  58. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_decode.c +14 -23
  59. package/external/libedhoc/backends/cbor/src/backend_cbor_enc_structure_encode.c +14 -23
  60. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_decode.c +63 -52
  61. package/external/libedhoc/backends/cbor/src/backend_cbor_id_cred_x_encode.c +62 -51
  62. package/external/libedhoc/backends/cbor/src/backend_cbor_info_decode.c +14 -23
  63. package/external/libedhoc/backends/cbor/src/backend_cbor_info_encode.c +14 -23
  64. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_decode.c +11 -20
  65. package/external/libedhoc/backends/cbor/src/backend_cbor_int_type_encode.c +11 -20
  66. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_decode.c +54 -51
  67. package/external/libedhoc/backends/cbor/src/backend_cbor_message_1_encode.c +54 -51
  68. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_decode.c +11 -20
  69. package/external/libedhoc/backends/cbor/src/backend_cbor_message_2_encode.c +11 -20
  70. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_decode.c +11 -20
  71. package/external/libedhoc/backends/cbor/src/backend_cbor_message_3_encode.c +11 -20
  72. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_decode.c +11 -20
  73. package/external/libedhoc/backends/cbor/src/backend_cbor_message_4_encode.c +11 -20
  74. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_decode.c +36 -37
  75. package/external/libedhoc/backends/cbor/src/backend_cbor_message_error_encode.c +36 -37
  76. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_decode.c +103 -80
  77. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_2_encode.c +102 -79
  78. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_decode.c +99 -76
  79. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_3_encode.c +98 -75
  80. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_decode.c +40 -41
  81. package/external/libedhoc/backends/cbor/src/backend_cbor_plaintext_4_encode.c +40 -41
  82. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_decode.c +15 -24
  83. package/external/libedhoc/backends/cbor/src/backend_cbor_sig_structure_encode.c +15 -24
  84. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.c +31 -0
  85. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode.h +10 -0
  86. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.c +18 -0
  87. package/external/libedhoc/externals/Unity/examples/example_1/src/ProductionCode2.h +9 -0
  88. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode.c +69 -0
  89. package/external/libedhoc/externals/Unity/examples/example_1/test/TestProductionCode2.c +38 -0
  90. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  91. package/external/libedhoc/externals/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  92. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.c +31 -0
  93. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode.h +10 -0
  94. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.c +18 -0
  95. package/external/libedhoc/externals/Unity/examples/example_2/src/ProductionCode2.h +9 -0
  96. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode.c +71 -0
  97. package/external/libedhoc/externals/Unity/examples/example_2/test/TestProductionCode2.c +40 -0
  98. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +16 -0
  99. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +18 -0
  100. package/external/libedhoc/externals/Unity/examples/example_2/test/test_runners/all_tests.c +19 -0
  101. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.c +17 -0
  102. package/external/libedhoc/externals/Unity/examples/example_3/helper/UnityHelper.h +19 -0
  103. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.c +31 -0
  104. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode.h +10 -0
  105. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.c +18 -0
  106. package/external/libedhoc/externals/Unity/examples/example_3/src/ProductionCode2.h +9 -0
  107. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode.c +69 -0
  108. package/external/libedhoc/externals/Unity/examples/example_3/test/TestProductionCode2.c +38 -0
  109. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.c +31 -0
  110. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode.h +10 -0
  111. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.c +18 -0
  112. package/external/libedhoc/externals/Unity/examples/example_4/src/ProductionCode2.h +9 -0
  113. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode.c +70 -0
  114. package/external/libedhoc/externals/Unity/examples/example_4/test/TestProductionCode2.c +42 -0
  115. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  116. package/external/libedhoc/externals/Unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  117. package/external/libedhoc/externals/Unity/examples/unity_config.h +251 -0
  118. package/external/libedhoc/externals/Unity/extras/bdd/src/unity_bdd.h +44 -0
  119. package/external/libedhoc/externals/Unity/extras/bdd/test/test_bdd.c +129 -0
  120. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.c +310 -0
  121. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture.h +95 -0
  122. package/external/libedhoc/externals/Unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  123. package/external/libedhoc/externals/Unity/extras/fixture/test/main/AllTests.c +20 -0
  124. package/external/libedhoc/externals/Unity/extras/fixture/test/template_fixture_tests.c +40 -0
  125. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_Test.c +246 -0
  126. package/external/libedhoc/externals/Unity/extras/fixture/test/unity_fixture_TestRunner.c +33 -0
  127. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.c +203 -0
  128. package/external/libedhoc/externals/Unity/extras/memory/src/unity_memory.h +61 -0
  129. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_Test.c +326 -0
  130. package/external/libedhoc/externals/Unity/extras/memory/test/unity_memory_TestRunner.c +50 -0
  131. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.c +57 -0
  132. package/external/libedhoc/externals/Unity/extras/memory/test/unity_output_Spy.h +17 -0
  133. package/external/libedhoc/externals/Unity/src/unity.c +2501 -0
  134. package/external/libedhoc/externals/Unity/src/unity.h +698 -0
  135. package/external/libedhoc/externals/Unity/src/unity_internals.h +1183 -0
  136. package/external/libedhoc/externals/Unity/test/expectdata/testsample_cmd.c +61 -0
  137. package/external/libedhoc/externals/Unity/test/expectdata/testsample_def.c +57 -0
  138. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.c +55 -0
  139. package/external/libedhoc/externals/Unity/test/expectdata/testsample_head1.h +15 -0
  140. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_cmd.c +80 -0
  141. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_def.c +76 -0
  142. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.c +75 -0
  143. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_head1.h +13 -0
  144. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new1.c +89 -0
  145. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_new2.c +89 -0
  146. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_param.c +77 -0
  147. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run1.c +89 -0
  148. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_run2.c +89 -0
  149. package/external/libedhoc/externals/Unity/test/expectdata/testsample_mock_yaml.c +90 -0
  150. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new1.c +67 -0
  151. package/external/libedhoc/externals/Unity/test/expectdata/testsample_new2.c +70 -0
  152. package/external/libedhoc/externals/Unity/test/expectdata/testsample_param.c +58 -0
  153. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run1.c +67 -0
  154. package/external/libedhoc/externals/Unity/test/expectdata/testsample_run2.c +70 -0
  155. package/external/libedhoc/externals/Unity/test/expectdata/testsample_yaml.c +71 -0
  156. package/external/libedhoc/externals/Unity/test/testdata/CException.h +18 -0
  157. package/external/libedhoc/externals/Unity/test/testdata/Defs.h +16 -0
  158. package/external/libedhoc/externals/Unity/test/testdata/cmock.h +21 -0
  159. package/external/libedhoc/externals/Unity/test/testdata/mockMock.h +20 -0
  160. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGenerator.c +204 -0
  161. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorSmall.c +73 -0
  162. package/external/libedhoc/externals/Unity/test/testdata/testRunnerGeneratorWithMocks.c +200 -0
  163. package/external/libedhoc/externals/Unity/test/tests/self_assessment_utils.h +151 -0
  164. package/external/libedhoc/externals/Unity/test/tests/test_unity_arrays.c +2941 -0
  165. package/external/libedhoc/externals/Unity/test/tests/test_unity_core.c +375 -0
  166. package/external/libedhoc/externals/Unity/test/tests/test_unity_doubles.c +1285 -0
  167. package/external/libedhoc/externals/Unity/test/tests/test_unity_floats.c +1395 -0
  168. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers.c +2863 -0
  169. package/external/libedhoc/externals/Unity/test/tests/test_unity_integers_64.c +783 -0
  170. package/external/libedhoc/externals/Unity/test/tests/test_unity_memory.c +82 -0
  171. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterized.c +309 -0
  172. package/external/libedhoc/externals/Unity/test/tests/test_unity_parameterizedDemo.c +28 -0
  173. package/external/libedhoc/externals/Unity/test/tests/test_unity_strings.c +330 -0
  174. package/external/libedhoc/externals/Unity/test/tests/types_for_test.h +21 -0
  175. package/external/libedhoc/externals/zcbor/include/zcbor_common.h +147 -60
  176. package/external/libedhoc/externals/zcbor/include/zcbor_decode.h +291 -202
  177. package/external/libedhoc/externals/zcbor/include/zcbor_encode.h +100 -156
  178. package/external/libedhoc/externals/zcbor/include/zcbor_print.h +165 -0
  179. package/external/libedhoc/externals/zcbor/samples/hello_world/src/main.c +1 -1
  180. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_decode.h +1 -1
  181. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_encode.h +1 -1
  182. package/external/libedhoc/externals/zcbor/samples/pet/include/pet_types.h +4 -4
  183. package/external/libedhoc/externals/zcbor/samples/pet/src/main.c +4 -4
  184. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_decode.c +15 -24
  185. package/external/libedhoc/externals/zcbor/samples/pet/src/pet_encode.c +14 -23
  186. package/external/libedhoc/externals/zcbor/src/zcbor_common.c +202 -29
  187. package/external/libedhoc/externals/zcbor/src/zcbor_decode.c +633 -173
  188. package/external/libedhoc/externals/zcbor/src/zcbor_encode.c +71 -184
  189. package/external/libedhoc/externals/zcbor/tests/decode/test1_suit_old_formats/src/main.c +152 -153
  190. package/external/libedhoc/externals/zcbor/tests/decode/test2_suit/src/main.c +64 -64
  191. package/external/libedhoc/externals/zcbor/tests/decode/test3_simple/src/main.c +15 -16
  192. package/external/libedhoc/externals/zcbor/tests/decode/test5_corner_cases/src/main.c +228 -84
  193. package/external/libedhoc/externals/zcbor/tests/decode/test7_suit9_simple/src/main.c +9 -9
  194. package/external/libedhoc/externals/zcbor/tests/decode/test8_suit12/src/main.c +0 -1
  195. package/external/libedhoc/externals/zcbor/tests/decode/test9_manifest14/src/main.c +172 -173
  196. package/external/libedhoc/externals/zcbor/tests/encode/test1_suit/src/main.c +73 -73
  197. package/external/libedhoc/externals/zcbor/tests/encode/test2_simple/src/main.c +1 -2
  198. package/external/libedhoc/externals/zcbor/tests/encode/test3_corner_cases/src/main.c +83 -56
  199. package/external/libedhoc/externals/zcbor/tests/encode/test4_senml/src/main.c +15 -16
  200. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_everything.c +12 -0
  201. package/external/libedhoc/externals/zcbor/tests/fuzz/fuzz_manifest12.c +69 -69
  202. package/external/libedhoc/externals/zcbor/tests/unit/test1_unit_tests/src/main.c +448 -55
  203. package/external/libedhoc/externals/zcbor/tests/unit/test3_float16/src/main.c +49 -48
  204. package/external/libedhoc/include/edhoc.h +348 -54
  205. package/external/libedhoc/include/edhoc_common.h +289 -0
  206. package/external/libedhoc/include/edhoc_context.h +60 -35
  207. package/external/libedhoc/include/edhoc_credentials.h +55 -7
  208. package/external/libedhoc/include/edhoc_crypto.h +10 -10
  209. package/external/libedhoc/include/edhoc_ead.h +13 -10
  210. package/external/libedhoc/include/edhoc_macros.h +20 -11
  211. package/external/libedhoc/include/edhoc_values.h +2 -2
  212. package/external/libedhoc/library/edhoc.c +70 -36
  213. package/external/libedhoc/library/edhoc_common.c +1314 -0
  214. package/external/libedhoc/library/edhoc_exporter.c +45 -46
  215. package/external/libedhoc/library/edhoc_message_1.c +107 -72
  216. package/external/libedhoc/library/edhoc_message_2.c +396 -1693
  217. package/external/libedhoc/library/edhoc_message_3.c +465 -1656
  218. package/external/libedhoc/library/edhoc_message_4.c +93 -91
  219. package/external/libedhoc/library/edhoc_message_error.c +41 -41
  220. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_0.h → cipher_suite_0.h} +131 -134
  221. package/external/libedhoc/tests/include/{cipher_suites/cipher_suite_2.h → cipher_suite_2.h} +139 -140
  222. package/external/libedhoc/tests/include/{edhoc_trace_1/test_vector_1.h → test_vector_rfc9529_chapter_2.h} +786 -738
  223. package/external/libedhoc/tests/include/{edhoc_trace_2/test_vector_2.h → test_vector_rfc9529_chapter_3.h} +14 -10
  224. package/external/libedhoc/tests/include/{x509_chain_cs_0/test_vector_x5chain_cs_0.h → test_vector_x5chain_sign_keys_suite_0.h} +137 -140
  225. package/external/libedhoc/tests/include/{x509_chain_cs_2/test_vector_x5chain_cs_2.h → test_vector_x5chain_sign_keys_suite_2.h} +7 -8
  226. package/external/libedhoc/tests/include/{x509_chain_cs_2_static_dh/test_vector_x5chain_cs_2_static_dh.h → test_vector_x5chain_static_dh_keys_suite_2.h} +7 -8
  227. package/external/libedhoc/tests/include/{x509_hash_cs_2/test_vector_x5t_cs_2.h → test_vector_x5t_sign_keys_suite_2.h} +6 -7
  228. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_0.c → cipher_suite_0.c} +445 -447
  229. package/external/libedhoc/tests/src/{cipher_suites/cipher_suite_2.c → cipher_suite_2.c} +600 -600
  230. package/external/libedhoc/tests/src/module_test_api.c +430 -0
  231. package/external/libedhoc/tests/src/module_test_cipher_suite_0.c +395 -0
  232. package/external/libedhoc/tests/src/module_test_cipher_suite_2.c +392 -0
  233. package/external/libedhoc/tests/src/{error_message/test_edhoc_error_message.c → module_test_error_message.c} +94 -69
  234. package/external/libedhoc/tests/src/module_test_main.c +49 -0
  235. package/external/libedhoc/tests/src/{cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.c → module_test_rfc9528_suites_negotiation.c} +224 -227
  236. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_2.c +2681 -0
  237. package/external/libedhoc/tests/src/module_test_rfc9529_chapter_3.c +1635 -0
  238. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_0.c +1135 -0
  239. package/external/libedhoc/tests/src/module_test_x5chain_sign_keys_suite_2.c +1249 -0
  240. package/external/libedhoc/tests/src/module_test_x5chain_static_dh_keys_suite_2.c +798 -0
  241. package/external/libedhoc/tests/src/module_test_x5t_sign_keys_suite_2.c +956 -0
  242. package/include/EdhocComposeAsyncWorker.h +8 -6
  243. package/include/EdhocCredentialManager.h +16 -11
  244. package/include/EdhocCryptoManager.h +28 -21
  245. package/include/EdhocEadManager.h +3 -6
  246. package/include/{EdhocExportAsyncWorker.h → EdhocExportOscoreAsyncWorker.h} +20 -17
  247. package/include/EdhocKeyExporterAsyncWorker.h +76 -0
  248. package/include/EdhocKeyUpdateAsyncWorker.h +72 -0
  249. package/include/EdhocProcessAsyncWorker.h +14 -10
  250. package/include/LibEDHOC.h +44 -20
  251. package/include/UserContext.h +7 -9
  252. package/include/Utils.h +31 -27
  253. package/package.json +14 -3
  254. package/prebuilds/android-arm/edhoc.armv7.node +0 -0
  255. package/prebuilds/android-arm64/edhoc.armv8.node +0 -0
  256. package/prebuilds/darwin-arm64/edhoc.node +0 -0
  257. package/prebuilds/darwin-x64/edhoc.node +0 -0
  258. package/prebuilds/linux-arm/edhoc.armv6.node +0 -0
  259. package/prebuilds/linux-arm/edhoc.armv7.node +0 -0
  260. package/prebuilds/linux-arm64/edhoc.armv8.node +0 -0
  261. package/prebuilds/linux-x64/edhoc.glibc.node +0 -0
  262. package/prebuilds/linux-x64/edhoc.musl.node +0 -0
  263. package/prebuilds/win32-ia32/edhoc.node +0 -0
  264. package/prebuilds/win32-x64/edhoc.node +0 -0
  265. package/src/EdhocComposeAsyncWorker.cpp +18 -35
  266. package/src/EdhocCredentialManager.cpp +160 -187
  267. package/src/EdhocCryptoManager.cpp +386 -586
  268. package/src/EdhocEadManager.cpp +10 -18
  269. package/src/EdhocExportOscoreAsyncWorker.cpp +77 -0
  270. package/src/EdhocKeyExporterAsyncWorker.cpp +49 -0
  271. package/src/EdhocKeyUpdateAsyncWorker.cpp +41 -0
  272. package/src/EdhocProcessAsyncWorker.cpp +72 -19
  273. package/src/LibEDHOC.cpp +213 -174
  274. package/src/Suites.cpp +39 -72
  275. package/src/Utils.cpp +32 -56
  276. package/test/basic.test.ts +64 -0
  277. package/test/vectors.test.ts +111 -0
  278. package/external/libedhoc/externals/zcbor/include/zcbor_debug.h +0 -69
  279. package/external/libedhoc/tests/include/cipher_suite_negotiation/test_edhoc_cipher_suite_negotiation.h +0 -37
  280. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_0.h +0 -48
  281. package/external/libedhoc/tests/include/cipher_suites/test_cipher_suite_2.h +0 -48
  282. package/external/libedhoc/tests/include/edhoc_trace_1/authentication_credentials_1.h +0 -60
  283. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_1.h +0 -208
  284. package/external/libedhoc/tests/include/edhoc_trace_1/test_edhoc_handshake_ead_1.h +0 -59
  285. package/external/libedhoc/tests/include/edhoc_trace_2/authentication_credentials_2.h +0 -60
  286. package/external/libedhoc/tests/include/edhoc_trace_2/test_edhoc_handshake_2.h +0 -199
  287. package/external/libedhoc/tests/include/error_message/test_edhoc_error_message.h +0 -48
  288. package/external/libedhoc/tests/include/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.h +0 -92
  289. package/external/libedhoc/tests/include/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.h +0 -96
  290. package/external/libedhoc/tests/include/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.h +0 -58
  291. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.h +0 -56
  292. package/external/libedhoc/tests/include/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.h +0 -57
  293. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.h +0 -59
  294. package/external/libedhoc/tests/include/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.h +0 -57
  295. package/external/libedhoc/tests/include/x509_hash_cs_2/authentication_credentials_x5t_cs_2.h +0 -60
  296. package/external/libedhoc/tests/include/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.h +0 -57
  297. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_0.c +0 -475
  298. package/external/libedhoc/tests/src/cipher_suites/test_cipher_suite_2.c +0 -473
  299. package/external/libedhoc/tests/src/edhoc_trace_1/authentication_credentials_1.c +0 -252
  300. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_1.c +0 -1829
  301. package/external/libedhoc/tests/src/edhoc_trace_1/test_edhoc_handshake_ead_1.c +0 -1247
  302. package/external/libedhoc/tests/src/edhoc_trace_2/authentication_credentials_2.c +0 -170
  303. package/external/libedhoc/tests/src/edhoc_trace_2/test_edhoc_handshake_2.c +0 -1783
  304. package/external/libedhoc/tests/src/tests.c +0 -228
  305. package/external/libedhoc/tests/src/x509_chain_cs_0/authentication_credentials_x5chain_cs_0.c +0 -332
  306. package/external/libedhoc/tests/src/x509_chain_cs_0/test_edhoc_handshake_x5chain_cs_0.c +0 -936
  307. package/external/libedhoc/tests/src/x509_chain_cs_2/authentication_credentials_x5chain_cs_2.c +0 -166
  308. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2.c +0 -587
  309. package/external/libedhoc/tests/src/x509_chain_cs_2/test_edhoc_handshake_x5chain_cs_2_ead.c +0 -917
  310. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/authentication_credentials_x5chain_cs_2_static_dh.c +0 -186
  311. package/external/libedhoc/tests/src/x509_chain_cs_2_static_dh/test_edhoc_handshake_x5chain_cs_2_static_dh_ead.c +0 -743
  312. package/external/libedhoc/tests/src/x509_hash_cs_2/authentication_credentials_x5t_cs_2.c +0 -261
  313. package/external/libedhoc/tests/src/x509_hash_cs_2/test_edhoc_handshake_x5t_cs_2_ead.c +0 -854
  314. package/src/EdhocExportAsyncWorker.cpp +0 -82
@@ -1,14 +1,14 @@
1
+ #include "EdhocEadManager.h"
2
+
1
3
  #include <exception>
2
4
  #include <future>
3
5
  #include <iostream>
4
6
  #include <stdexcept>
5
7
 
6
- #include "EdhocEadManager.h"
7
8
  #include "UserContext.h"
8
9
  #include "Utils.h"
9
10
 
10
- static constexpr const char* kErrorExpectedObject =
11
- "Expected an object as element in the input array";
11
+ static constexpr const char* kErrorExpectedObject = "Expected an object as element in the input array";
12
12
  static constexpr const char* kErrorExpectedLabelNumberAndValueBuffer =
13
13
  "Expected 'label' to be a number and 'value' to be a buffer in the input "
14
14
  "array";
@@ -24,17 +24,14 @@ EdhocEadManager::~EdhocEadManager() {
24
24
  eadBuffers.clear();
25
25
  }
26
26
 
27
- void EdhocEadManager::StoreEad(enum edhoc_message message,
28
- int label,
29
- const std::vector<uint8_t>& ead) {
27
+ void EdhocEadManager::StoreEad(enum edhoc_message message, int label, const std::vector<uint8_t>& ead) {
30
28
  auto& vecOfMaps = eadBuffers[message];
31
29
  EadMap newMap;
32
30
  newMap[label] = ead;
33
31
  vecOfMaps.push_back(std::move(newMap));
34
32
  }
35
33
 
36
- void EdhocEadManager::StoreEad(enum edhoc_message message,
37
- const Napi::Array& eadArray) {
34
+ void EdhocEadManager::StoreEad(enum edhoc_message message, const Napi::Array& eadArray) {
38
35
  Napi::Env env = eadArray.Env();
39
36
  for (size_t i = 0; i < eadArray.Length(); i++) {
40
37
  Napi::Value element = eadArray.Get(i);
@@ -53,20 +50,17 @@ void EdhocEadManager::StoreEad(enum edhoc_message message,
53
50
  int label = labelValue.As<Napi::Number>().Int32Value();
54
51
  Napi::Buffer<uint8_t> buffer = bufferValue.As<Napi::Buffer<uint8_t>>();
55
52
 
56
- std::vector<uint8_t> eadVector(buffer.Data(),
57
- buffer.Data() + buffer.Length());
53
+ std::vector<uint8_t> eadVector(buffer.Data(), buffer.Data() + buffer.Length());
58
54
  StoreEad(message, label, eadVector);
59
55
  }
60
56
  }
61
57
 
62
- const EadMapVector* EdhocEadManager::GetEadByMessage(
63
- enum edhoc_message message) const {
58
+ const EadMapVector* EdhocEadManager::GetEadByMessage(enum edhoc_message message) const {
64
59
  auto it = eadBuffers.find(message);
65
60
  return it != eadBuffers.end() ? &it->second : nullptr;
66
61
  }
67
62
 
68
- Napi::Array EdhocEadManager::GetEadByMessage(Napi::Env& env,
69
- enum edhoc_message message) const {
63
+ Napi::Array EdhocEadManager::GetEadByMessage(Napi::Env& env, enum edhoc_message message) const {
70
64
  const EadMapVector* buffers = GetEadByMessage(message);
71
65
  if (!buffers) {
72
66
  return Napi::Array::New(env);
@@ -78,8 +72,7 @@ Napi::Array EdhocEadManager::GetEadByMessage(Napi::Env& env,
78
72
  Napi::Object obj = Napi::Object::New(env);
79
73
  for (auto const& [label, buffer] : map) {
80
74
  obj.Set(kPropLabel, Napi::Number::New(env, label));
81
- obj.Set(kPropValue,
82
- Napi::Buffer<uint8_t>::Copy(env, buffer.data(), buffer.size()));
75
+ obj.Set(kPropValue, Napi::Buffer<uint8_t>::Copy(env, buffer.data(), buffer.size()));
83
76
  }
84
77
  result.Set(i++, obj);
85
78
  }
@@ -98,8 +91,7 @@ int EdhocEadManager::ComposeEad(void* user_context,
98
91
  size_t* ead_token_len) {
99
92
  UserContext* context = static_cast<UserContext*>(user_context);
100
93
  EdhocEadManager* manager = context->GetEadManager();
101
- return manager->callComposeEad(
102
- message, ead_token, ead_token_size, ead_token_len);
94
+ return manager->callComposeEad(message, ead_token, ead_token_size, ead_token_len);
103
95
  }
104
96
 
105
97
  int EdhocEadManager::ProcessEad(void* user_context,
@@ -0,0 +1,77 @@
1
+ #include "EdhocExportOscoreAsyncWorker.h"
2
+
3
+ static constexpr const char* kErrorMessageFormat = "Failed to export OSCORE. Error code: %d.";
4
+ static constexpr const char* kPropMasterSecret = "masterSecret";
5
+ static constexpr const char* kPropMasterSalt = "masterSalt";
6
+ static constexpr const char* kPropSenderId = "senderId";
7
+ static constexpr const char* kPropRecipientId = "recipientId";
8
+ static constexpr size_t kErrorBufferSize = 100;
9
+ static constexpr size_t kMasterSecrectSize = 16;
10
+ static constexpr size_t kMasterSaltSize = 8;
11
+ static constexpr size_t kConnectionIdSize = 7;
12
+
13
+ EdhocExportOscoreAsyncWorker::EdhocExportOscoreAsyncWorker(Napi::Env& env,
14
+ struct edhoc_context& context,
15
+ CallbackType callback)
16
+ : Napi::AsyncWorker(env),
17
+ deferred(Napi::Promise::Deferred::New(env)),
18
+ context(context),
19
+ masterSecret(kMasterSecrectSize),
20
+ masterSalt(kMasterSaltSize),
21
+ senderId(kConnectionIdSize),
22
+ recipientId(kConnectionIdSize),
23
+ callback(std::move(callback)) {}
24
+
25
+ EdhocExportOscoreAsyncWorker::~EdhocExportOscoreAsyncWorker() {}
26
+
27
+ void EdhocExportOscoreAsyncWorker::Execute() {
28
+ try {
29
+ size_t sender_id_length, recipient_id_length;
30
+
31
+ int ret = edhoc_export_oscore_session(&context, masterSecret.data(), masterSecret.size(), masterSalt.data(),
32
+ masterSalt.size(), senderId.data(), senderId.size(), &sender_id_length,
33
+ recipientId.data(), recipientId.size(), &recipient_id_length);
34
+
35
+ if (ret != EDHOC_SUCCESS) {
36
+ char errorMessage[kErrorBufferSize];
37
+ std::snprintf(errorMessage, kErrorBufferSize, kErrorMessageFormat, ret);
38
+ SetError(errorMessage);
39
+ } else {
40
+ senderId.resize(sender_id_length);
41
+ recipientId.resize(recipient_id_length);
42
+ }
43
+
44
+ } catch (const std::exception& e) {
45
+ SetError(e.what());
46
+ }
47
+ }
48
+
49
+ void EdhocExportOscoreAsyncWorker::OnOK() {
50
+ Napi::Env env = Env();
51
+ Napi::HandleScope scope(env);
52
+
53
+ auto masterSecretBuffer = Napi::Buffer<uint8_t>::Copy(env, masterSecret.data(), masterSecret.size());
54
+ auto masterSaltBuffer = Napi::Buffer<uint8_t>::Copy(env, masterSalt.data(), masterSalt.size());
55
+ auto senderIdBuffer = Napi::Buffer<uint8_t>::Copy(env, senderId.data(), senderId.size());
56
+ auto recipientIdBuffer = Napi::Buffer<uint8_t>::Copy(env, recipientId.data(), recipientId.size());
57
+
58
+ Napi::Object resultObj = Napi::Object::New(env);
59
+ resultObj.Set(kPropMasterSecret, masterSecretBuffer);
60
+ resultObj.Set(kPropMasterSalt, masterSaltBuffer);
61
+ resultObj.Set(kPropSenderId, senderIdBuffer);
62
+ resultObj.Set(kPropRecipientId, recipientIdBuffer);
63
+
64
+ deferred.Resolve(resultObj);
65
+ callback(env);
66
+ }
67
+
68
+ void EdhocExportOscoreAsyncWorker::OnError(const Napi::Error& error) {
69
+ Napi::Env env = Env();
70
+ Napi::HandleScope scope(env);
71
+ deferred.Reject(error.Value());
72
+ callback(env);
73
+ }
74
+
75
+ Napi::Promise EdhocExportOscoreAsyncWorker::GetPromise() {
76
+ return deferred.Promise();
77
+ }
@@ -0,0 +1,49 @@
1
+ #include "EdhocKeyExporterAsyncWorker.h"
2
+
3
+ static constexpr const char* kErrorMessageFormat = "Failed to export the key. Error code: %d.";
4
+ static constexpr size_t kErrorBufferSize = 100;
5
+
6
+ EdhocKeyExporterAsyncWorker::EdhocKeyExporterAsyncWorker(Napi::Env& env,
7
+ struct edhoc_context& context,
8
+ uint16_t label,
9
+ uint8_t desiredLength,
10
+ CallbackType callback)
11
+ : Napi::AsyncWorker(env),
12
+ deferred(Napi::Promise::Deferred::New(env)),
13
+ context(context),
14
+ label(label),
15
+ desiredLength(desiredLength),
16
+ output(desiredLength),
17
+ callback(std::move(callback)) {}
18
+
19
+ void EdhocKeyExporterAsyncWorker::Execute() {
20
+ try {
21
+ int ret = edhoc_export_prk_exporter(&context, label, output.data(), desiredLength);
22
+ if (ret != EDHOC_SUCCESS) {
23
+ char errorMessage[kErrorBufferSize];
24
+ std::snprintf(errorMessage, kErrorBufferSize, kErrorMessageFormat, ret);
25
+ SetError(errorMessage);
26
+ }
27
+ } catch (const std::exception& e) {
28
+ SetError(e.what());
29
+ }
30
+ }
31
+
32
+ void EdhocKeyExporterAsyncWorker::OnOK() {
33
+ Napi::Env env = Env();
34
+ Napi::HandleScope scope(env);
35
+ auto outputBuffer = Napi::Buffer<uint8_t>::Copy(env, output.data(), output.size());
36
+ deferred.Resolve(outputBuffer);
37
+ callback(env);
38
+ }
39
+
40
+ void EdhocKeyExporterAsyncWorker::OnError(const Napi::Error& error) {
41
+ Napi::Env env = Env();
42
+ Napi::HandleScope scope(env);
43
+ deferred.Reject(error.Value());
44
+ callback(env);
45
+ }
46
+
47
+ Napi::Promise EdhocKeyExporterAsyncWorker::GetPromise() {
48
+ return deferred.Promise();
49
+ }
@@ -0,0 +1,41 @@
1
+ #include "EdhocKeyUpdateAsyncWorker.h"
2
+
3
+ EdhocKeyUpdateAsyncWorker::EdhocKeyUpdateAsyncWorker(Napi::Env& env,
4
+ struct edhoc_context& context,
5
+ std::vector<uint8_t> contextBuffer,
6
+ CallbackType callback)
7
+ : Napi::AsyncWorker(env),
8
+ deferred(Napi::Promise::Deferred::New(env)),
9
+ context(context),
10
+ contextBuffer(contextBuffer),
11
+ callback(std::move(callback)) {}
12
+
13
+ void EdhocKeyUpdateAsyncWorker::Execute() {
14
+ try {
15
+ int ret = edhoc_export_key_update(&context, contextBuffer.data(), contextBuffer.size());
16
+
17
+ if (ret != EDHOC_SUCCESS) {
18
+ SetError("Failed to update key.");
19
+ }
20
+ } catch (const std::exception& e) {
21
+ SetError(e.what());
22
+ }
23
+ }
24
+
25
+ void EdhocKeyUpdateAsyncWorker::OnOK() {
26
+ Napi::Env env = Env();
27
+ Napi::HandleScope scope(env);
28
+ deferred.Resolve(env.Undefined());
29
+ callback(env);
30
+ }
31
+
32
+ void EdhocKeyUpdateAsyncWorker::OnError(const Napi::Error& error) {
33
+ Napi::Env env = Env();
34
+ Napi::HandleScope scope(env);
35
+ deferred.Reject(error.Value());
36
+ callback(env);
37
+ }
38
+
39
+ Napi::Promise EdhocKeyUpdateAsyncWorker::GetPromise() {
40
+ return deferred.Promise();
41
+ }
@@ -1,24 +1,23 @@
1
1
  #include "EdhocProcessAsyncWorker.h"
2
2
 
3
- static constexpr const char* kErrorInvalidMessageNumber =
4
- "Invalid message number";
5
- static constexpr const char* kErrorMessageFormat =
6
- "Failed to process EDHOC message %d. Error code: %d";
3
+ static constexpr const char* kErrorInvalidMessageNumber = "Invalid message number";
4
+ static constexpr const char* kErrorMessageFormat = "Failed to process EDHOC message %d. Error code: %d";
5
+ static constexpr const char* kErrorWrongSelectedCipherSuiteFormat =
6
+ "Wrong selected cipher suite. Supported: %s, Received: %s";
7
7
  static constexpr size_t kErrorBufferSize = 100;
8
8
 
9
- EdhocProcessAsyncWorker::EdhocProcessAsyncWorker(
10
- Napi::Env& env,
11
- Napi::Promise::Deferred deferred,
12
- struct edhoc_context& context,
13
- int messageNumber,
14
- Napi::Buffer<uint8_t> buffer,
15
- CallbackType callback)
9
+ EdhocProcessAsyncWorker::EdhocProcessAsyncWorker(Napi::Env& env,
10
+ struct edhoc_context& context,
11
+ int messageNumber,
12
+ Napi::Buffer<uint8_t> buffer,
13
+ CallbackType callback)
16
14
  : Napi::AsyncWorker(env),
17
- deferred(deferred),
15
+ deferred(Napi::Promise::Deferred::New(env)),
18
16
  context(context),
19
17
  messageNumber(messageNumber),
20
18
  messageBuffer(buffer.Data(), buffer.Data() + buffer.Length()),
21
- callback(std::move(callback)) {}
19
+ callback(std::move(callback)),
20
+ peerCipherSuites() {}
22
21
 
23
22
  void EdhocProcessAsyncWorker::Execute() {
24
23
  try {
@@ -45,12 +44,52 @@ void EdhocProcessAsyncWorker::Execute() {
45
44
  }
46
45
 
47
46
  if (ret != EDHOC_SUCCESS) {
47
+ enum edhoc_error_code error_code = EDHOC_ERROR_CODE_SUCCESS;
48
+ ret = edhoc_error_get_code(&context, &error_code);
49
+ switch (error_code) {
50
+ case EDHOC_ERROR_CODE_WRONG_SELECTED_CIPHER_SUITE: {
51
+ size_t csuites_len = 0;
52
+ int32_t csuites[10] = {0};
53
+ size_t peer_csuites_len = 0;
54
+ int32_t peer_csuites[10] = {0};
55
+
56
+ ret = edhoc_error_get_cipher_suites(&context, csuites, ARRAY_SIZE(csuites), &csuites_len, peer_csuites,
57
+ ARRAY_SIZE(peer_csuites), &peer_csuites_len);
58
+ if (ret == EDHOC_SUCCESS) {
59
+ std::string suites_str = "[";
60
+ for (size_t i = 0; i < csuites_len; i++) {
61
+ suites_str += std::to_string(csuites[i]);
62
+ if (i < csuites_len - 1) {
63
+ suites_str += ", ";
64
+ }
65
+ }
66
+ suites_str += "*]";
67
+
68
+ std::string peer_suites_str = "[";
69
+ for (size_t i = 0; i < peer_csuites_len; i++) {
70
+ peer_suites_str += std::to_string(peer_csuites[i]);
71
+ if (i < peer_csuites_len - 1) {
72
+ peer_suites_str += ", ";
73
+ }
74
+ }
75
+ peer_suites_str += "*]";
76
+
77
+ peerCipherSuites.assign(peer_csuites, peer_csuites + peer_csuites_len);
78
+
79
+ char errorMessage[kErrorBufferSize];
80
+ std::snprintf(errorMessage, kErrorBufferSize, kErrorWrongSelectedCipherSuiteFormat, suites_str.c_str(),
81
+ peer_suites_str.c_str());
82
+ SetError(errorMessage);
83
+ return;
84
+ }
85
+ break;
86
+ }
87
+ default:
88
+ break;
89
+ }
90
+
48
91
  char errorMessage[kErrorBufferSize];
49
- std::snprintf(errorMessage,
50
- kErrorBufferSize,
51
- kErrorMessageFormat,
52
- messageNumber + 1,
53
- ret);
92
+ std::snprintf(errorMessage, kErrorBufferSize, kErrorMessageFormat, messageNumber + 1, error_code);
54
93
  SetError(errorMessage);
55
94
  }
56
95
 
@@ -64,11 +103,25 @@ void EdhocProcessAsyncWorker::OnOK() {
64
103
  Napi::HandleScope scope(env);
65
104
  Napi::Array result = callback(env);
66
105
  deferred.Resolve(result);
106
+ callback(env);
67
107
  }
68
108
 
69
109
  void EdhocProcessAsyncWorker::OnError(const Napi::Error& error) {
70
110
  Napi::Env env = Env();
71
111
  Napi::HandleScope scope(env);
72
- deferred.Reject(Napi::String::New(env, error.Message()));
112
+
113
+ if (peerCipherSuites.size() > 0) {
114
+ Napi::Array result = Napi::Array::New(env, peerCipherSuites.size());
115
+ for (size_t i = 0; i < peerCipherSuites.size(); i++) {
116
+ result.Set(i, Napi::Number::New(env, peerCipherSuites[i]));
117
+ }
118
+ error.Set("peerCipherSuites", result);
119
+ }
120
+
121
+ deferred.Reject(error.Value());
73
122
  callback(env);
74
123
  }
124
+
125
+ Napi::Promise EdhocProcessAsyncWorker::GetPromise() {
126
+ return deferred.Promise();
127
+ }