Fix rename oath when old name starts with the newer.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2026-03-06 18:55:30 +01:00
parent ac0462525a
commit 0e1512a135
2 changed files with 20 additions and 1 deletions

View File

@@ -625,7 +625,7 @@ int cmd_rename() {
if (asn1_find_tag(&ctxi, TAG_NAME, &new_name) == false) { if (asn1_find_tag(&ctxi, TAG_NAME, &new_name) == false) {
return SW_WRONG_DATA(); return SW_WRONG_DATA();
} }
if (memcmp(name.data, new_name.data, name.len) == 0) { if (name.len == new_name.len && memcmp(name.data, new_name.data, name.len) == 0) {
return SW_WRONG_DATA(); return SW_WRONG_DATA();
} }
file_t *ef = find_oath_cred(name.data, name.len); file_t *ef = find_oath_cred(name.data, name.len);

View File

@@ -25,6 +25,7 @@ INS_PUT = 0x01
INS_DELETE = 0x02 INS_DELETE = 0x02
INS_SET_CODE = 0x03 INS_SET_CODE = 0x03
INS_RESET = 0x04 INS_RESET = 0x04
INS_RENAME = 0x05
INS_LIST = 0xa1 INS_LIST = 0xa1
INS_CALCULATE = 0xa2 INS_CALCULATE = 0xa2
INS_VALIDATE = 0xa3 INS_VALIDATE = 0xa3
@@ -89,6 +90,24 @@ def test_life(reset_oath):
resp = list_apdu(reset_oath) resp = list_apdu(reset_oath)
assert(len(resp) == 0) assert(len(resp) == 0)
def test_rename_prefix_extension(reset_oath):
old_name = b"30/test"
new_name = b"30/test2"
key = list(bytes(b"foo bar"))
put_data = [TAG_NAME, len(old_name)] + list(old_name)
put_data += [TAG_KEY, len(key) + 2, TYPE_TOTP | ALG_SHA1, 6] + key
send_apdu(reset_oath, INS_PUT, p1=0, p2=0, data=put_data)
rename_data = [TAG_NAME, len(old_name)] + list(old_name)
rename_data += [TAG_NAME, len(new_name)] + list(new_name)
send_apdu(reset_oath, INS_RENAME, p1=0, p2=0, data=rename_data)
resp = list_apdu(reset_oath)
exp = [TAG_NAME_LIST, len(new_name) + 1, TYPE_TOTP | ALG_SHA1] + list(new_name)
assert resp == exp
def test_overwrite(reset_oath): def test_overwrite(reset_oath):
data = data_name + data_key data = data_name + data_key
resp = send_apdu(reset_oath, INS_PUT, p1=0, p2=0, data=list(data)) resp = send_apdu(reset_oath, INS_PUT, p1=0, p2=0, data=list(data))