mirror of
https://github.com/polhenarejos/pico-fido
synced 2026-06-01 02:31:19 +02:00
Fix rename oath when old name starts with the newer.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -625,7 +625,7 @@ int cmd_rename() {
|
||||
if (asn1_find_tag(&ctxi, TAG_NAME, &new_name) == false) {
|
||||
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();
|
||||
}
|
||||
file_t *ef = find_oath_cred(name.data, name.len);
|
||||
|
||||
@@ -25,6 +25,7 @@ INS_PUT = 0x01
|
||||
INS_DELETE = 0x02
|
||||
INS_SET_CODE = 0x03
|
||||
INS_RESET = 0x04
|
||||
INS_RENAME = 0x05
|
||||
INS_LIST = 0xa1
|
||||
INS_CALCULATE = 0xa2
|
||||
INS_VALIDATE = 0xa3
|
||||
@@ -89,6 +90,24 @@ def test_life(reset_oath):
|
||||
resp = list_apdu(reset_oath)
|
||||
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):
|
||||
data = data_name + data_key
|
||||
resp = send_apdu(reset_oath, INS_PUT, p1=0, p2=0, data=list(data))
|
||||
|
||||
Reference in New Issue
Block a user