C-Netz: Add authentication support (process only)

No real authentication, since the algorithm and the keys inside the cards
are not known. A challenge can be specified and optionally the response
can be verified.
This commit is contained in:
Andreas Eversberg
2019-06-29 07:49:28 +02:00
parent 5d9a9b59c3
commit 13245c56f6
11 changed files with 220 additions and 76 deletions

View File

@@ -38,7 +38,7 @@ const char *transaction2rufnummer(transaction_t *trans)
}
/* create transaction */
transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, int extended)
transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, int futelg_bit, int extended)
{
sender_t *sender;
transaction_t *trans = NULL;
@@ -88,7 +88,9 @@ transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_
link_transaction(trans, cnetz);
/* update database: now busy */
trans->extended = update_db(cnetz, futln_nat, futln_fuvst, futln_rest, extended, 1, 0);
update_db(cnetz, futln_nat, futln_fuvst, futln_rest, &futelg_bit, &extended, 1, 0);
trans->futelg_bit = futelg_bit;
trans->extended = extended;
return trans;
}
@@ -97,7 +99,7 @@ transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_
void destroy_transaction(transaction_t *trans)
{
/* update database: now idle */
update_db(trans->cnetz, trans->futln_nat, trans->futln_fuvst, trans->futln_rest, -1, 0, trans->page_failed);
update_db(trans->cnetz, trans->futln_nat, trans->futln_fuvst, trans->futln_rest, NULL, NULL, 0, trans->page_failed);
unlink_transaction(trans);
@@ -228,8 +230,14 @@ static const char *trans_state_name(uint64_t state)
return "VAK";
case TRANS_BQ:
return "BQ";
case TRANS_VHQ:
return "VHQ";
case TRANS_ZFZ:
return "ZFZ";
case TRANS_VHQ_K:
return "VHQ_K";
case TRANS_VHQ_V:
return "VHQ_V";
case TRANS_AP:
return "AP";
case TRANS_RTA:
return "RTA";
case TRANS_DS:
@@ -273,11 +281,15 @@ const char *trans_short_state_name(uint64_t state)
case TRANS_WBP:
case TRANS_WBN:
return "DIALING";
case TRANS_ZFZ:
case TRANS_AP:
return "AUTHENTICATE";
case TRANS_VAG:
case TRANS_WSK:
case TRANS_VAK:
case TRANS_BQ:
case TRANS_VHQ:
case TRANS_VHQ_K:
case TRANS_VHQ_V:
return "ASSIGN";
case TRANS_RTA:
return "ALERT";