/*
 * srp.h
 *
 *  Created on: Jun 10, 2015
 *      Author: tim
 */

#ifndef HOMEKIT_SRP_SRP_H_
#define HOMEKIT_SRP_SRP_H_

#define BIGNUM_BYTES        384
#define BIGNUM_WORDS        (BIGNUM_BYTES / 4)

#define DEBUG_SRP     0
#define TEST_APPLE    0

typedef struct
{
  uint8_t b[32];
  uint8_t salt[16];
  uint8_t v[384];
  uint8_t B[384];

  uint8_t K[64];
  uint8_t M1[64];
  uint8_t M2[64];

  uint8_t clientM1:1;
  uint8_t serverM1:1;
} srp_keys_t;

#ifdef __cplusplus
extern "C"
{
#endif

extern srp_keys_t srp;

typedef void (*moretime_t)(void);

extern void srp_init(void);
extern void srp_start(void);
extern uint8_t srp_setA(uint8_t* a, uint16_t length, moretime_t moretime);
extern uint8_t srp_checkM1(uint8_t* m1, uint16_t length);
extern uint8_t* srp_getSalt(void);
extern uint8_t* srp_getB(void);
extern uint8_t* srp_getM2(void);
extern uint8_t* srp_getK(void);

#ifdef __cplusplus
}
#endif

#endif /* HOMEKIT_SRP_SRP_H_ */