syntax = "proto2"; import "response.proto"; message Response_PasswordSalt { extend Response { optional Response_PasswordSalt ext = 1017; } // Salt for the legacy password hash. Pre-challenge clients derive and send // that hash from it. For migrated accounts holding a fresh legacy backup // this carries the backup's salt so those clients can still log in; clients // that speak challenge-response must use scrypt_salt instead when present. optional string password_salt = 1; // scrypt cost parameters for the verifier. Absent/zero for legacy accounts. optional int32 n = 2; optional int32 r = 3; optional int32 p = 4; // Server-generated challenge. When present the client must authenticate // with a challenge-response instead of transmitting the password hash. optional bytes nonce = 5; // True when the account still uses the legacy password format and should // be migrated to the scrypt format after a successful login. optional bool needs_migration = 6; // Salt of the stored scrypt verifier. Present for migrated accounts; // challenge-response clients derive the verifier from this rather than // from password_salt, which may carry a legacy backup salt. optional string scrypt_salt = 7; }