#include "ed/inc/cs8.h"

/* macros ============================================================== */
/* constants =========================================================== */

#define M8 0xFFU

/* types =============================================================== */
/* structures ========================================================== */
/* private data ======================================================== */
/* private functions =================================================== */
/* internal public data ================================================ */
/* internal public functions =========================================== */
/* entry points ======================================================== */

/* ---------------------------------------------------------------------
   --------------------------------------------------------------------- */
uint cs8_compute (uchar const *const buf, size_t size)
{
   uint cs = 0;

   size_t i = 0;

   for (i = 0; i < size; i++)
   {
      cs += buf[i] & M8;
   }

   cs ^= M8;

   return cs & M8;
}

/* ---------------------------------------------------------------------
   --------------------------------------------------------------------- */
int cs8_check (uchar const *const buf, size_t size, uint cs)
{
   return (cs8_compute (buf, size) ^ (cs & M8)) == 0;
}

/* public data ========================================================= */
