From 09030d4adc3cc6ecaa8b592737ce2408a728a3cf Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:03:51 -0700 Subject: [PATCH 01/22] fix: More docs, and readme for examples --- docs/usage.md | 243 ++++++++++++++++++++------------------------- examples/README.md | 25 +++++ 2 files changed, 132 insertions(+), 136 deletions(-) create mode 100644 examples/README.md diff --git a/docs/usage.md b/docs/usage.md index 617d9ff3..68f89632 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,18 +2,20 @@ This package works with media files in the [supported formats](https://github.com/contentauth/c2pa-rs/blob/main/docs/supported-formats.md). +> **Note**: For complete working examples, see the [examples folder](https://github.com/contentauth/c2pa-python/tree/main/examples) in the repository. + ## Import -Import the API as follows: +Import the API: ```py -from c2pa import * +from c2pa import Builder, Reader, Signer, C2paSigningAlg, C2paSignerInfo ``` ## Define manifest JSON The Python library works with both file-based and stream-based operations. -In both cases, the manifest JSON string defines the C2PA manifest to add to an asset; for example: +In both cases, the manifest JSON string defines the C2PA manifest to add to an asset. For example: ```py manifest_json = json.dumps({ @@ -34,58 +36,33 @@ manifest_json = json.dumps({ }) ``` -## Signing function - -The `sign_ps256` function is [defined in the library](https://github.com/contentauth/c2pa-python/blob/main/c2pa/c2pa_api/c2pa_api.py#L244) and used in both file-based and stream-based methods. It's reproduced here to show how signing is performed. - -```py -# Example of using Python crypto to sign data using openssl with Ps256 -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import padding - -def sign_ps256(data: bytes, key: bytes) -> bytes: - private_key = serialization.load_pem_private_key( - key, - password=None, - ) - signature = private_key.sign( - data, - padding.PSS( - mgf=padding.MGF1(hashes.SHA256()), - salt_length=padding.PSS.MAX_LENGTH - ), - hashes.SHA256() - ) - return signature -``` - ## File-based operation ### Read and validate C2PA data -Use the `Reader` to read C2PA data from the specified asset file. +Use the `Reader` to read C2PA data from the specified asset file. This examines the specified media file for C2PA data and generates a report of any data it finds. If there are validation errors, the report includes a `validation_status` field. -An asset file may contain many manifests in a manifest store. The most recent manifest is identified by the value of the `active_manifest` field in the manifests map. The manifests may contain binary resources such as thumbnails which can be retrieved with `resource_to_stream` or `resource_to_file` using the associated `identifier` field values and a `uri`. +An asset file may contain many manifests in a manifest store. The most recent manifest is identified by the value of the `active_manifest` field in the manifests map. The manifests may contain binary resources such as thumbnails which can be retrieved with `resource_to_stream` using the associated `identifier` field values and a `uri`. NOTE: For a comprehensive reference to the JSON manifest structure, see the [Manifest store reference](https://opensource.contentauthenticity.org/docs/manifest/manifest-ref). ```py try: - # Create a reader from a file path - reader = c2pa.Reader.from_file("path/to/media_file.jpg") - - # Print the JSON for a manifest. - print("Manifest store:", reader.json()) - - # Get the active manifest. - manifest = reader.get_active_manifest() - if manifest != None: - - # get the uri to the manifest's thumbnail and write it to a file - uri = manifest["thumbnail"]["identifier"] - reader.resource_to_file(uri, "thumbnail_v2.jpg") + # Create a reader from a file path + with Reader("path/to/media_file.jpg") as reader: + # Print the JSON for a manifest. + print("Manifest store:", reader.json()) + + # Get the active manifest. + manifest = json.loads(reader.json()) + active_manifest = manifest["manifests"][manifest["active_manifest"]] + if active_manifest: + # get the uri to the manifest's thumbnail and write it to a file + uri = active_manifest["thumbnail"]["identifier"] + with open("thumbnail_v2.jpg", "wb") as f: + reader.resource_to_stream(uri, f) except Exception as err: print(err) @@ -98,76 +75,68 @@ except Exception as err: Use a `Builder` to add a manifest to an asset: ```py -def test_v2_sign(self): - # Define source folder for any assets being read. - data_dir = "tests/fixtures/" - try: - key = open(data_dir + "ps256.pem", "rb").read() - def sign(data: bytes) -> bytes: - return sign_ps256(data, key) - - certs = open(data_dir + "ps256.pub", "rb").read() - # Create a local signer from a certificate pem file. - signer = create_signer(sign, SigningAlg.PS256, certs, "http://timestamp.digicert.com") - - builder = Builder(manifest_def) - - builder.add_ingredient_file(ingredient_def, data_dir + "A.jpg") - - builder.add_resource_file("A.jpg", data_dir + "A.jpg") - - builder.to_archive(open("target/archive.zip", "wb")) - - builder = Builder.from_archive(open("target/archive.zip", "rb")) - - with tempfile.TemporaryDirectory() as output_dir: - output_path = output_dir + "out.jpg" - if os.path.exists(output_path): - os.remove(output_path) - c2pa_data = builder.sign_file(signer, data_dir + "A.jpg", output_dir + "out.jpg") - assert len(c2pa_data) > 0 - - reader = Reader.from_file(output_dir + "out.jpg") - print(reader.json()) - manifest_store = json.loads(reader.json()) - manifest = manifest_store["manifests"][manifest_store["active_manifest"]] - assert "python_test" in manifest["claim_generator"] - # Check custom title and format. - assert manifest["title"]== "My Title" - assert manifest,["format"] == "image/jpeg" - # There should be no validation status errors. - assert manifest.get("validation_status") == None - assert manifest["ingredients"][0]["relationship"] == "parentOf" - assert manifest["ingredients"][0]["title"] == "A.jpg" - - except Exception as e: - print("Failed to sign manifest store: " + str(e)) - exit(1) +try: + # Create a signer from certificate and key files + with open("path/to/cert.pem", "rb") as cert_file, open("path/to/key.pem", "rb") as key_file: + cert_data = cert_file.read() + key_data = key_file.read() + + # Create signer info using cert and key info + signer_info = C2paSignerInfo( + alg=C2paSigningAlg.PS256, + cert=cert_data, + key=key_data, + timestamp_url="http://timestamp.digicert.com" + ) + + # Create signer using the defined SignerInfo + signer = Signer.from_info(signer_info) + + # Create builder with manifest and add ingredients + with Builder(manifest_json) as builder: + # Add any ingredients if needed + with open("path/to/ingredient.jpg", "rb") as ingredient_file: + ingredient_json = json.dumps({"title": "Ingredient Image"}) + builder.add_ingredient(ingredient_json, "image/jpeg", ingredient_file) + + # Sign the file + with open("path/to/source.jpg", "rb") as source_file, open("path/to/output.jpg", "wb") as dest_file: + manifest_bytes = builder.sign(signer, "image/jpeg", source_file, dest_file) + + # Verify the signed file + with Reader("path/to/output.jpg") as reader: + manifest_store = json.loads(reader.json()) + active_manifest = manifest_store["manifests"][manifest_store["active_manifest"]] + print("Signed manifest:", active_manifest) + +except Exception as e: + print("Failed to sign manifest store: " + str(e)) ``` ## Stream-based operation Instead of working with files, you can read, validate, and add a signed manifest to streamed data. This example code does the same thing as the file-based example. -### Read and validate C2PA data +### Read and validate C2PA data using streams ```py try: - # It's also possible to create a reader from a format and stream - # Note that these two readers are functionally equivalent - stream = open("path/to/media_file.jpg", "rb") - reader = c2pa.Reader("image/jpeg", stream) - - # Print the JSON for a manifest. - print("manifest store:", reader.json()) - - # Get the active manifest. - manifest = reader.get_active_manifest() - if manifest != None: - - # get the uri to the manifest's thumbnail and write it to a file - uri = manifest["thumbnail"]["identifier"] - reader.resource_to_file(uri, "thumbnail_v2.jpg") + # Create a reader from a format and stream + with open("path/to/media_file.jpg", "rb") as stream: + # First parameter can be mimetype or extension of the file + # But in any case we need something to identify the file type + with Reader("image/jpeg", stream) as reader: + # Print the JSON for a manifest. + print("manifest store:", reader.json()) + + # Get the active manifest. + manifest = json.loads(reader.json()) + active_manifest = manifest["manifests"][manifest["active_manifest"]] + if active_manifest: + # get the uri to the manifest's thumbnail and write it to a file + uri = active_manifest["thumbnail"]["identifier"] + with open("thumbnail_v2.jpg", "wb") as f: + reader.resource_to_stream(uri, f) except Exception as err: print(err) @@ -180,39 +149,41 @@ except Exception as err: Use a `Builder` to add a manifest to an asset: ```py -from c2pa import Builder, Error, Reader, SigningAlg, create_signer, sdk_version, sign_ps256, version -... -data_dir = "tests/fixtures/" try: - key = open(data_dir + "ps256.pem", "rb").read() - def sign(data: bytes) -> bytes: - return sign_ps256(data, key) - - certs = open(data_dir + "ps256.pub", "rb").read() - # Create a local signer from a certificate pem file - signer = create_signer(sign, SigningAlg.PS256, certs, "http://timestamp.digicert.com") - - builder = Builder(manifest_def) - - builder.add_ingredient_file(ingredient_def, data_dir + "A.jpg") - builder.add_resource_file("A.jpg", data_dir + "A.jpg") - builder.to_archive(open("target/archive.zip", "wb")) - - builder = Builder.from_archive(open("target/archive.zip", "rb")) - - with tempfile.TemporaryDirectory() as output_dir: - output_path = output_dir + "out.jpg" - if os.path.exists(output_path): - os.remove(output_path) - c2pa_data = builder.sign_file(signer, data_dir + "A.jpg", output_dir + "out.jpg") - assert len(c2pa_data) > 0 - - reader = Reader.from_file(output_dir + "out.jpg") - print(reader.json()) - manifest_store = json.loads(reader.json()) - manifest = manifest_store["manifests"][manifest_store["active_manifest"]] + # Create a signer from certificate and key files + with open("path/to/cert.pem", "rb") as cert_file, open("path/to/key.pem", "rb") as key_file: + cert_data = cert_file.read() + key_data = key_file.read() + + # Create signer info + signer_info = C2paSignerInfo( + alg=C2paSigningAlg.PS256, + cert=cert_data, + key=key_data, + timestamp_url="http://timestamp.digicert.com" + ) + + # Create signer using the defined SignerInfo + signer = Signer.from_info(signer_info) + + # Create builder with manifest and add ingredients + with Builder(manifest_json) as builder: + # Add any ingredients if needed + with open("path/to/ingredient.jpg", "rb") as ingredient_file: + ingredient_json = json.dumps({"title": "Ingredient Image"}) + builder.add_ingredient(ingredient_json, "image/jpeg", ingredient_file) + + # Sign using streams + with open("path/to/source.jpg", "rb") as source_file, open("path/to/output.jpg", "wb") as dest_file: + manifest_bytes = builder.sign(signer, "image/jpeg", source_file, dest_file) + + # Verify the signed file + with open("path/to/output.jpg", "rb") as stream: + with Reader("image/jpeg", stream) as reader: + manifest_store = json.loads(reader.json()) + active_manifest = manifest_store["manifests"][manifest_store["active_manifest"]] + print("Signed manifest:", active_manifest) except Exception as e: print("Failed to sign manifest store: " + str(e)) - exit(1) - ``` +``` diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..523b39bc --- /dev/null +++ b/examples/README.md @@ -0,0 +1,25 @@ +# Usage examples + +## Adding a "Do Not Train" Assertion + +The `examples/training.py` script demonstrates how to add a "Do Not Train" assertion to an asset and verify it. + +### Signing and Verifying Assets + +The `examples/sign.py` script shows how to sign an asset with a C2PA manifest and verify it. + +## Running the Examples + +To run the examples, make sure you have the c2pa-python package installed and you're in the root directory of the project. We recommend working using virtual environments (venv). + +Then you can run the examples with the following commands: + +```bash +# Run the "Do Not Train" assertion example +python examples/training.py + +# Run the signing and verification example +python examples/sign.py +``` + +The examples will use test files from the `tests/fixtures` directory and output the results to the `output` directory. Read manifest store data will be shown in the console you run the examples from. From a049b88c668d271941562e43dd7c5d5a9dfff928 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:07:45 -0700 Subject: [PATCH 02/22] fix: Wording --- docs/usage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 68f89632..da63a82d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -52,7 +52,7 @@ NOTE: For a comprehensive reference to the JSON manifest structure, see the [Man try: # Create a reader from a file path with Reader("path/to/media_file.jpg") as reader: - # Print the JSON for a manifest. + # Print manifest store as JSON print("Manifest store:", reader.json()) # Get the active manifest. @@ -126,7 +126,7 @@ try: # First parameter can be mimetype or extension of the file # But in any case we need something to identify the file type with Reader("image/jpeg", stream) as reader: - # Print the JSON for a manifest. + # Print manifest store as JSON, as extracted by the Reader print("manifest store:", reader.json()) # Get the active manifest. From 5b633645ecb90f6259e3fa1fee37a086a11bbd88 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:08:29 -0700 Subject: [PATCH 03/22] fix: Examples --- examples/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 523b39bc..65977d01 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,6 +1,8 @@ # Usage examples -## Adding a "Do Not Train" Assertion +## Examples + +### Adding a "Do Not Train" Assertion The `examples/training.py` script demonstrates how to add a "Do Not Train" assertion to an asset and verify it. From 2306e76653ff92a75a3f97559a792b7f4b78b96a Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:09:05 -0700 Subject: [PATCH 04/22] fix: Examples --- examples/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 65977d01..8186aa48 100644 --- a/examples/README.md +++ b/examples/README.md @@ -24,4 +24,4 @@ python examples/training.py python examples/sign.py ``` -The examples will use test files from the `tests/fixtures` directory and output the results to the `output` directory. Read manifest store data will be shown in the console you run the examples from. +The examples will use test files from the `tests/fixtures` directory and output the results to the temporary `output` directory. Read manifest store data will be shown in the console you run the examples from. From 4e5a5f9f89e8fa2467c7416821a74617b6a91d48 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:11:43 -0700 Subject: [PATCH 05/22] fix: Examples --- docs/usage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index da63a82d..2a3d1fad 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -6,7 +6,7 @@ This package works with media files in the [supported formats](https://github.co ## Import -Import the API: +Import the objects needed from the API: ```py from c2pa import Builder, Reader, Signer, C2paSigningAlg, C2paSignerInfo @@ -115,7 +115,7 @@ except Exception as e: ## Stream-based operation -Instead of working with files, you can read, validate, and add a signed manifest to streamed data. This example code does the same thing as the file-based example. +Instead of working with files, you can read, validate, and add a signed manifest to streamed data. This example is similar to what the file-based example does. ### Read and validate C2PA data using streams From 9430b19b42f55312fb54368f2eb8fb7777dffb41 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 11:24:55 -0700 Subject: [PATCH 06/22] fix: Add a note --- docs/usage.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 2a3d1fad..19723ff6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -12,6 +12,8 @@ Import the objects needed from the API: from c2pa import Builder, Reader, Signer, C2paSigningAlg, C2paSignerInfo ``` +> **Note**: Both `Builder` and `Reader` support being used as context managers (with `with` statements). It's recommended to use them with context managers to ensure proper resources and memory cleanup. + ## Define manifest JSON The Python library works with both file-based and stream-based operations. From a8cf604f5f240815fca8428e70373d0904ea1536 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 13:29:37 -0700 Subject: [PATCH 07/22] fix: More editorial changes --- docs/usage.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 19723ff6..8e77ed17 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,7 +2,7 @@ This package works with media files in the [supported formats](https://github.com/contentauth/c2pa-rs/blob/main/docs/supported-formats.md). -> **Note**: For complete working examples, see the [examples folder](https://github.com/contentauth/c2pa-python/tree/main/examples) in the repository. +For complete working examples, see the [examples folder](https://github.com/contentauth/c2pa-python/tree/main/examples) in the repository. ## Import @@ -12,7 +12,8 @@ Import the objects needed from the API: from c2pa import Builder, Reader, Signer, C2paSigningAlg, C2paSignerInfo ``` -> **Note**: Both `Builder` and `Reader` support being used as context managers (with `with` statements). It's recommended to use them with context managers to ensure proper resources and memory cleanup. +You can use both `Builder` and `Reader` classes with context managers by using a `with` statement. +Doing this is recommended to ensure proper resource and memory cleanup. ## Define manifest JSON From a44fa1f4bb1590946ed2f831372e0e019bcfe4e8 Mon Sep 17 00:00:00 2001 From: tmathern <60901087+tmathern@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:08:53 -0700 Subject: [PATCH 08/22] fix: Update corrupted file (#120) * fix: Add a test * fix: Add a debug test for CAWG * fix: Fix corrupted file * fix: Cleaning up * fix: Fix non-threaded tests * fix: unrandomize test * fix: Improve test sensitivity * fix: Improve comment --- .../C_with_CAWG_data.jpg | Bin 141901 -> 194414 bytes tests/test_unit_tests.py | 24 ++++ tests/test_unit_tests_threaded.py | 124 ++++++++++-------- 3 files changed, 96 insertions(+), 52 deletions(-) diff --git a/tests/fixtures/files-for-reading-tests/C_with_CAWG_data.jpg b/tests/fixtures/files-for-reading-tests/C_with_CAWG_data.jpg index 4088d990003954524f36f69553fa25a1afacc9dd..a397bc9a1b384d954971c19136af0bcafd5c595c 100644 GIT binary patch literal 194414 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 literal 141901 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 0, "Active manifest should not be empty" + class TestBuilder(unittest.TestCase): def setUp(self): diff --git a/tests/test_unit_tests_threaded.py b/tests/test_unit_tests_threaded.py index ca886be2..a9821dcb 100644 --- a/tests/test_unit_tests_threaded.py +++ b/tests/test_unit_tests_threaded.py @@ -2096,32 +2096,22 @@ def add_ingredient(ingredient_json, thread_id): builder.close() def test_builder_sign_with_multiple_ingredient_random_many_threads(self): - """Test Builder class operations with 10 threads, each adding 3 random ingredients and signing a random file.""" + """Test Builder class operations with 12 threads, each adding 3 specific ingredients and signing a file.""" # Number of threads to use in the test - # We are pushing it here, as we want to test with thread count one to two orders of magnitude - # higher than "usual" max numbers of cores on (server) machines may be. - TOTAL_THREADS_USED = 12 - # Get list of files from files-for-reading-tests directory - reading_dir = os.path.join(self.data_dir, "files-for-reading-tests") - - # Filter for JPG and PNG files only - all_files = [ - f for f in os.listdir(reading_dir) - if os.path.isfile(os.path.join(reading_dir, f)) - and os.path.splitext(f)[1].lower() in {'.jpg', '.jpeg', '.png'} + # Define the specific files to use as ingredients + # THose files should be valid to use as ingredient + ingredient_files = [ + os.path.join(self.data_dir, "A_thumbnail.jpg"), + os.path.join(self.data_dir, "C.jpg"), + os.path.join(self.data_dir, "cloud.jpg") ] - # Ensure we have enough files - self.assertGreaterEqual( - len(all_files), - 3, - "Need at least 3 JPG/PNG files for testing") - # Thread synchronization thread_results = {} completed_threads = 0 + thread_lock = threading.Lock() # Lock for thread-safe access to shared data def thread_work(thread_id): nonlocal completed_threads @@ -2129,24 +2119,17 @@ def thread_work(thread_id): # Create a new builder for this thread builder = Builder.from_json(self.manifestDefinition) - # Select 3 random files for ingredients - # Use thread_id as seed for reproducibility - random.seed(thread_id) - ingredient_files = random.sample(all_files, 3) - # Add each ingredient - for i, file_name in enumerate(ingredient_files, 1): - file_path = os.path.join(reading_dir, file_name) + for i, file_path in enumerate(ingredient_files, 1): ingredient_json = json.dumps({ - "title": f"Thread {thread_id} Ingredient {i} - {file_name}" + "title": f"Thread {thread_id} Ingredient {i} - {os.path.basename(file_path)}" }) with open(file_path, 'rb') as f: builder.add_ingredient(ingredient_json, "image/jpeg", f) - # Select a random file for signing - sign_file = random.choice(all_files) - sign_file_path = os.path.join(reading_dir, sign_file) + # Use A.jpg as the file to sign + sign_file_path = os.path.join(self.data_dir, "A.jpg") # Sign the file with open(sign_file_path, "rb") as file: @@ -2168,11 +2151,13 @@ def thread_work(thread_id): manifest_data = json.loads(json_data) # Store results for verification - thread_results[thread_id] = { - 'manifest': manifest_data, - 'ingredient_files': ingredient_files, - 'sign_file': sign_file - } + with thread_lock: + thread_results[thread_id] = { + 'manifest': manifest_data, + 'ingredient_files': [os.path.basename(f) for f in ingredient_files], + 'sign_file': os.path.basename(sign_file_path), + 'manifest_hash': hash(json.dumps(manifest_data, sort_keys=True)) # Add hash for comparison + } # Clean up streams output.close() @@ -2181,11 +2166,13 @@ def thread_work(thread_id): builder.close() except Exception as e: - thread_results[thread_id] = { - 'error': str(e) - } + with thread_lock: + thread_results[thread_id] = { + 'error': str(e) + } finally: - completed_threads += 1 + with thread_lock: + completed_threads += 1 # Create and start threads threads = [] @@ -2199,26 +2186,31 @@ def thread_work(thread_id): thread.join() # Verify all threads completed - self.assertEqual(completed_threads, TOTAL_THREADS_USED, f"All { - TOTAL_THREADS_USED} threads should have completed") + self.assertEqual(completed_threads, TOTAL_THREADS_USED, f"All {TOTAL_THREADS_USED} threads should have completed") self.assertEqual( len(thread_results), TOTAL_THREADS_USED, f"Should have results from all {TOTAL_THREADS_USED} threads") + # Collect all manifest hashes for comparison + manifest_hashes = set() + thread_manifest_data = {} + # Verify results for each thread for thread_id in range(1, TOTAL_THREADS_USED + 1): result = thread_results[thread_id] # Check if thread encountered an error if 'error' in result: - self.fail( - f"Thread {thread_id} failed with error: { - result['error']}") + self.fail(f"Thread {thread_id} failed with error: {result['error']}") manifest_data = result['manifest'] ingredient_files = result['ingredient_files'] - sign_file = result['sign_file'] + manifest_hash = result['manifest_hash'] + + # Store manifest data for cross-thread comparison + thread_manifest_data[thread_id] = manifest_data + manifest_hashes.add(manifest_hash) # Verify active manifest exists self.assertIn("active_manifest", manifest_data) @@ -2234,16 +2226,44 @@ def thread_work(thread_id): self.assertIsInstance(active_manifest["ingredients"], list) self.assertEqual(len(active_manifest["ingredients"]), 3) - # Verify all ingredients exist with correct thread ID and file - # names - ingredient_titles = [ing["title"] - for ing in active_manifest["ingredients"]] + # Verify all ingredients exist with correct thread ID and file names + ingredient_titles = [ing["title"] for ing in active_manifest["ingredients"]] for i, file_name in enumerate(ingredient_files, 1): - expected_title = f"Thread { - thread_id} Ingredient {i} - {file_name}" - self.assertIn(expected_title, ingredient_titles, f"Thread { - thread_id} should have ingredient with title {expected_title}") + expected_title = f"Thread {thread_id} Ingredient {i} - {file_name}" + self.assertIn(expected_title, ingredient_titles, f"Thread {thread_id} should have ingredient with title {expected_title}") + + # Verify no cross-thread contamination in ingredient titles + for other_thread_id in range(1, TOTAL_THREADS_USED + 1): + if other_thread_id != thread_id: + for title in ingredient_titles: + # Check for exact thread ID pattern to avoid false positives + self.assertNotIn( + f"Thread {other_thread_id} Ingredient", + title, + f"Thread {thread_id}'s manifest contains ingredient data from thread {other_thread_id}") + + # Verify all manifests are unique (no data scrambling between threads) + self.assertEqual( + len(manifest_hashes), + TOTAL_THREADS_USED, + "Each thread should have a unique manifest (no data scrambling)") + # Additional verification: Compare manifest structures between threads + for thread_id in range(1, TOTAL_THREADS_USED + 1): + current_manifest = thread_manifest_data[thread_id] + + # Verify manifest structure is consistent + self.assertIn("active_manifest", current_manifest) + self.assertIn("manifests", current_manifest) + + # Verify no cross-thread contamination in manifest data + for other_thread_id in range(1, TOTAL_THREADS_USED + 1): + if other_thread_id != thread_id: + other_manifest = thread_manifest_data[other_thread_id] + self.assertNotEqual( + current_manifest["active_manifest"], + other_manifest["active_manifest"], + f"Thread {thread_id} and {other_thread_id} share the same active manifest ID") if __name__ == '__main__': unittest.main() From 2e18a0206ec680fe51e798391bacba5877018774 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 14:50:29 -0700 Subject: [PATCH 09/22] fix: Add a runner --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8740a0f1..37a99104 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,7 +51,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ macos-latest, ubuntu-latest ] + os: [ macos-latest, ubuntu-latest, ubuntu-24.04-arm ] steps: - name: Checkout repository From 1177f603c020e3590e4f6d9ecc96c1b895042d2c Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 14:56:20 -0700 Subject: [PATCH 10/22] fix: ARM --- src/c2pa/lib.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/c2pa/lib.py b/src/c2pa/lib.py index fb38645c..eb8adb7a 100644 --- a/src/c2pa/lib.py +++ b/src/c2pa/lib.py @@ -62,6 +62,9 @@ def get_platform_identifier(cpu_arch: Optional[CPUArchitecture] = None) -> str: elif system == "windows": return "x86_64-pc-windows-msvc" elif system == "linux": + print("## System is Linux, arch is: ", _get_architecture()()) + if _get_architecture() in ['arm64', 'aarch64']: + return "aarch64-unknown-linux-gnu" return "x86_64-unknown-linux-gnu" else: raise ValueError(f"Unsupported operating system: {system}") From 3302352703ec2298534eb03f1485b418f29276d1 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 14:58:30 -0700 Subject: [PATCH 11/22] fix: ARM --- src/c2pa/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/c2pa/lib.py b/src/c2pa/lib.py index eb8adb7a..23c12fbe 100644 --- a/src/c2pa/lib.py +++ b/src/c2pa/lib.py @@ -62,7 +62,7 @@ def get_platform_identifier(cpu_arch: Optional[CPUArchitecture] = None) -> str: elif system == "windows": return "x86_64-pc-windows-msvc" elif system == "linux": - print("## System is Linux, arch is: ", _get_architecture()()) + print("## System is Linux, arch is: ", _get_architecture()) if _get_architecture() in ['arm64', 'aarch64']: return "aarch64-unknown-linux-gnu" return "x86_64-unknown-linux-gnu" From e392faa2f2729d5ff3bc3f03e255986c7e9199b7 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:08:21 -0700 Subject: [PATCH 12/22] fix: ARM --- scripts/download_artifacts.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/download_artifacts.py b/scripts/download_artifacts.py index d8399618..8ad52fe3 100644 --- a/scripts/download_artifacts.py +++ b/scripts/download_artifacts.py @@ -46,16 +46,21 @@ def get_platform_identifier(): Returns one of: - universal-apple-darwin (for Mac) - x86_64-pc-windows-msvc (for Windows 64-bit) - - x86_64-unknown-linux-gnu (for Linux 64-bit) + - x86_64-unknown-linux-gnu (for Linux x86_64) + - aarch64-unknown-linux-gnu (for Linux ARM64) """ system = platform.system().lower() + machine = platform.machine().lower() if system == "darwin": return "universal-apple-darwin" elif system == "windows": return "x86_64-pc-windows-msvc" elif system == "linux": - return "x86_64-unknown-linux-gnu" + if machine in ["arm64", "aarch64"]: + return "aarch64-unknown-linux-gnu" + else: + return "x86_64-unknown-linux-gnu" else: raise ValueError(f"Unsupported operating system: {system}") @@ -105,8 +110,12 @@ def copy_artifacts_to_root(): print("Copying artifacts from scripts/artifacts to root...") if ROOT_ARTIFACTS_DIR.exists(): shutil.rmtree(ROOT_ARTIFACTS_DIR) + print(f"Copying from {SCRIPTS_ARTIFACTS_DIR} to {ROOT_ARTIFACTS_DIR}") shutil.copytree(SCRIPTS_ARTIFACTS_DIR, ROOT_ARTIFACTS_DIR) print("Done copying artifacts") + print("\nContents of artifacts directory:") + for item in sorted(ROOT_ARTIFACTS_DIR.iterdir()): + print(f" {item.name}") def main(): if len(sys.argv) < 2: @@ -126,6 +135,8 @@ def main(): if env_platform: print(f"Using platform from environment variable C2PA_LIBS_PLATFORM: {env_platform}") platform_id = env_platform or get_platform_identifier() + print("## platform_id when downloading: ", platform_id) + print("## env_platform: ", env_platform) platform_source = "environment variable" if env_platform else "auto-detection" print(f"Target platform: {platform_id} (set through{platform_source})") From 5f91223b9e09a034dfacc0f3681108dc8e89fe0c Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:12:46 -0700 Subject: [PATCH 13/22] fix: Comments --- scripts/download_artifacts.py | 5 ++--- src/c2pa/lib.py | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/download_artifacts.py b/scripts/download_artifacts.py index 8ad52fe3..ccfa5811 100644 --- a/scripts/download_artifacts.py +++ b/scripts/download_artifacts.py @@ -113,7 +113,7 @@ def copy_artifacts_to_root(): print(f"Copying from {SCRIPTS_ARTIFACTS_DIR} to {ROOT_ARTIFACTS_DIR}") shutil.copytree(SCRIPTS_ARTIFACTS_DIR, ROOT_ARTIFACTS_DIR) print("Done copying artifacts") - print("\nContents of artifacts directory:") + print("\nFolder content of artifacts directory:") for item in sorted(ROOT_ARTIFACTS_DIR.iterdir()): print(f" {item.name}") @@ -135,8 +135,7 @@ def main(): if env_platform: print(f"Using platform from environment variable C2PA_LIBS_PLATFORM: {env_platform}") platform_id = env_platform or get_platform_identifier() - print("## platform_id when downloading: ", platform_id) - print("## env_platform: ", env_platform) + print("Looking up releases for platform id: ", platform_id) platform_source = "environment variable" if env_platform else "auto-detection" print(f"Target platform: {platform_id} (set through{platform_source})") diff --git a/src/c2pa/lib.py b/src/c2pa/lib.py index 23c12fbe..dc3f8f9a 100644 --- a/src/c2pa/lib.py +++ b/src/c2pa/lib.py @@ -62,7 +62,6 @@ def get_platform_identifier(cpu_arch: Optional[CPUArchitecture] = None) -> str: elif system == "windows": return "x86_64-pc-windows-msvc" elif system == "linux": - print("## System is Linux, arch is: ", _get_architecture()) if _get_architecture() in ['arm64', 'aarch64']: return "aarch64-unknown-linux-gnu" return "x86_64-unknown-linux-gnu" From 616924f35cbd903024fc2a3e38d53d1a4bbd038c Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:19:56 -0700 Subject: [PATCH 14/22] fix: ARM --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 37a99104..ebce51b2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -178,6 +178,8 @@ jobs: include: - target: x86_64 runs-on: ubuntu-24.04 + - target: aarch64 + runs-on: ubuntu-24.04-arm if: | github.event_name != 'pull_request' || github.event.pull_request.author_association == 'COLLABORATOR' || @@ -194,6 +196,8 @@ jobs: include: - target: x86_64 runs-on: ubuntu-24.04 + - target: aarch64 + runs-on: ubuntu-24.04-arm if: | github.event_name != 'pull_request' || github.event.pull_request.author_association == 'COLLABORATOR' || From 2ce971281be9f5d9267dcaec61a598b7b51c66de Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:29:57 -0700 Subject: [PATCH 15/22] fix: ARM --- .github/workflows/build.yml | 19 ++++++++++++++++++- src/c2pa/lib.py | 5 ++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ebce51b2..faec5ac7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -448,13 +448,30 @@ jobs: pattern: wheels-* path: dist merge-multiple: true + - name: List downloaded artifacts + run: | + echo "=== Downloaded Artifacts ===" + ls -la dist/ + echo "=== Artifact Details ===" + for file in dist/*; do + echo "File: $file" + echo "Size: $(du -h $file | cut -f1)" + echo "Type: $(file $file)" + echo "---" + done - name: Publish to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: dist # Uncomment to use TestPyPI - # repository-url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ verbose: true # Uncomment below for test runs, otherwise fails on existing packages being reuploaded skip-existing: true + - name: Show PyPI upload results + run: | + echo "=== PyPI Upload Results ===" + echo "Check TestPyPI at: https://test.pypi.org/project/c2pa-python/" + echo "Uploaded files:" + ls -la dist/ diff --git a/src/c2pa/lib.py b/src/c2pa/lib.py index dc3f8f9a..f0382874 100644 --- a/src/c2pa/lib.py +++ b/src/c2pa/lib.py @@ -247,8 +247,11 @@ def dynamically_load_library( # If specific library name is provided, only load that one lib = _load_single_library(lib_name, possible_paths) if not lib: + platform_id = get_platform_identifier() + current_arch = _get_architecture() logger.error(f"Could not find {lib_name} in any of the search paths: {[str(p) for p in possible_paths]}") - raise RuntimeError(f"Could not find {lib_name} in any of the search paths") + logger.error(f"Platform: {platform_id}, Architecture: {current_arch}") + raise RuntimeError(f"Could not find {lib_name} in any of the search paths (Platform: {platform_id}, Architecture: {current_arch})") return lib # Default path (no library name provided in the environment) From d68f79a5d6b7f09b0ccccf62511b64bf883fafd0 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:41:57 -0700 Subject: [PATCH 16/22] fix: ARM --- scripts/download_artifacts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/download_artifacts.py b/scripts/download_artifacts.py index ccfa5811..3da65246 100644 --- a/scripts/download_artifacts.py +++ b/scripts/download_artifacts.py @@ -136,6 +136,7 @@ def main(): print(f"Using platform from environment variable C2PA_LIBS_PLATFORM: {env_platform}") platform_id = env_platform or get_platform_identifier() print("Looking up releases for platform id: ", platform_id) + print("Environment variable set for lookup: ", env_platform) platform_source = "environment variable" if env_platform else "auto-detection" print(f"Target platform: {platform_id} (set through{platform_source})") From 2a851f6aa968e14fd7715c7b00d2876c3e361a87 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:44:02 -0700 Subject: [PATCH 17/22] fix: ARM --- .github/workflows/build-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index 819b4d0b..a276de31 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -63,7 +63,7 @@ jobs: cd /io && /opt/python/cp310-cp310/bin/pip install -r requirements.txt -r requirements-dev.txt && /opt/python/cp310-cp310/bin/pip install toml && - C2PA_LIBS_PLATFORM=\"${{ inputs.architecture == 'aarch64' && 'aarch64-unknown-linux-gnu' || 'x86_64-unknown-linux-gnu' }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && + C2PA_LIBS_PLATFORM=\"${{ inputs.architecture == 'aarch64' ? 'aarch64-unknown-linux-gnu' : 'x86_64-unknown-linux-gnu' }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && for PYBIN in /opt/python/cp3{10,11}-*/bin; do \${PYBIN}/pip install --upgrade pip wheel && \${PYBIN}/pip install toml && From 4408d7471d0f358cb3edfd3afeaaaa1b748b8536 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:46:18 -0700 Subject: [PATCH 18/22] fix: ARM --- .github/workflows/build-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index a276de31..4f191648 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -63,7 +63,7 @@ jobs: cd /io && /opt/python/cp310-cp310/bin/pip install -r requirements.txt -r requirements-dev.txt && /opt/python/cp310-cp310/bin/pip install toml && - C2PA_LIBS_PLATFORM=\"${{ inputs.architecture == 'aarch64' ? 'aarch64-unknown-linux-gnu' : 'x86_64-unknown-linux-gnu' }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && + C2PA_LIBS_PLATFORM=\"${{ if inputs.architecture == 'aarch64' }}aarch64-unknown-linux-gnu${{ else }}x86_64-unknown-linux-gnu${{ endif }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && for PYBIN in /opt/python/cp3{10,11}-*/bin; do \${PYBIN}/pip install --upgrade pip wheel && \${PYBIN}/pip install toml && From 481083c9f209d958eee580d8892db6bfed25695e Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:47:33 -0700 Subject: [PATCH 19/22] fix: ARM --- .github/workflows/build-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index 4f191648..d7b5fcaf 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -63,7 +63,7 @@ jobs: cd /io && /opt/python/cp310-cp310/bin/pip install -r requirements.txt -r requirements-dev.txt && /opt/python/cp310-cp310/bin/pip install toml && - C2PA_LIBS_PLATFORM=\"${{ if inputs.architecture == 'aarch64' }}aarch64-unknown-linux-gnu${{ else }}x86_64-unknown-linux-gnu${{ endif }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && + C2PA_LIBS_PLATFORM=\"${{ format('{0}', inputs.architecture == 'aarch64' && 'aarch64-unknown-linux-gnu' || 'x86_64-unknown-linux-gnu') }}\" /opt/python/cp310-cp310/bin/python scripts/download_artifacts.py $C2PA_VERSION && for PYBIN in /opt/python/cp3{10,11}-*/bin; do \${PYBIN}/pip install --upgrade pip wheel && \${PYBIN}/pip install toml && From d92e02c6c448758cf6e6c5bfdaeb1a09c00c6a1d Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 15:55:40 -0700 Subject: [PATCH 20/22] fix: ARM --- setup.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup.py b/setup.py index 2d866857..1216abdc 100644 --- a/setup.py +++ b/setup.py @@ -30,6 +30,7 @@ def get_version(): 'x86_64-apple-darwin': 'dylib', 'x86_64-pc-windows-msvc': 'dll', 'x86_64-unknown-linux-gnu': 'so', + 'aarch64-unknown-linux-gnu': 'so', # Add ARM Linux support } # Directory structure @@ -51,6 +52,7 @@ def get_platform_identifier(cpu_arch = None) -> str: - x86_64-apple-darwin (for Mac x86_64) - x86_64-pc-windows-msvc (for Windows 64-bit) - x86_64-unknown-linux-gnu (for Linux 64-bit) + - aarch64-unknown-linux-gnu (for Linux ARM64) """ system = platform.system().lower() @@ -66,6 +68,8 @@ def get_platform_identifier(cpu_arch = None) -> str: elif system == "windows": return "x86_64-pc-windows-msvc" elif system == "linux": + if platform.machine() == "aarch64": + return "aarch64-unknown-linux-gnu" return "x86_64-unknown-linux-gnu" else: raise ValueError(f"Unsupported operating system: {system}") From d6021633c8f67ad26a52e76c0101cbf5b5e79232 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Tue, 17 Jun 2025 18:02:14 -0700 Subject: [PATCH 21/22] fix: Remove logs --- .github/workflows/build.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index faec5ac7..4ac6a324 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -450,28 +450,14 @@ jobs: merge-multiple: true - name: List downloaded artifacts run: | - echo "=== Downloaded Artifacts ===" + echo "Downloaded Artifacts" ls -la dist/ - echo "=== Artifact Details ===" - for file in dist/*; do - echo "File: $file" - echo "Size: $(du -h $file | cut -f1)" - echo "Type: $(file $file)" - echo "---" - done - name: Publish to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: dist # Uncomment to use TestPyPI - repository-url: https://test.pypi.org/legacy/ + # repository-url: https://test.pypi.org/legacy/ verbose: true # Uncomment below for test runs, otherwise fails on existing packages being reuploaded skip-existing: true - - name: Show PyPI upload results - run: | - echo "=== PyPI Upload Results ===" - echo "Check TestPyPI at: https://test.pypi.org/project/c2pa-python/" - echo "Uploaded files:" - ls -la dist/ - From 27a0bb3a32e9246abf9a2987de69292bfb5ef220 Mon Sep 17 00:00:00 2001 From: Tania Mathern Date: Wed, 18 Jun 2025 11:06:25 -0700 Subject: [PATCH 22/22] fix: Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3ef2f737..e2149481 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "c2pa-python" -version = "0.10.0" +version = "0.11.0" requires-python = ">=3.10" description = "Python bindings for the C2PA Content Authenticity Initiative (CAI) library" readme = { file = "README.md", content-type = "text/markdown" }