#include "../lib/md2.h"

// include all implementations
#include "../lib/md2_impls/md2_0.h"
#include "../lib/md2_impls/md2_1.h"
#include "../lib/md2_impls/md2_2.h"
#include "../lib/md2_impls/md2_3.h"
#include "../lib/md2_impls/md2_reference/md2_reference.h"

md2_hash_func md2_hash;
md2_checksum_func md2_checksum;

// The file "testfile" should lead to this hash:
// fc982e558db259f298b43cd4c1241c66

void md2_encode_hash(uint8_t hash[16], char* string_hash) {
  for (int i = 0; i < 16; i++) {
    sprintf(string_hash + (2 * i), "%02x", hash[i]);
  }
}

bool md2_choose_implementation(int i) {
  switch (i) {
    case 0:
      md2_hash = md2_hash_0;
      md2_checksum = md2_checksum_0;
      return true;

    case 1:
      md2_hash = md2_hash_1;
      md2_checksum = md2_checksum_1;
      return true;

    case 2:
      md2_hash = md2_hash_2;
      md2_checksum = NULL;
      return true;

    case 3:
      md2_hash = md2_hash_3;
      md2_checksum = NULL;
      return true;

    case 4:
      md2_hash = md2_hash_ref;
      md2_checksum = NULL;
      return true;

    default:
      return false;
  }
}