Class SRP6Server

java.lang.Object
org.bouncycastle.crypto.agreement.srp.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"
  • Field Details

  • Constructor Details

    • SRP6Server

      public SRP6Server()
  • Method Details

    • 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
    • init

      public void init(SRP6GroupParameters group, BigInteger v, Digest digest, SecureRandom random)
    • 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