mirror of
https://github.com/Leseratte10/acsm-calibre-plugin.git
synced 2024-12-22 09:19:55 +06:00
Add test case for XML nodes >32k
This commit is contained in:
parent
294f600ebd
commit
97a6b51cec
@ -609,9 +609,7 @@ def hash_node_ctx(node, hash_ctx):
|
||||
while True:
|
||||
remaining = textlen - done
|
||||
if remaining > 0x7fff:
|
||||
print("Warning: Hashing text node larger than 32k.")
|
||||
print("This usually doesn't happen, and I'm not sure if this is implemented correctly.")
|
||||
print("If you run into issues, please open a bug report.")
|
||||
#print("Warning: Why are we hashing a node larger than 32k?")
|
||||
remaining = 0x7fff
|
||||
|
||||
hash_do_append_tag(hash_ctx, ASN_TEXT)
|
||||
|
@ -131,7 +131,7 @@ class TestAdobe(unittest.TestCase):
|
||||
|
||||
|
||||
def test_hash_node(self):
|
||||
'''Check if the XML hash (needed for the signature) is correct'''
|
||||
'''Check if XML hashing (needed for the signature) works'''
|
||||
|
||||
# This XML is an anonymized (all IDs replaced with random UUIDs) ACSM file.
|
||||
|
||||
@ -173,7 +173,7 @@ class TestAdobe(unittest.TestCase):
|
||||
|
||||
|
||||
def test_hash_node_returnbugfix(self):
|
||||
'''Check if the XML hash is correct when returning a book ...'''
|
||||
'''Check if XML hashing works for book returns ...'''
|
||||
|
||||
# I don't think there's ever a case where the hashing algorithm is different,
|
||||
# but I needed this test during debugging and thought, hey, why not leave it in.
|
||||
@ -198,9 +198,39 @@ class TestAdobe(unittest.TestCase):
|
||||
mock_xml_obj = etree.fromstring(mock_xml_str)
|
||||
sha_hash = libadobe.hash_node(mock_xml_obj).hexdigest().lower()
|
||||
|
||||
self.assertEqual(sha_hash, "8b0a24ba37c4333d93650c6ce52f8ee779f21533", "Invalid SHA hash for node signing")
|
||||
self.assertEqual(sha_hash, "8b0a24ba37c4333d93650c6ce52f8ee779f21533", "Invalid SHA hash for node signing (return)")
|
||||
|
||||
|
||||
def test_hash_node_ultralong(self):
|
||||
'''Check if XML hashing works with long values'''
|
||||
|
||||
# If an XML text element is longer than 32k bytes, the hashing works differently.
|
||||
# Make sure that that works, even though it's not going to show up in practice anywhere ...
|
||||
|
||||
mock_xml_str = """
|
||||
<adept:notification xmlns:adept="http://ns.adobe.com/adept">
|
||||
<adept:user>urn:uuid:6e5393e0-ff13-4ae8-8f6c-6654182ac7d5</adept:user>
|
||||
<adept:device>urn:uuid:51abfbaf-f0e8-474d-b031-626c5224f90f</adept:device>
|
||||
<adept:testCodeForACSMInput>{}</adept:testCodeForACSMInput>
|
||||
<adept:nonce>eVr2pi26AAAAAAAA</adept:nonce>
|
||||
<adept:expiration>2022-08-03T09:16:22Z</adept:expiration>
|
||||
<body xmlns="http://ns.adobe.com/adept">
|
||||
<fulfillment>6ccfbc7a-349b-40ad-82d8-d7a4c717ca13-00000271</fulfillment>
|
||||
<transaction>237493726-1749302749327354-Wed Aug 03 09:16:22 UTC 2022</transaction>
|
||||
<user>urn:uuid:6e5393e0-ff13-4ae8-8f6c-6654182ac7d5</user>
|
||||
<fulfilled>true</fulfilled>
|
||||
<returned>true</returned>
|
||||
<hmac>CB3Ql1FAJD957t5n749q5ZO8IzU=</hmac>
|
||||
</body>
|
||||
</adept:notification>
|
||||
""".format("A"*70000)
|
||||
|
||||
|
||||
mock_xml_obj = etree.fromstring(mock_xml_str)
|
||||
sha_hash = libadobe.hash_node(mock_xml_obj).hexdigest().lower()
|
||||
|
||||
self.assertEqual(sha_hash, "7f62c1c1db2e1c965fd8403a4e768735a5848689", "Invalid SHA hash for node signing (ultralong)")
|
||||
|
||||
|
||||
|
||||
def test_sign_node_old(self):
|
||||
|
Loading…
Reference in New Issue
Block a user