blob: 84e86607041e0eb7932b700594e4dd9715a7ea2f [file] [log] [blame]
#include <common.h>
#include <stdint.h>
#include <rsa_public_key.h>
#include <board_id.h>
#define MAX_BOARD_ID SPACECAST_BOARD_ID
static int board_id_to_key_index[] = {
0, /* OPTIMUS_BOARD_ID */
0, /* SIDESWIPE_BOARD_ID */
1, /* SPACECAST_BOARD_ID */
-1, /* UNASSIGNED_BOARD_ID */
0, /* OPTIMUS_PRIME_BOARD_ID */
0, /* SIDESWIPE_PRIME_BOARD_ID */
};
/*
* The keys are generated from generate_public_key_code.c
*/
#ifndef CONFIG_COMCERTO_BOOTLOADER
/* Keys to verify the signature of Barebox */
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
}
},
/* SpaceCast */
{ .n0inv = 810249397u,
.modulus = {
0x6a50de63, 0x3040dda3, 0xb055e6ac, 0x6bf8de72, 0xa4a5ab53, 0x84edb6d8,
0x52fb91aa, 0xb3b17524, 0x7ced643f, 0x887d958f, 0x7e9c74fe, 0xb0501334,
0x27f00dea, 0x2d1521c5, 0xc6ba2dd3, 0x573e8cce, 0x56a69f52, 0x284bee21,
0x0cb26d61, 0x2c336a09, 0x143f9d44, 0x928c224f, 0x5468a697, 0x714b716a,
0x17760fcb, 0xba3a0e45, 0x05ecd6de, 0x5698fad1, 0x5fe3f42b, 0xd81d59bf,
0xb1aa588b, 0x954b54bf, 0x149121cb, 0xb1137ff8, 0x48fe0df8, 0x9c4d3a1f,
0x7ab01207, 0x5090b948, 0xb6438e5d, 0x407aee2e, 0x4f9806e4, 0xf5789b89,
0x03894a74, 0x00326f7c, 0x3798956c, 0xc0d34857, 0xb9c4a166, 0x525f7968,
0x2f7172f6, 0xb45071f5, 0x6dead442, 0x3fcbfc1f, 0x44308880, 0xba7e3fd8,
0xb802d128, 0x786ecc50, 0x2af891f6, 0x80685385, 0xc8695ed2, 0x3ac79fd3,
0xaa18dcc3, 0x75b67ea1, 0xf6ebfd40, 0xd81f9abd
},
.rr = {
0xe57d1491, 0x314d95bb, 0xd1934a17, 0x97ff927d, 0x538863de, 0xab32e57b,
0x1d293896, 0x96203ed5, 0xe800e4f4, 0xdc39472d, 0x2b86e9f5, 0x7fd34b1c,
0x941bfd55, 0x7d29bf70, 0xaa23fcbc, 0x76004c4a, 0x2b2c49b5, 0x2cbfd2ac,
0x35fa4ac4, 0x58ce6253, 0xa1776240, 0x3b8a88a7, 0xf3e02089, 0xfcc8b094,
0xa64531b1, 0x738e37ff, 0xecc02cf0, 0xd08b2f83, 0x51a4d213, 0x6a811739,
0x01727767, 0x5b7622b1, 0xc6ca8cca, 0x6b25494c, 0xca958919, 0x99a5515b,
0xaf10e85b, 0xdec2c965, 0x77499264, 0x9d484ef7, 0xd6242f98, 0xe29393b6,
0x685e86be, 0x1a2b9d6e, 0x8fa96dd7, 0xdec3e850, 0x186d5fe8, 0x40967d10,
0x410e5956, 0xd0d6c4e7, 0xec9e2673, 0x3369eff8, 0x6e0a9e38, 0x62f67601,
0x4122d3fc, 0xa7edf9a2, 0xbd1ee5e2, 0x16ed1a09, 0x4ee93acf, 0xe03312ef,
0xe7aac0b6, 0xd61ec12a, 0x2f88804a, 0x66968d4f
},
},
};
#else
/* Keys to verify the signature of the Linux kernel */
static const struct rsa_public_key public_keys[] = {
/* Optimus / Sideswipe (same key as for Barebox) */
{ .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
}
},
/* SpaceCast */
{ .n0inv = 2823309225u,
.modulus = {
0xfc50b367, 0x1fb911d9, 0x288cc6c6, 0x4914e135, 0x1f5b469a, 0x471274cd,
0x21806adc, 0xa139ba92, 0x442f7796, 0x44183483, 0x2c68bad2, 0x6c5ca18a,
0xbafd7213, 0x505fcebf, 0x0979e4b9, 0xa4582dec, 0x10e9e4de, 0x9ca9d12e,
0xeea818ed, 0x9eff1262, 0xab58d203, 0x4095c3fd, 0x4e6e012a, 0x4c39b955,
0xf64e8010, 0x4fc0a794, 0x967cbf92, 0xd39e2d03, 0xe0091a07, 0x140eda30,
0xaf3ac27c, 0xbe82e9ff, 0x729b12ac, 0x98fae091, 0x6350a44a, 0xe10e0548,
0x7fd91960, 0x4b903720, 0x3268a194, 0x6e880413, 0x768b5297, 0x24ce8d88,
0x398356b3, 0x88ca3193, 0x458ecb86, 0xf25696a6, 0xd32c8972, 0x00e876d0,
0x6c5716c3, 0x0efb7e2c, 0xa7d7fac6, 0xf6ef74ac, 0xe2bf77d7, 0x9be3b4e9,
0x0f49d81d, 0x206060e3, 0x2f400bbe, 0x4e2bf784, 0x0a0b38eb, 0xdc4f319f,
0xff1c7f2d, 0x80a57d93, 0xd38f9d6f, 0xc4c0a36b
},
.rr = {
0x1e81e6a8, 0x219f1c50, 0x2c0bb2f7, 0x51b3f5ff, 0x7d1af2de, 0x04c70430,
0x67d2309f, 0xa6cae5a0, 0x80f18f2d, 0x1ecd7ef1, 0xbb509a3f, 0xbd37399b,
0x486bd510, 0xf75f543d, 0xaeeea0a4, 0x797d3193, 0x6d88f643, 0x2b2d9034,
0xaecae630, 0xcdfb16ee, 0x063a4148, 0x6ea42094, 0xca7682d4, 0xae7e5d02,
0xe3010c28, 0x4f6dccfe, 0xb213e106, 0x113a5e32, 0x53dfe3f7, 0x86daefad,
0x14d92242, 0xa19f3f5f, 0xb066f02f, 0x1d0f308d, 0x5602a6c1, 0x76ddf03e,
0x978483d1, 0x0622cbe5, 0x0e5e2772, 0x88570f42, 0xeea9bbdc, 0xc12b4991,
0xc4e63516, 0xf8e8707a, 0xecdee3bd, 0xc25c2079, 0x481f382f, 0x563c502b,
0x1a341fd2, 0x8e2d10e4, 0xb2c60249, 0x3235d027, 0x32df7140, 0x9ffce524,
0x1c8d6bf7, 0x003941ad, 0x74bf0d98, 0x18e77f88, 0xd8b38212, 0xc9b52ba2,
0x137b5417, 0x114fddce, 0x096edf7c, 0x636ba76b
},
},
};
#endif
#ifdef CONFIG_COMCERTO_BOOTLOADER
/* Keys to verify the signature of a recovery image */
static const struct rsa_public_key recovery_keys[] = {
/* Optimus / Sideswipe */
{
},
/* SpaceCast */
{ .n0inv = 2795114361u,
.modulus = {
0xe17fd537, 0xa3c8cb00, 0x932ee36d, 0xc73c251a, 0xfab26fa4, 0x60c7ab00,
0x1468dbfd, 0xcff11b21, 0xcff22a1d, 0x98057ec2, 0x052fc7ea, 0x8adc183c,
0xcb273fca, 0xca676ea5, 0x32ec71b3, 0xf85c1297, 0xd1361b2f, 0x3b042ba7,
0x6f1298a3, 0x3cbb1ec3, 0xf3f3236f, 0xc5911a46, 0x5763bb53, 0x8245bffc,
0xca4164d8, 0xc1bf0062, 0x85471268, 0x68a0c01d, 0x3c296f90, 0xabd8d75d,
0xe23924fa, 0xcc5662cf, 0x77a4d814, 0x113c5183, 0x31e559ba, 0xb6c08aa4,
0x22a2bef9, 0x313739a1, 0xa8a57320, 0xab7241eb, 0x9e0c9dea, 0x01c255eb,
0xe40b3989, 0x2f01f596, 0x8356d053, 0x78e23be2, 0x8f0d9f9f, 0x09022096,
0x34a371a4, 0x0920ec0a, 0x5436f15d, 0x747537ec, 0xaf363081, 0xdbb6cc2e,
0x229d8b82, 0x4b9b298c, 0x7bf3f4c9, 0xf2447fb3, 0xf95c482f, 0x4413e804,
0x122bab97, 0x4f99ee1e, 0x148b2564, 0xad1c425d
},
.rr = {
0xb5e135c2, 0xe5d20b16, 0xd657f9f6, 0xe957d210, 0x9dfd33c9, 0x71bedfc7,
0xeb570397, 0x356df96e, 0x30d89660, 0x90f4f10a, 0x88113810, 0x785cf0e1,
0xb14858e8, 0xd7aeba86, 0xc7995ce2, 0x14872d4e, 0x1d87cf00, 0xa97490ff,
0x8c4bdf64, 0x61dcbe9d, 0x989499eb, 0x4bd61725, 0x9625bf64, 0x288391af,
0xbfaa0134, 0xf90b0d27, 0x951a1bd2, 0xa9f5468f, 0x76e41638, 0xefcb50f4,
0xaa8eec52, 0x0421f434, 0xbf89794f, 0x08ed9a86, 0x9808d3e7, 0xc34c72f8,
0xd25c759a, 0x10d0442c, 0x35e606fc, 0x977e88e8, 0x2c3b4f81, 0x973bcf11,
0x7704760d, 0xbba4cbcd, 0xf0fe3a2b, 0x76813378, 0x90791b81, 0xad678e73,
0x8620d2cc, 0x3fa28ae1, 0xdf9f91c3, 0xba2fa335, 0x4dffb2c0, 0x61c27230,
0x98665fe1, 0x6378d57b, 0xcbb52ffd, 0xecda0f98, 0x69635ba9, 0xe9f2d4a1,
0x8ae1b8d7, 0x079a8d27, 0x62294cff, 0x75017f67
},
},
};
#endif
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;
}
#ifdef CONFIG_COMCERTO_BOOTLOADER
int rsa_get_recovery_key(int board_id, const struct rsa_public_key **key) {
int index = get_key_id(board_id);
if (index < 0) {
return -1;
}
*key = &recovery_keys[index];
return 0;
}
#endif