MEDIUM severity: The vulnerability lies in the `submitData` function, where the compressed block data is not verified. The vulnerability lies in the `submitData` function, where the compressed block data is not verified against the data in the prover during data submission. Specifically, the function calculates `x` by hashing the commitment of the compressed block data (`keccak(_submissionData.compressedData)`) and...

Vulnerable code:
```\nshnarf = keccak256(\n    abi.encode(\n        shnarf,\n        _submissionData.snarkHash,\n        _submissionData.finalStateRootHash,\n        compressedDataComputedX,\n        _calculateY(_submissionData.compressedData, compressedDataComputedX)\n    )\n)\n```\n```\nfunction _submitData(SubmissionData calldata _submissionData) internal returns (bytes32 shnarf) {\n    shnarf = dataShnarfHashes[_submissionData.dataParentHash];\n\n    bytes32 parentFinalStateRootHash = dataFinalStateRootHashes[_submissionData.dataParentHash];\n    uint256 lastFinalizedBlock = currentL2BlockNumber;\n\n    if (_submissionData.firstBlockInData <= lastFinalizedBlock) {\n        revert FirstBlockLessThanOrEqualToLastFinalizedBlock(_submissionData.firstBlockInData, lastFinalizedBlock);\n    }\n\n    if (_submissionData.firstBlockInData > _submissionData.finalBlockInData) {\n        revert FirstBlockGreaterThanFinalBlock(_submissionData.firstBlockInData, _submissionData.finalBlockInData);\n    }\n\n    if (_submissionData.parentStateRootHash!= parentFinalStateRootHash) {\n        revert StateRootHashInvalid(parentFinalStateRootHash, _submissionData.parentStateRootHash);\n    }\n\n    bytes32 currentDataHash = keccak256(_submissionData.compressedData);\n\n    if (dataFinalStateRootHashes[currentDataHash]!= EMPTY_HASH) {\n        revert DataAlreadySubmitted(currentDataHash);\n    }\n\n    dataParents[currentDataHash] = _submissionData.dataParentHash;\n    dataFinalStateRootHashes[currentDataHash] = _submissionData.finalStateRootHash;\n\n    bytes32 compressedDataComputedX = keccak256(abi.encode(_submissionData.snarkHash, currentDataHash));\n\n    shnarf = keccak256(\n        abi.encode(\n            shnarf,\n            _submissionData.snarkHash,\n            _submissionData.finalStateRootHash,\n            compressedDataComputedX,\n            _calculateY(_submissionData.compressedData, compressedDataComputedX)\n        )\n    );\n\n    dataShnarfHashes[currentDataHash] = shnarf;\n\n    emit DataSubmitted(currentDataHash, _submissionData.firstBlockInData, _submissionData.finalBlockInData);\n}\n```\n```\nfunction _calculateY(\n    bytes calldata _data,\n    bytes32 _compressedDataComputedX\n) internal pure returns (bytes32 compressedDataComputedY) {\n    if (_data.length % 0x20!= 0) {\n        revert BytesLengthNotMultipleOf32();\n    }\n\n    bytes4 errorSelector = ILineaRollup.FirstByteIsNotZero.selector;\n    assembly {\n        for {\n            let i := _data.length\n        } gt(i, 0) {\n            i := sub(i, 0x20)\n            let chunk := calldataload(add(_data, i))\n            if iszero(iszero(and(chunk, 0xFF00000000000000000000000000000000000000000000000000000000000000))) {\n                let ptr := mload(0x40)\n                mstore(ptr, errorSelector)\n                revert(ptr, 0x4)\n            }\n            compressedDataComputedY := addmod(\n                mulmod(compressedDataComputedY, _compressedDataComputedX, Y_MODULUS),\n                chunk,\n                Y_MODULUS\n            )\n        }\n    }\n}\n```