diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 74fe471..b00aac1 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -254,7 +254,7 @@ int gpg_dispatch() { /* --- ACTIVATE/TERMINATE FILE --- */ case INS_ACTIVATE_FILE: gpg_io_discard(0); - if (N_gpg_pstate->histo[7] == STATE_TERMINATE) { + if (N_gpg_pstate->histo[12] == STATE_TERMINATE) { gpg_install(STATE_ACTIVATE); } return SW_OK; @@ -272,7 +272,7 @@ int gpg_dispatch() { } /* Other commands allowed if not terminated */ - if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + if (N_gpg_pstate->histo[12] != STATE_ACTIVATE) { return SW_STATE_TERMINATED; } diff --git a/src/gpg_init.c b/src/gpg_init.c index 37c0e9c..9624e61 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -269,6 +269,11 @@ const unsigned char C_default_Histo[] = { 0xC0, // select method: by DF/partialDF , 0x01, // data coding style: ontime/byte 0x80, // chaining + 0x00, // Padding zero bytes + 0x00, + 0x00, + 0x00, + 0x00, 0x7F, // zero state 0x90, 0x00}; @@ -409,7 +414,7 @@ void gpg_install(unsigned char app_state) { // historical bytes memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); - G_gpg_vstate.work.io_buffer[7] = app_state; + G_gpg_vstate.work.io_buffer[sizeof(C_default_Histo) - 3] = app_state; nvm_write((void *) (N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, sizeof(C_default_Histo)); // AID diff --git a/src/gpg_select.c b/src/gpg_select.c index af68837..f925574 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -51,7 +51,7 @@ int gpg_apdu_select() { } gpg_io_discard(0); - if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + if (N_gpg_pstate->histo[12] != STATE_ACTIVATE) { sw = SW_STATE_TERMINATED; } else { sw = SW_OK;