Add JavaDoc
This commit is contained in:
parent
cab09d1949
commit
24dd119c8e
@ -182,6 +182,12 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
return new String(aesDecryptCipher.doFinal(cipherText));
|
return new String(aesDecryptCipher.doFinal(cipherText));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a server's AES encrypted challenge and compares it against the one that was sent initially.
|
||||||
|
*
|
||||||
|
* @param response The server's encoded and encrypted client challenge.
|
||||||
|
* @throws FailedVerificationException Thrown if the challenges do not match.
|
||||||
|
*/
|
||||||
private void verifyChallenge(String response) throws FailedVerificationException {
|
private void verifyChallenge(String response) throws FailedVerificationException {
|
||||||
// Decrypt to base64 encoded byte array
|
// Decrypt to base64 encoded byte array
|
||||||
String plainText;
|
String plainText;
|
||||||
@ -204,6 +210,11 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
" does not match sent clientChallenge " + new String(this.challenge));
|
" does not match sent clientChallenge " + new String(this.challenge));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a new random 256 bit AES secret key.
|
||||||
|
*
|
||||||
|
* @return Either shuts down on error or returns the generated key.
|
||||||
|
*/
|
||||||
private SecretKeySpec generateSecretKey() {
|
private SecretKeySpec generateSecretKey() {
|
||||||
try {
|
try {
|
||||||
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
|
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
|
||||||
@ -217,6 +228,11 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a new random 128 bit initialization vector
|
||||||
|
*
|
||||||
|
* @return The generated IV.
|
||||||
|
*/
|
||||||
private IvParameterSpec generateIv() {
|
private IvParameterSpec generateIv() {
|
||||||
// Size of IV corresponds to AES block size (=128bits=16bytes)
|
// Size of IV corresponds to AES block size (=128bits=16bytes)
|
||||||
byte[] iv = new byte[16];
|
byte[] iv = new byte[16];
|
||||||
@ -224,6 +240,12 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
return new IvParameterSpec(iv);
|
return new IvParameterSpec(iv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the global encryption and decryption ciphers (aesEncryptCipher, aesDecryptCipher).
|
||||||
|
*
|
||||||
|
* @param secretKey A previously generated 256 bit AES secret key.
|
||||||
|
* @param iv A previously generated 128 bit AES initialization vector.
|
||||||
|
*/
|
||||||
private void setAesCiphers(SecretKeySpec secretKey, IvParameterSpec iv) {
|
private void setAesCiphers(SecretKeySpec secretKey, IvParameterSpec iv) {
|
||||||
try {
|
try {
|
||||||
this.aesEncryptCipher = Cipher.getInstance("AES/CTR/NoPadding");
|
this.aesEncryptCipher = Cipher.getInstance("AES/CTR/NoPadding");
|
||||||
@ -244,7 +266,12 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] generateChallenge(PublicKey serverPublicKey) {
|
/**
|
||||||
|
* Generates a new random 256 bit challenge.
|
||||||
|
*
|
||||||
|
* @return The generated challenge.
|
||||||
|
*/
|
||||||
|
private byte[] generateChallenge() {
|
||||||
SecureRandom secureRandom = new SecureRandom();
|
SecureRandom secureRandom = new SecureRandom();
|
||||||
// Generate new random 32 byte challenge
|
// Generate new random 32 byte challenge
|
||||||
this.challenge = new byte[32];
|
this.challenge = new byte[32];
|
||||||
@ -252,9 +279,19 @@ public class MessageClient implements IMessageClient, Runnable {
|
|||||||
return this.challenge;
|
return this.challenge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the full challenge message to be sent to the server.
|
||||||
|
*
|
||||||
|
* The challenge message is of the format:
|
||||||
|
* ok <client-challenge> <secret-key> <iv>
|
||||||
|
* The parameters are base64 encoded individually, then they are concatenated:
|
||||||
|
* ok <base64-client-challenge> <base64-secret-key> <base64-iv>
|
||||||
|
* The whole string is then AES encrypted and the result base64 encoded again.
|
||||||
|
* @return A base64 encoded full client challenge.
|
||||||
|
*/
|
||||||
private String generateChallengeMessage(PublicKey serverPublicKey) {
|
private String generateChallengeMessage(PublicKey serverPublicKey) {
|
||||||
SecureRandom secureRandom = new SecureRandom();
|
SecureRandom secureRandom = new SecureRandom();
|
||||||
byte[] clearTextChallenge = generateChallenge(serverPublicKey);
|
byte[] clearTextChallenge = generateChallenge();
|
||||||
SecretKeySpec secretKeySpec = generateSecretKey();
|
SecretKeySpec secretKeySpec = generateSecretKey();
|
||||||
assert secretKeySpec != null;
|
assert secretKeySpec != null;
|
||||||
IvParameterSpec iv = generateIv();
|
IvParameterSpec iv = generateIv();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user