// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CRYPTO_P224_SPAKE_H_ #define CRYPTO_P224_SPAKE_H_ #include <stdint.h> #include <string> #include <string_view> #include "base/gtest_prod_util.h" #include "crypto/sha2.h" namespace crypto { // P224EncryptedKeyExchange implements SPAKE2, a variant of Encrypted // Key Exchange. It allows two parties that have a secret common // password to establish a common secure key by exchanging messages // over an insecure channel without disclosing the password. // // The password can be low entropy as authenticating with an attacker only // gives the attacker a one-shot password oracle. No other information about // the password is leaked. (However, you must be sure to limit the number of // permitted authentication attempts otherwise they get many one-shot oracles.) // // The protocol requires several RTTs (actually two, but you shouldn't assume // that.) To use the object, call GetNextMessage() and pass that message to the // peer. Get a message from the peer and feed it into ProcessMessage. Then // examine the return value of ProcessMessage: // kResultPending: Another round is required. Call GetNextMessage and repeat. // kResultFailed: The authentication has failed. You can get a human readable // error message by calling error(). // kResultSuccess: The authentication was successful. // // In each exchange, each peer always sends a message. class CRYPTO_EXPORT P224EncryptedKeyExchange { … }; } // namespace crypto #endif // CRYPTO_P224_SPAKE_H_