blob: ff5abad25ca25cf633908538f72c5d9600def9c0 [file] [log] [blame]
// See file LICENSE for more information.
part of api;
/// Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe.
/// This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper
/// "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002"
abstract class SRPServer {
/// Processes the client's credentials. If valid the shared secret is generated and returned.
/// @param clientA The client's credentials
/// @return A shared secret BigInt
/// @throws CryptoException If client's credentials are invalid
BigInt? calculateSecret(BigInt clientA);
/// Computes the final session key as a result of the SRP successful mutual authentication
/// To be called after calculating the server evidence message M2.
/// @return Key: the mutual authenticated symmetric session key
/// @throws CryptoException
BigInt? calculateSessionKey();
/// Generates the server's credentials that are to be sent to the client.
/// @return The server's public value
BigInt? generateServerCredentials();
/// Computes the server evidence message M2 using the previously verified values.
/// To be called after successfully verifying the client evidence message M1.
/// @return M2: the server side generated evidence message
/// @throws CryptoException
BigInt? calculateServerEvidenceMessage();
/// Authenticates the received client evidence message M1 and saves it only if correct.
/// To be called after calculating the secret S.
/// @param clientM1 the client side generated evidence message
/// @return A boolean indicating if the client message M1 was the expected one.
/// @throws CryptoException
bool verifyClientEvidenceMessage(BigInt clientM1);
}