)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f6de9fc3bc3f54be16d659c7b80aca2931a6c6ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"894f5c24_57cd1783","updated":"2026-10-21 17:33:14.000000000","message":"LGTM.","commit_id":"8d11103f2df4f60aa40dc91e6934c1dd1200593d"}],"oslo_utils/imageutils/_luks.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38fc6b4df462e37bdd9fbc85a757681676b93e33","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        backend\u003ddefault_backend(),"},{"line_number":395,"context_line":"    )"},{"line_number":396,"context_line":"    pwd_derived \u003d kdf.derive(passphrase)"},{"line_number":397,"context_line":"    LOG.debug(\u0027  Derived key: %s\u0027, pwd_derived.hex()[:32])"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    # Step 2: Decrypt the key material"},{"line_number":400,"context_line":"    LOG.debug(\u0027Decrypting key material\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"312462e0_9383fbed","side":"PARENT","line":397,"updated":"2026-10-29 15:51:04.000000000","message":"Oof yeah, this was never intended to be left in the final version of course, it was just there for all the testing ahead of time!","commit_id":"eed93c25be6d66953bc0e36a5289dd242f40a282"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"75021b4222dfbd7e1f1eb71c9ae8ac707f1c8fb2","unresolved":true,"context_lines":[{"line_number":417,"context_line":"        return None"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    LOG.debug(\u0027  Split key size: %d bytes\u0027, len(split_key))"},{"line_number":420,"context_line":"    LOG.debug(\u0027  First 32 bytes: %s\u0027, split_key[:32].hex())"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    # Step 3: AFmerge to recover the master key candidate"},{"line_number":423,"context_line":"    LOG.debug(\u0027Running AFmerge to recover master key\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe3f47c1_b40a138c","side":"PARENT","line":420,"updated":"2026-10-21 16:45:52.000000000","message":"I do wonder if it would still be useful to log a smaller prefix of the key to help with any troubleshooting. But this is likely safer to just exclude and can always be added back in later if there really is a need.","commit_id":"eed93c25be6d66953bc0e36a5289dd242f40a282"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f6de9fc3bc3f54be16d659c7b80aca2931a6c6ca","unresolved":true,"context_lines":[{"line_number":440,"context_line":"    )"},{"line_number":441,"context_line":"    mk_digest \u003d kdf_verify.derive(master_key_candidate)"},{"line_number":442,"context_line":"    LOG.debug(\u0027  Computed digest: %s\u0027, mk_digest.hex())"},{"line_number":443,"context_line":"    LOG.debug(\u0027  Expected digest: %s\u0027, header[\u0027mk_digest\u0027].hex())"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    if mk_digest \u003d\u003d header[\u0027mk_digest\u0027]:"},{"line_number":446,"context_line":"        LOG.debug(\u0027Master key verified successfully!\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"126f7dd2_3ca50eaf","side":"PARENT","line":443,"updated":"2026-10-21 17:33:14.000000000","message":"These are probably safe, it would be really difficult to reverse engineer the digest.  But they\u0027re not going to be useful to operators, just to developers, so I think leave them out.","commit_id":"eed93c25be6d66953bc0e36a5289dd242f40a282"}]}
