zephyr: Added hooks for example

Example (very basic) hook implementation.
Added case description for test-build with these hooks
and multi-image feature.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
diff --git a/boot/zephyr/hooks_sample.c b/boot/zephyr/hooks_sample.c
new file mode 100644
index 0000000..a4dbfb5
--- /dev/null
+++ b/boot/zephyr/hooks_sample.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2021 Nordic Semiconductor ASA
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <assert.h>
+#include <zephyr.h>
+#include "bootutil/image.h"
+#include "bootutil/bootutil.h"
+#include "bootutil/fault_injection_hardening.h"
+#include "flash_map_backend/flash_map_backend.h"
+
+/* @retval 0: header was read/populated
+ *         FIH_FAILURE: image is invalid,
+ *         BOOT_HOOK_REGULAR if hook not implemented for the image-slot,
+ *         othervise an error-code value.
+ */
+int boot_read_image_header_hook(int img_index, int slot,
+                                struct image_header *img_hed)
+{
+    if (img_index == 1 && slot == 0) {
+            img_hed->ih_magic = IMAGE_MAGIC;
+            return 0;
+    }
+
+    return BOOT_HOOK_REGULAR;
+}
+
+/* @retval FIH_SUCCESS: image is valid,
+ *         FIH_FAILURE: image is invalid,
+ *         fih encoded BOOT_HOOK_REGULAR if hook not implemented for
+ *         the image-slot.
+ */
+fih_int boot_image_check_hook(int img_index, int slot)
+{
+    if (img_index == 1 && slot == 0) {
+        FIH_RET(FIH_SUCCESS);
+    }
+
+    FIH_RET(fih_int_encode(BOOT_HOOK_REGULAR));
+}
+
+int boot_perform_update_hook(int img_index, struct image_header *img_head,
+                             const struct flash_area *area)
+{
+    if (img_index == 1) {
+        return 0;
+    }
+
+    return BOOT_HOOK_REGULAR;
+}
+
+int boot_read_swap_state_primary_slot_hook(int image_index,
+                                           struct boot_swap_state *state)
+{
+    if (image_index == 1) {
+        state->magic = BOOT_MAGIC_UNSET;
+        state->swap_type = BOOT_SWAP_TYPE_NONE;
+        state->image_num = image_index ; // ?
+        state->copy_done = BOOT_FLAG_UNSET;
+        state->image_ok = BOOT_FLAG_UNSET;
+
+        return 0;
+    }
+
+    return BOOT_HOOK_REGULAR;
+}
+
+int boot_copy_region_post_hook(int img_index, const struct flash_area *area,
+                               size_t size)
+{
+    return 0;
+}
+
+int boot_serial_uploaded_hook(int img_index, const struct flash_area *area,
+                               size_t size)
+{
+    return 0;
+}
+
+int boot_img_install_stat_hook(int image_index, int slot, int *img_install_stat)
+{
+    return BOOT_HOOK_REGULAR;
+}