#include <common.h>
#include <stdint.h>
#include <rsa_public_key.h>
#include <board_id.h>

#define MAX_BOARD_ID	SIDESWIPE_BOARD_ID

static int board_id_to_key_index[] = {
	0, /* OPTIMUS_BOARD_ID */
	0, /* SIDESWIPE_BOARD_ID */
};

/*
 * The keys are generated from generate_public_key_code.c
 */
static const struct rsa_public_key public_keys[] = {
	/* Optimus / Sideswipe */
	{ .n0inv = 324625445u,
	  .modulus = {
			0xdd47e853, 0xcc40a072, 0xccc006f4, 0xc941d763, 0x8f53aa97, 0x26f1e34a,
			0xb476f79a, 0xf4aaaaaa, 0x676ae350, 0xd8b0d648, 0x18fc6347, 0x984bb7d3,
			0xa894b4a0, 0x51ea64c3, 0xeda9ea3c, 0xdcff20c7, 0x88afc95f, 0xa485fce7,
			0xd7010b97, 0x6e821430, 0xf836bbda, 0x004b61fe, 0xcddcc51a, 0x8e2f01f0,
			0x92647f40, 0xb60cc2e2, 0x570c6692, 0x40e51f0a, 0x34e9036f, 0x6b56ad55,
			0xe4d044e4, 0x2d32bd77, 0xfed334b5, 0x7505311f, 0x98f0fc46, 0xa557619e,
			0xb1158093, 0xf3a785c1, 0xf6e77d38, 0xe0e29c9b, 0x3aba8b7f, 0x212ee1f4,
			0x636549c6, 0x5bc9597b, 0xf2f35938, 0xf0ab94b7, 0x63519a73, 0x62dd79e6,
			0x3e0863f8, 0xf9d67dab, 0x2dbf66b7, 0x45bb69e6, 0xdc3836bb, 0xd253d7f4,
			0x975d5f43, 0x40eac67c, 0xd27139fa, 0xb2c73104, 0xced1c1f2, 0x7353f693,
			0xee23ed71, 0xc710fdf4, 0x330f3b81, 0xb4a49e97
		},
	  .rr = {
			0xc416ec5a, 0x8f35e335, 0x7860fdb6, 0xe3dd9018, 0xb021e1a8, 0x950621cb,
			0xb4d3c3e5, 0xe52c0288, 0x25366c47, 0xae481186, 0x8f4f42e4, 0x5203857d,
			0x60517eb4, 0xa49474c0, 0x952bdc12, 0xbdba6b4b, 0xac90fe1d, 0xbf7e29f9,
			0x41fb4116, 0xc2b9ca56, 0xf48e1cbd, 0xe7f43887, 0xebdf65f6, 0x694773f6,
			0x1efd33be, 0x4d7c0c9d, 0xd01b12f9, 0xde65788a, 0x93db7132, 0x8a8e23b1,
			0x0faab0b6, 0x7fd78d30, 0xe7e04e64, 0xdd0b2eab, 0xa93630d2, 0x07928be0,
			0x4ff324a5, 0x494b52da, 0xbed79044, 0x93d5c5b6, 0xdfb6b89b, 0x3c0ad0f5,
			0xdfaf19b6, 0x07d4e67f, 0xba2fc62a, 0x58697a86, 0x1c973e7f, 0x66a26c99,
			0x45a0ded5, 0x4f69d633, 0xbe326828, 0xd9d31655, 0x699b6a54, 0x2cb1ee8b,
			0x69dcbbc0, 0x9469b4fa, 0xf3b23e6b, 0x886ec86a, 0x2e9410a9, 0xa41074cf,
			0xa4c4ca4f, 0xd3ec5963, 0xf36f1929, 0x22bf4a0b
		}
	},
};

static int get_key_id(int board_id) {
	if ((board_id < 0) || (board_id > MAX_BOARD_ID)) {
		printf("Invalid board ID: %d\n", board_id);
		return -1;
	}

	return board_id_to_key_index[board_id];
}

int rsa_get_public_key(int board_id, const struct rsa_public_key **key) {
	int index = get_key_id(board_id);
	if (index < 0) {
		return -1;
	}

	*key = &public_keys[index];

	return 0;
}
