Removing stuff with old read/write. Currently OPENPGP does not work and it won't until we finish the migration.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2022-02-07 11:14:33 +01:00
parent 0c43939de2
commit bb5da16da6

View File

@@ -50,7 +50,8 @@ static const uint8_t *pw_err_counter_p[3];
static int static int
gpg_pw_get_err_counter (uint8_t which) gpg_pw_get_err_counter (uint8_t which)
{ {
return flash_cnt123_get_value (pw_err_counter_p[which]); //return flash_cnt123_get_value (pw_err_counter_p[which]);
return 3;
} }
int int
@@ -76,7 +77,7 @@ gpg_pw_locked (uint8_t which)
void void
gpg_pw_reset_err_counter (uint8_t which) gpg_pw_reset_err_counter (uint8_t which)
{ {
flash_cnt123_clear (&pw_err_counter_p[which]); //flash_cnt123_clear (&pw_err_counter_p[which]);
if (pw_err_counter_p[which] != NULL) if (pw_err_counter_p[which] != NULL)
GPG_MEMORY_FAILURE (); GPG_MEMORY_FAILURE ();
} }
@@ -84,7 +85,7 @@ gpg_pw_reset_err_counter (uint8_t which)
void void
gpg_pw_increment_err_counter (uint8_t which) gpg_pw_increment_err_counter (uint8_t which)
{ {
flash_cnt123_increment (which, &pw_err_counter_p[which]); //flash_cnt123_increment (which, &pw_err_counter_p[which]);
} }
@@ -385,15 +386,15 @@ gpg_write_digital_signature_counter (const uint8_t *p, uint32_t dsc)
if ((dsc >> 10) == 0) if ((dsc >> 10) == 0)
{ /* no upper bits */ { /* no upper bits */
hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8); hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8);
flash_put_data_internal (p, hw1); //flash_put_data_internal (p, hw1);
return p+2; return p+2;
} }
else else
{ {
hw0 = NR_COUNTER_DS | ((dsc & 0xfc0000) >> 18) | ((dsc & 0x03fc00) >> 2); hw0 = NR_COUNTER_DS | ((dsc & 0xfc0000) >> 18) | ((dsc & 0x03fc00) >> 2);
hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8); hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8);
flash_put_data_internal (p, hw0); //flash_put_data_internal (p, hw0);
flash_put_data_internal (p+2, hw1); //flash_put_data_internal (p+2, hw1);
return p+4; return p+4;
} }
} }
@@ -403,8 +404,8 @@ gpg_reset_digital_signature_counter (void)
{ {
if (digital_signature_counter != 0) if (digital_signature_counter != 0)
{ {
flash_put_data (NR_COUNTER_DS); //flash_put_data (NR_COUNTER_DS);
flash_put_data (NR_COUNTER_DS_LSB); //flash_put_data (NR_COUNTER_DS_LSB);
digital_signature_counter = 0; digital_signature_counter = 0;
} }
} }
@@ -419,13 +420,13 @@ gpg_increment_digital_signature_counter (void)
{ /* carry occurs from l10 to h14 */ { /* carry occurs from l10 to h14 */
hw0 = NR_COUNTER_DS | ((dsc & 0xfc0000) >> 18) | ((dsc & 0x03fc00) >> 2); hw0 = NR_COUNTER_DS | ((dsc & 0xfc0000) >> 18) | ((dsc & 0x03fc00) >> 2);
hw1 = NR_COUNTER_DS_LSB; /* zero */ hw1 = NR_COUNTER_DS_LSB; /* zero */
flash_put_data (hw0); //flash_put_data (hw0);
flash_put_data (hw1); //flash_put_data (hw1);
} }
else else
{ {
hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8); hw1 = NR_COUNTER_DS_LSB | ((dsc & 0x0300) >> 8) | ((dsc & 0x00ff) << 8);
flash_put_data (hw1); //flash_put_data (hw1);
} }
digital_signature_counter = dsc; digital_signature_counter = dsc;
@@ -657,6 +658,7 @@ do_kgtime_all (uint16_t tag, int with_tag)
} }
const uint8_t openpgpcard_aid[] = { const uint8_t openpgpcard_aid[] = {
14, //len
0xd2, 0x76, /* D: National, 276: DEU ISO 3166-1 */ 0xd2, 0x76, /* D: National, 276: DEU ISO 3166-1 */
0x00, 0x01, 0x24, /* Registered Application Provider Identifier */ 0x00, 0x01, 0x24, /* Registered Application Provider Identifier */
0x01, /* Application: OpenPGPcard */ 0x01, /* Application: OpenPGPcard */
@@ -665,6 +667,11 @@ const uint8_t openpgpcard_aid[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* To be overwritten */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* To be overwritten */
}; };
const uint8_t sc_hsm_aid[] = {
11,
0xE8,0x2B,0x06,0x01,0x04,0x01,0x81,0xC3,0x1F,0x02,0x01
};
static void static void
do_openpgpcard_aid (uint16_t tag, int with_tag) do_openpgpcard_aid (uint16_t tag, int with_tag)
{ {
@@ -765,13 +772,13 @@ rw_pw_status (uint16_t tag, int with_tag,
/* The first byte of DATA specifies the lifetime. */ /* The first byte of DATA specifies the lifetime. */
if (data[0] == 0 && pw1_lifetime_p != NULL) if (data[0] == 0 && pw1_lifetime_p != NULL)
{ {
flash_bool_clear (&pw1_lifetime_p); //flash_bool_clear (&pw1_lifetime_p);
if (pw1_lifetime_p != NULL) /* No change after update */ if (pw1_lifetime_p != NULL) /* No change after update */
return 0; return 0;
} }
else if (pw1_lifetime_p == NULL) else if (pw1_lifetime_p == NULL)
{ {
pw1_lifetime_p = flash_bool_write (NR_BOOL_PW1_LIFETIME); //pw1_lifetime_p = flash_bool_write (NR_BOOL_PW1_LIFETIME);
if (pw1_lifetime_p == NULL) /* No change after update */ if (pw1_lifetime_p == NULL) /* No change after update */
return 0; return 0;
} }
@@ -846,7 +853,7 @@ rw_algorithm_attr (uint16_t tag, int with_tag,
gpg_reset_algo_attr (kk); gpg_reset_algo_attr (kk);
/* Read it again, since GC may occur. */ /* Read it again, since GC may occur. */
algo_attr_pp = get_algo_attr_pointer (kk); algo_attr_pp = get_algo_attr_pointer (kk);
flash_enum_clear (algo_attr_pp); //flash_enum_clear (algo_attr_pp);
if (*algo_attr_pp != NULL) if (*algo_attr_pp != NULL)
return 0; return 0;
} }
@@ -856,9 +863,9 @@ rw_algorithm_attr (uint16_t tag, int with_tag,
gpg_reset_algo_attr (kk); gpg_reset_algo_attr (kk);
/* Read it again, since GC may occur. */ /* Read it again, since GC may occur. */
algo_attr_pp = get_algo_attr_pointer (kk); algo_attr_pp = get_algo_attr_pointer (kk);
if (*algo_attr_pp) //if (*algo_attr_pp)
flash_enum_clear (algo_attr_pp); // flash_enum_clear (algo_attr_pp);
*algo_attr_pp = flash_enum_write (kk_to_nr (kk), algo); //*algo_attr_pp = flash_enum_write (kk_to_nr (kk), algo);
if (*algo_attr_pp == NULL) if (*algo_attr_pp == NULL)
return 0; return 0;
} }
@@ -985,8 +992,8 @@ rw_kdf (uint16_t tag, int with_tag, const uint8_t *data, int len, int is_write)
&& data[42] == 0x87 && data[76] == 0x88)))) && data[42] == 0x87 && data[76] == 0x88))))
return 0; return 0;
if (*do_data_p) //if (*do_data_p)
flash_do_release (*do_data_p); //flash_do_release (*do_data_p);
/* Clear all keystrings and auth states */ /* Clear all keystrings and auth states */
gpg_do_write_simple (NR_DO_KEYSTRING_PW1, NULL, 0); gpg_do_write_simple (NR_DO_KEYSTRING_PW1, NULL, 0);
@@ -1003,7 +1010,7 @@ rw_kdf (uint16_t tag, int with_tag, const uint8_t *data, int len, int is_write)
} }
else else
{ {
*do_data_p = flash_do_write (NR_DO_KDF, data, len); //*do_data_p = flash_do_write (NR_DO_KDF, data, len);
if (*do_data_p) if (*do_data_p)
return 1; return 1;
else else
@@ -1325,20 +1332,20 @@ gpg_do_delete_prvkey (enum kind_of_key kk, int clean_page_full)
if (do_data == NULL) if (do_data == NULL)
{ {
if (clean_page_full) // if (clean_page_full)
flash_key_release_page (kk); //flash_key_release_page (kk);
return; return;
} }
do_ptr[nr] = NULL; do_ptr[nr] = NULL;
flash_do_release (do_data); //flash_do_release (do_data);
key_addr = (uint8_t *)kd[kk].pubkey - prvkey_len; key_addr = (uint8_t *)kd[kk].pubkey - prvkey_len;
kd[kk].pubkey = NULL; kd[kk].pubkey = NULL;
if (clean_page_full) /*if (clean_page_full)
flash_key_release_page (kk); flash_key_release_page (kk);
else else
flash_key_release (key_addr, key_size); flash_key_release (key_addr, key_size);
*/
if (admin_authorized == BY_ADMIN && kk == GPG_KEY_FOR_SIGNING) if (admin_authorized == BY_ADMIN && kk == GPG_KEY_FOR_SIGNING)
{ /* Recover admin keystring DO. */ { /* Recover admin keystring DO. */
const uint8_t *ks_pw3 = gpg_do_read_simple (NR_DO_KEYSTRING_PW3); const uint8_t *ks_pw3 = gpg_do_read_simple (NR_DO_KEYSTRING_PW3);
@@ -1455,7 +1462,7 @@ gpg_do_write_prvkey (enum kind_of_key kk, const uint8_t *key_data,
} }
DEBUG_INFO ("Getting keystore address...\r\n"); DEBUG_INFO ("Getting keystore address...\r\n");
key_addr = flash_key_alloc (kk); //key_addr = flash_key_alloc (kk);
if (key_addr == NULL) if (key_addr == NULL)
return -1; return -1;
@@ -1515,7 +1522,7 @@ gpg_do_write_prvkey (enum kind_of_key kk, const uint8_t *key_data,
else else
memset (pd->dek_encrypted_3, 0, DATA_ENCRYPTION_KEY_SIZE); memset (pd->dek_encrypted_3, 0, DATA_ENCRYPTION_KEY_SIZE);
p = flash_do_write (nr, (const uint8_t *)pd, sizeof (struct prvkey_data)); //p = flash_do_write (nr, (const uint8_t *)pd, sizeof (struct prvkey_data));
do_ptr[nr] = p; do_ptr[nr] = p;
random_bytes_free (dek); random_bytes_free (dek);
@@ -1592,9 +1599,9 @@ gpg_do_chks_prvkey (enum kind_of_key kk,
{ {
const uint8_t *p; const uint8_t *p;
flash_do_release (do_data); //flash_do_release (do_data);
do_ptr[nr] = NULL; do_ptr[nr] = NULL;
p = flash_do_write (nr, (const uint8_t *)pd, sizeof (struct prvkey_data)); //p = flash_do_write (nr, (const uint8_t *)pd, sizeof (struct prvkey_data));
do_ptr[nr] = p; do_ptr[nr] = p;
if (p == NULL) if (p == NULL)
r = -1; r = -1;
@@ -2002,7 +2009,7 @@ gpg_data_scan (const uint8_t *do_start, const uint8_t *do_end)
} }
} }
flash_set_data_pool_last (p); //flash_set_data_pool_last (p);
num_prv_keys = 0; num_prv_keys = 0;
if (do_ptr[NR_DO_PRVKEY_SIG] != NULL) if (do_ptr[NR_DO_PRVKEY_SIG] != NULL)
@@ -2037,79 +2044,6 @@ gpg_data_scan (const uint8_t *do_start, const uint8_t *do_end)
digital_signature_counter = (dsc_h14 << 10) | dsc_l10; digital_signature_counter = (dsc_h14 << 10) | dsc_l10;
} }
/*
* Write all data to newly allocated Flash ROM page (from P_START),
* updating PW1_LIFETIME_P, PW_ERR_COUNTER_P, and DO_PTR.
* Called by flash_copying_gc.
*/
void
gpg_data_copy (const uint8_t *p_start)
{
const uint8_t *p;
int i;
int v;
p = gpg_write_digital_signature_counter (p_start, digital_signature_counter);
if (pw1_lifetime_p != NULL)
{
flash_bool_write_internal (p, NR_BOOL_PW1_LIFETIME);
pw1_lifetime_p = p;
p += 2;
}
if (algo_attr_sig_p != NULL)
{
flash_enum_write_internal (p, NR_KEY_ALGO_ATTR_SIG, algo_attr_sig_p[1]);
algo_attr_sig_p = p;
p += 2;
}
if (algo_attr_dec_p != NULL)
{
flash_enum_write_internal (p, NR_KEY_ALGO_ATTR_DEC, algo_attr_dec_p[1]);
algo_attr_dec_p = p;
p += 2;
}
if (algo_attr_aut_p != NULL)
{
flash_enum_write_internal (p, NR_KEY_ALGO_ATTR_AUT, algo_attr_aut_p[1]);
algo_attr_aut_p = p;
p += 2;
}
for (i = 0; i < 3; i++)
if ((v = flash_cnt123_get_value (pw_err_counter_p[i])) != 0)
{
flash_cnt123_write_internal (p, i, v);
pw_err_counter_p[i] = p + 2;
p += 4;
}
for (i = 0; i < 3; i++)
if ((v = (uif_flags >> (i * 2)) & 3))
{
flash_enum_write_internal (p, NR_DO_UIF_SIG + i, v);
p += 2;
}
data_objects_number_of_bytes = 0;
for (i = 0; i < NR_DO__LAST__; i++)
if (do_ptr[i] != NULL)
{
const uint8_t *do_data = do_ptr[i];
int len = do_data[0];
flash_do_write_internal (p, i, &do_data[1], len);
do_ptr[i] = p + 1;
p += 2 + ((len + 1) & ~1);
data_objects_number_of_bytes += len;
}
flash_set_data_pool_last (p);
}
static const struct do_table_entry * static const struct do_table_entry *
get_do_entry (uint16_t tag) get_do_entry (uint16_t tag)
{ {
@@ -2236,7 +2170,7 @@ gpg_do_get_data (uint16_t tag, int with_tag)
#if defined(CERTDO_SUPPORT) #if defined(CERTDO_SUPPORT)
if (tag == GPG_DO_CH_CERTIFICATE) if (tag == GPG_DO_CH_CERTIFICATE)
{ {
apdu.res_apdu_data = (uint8_t *)ch_certificate_start; //apdu.res_apdu_data = (uint8_t *)ch_certificate_start;
apdu.res_apdu_data_len = ((apdu.res_apdu_data[2] << 8) | apdu.res_apdu_data[3]); apdu.res_apdu_data_len = ((apdu.res_apdu_data[2] << 8) | apdu.res_apdu_data[3]);
if (apdu.res_apdu_data_len == 0xffff) if (apdu.res_apdu_data_len == 0xffff)
{ {
@@ -2300,8 +2234,8 @@ gpg_do_put_data (uint16_t tag, const uint8_t *data, int len)
{ {
const uint8_t **do_data_p = (const uint8_t **)do_p->obj; const uint8_t **do_data_p = (const uint8_t **)do_p->obj;
if (*do_data_p) // if (*do_data_p)
flash_do_release (*do_data_p); // flash_do_release (*do_data_p);
if (len == 0) if (len == 0)
{ {
@@ -2320,7 +2254,7 @@ gpg_do_put_data (uint16_t tag, const uint8_t *data, int len)
else else
{ {
*do_data_p = NULL; *do_data_p = NULL;
*do_data_p = flash_do_write (nr, data, len); //*do_data_p = flash_do_write (nr, data, len);
if (*do_data_p) if (*do_data_p)
GPG_SUCCESS (); GPG_SUCCESS ();
else else
@@ -2476,13 +2410,13 @@ gpg_do_write_simple (uint8_t nr, const uint8_t *data, int size)
const uint8_t **do_data_p; const uint8_t **do_data_p;
do_data_p = (const uint8_t **)&do_ptr[nr]; do_data_p = (const uint8_t **)&do_ptr[nr];
if (*do_data_p) //if (*do_data_p)
flash_do_release (*do_data_p); // flash_do_release (*do_data_p);
if (data != NULL) if (data != NULL)
{ {
*do_data_p = NULL; *do_data_p = NULL;
*do_data_p = flash_do_write (nr, data, size); //*do_data_p = flash_do_write (nr, data, size);
if (*do_data_p == NULL) if (*do_data_p == NULL)
flash_warning ("DO WRITE ERROR"); flash_warning ("DO WRITE ERROR");
} }