summaryrefslogtreecommitdiff
path: root/nacl/curvecp/hexparse.c
blob: 43bfe0449088b3d590ad807432f2afc5367e9f8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "hexparse.h"

static int hexdigit(char x)
{
  if (x >= '0' && x <= '9') return x - '0';
  if (x >= 'a' && x <= 'f') return 10 + (x - 'a');
  if (x >= 'A' && x <= 'F') return 10 + (x - 'A');
  return -1;
}

int hexparse(unsigned char *y,long long len,const char *x)
{
  if (!x) return 0;
  while (len > 0) {
    int digit0;
    int digit1;
    digit0 = hexdigit(x[0]); if (digit0 == -1) return 0;
    digit1 = hexdigit(x[1]); if (digit1 == -1) return 0;
    *y++ = digit1 + 16 * digit0;
    --len;
    x += 2;
  }
  if (x[0]) return 0;
  return 1;
}