Class SRP6Server


  • public class SRP6Server
    extends java.lang.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 Summary

      Fields 
      Modifier and Type Field Description
      protected java.math.BigInteger A  
      protected java.math.BigInteger b  
      protected java.math.BigInteger B  
      protected Digest digest  
      protected java.math.BigInteger g  
      protected java.math.BigInteger N  
      protected java.security.SecureRandom random  
      protected java.math.BigInteger S  
      protected java.math.BigInteger u  
      protected java.math.BigInteger v  
    • Constructor Summary

      Constructors 
      Constructor Description
      SRP6Server()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private java.math.BigInteger calculateS()  
      java.math.BigInteger calculateSecret​(java.math.BigInteger clientA)
      Processes the client's credentials.
      java.math.BigInteger generateServerCredentials()
      Generates the server's credentials that are to be sent to the client.
      void init​(java.math.BigInteger N, java.math.BigInteger g, java.math.BigInteger v, Digest digest, java.security.SecureRandom random)
      Initialises the server to accept a new client authentication attempt
      protected java.math.BigInteger selectPrivateValue()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • N

        protected java.math.BigInteger N
      • g

        protected java.math.BigInteger g
      • v

        protected java.math.BigInteger v
      • random

        protected java.security.SecureRandom random
      • digest

        protected Digest digest
      • A

        protected java.math.BigInteger A
      • b

        protected java.math.BigInteger b
      • B

        protected java.math.BigInteger B
      • u

        protected java.math.BigInteger u
      • S

        protected java.math.BigInteger S
    • Constructor Detail

      • SRP6Server

        public SRP6Server()
    • Method Detail

      • init

        public void init​(java.math.BigInteger N,
                         java.math.BigInteger g,
                         java.math.BigInteger v,
                         Digest digest,
                         java.security.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 java.math.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 java.math.BigInteger calculateSecret​(java.math.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 java.math.BigInteger selectPrivateValue()
      • calculateS

        private java.math.BigInteger calculateS()