)]}'
{"metropolis/node/core/localstorage/crypt/crypt.go":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":15,"context_line":"// limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"// Package crypt implements block device (eg. disk) encryption and authentication"},{"line_number":18,"context_line":"// using dm-crypt and dm-verity."},{"line_number":19,"context_line":"//"},{"line_number":20,"context_line":"// Encryption using dm-crypt is implemented using AES (either in GCM or XTS mode,"},{"line_number":21,"context_line":"// depending on whether authentication is enabled)."}],"source_content_type":"text/x-go","patch_set":1,"id":"2e2b9490_03e3d3eb","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":31},"updated":"2023-05-30 16:00:48.000000000","message":"dm-integrity, not dm-verity","commit_id":"be0b747dd6a9fab314e669cbd37ce978bd3e488f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"// limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"// Package crypt implements block device (eg. disk) encryption and authentication"},{"line_number":18,"context_line":"// using dm-crypt and dm-verity."},{"line_number":19,"context_line":"//"},{"line_number":20,"context_line":"// Encryption using dm-crypt is implemented using AES (either in GCM or XTS mode,"},{"line_number":21,"context_line":"// depending on whether authentication is enabled)."}],"source_content_type":"text/x-go","patch_set":1,"id":"4a98dbe2_3f32086f","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":31},"in_reply_to":"2e2b9490_03e3d3eb","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"be0b747dd6a9fab314e669cbd37ce978bd3e488f"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":20,"context_line":"// Encryption using dm-crypt is implemented using AES (either in GCM or XTS mode,"},{"line_number":21,"context_line":"// depending on whether authentication is enabled)."},{"line_number":22,"context_line":"//"},{"line_number":23,"context_line":"// Authentication using dm-verity provides per-sector integrity protection which"},{"line_number":24,"context_line":"// guards against accidental and malicious bit flips in the underlying storage,"},{"line_number":25,"context_line":"// but does nor protect against individual sectors (or the entire disk) being"},{"line_number":26,"context_line":"// rolled back."}],"source_content_type":"text/x-go","patch_set":1,"id":"4586e4c0_f4e423fe","line":23,"range":{"start_line":23,"start_character":24,"end_line":23,"end_character":33},"updated":"2023-05-30 16:00:48.000000000","message":"same","commit_id":"be0b747dd6a9fab314e669cbd37ce978bd3e488f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"// Encryption using dm-crypt is implemented using AES (either in GCM or XTS mode,"},{"line_number":21,"context_line":"// depending on whether authentication is enabled)."},{"line_number":22,"context_line":"//"},{"line_number":23,"context_line":"// Authentication using dm-verity provides per-sector integrity protection which"},{"line_number":24,"context_line":"// guards against accidental and malicious bit flips in the underlying storage,"},{"line_number":25,"context_line":"// but does nor protect against individual sectors (or the entire disk) being"},{"line_number":26,"context_line":"// rolled back."}],"source_content_type":"text/x-go","patch_set":1,"id":"ebe2c50c_37628766","line":23,"range":{"start_line":23,"start_character":24,"end_line":23,"end_character":33},"in_reply_to":"4586e4c0_f4e423fe","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"be0b747dd6a9fab314e669cbd37ce978bd3e488f"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":50,"context_line":"type Mode string"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"// ModeEncryptedAuthenticated means the block device will first be authenticated"},{"line_number":53,"context_line":"// using dm-verity, then encrypted using dm-crypt."},{"line_number":54,"context_line":"//"},{"line_number":55,"context_line":"// A key needs to be provided when initializing and mapping a block device."},{"line_number":56,"context_line":"const ModeEncryptedAuthenticated Mode \u003d \"encrypted+authenticated\""}],"source_content_type":"text/x-go","patch_set":2,"id":"291a934d_dee922b5","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":18},"updated":"2023-05-30 16:00:48.000000000","message":"integrity","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"type Mode string"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"// ModeEncryptedAuthenticated means the block device will first be authenticated"},{"line_number":53,"context_line":"// using dm-verity, then encrypted using dm-crypt."},{"line_number":54,"context_line":"//"},{"line_number":55,"context_line":"// A key needs to be provided when initializing and mapping a block device."},{"line_number":56,"context_line":"const ModeEncryptedAuthenticated Mode \u003d \"encrypted+authenticated\""}],"source_content_type":"text/x-go","patch_set":2,"id":"15aa193b_33c2658c","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":18},"in_reply_to":"291a934d_dee922b5","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":240,"context_line":"\t\t\treturn \"\", fmt.Errorf(\"failed to open new device for zeroing: %w\", err)"},{"line_number":241,"context_line":"\t\t}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"\t\tblockSize, err :\u003d unix.IoctlGetUint32(int(blkdev.Fd()), unix.BLKSSZGET)"},{"line_number":244,"context_line":"\t\tif err !\u003d nil {"},{"line_number":245,"context_line":"\t\t\tblkdev.Close()"},{"line_number":246,"context_line":"\t\t\treturn \"\", fmt.Errorf(\"when getting block size of integrity device: %w\", err)"}],"source_content_type":"text/x-go","patch_set":2,"id":"d76e7c99_171684a0","line":243,"range":{"start_line":243,"start_character":2,"end_line":243,"end_character":39},"updated":"2023-05-30 16:00:48.000000000","message":"Use your getBlockSize helper here too, makes the switchover to blockdev easier if it\u0027s the same everywhere.","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":240,"context_line":"\t\t\treturn \"\", fmt.Errorf(\"failed to open new device for zeroing: %w\", err)"},{"line_number":241,"context_line":"\t\t}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"\t\tblockSize, err :\u003d unix.IoctlGetUint32(int(blkdev.Fd()), unix.BLKSSZGET)"},{"line_number":244,"context_line":"\t\tif err !\u003d nil {"},{"line_number":245,"context_line":"\t\t\tblkdev.Close()"},{"line_number":246,"context_line":"\t\t\treturn \"\", fmt.Errorf(\"when getting block size of integrity device: %w\", err)"}],"source_content_type":"text/x-go","patch_set":2,"id":"d47e5e8f_17ac13ac","line":243,"range":{"start_line":243,"start_character":2,"end_line":243,"end_character":39},"in_reply_to":"d76e7c99_171684a0","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":249,"context_line":"\t\tzeroedBuf :\u003d make([]byte, blockSize*256)"},{"line_number":250,"context_line":"\t\tfor {"},{"line_number":251,"context_line":"\t\t\t_, err :\u003d blkdev.Write(zeroedBuf)"},{"line_number":252,"context_line":"\t\t\tif e, ok :\u003d err.(*os.PathError); ok \u0026\u0026 e.Err \u003d\u003d syscall.ENOSPC {"},{"line_number":253,"context_line":"\t\t\t\tbreak"},{"line_number":254,"context_line":"\t\t\t}"},{"line_number":255,"context_line":"\t\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"73386542_1f353934","line":252,"range":{"start_line":252,"start_character":6,"end_line":252,"end_character":65},"updated":"2023-05-30 16:00:48.000000000","message":"This can now use errors.Is.","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":249,"context_line":"\t\tzeroedBuf :\u003d make([]byte, blockSize*256)"},{"line_number":250,"context_line":"\t\tfor {"},{"line_number":251,"context_line":"\t\t\t_, err :\u003d blkdev.Write(zeroedBuf)"},{"line_number":252,"context_line":"\t\t\tif e, ok :\u003d err.(*os.PathError); ok \u0026\u0026 e.Err \u003d\u003d syscall.ENOSPC {"},{"line_number":253,"context_line":"\t\t\t\tbreak"},{"line_number":254,"context_line":"\t\t\t}"},{"line_number":255,"context_line":"\t\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"6f3c53b3_7b088e2d","line":252,"range":{"start_line":252,"start_character":6,"end_line":252,"end_character":65},"in_reply_to":"73386542_1f353934","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"}],"metropolis/node/core/localstorage/crypt/crypt_encryption.go":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2169d58838d3f9f466ea6680cea698774ab137e9","unresolved":true,"context_lines":[{"line_number":29,"context_line":"\t}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"\toptParams :\u003d []string{"},{"line_number":32,"context_line":"\t\t\"no_read_workqueue\", \"no_write_workqueue\","},{"line_number":33,"context_line":"\t}"},{"line_number":34,"context_line":"\tcipher :\u003d \"capi:xts(aes)-essiv:sha256\""},{"line_number":35,"context_line":"\tif authenticated {"}],"source_content_type":"text/x-go","patch_set":2,"id":"462a7fa1_02ef362b","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":42},"updated":"2023-05-30 16:00:48.000000000","message":"If running without integrity, put \"discard\" in here too. It can help SSDs a lot and  was only disabled because it doesn\u0027t work together with integrity.","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"155be40a8a893e7187393ceca29548c4d28275a2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"\t}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"\toptParams :\u003d []string{"},{"line_number":32,"context_line":"\t\t\"no_read_workqueue\", \"no_write_workqueue\","},{"line_number":33,"context_line":"\t}"},{"line_number":34,"context_line":"\tcipher :\u003d \"capi:xts(aes)-essiv:sha256\""},{"line_number":35,"context_line":"\tif authenticated {"}],"source_content_type":"text/x-go","patch_set":2,"id":"65c91696_0fb487bf","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":42},"in_reply_to":"462a7fa1_02ef362b","updated":"2023-05-30 21:32:24.000000000","message":"Done","commit_id":"9d8d3a98e1ad2d66d4455f51939fa2deb1059b2f"}]}
