+/*!
+ * @brief corecrypto symmetrical encryption and decryption modes
+ *
+ * corecrypto supports 6 stateless en(de)cryption modes and 2 stateful authenticated en(de)cryption modes
+ * stateless modes CBC, CFB, CFB8, CTR, OFB, XTS: They provide 3 interface functions that do not return errors codes
+ * 1- ccmod_xxx_init()
+ * 2- ccmod_xxx_decrypt()
+ * 3- ccmod_xxx_encrypt()
+ *
+ * stateful modes CCM and GCM: They provide 7 interface functions that return error codes if a function is called out of state
+ * 1- ccmod_xxx_init()
+ * 2- ccmod_xxx_setiv()
+ * 3- ccmod_xxx_aad()
+ * 4- ccmod_xxx_decrypt()
+ * 5- ccmod_xxx_encrypt()
+ * 6- ccmod_xxx_finalize()
+ * 7- ccmod_xxx_reset()
+ *
+ * the correct call sequences are:
+ *
+ * calls to 1, 2 and 6 arerequired
+ * 2 and 3 can be called as mant times as needed
+ * calls to 3, 4, 5 can be skipped
+ *
+ * 1, 2*n, 3*n, 4|5, 6
+ * 1, 2*n, , 4|5, 6
+ * 1, 2*n, , , 6
+ * 1, 2*n, 3*n, , 6
+ */
+
+// 1- CBC mode, stateless