|
@@ -307,27 +307,29 @@ class KeyBase:
|
|
unpacker = get_limited_unpacker("archive")
|
|
unpacker = get_limited_unpacker("archive")
|
|
unpacker.feed(data)
|
|
unpacker.feed(data)
|
|
unpacked = unpacker.unpack()
|
|
unpacked = unpacker.unpack()
|
|
- if b"tam" not in unpacked:
|
|
|
|
|
|
+ if "tam" not in unpacked:
|
|
if tam_required:
|
|
if tam_required:
|
|
- archive_name = unpacked.get(b"name", b"<unknown>").decode("ascii", "replace")
|
|
|
|
|
|
+ archive_name = unpacked.get("name", "<unknown>")
|
|
raise ArchiveTAMRequiredError(archive_name)
|
|
raise ArchiveTAMRequiredError(archive_name)
|
|
else:
|
|
else:
|
|
logger.debug("TAM not found and not required")
|
|
logger.debug("TAM not found and not required")
|
|
return unpacked, False
|
|
return unpacked, False
|
|
- tam = unpacked.pop(b"tam", None)
|
|
|
|
|
|
+ tam = unpacked.pop("tam", None)
|
|
if not isinstance(tam, dict):
|
|
if not isinstance(tam, dict):
|
|
raise ArchiveTAMInvalid()
|
|
raise ArchiveTAMInvalid()
|
|
- tam_type = tam.get(b"type", b"<none>").decode("ascii", "replace")
|
|
|
|
|
|
+ tam_type = tam.get("type", "<none>")
|
|
if tam_type != "HKDF_HMAC_SHA512":
|
|
if tam_type != "HKDF_HMAC_SHA512":
|
|
if tam_required:
|
|
if tam_required:
|
|
raise TAMUnsupportedSuiteError(repr(tam_type))
|
|
raise TAMUnsupportedSuiteError(repr(tam_type))
|
|
else:
|
|
else:
|
|
logger.debug("Ignoring TAM made with unsupported suite, since TAM is not required: %r", tam_type)
|
|
logger.debug("Ignoring TAM made with unsupported suite, since TAM is not required: %r", tam_type)
|
|
return unpacked, False
|
|
return unpacked, False
|
|
- tam_hmac = tam.get(b"hmac")
|
|
|
|
- tam_salt = tam.get(b"salt")
|
|
|
|
- if not isinstance(tam_salt, bytes) or not isinstance(tam_hmac, bytes):
|
|
|
|
|
|
+ tam_hmac = tam.get("hmac")
|
|
|
|
+ tam_salt = tam.get("salt")
|
|
|
|
+ if not isinstance(tam_salt, (bytes, str)) or not isinstance(tam_hmac, (bytes, str)):
|
|
raise ArchiveTAMInvalid()
|
|
raise ArchiveTAMInvalid()
|
|
|
|
+ tam_hmac = want_bytes(tam_hmac) # legacy
|
|
|
|
+ tam_salt = want_bytes(tam_salt) # legacy
|
|
offset = data.index(tam_hmac)
|
|
offset = data.index(tam_hmac)
|
|
data[offset : offset + 64] = bytes(64)
|
|
data[offset : offset + 64] = bytes(64)
|
|
tam_key = self._tam_key(tam_salt, context=b"archive")
|
|
tam_key = self._tam_key(tam_salt, context=b"archive")
|