While analyzing Box Drive logs, I noticed that the SHA1 value sent during upload appears to be identical to the SHA1 returned after upload completion.
Question:
Does Box calculate the SHA1 hash again on the server side after the file is uploaded and stored?
Or is file_version.sha1 simply derived from the hash value provided by the Box Drive client during upload?
I am trying to understand whether the SHA1 returned by the API represents a server-verified hash of the stored object or merely a client-supplied value.
If Box recalculates the SHA1 on the server side, at what stage of the upload workflow does the verification occur?
The following log is from a file upload operation via BOX Drive.
My question is whether the SHA1 value '99a2435649ffbb10e57cd0b912cd81865546d138' is recalculated and verified by the Box server after the upload, and then stored as the file's SHA1 value, or whether it is simply derived from the SHA1 value submitted by the Box Drive client.
Any clarification from someone familiar with Box's upload and hashing workflow would be greatly appreciated.
2026-10-20 18:28:09.475 29664 INFO StreemRequestServer sync_app_status ============================== IN_PROGRESS ==============================
2026-10-20 18:28:09.494 29664 INFO LocalFSMonitor fs_monitor Processing item change TN: _00000263_; new_native_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>) based on scanned item StreemLocalScannedItem(scanned_item_type='NEW_STATE', native_id=LocalNativeID(266, file), native_state=<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>, path='\\TestFolder123\\\20261020\\Test1.xlsx', old_native_state=None, stream_position=1, key_value_pairs={'process_names': {'cmd.exe'}})
2026-10-20 18:28:09.495 29664 INFO LocalFSMonitor native_state_differ Generating with a CREATE [TN: _00000263_, CREATE, new_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>), old_state: (None), shares_location: False, key values: {'process_names': {'cmd.exe'}}]
2026-10-20 18:28:09.500 29664 INFO LocalFSMonitor fs_monitor Processing item change TN: _00000264_; new_native_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>); old_native_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>) based on scanned item StreemLocalScannedItem(scanned_item_type='NEW_STATE', native_id=LocalNativeID(266, file), native_state=<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>, path='\\TestFolder123\\\20261020\\Test1.xlsx', old_native_state=<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>, stream_position=2, key_value_pairs={'process_names': {'cmd.exe'}})
2026-10-20 18:28:09.500 29664 INFO LocalFSMonitor native_state_differ Generating with a EDIT [TN: _00000264_, EDIT, new_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>), old_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 0; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>), shares_location: False, key values: {'process_names': {'cmd.exe'}}]
2026-10-20 18:28:09.501 29664 INFO LocalFSMonitor base_normalizer CollapseCreateEdit has found a match. ({'item_extension': '.xlsx'})
2026-10-20 18:28:09.506 29664 INFO LocalFSMonitor fs_monitor Processing item change TN: _00000265_; new_native_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792483769; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>); old_native_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>) based on scanned item StreemLocalScannedItem(scanned_item_type='NEW_STATE', native_id=LocalNativeID(266, file), native_state=<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792483769; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>, path='\\TestFolder123\\\20261020\\Test1.xlsx', old_native_state=<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>, stream_position=3, key_value_pairs={'process_names': {'cmd.exe'}})
2026-10-20 18:28:09.507 29664 INFO LocalFSMonitor native_state_differ Generating with a EDIT [TN: _00000265_, EDIT, new_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792483769; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>), old_state: (<LocalNativeState native_id: LocalNativeID(266, file); parent_native_id: 21; name: Test1.xlsx; item_type: 0; size: 13955; is_deleted: False; syncability: SYNCABLE; content_created_at: 1792488489; content_updated_at: 1792488489; checksum: None; attributes: set(); package_folder_transition: None; ancestor_ids: [LocalNativeID(21, folder), LocalNativeID(7, folder)]>), shares_location: False, key values: {'process_names': {'cmd.exe'}}]
2026-10-20 18:28:09.508 29664 INFO LocalFSMonitor base_normalizer CollapseCreateEdit has found a match. ({'item_extension': '.xlsx'})
2026-10-20 18:28:10.317 29664 INFO StreemRequestServer streem_requests_handl <IPC Call: sendMetric('folderfetch', 'FOLDER_FETCH_TIME', 1, 0, {}, {'folder_group': '', 'syncability_reason': 'PreFetched'}, 0, 1) -> ?>
2026-10-20 18:28:10.317 29664 INFO StreemRequestServer streem_requests_handl <IPC Call: sendMetric('folderfetch', 'FOLDER_FETCH_TIME', 1, 0, {}, {'folder_group': '', 'syncability_reason': 'PreFetched', 'value': 0}, 0, 1) -> None>
2026-10-20 18:28:14.521 29664 INFO LocalFSMonitor local_sync_event_buil Generating sync event item_id=263, [ESN=263. TN: _00000263_00000264_00000265_, LOCAL [CREATE, :CreateSyncEventAPIParameters , name: Test1.xlsx, item_type: 0, parent_item_id: 18, checksum: None, lock_state: None NONE, key values: {'process_names': {'cmd.exe'}}]]
2026-10-20 18:28:14.530 29664 INFO LocalExecutor-4 box_fs_sync_api Creating item on box. name="Test1.xlsx", item_type=0, parent_native_id=BoxNativeID(444444444444, folder)
2026-10-20 18:28:14.531 29664 INFO LocalExecutor-4 local_fs_content_stre Retrieving content stream: item_id=263, path="TestFolder123\20261020\Test1.xlsx", native_id=LocalNativeID(266, file), inode_id=266
2026-10-20 18:28:14.573 29664 INFO LocalExecutor-4 local_fs_content_stre Copying to temp file "C:\Users\12345678\AppData\Local\Temp\tmp9c58h3_k"
2026-10-20 18:28:14.575 29664 INFO LocalExecutor-4 local_fs_content_stre Copy succeeded in 0.044s
2026-10-20 18:28:14.577 29664 INFO LocalExecutor-4 network_layer Request: GET https://api.box.com/2.0/files/2222222222222 {'fields': 'sha1,file_version,description,classification'} {'Priority': 'u=2'}
2026-10-20 18:28:14.836 29664 INFO LocalExecutor-4 network_layer Response: 0310d77dc6e18129398c2a4d3c1aa72a7: {'type': 'file', 'id': '2222222222222', 'etag': '0', 'sha1': '99a2435649ffbb10e57cd0b912cd81865546d138', 'file_version': {'type': 'file_version', 'id': '2816477725654', 'sha1': '99a2435649ffbb10e57cd0b912cd81865546d138'}, 'description': '', 'classification': None}
2026-10-20 18:28:14.836 29664 INFO LocalExecutor-4 network_layer Request: POST https://api.box.com/2.0/files/2222222222222/copy {} {'Priority': 'u=2'}
2026-10-20 18:28:15.622 29664 INFO LocalExecutor-4 network_layer Response: 0931079ac1c6af7e73f69d9aa74dee35d: {'type': 'file', 'id': '2538181969677', 'file_version': {'type': 'file_version', 'id': '2816631704877', 'sha1': '99a2435649ffbb10e57cd0b912cd81865546d138'}, 'sequence_id': '0', 'etag': '0', 'sha1': '99a2435649ffbb10e57cd0b912cd81865546d138', 'name': 'Test1.xlsx', 'description': '', 'size': 13955, 'path_collection': {'total_count': 3, 'entries': [{'type': 'folder', 'id': '0', 'sequence_id': None, 'etag': None, 'name': 'All Files'}, {'type': 'folder', 'id': '296083916701', 'sequence_id': '1', 'etag': '1', 'name': 'Testfolder'}, {'type': 'folder', 'id': '444444444444', 'sequence_id': '1', 'etag': '1', 'name': '20261020'}]}, 'created_at': '2026-10-20T02:28:16-07:00', 'modified_at': '2026-10-20T02:28:16-07:00', 'trashed_at': None, 'purged_at': None, 'content_created_at': '2026-10-20T01:11:45-07:00', 'content_modified_at': '2026-10-20T01:09:29-07:00', 'created_by': {'type': 'user', 'id': '34567890123', 'name': 'SSSSSS JJJJJJJJ', 'login': 'aaa.bbb.ccc@ddd.com'}, 'modified_by': {'type': 'user', 'id': '34567890123', 'name': 'SSSSSS JJJJJJJJ', 'login': 'aaa.bbb.ccc@ddd.com'}, 'owned_by': {'type': 'user', 'id': '34567890123', 'name': 'SSSSSS JJJJJJJJ', 'login': 'aaa.bbb.ccc@ddd.com'}, 'shared_link': None, 'parent': {'type': 'folder', 'id': '444444444444', 'sequence_id': '1', 'etag': '1', 'name': '20261020'}, 'item_status': 'active'}
2026-10-20 18:28:15.624 29664 INFO LocalExecutor-4 sync_event_executor Completed processing CREATE ESN=263 on item_id 263. Sync event result: DefaultSyncEventResult: SUCCESS
2026-10-20 18:28:15.638 29664 INFO LocalExecutor-4 sync_app_status ============================== COMPLETE ==============================
