Class SRP6Server


  • public class SRP6Server
    extends Object
    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"
    • Constructor Detail

      • SRP6Server

        public SRP6Server()
    • Method Detail

      • init

        public void init​(BigInteger N,
                         BigInteger g,
                         BigInteger v,
                         Digest digest,
                         SecureRandom random)
        Initialises the server to accept a new client authentication attempt
        Parameters:
        N - The safe prime associated with the client's verifier
        g - The group parameter associated with the client's verifier
        v - The client's verifier
        digest - The digest algorithm associated with the client's verifier
        random - For key generation
      • generateServerCredentials

        public BigInteger generateServerCredentials()
        Generates the server's credentials that are to be sent to the client.
        Returns:
        The server's public value to the client
      • calculateSecret

        public BigInteger calculateSecret​(BigInteger clientA)
                                   throws CryptoException
        Processes the client's credentials. If valid the shared secret is generated and returned.
        Parameters:
        clientA - The client's credentials
        Returns:
        A shared secret BigInteger
        Throws:
        CryptoException - If client's credentials are invalid
      • selectPrivateValue

        protected BigInteger selectPrivateValue()
      • verifyClientEvidenceMessage

        public boolean verifyClientEvidenceMessage​(BigInteger clientM1)
                                            throws CryptoException
        Authenticates the received client evidence message M1 and saves it only if correct. To be called after calculating the secret S.
        Parameters:
        clientM1 - the client side generated evidence message
        Returns:
        A boolean indicating if the client message M1 was the expected one.
        Throws:
        CryptoException
      • calculateServerEvidenceMessage

        public BigInteger calculateServerEvidenceMessage()
                                                  throws CryptoException
        Computes the server evidence message M2 using the previously verified values. To be called after successfully verifying the client evidence message M1.
        Returns:
        M2: the server side generated evidence message
        Throws:
        CryptoException
      • calculateSessionKey

        public BigInteger calculateSessionKey()
                                       throws CryptoException
        Computes the final session key as a result of the SRP successful mutual authentication To be called after calculating the server evidence message M2.
        Returns:
        Key: the mutual authenticated symmetric session key
        Throws:
        CryptoException