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 Summary
Fields Modifier and Type Field Description protected BigInteger
A
protected BigInteger
b
protected BigInteger
B
protected Digest
digest
protected BigInteger
g
protected BigInteger
Key
protected BigInteger
M1
protected BigInteger
M2
protected BigInteger
N
protected SecureRandom
random
protected BigInteger
S
protected BigInteger
u
protected BigInteger
v
-
Constructor Summary
Constructors Constructor Description SRP6Server()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description BigInteger
calculateSecret(BigInteger clientA)
Processes the client's credentials.BigInteger
calculateServerEvidenceMessage()
Computes the server evidence message M2 using the previously verified values.BigInteger
calculateSessionKey()
Computes the final session key as a result of the SRP successful mutual authentication To be called after calculating the server evidence message M2.BigInteger
generateServerCredentials()
Generates the server's credentials that are to be sent to the client.void
init(BigInteger N, BigInteger g, BigInteger v, Digest digest, SecureRandom random)
Initialises the server to accept a new client authentication attemptvoid
init(SRP6GroupParameters group, BigInteger v, Digest digest, SecureRandom random)
protected BigInteger
selectPrivateValue()
boolean
verifyClientEvidenceMessage(BigInteger clientM1)
Authenticates the received client evidence message M1 and saves it only if correct.
-
-
-
Field Detail
-
N
protected BigInteger N
-
g
protected BigInteger g
-
v
protected BigInteger v
-
random
protected SecureRandom random
-
digest
protected Digest digest
-
A
protected BigInteger A
-
b
protected BigInteger b
-
B
protected BigInteger B
-
u
protected BigInteger u
-
S
protected BigInteger S
-
M1
protected BigInteger M1
-
M2
protected BigInteger M2
-
Key
protected BigInteger Key
-
-
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 verifierg
- The group parameter associated with the client's verifierv
- The client's verifierdigest
- The digest algorithm associated with the client's verifierrandom
- 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
-
-