mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8226338: Updates to Stateless Resumption
Reviewed-by: xuelei, jnimeh
This commit is contained in:
parent
e352e9327c
commit
200254b479
11 changed files with 677 additions and 113 deletions
|
@ -46,7 +46,6 @@ import java.nio.ByteBuffer;
|
|||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Collection;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
|
@ -255,13 +254,17 @@ final class SessionTicketExtension {
|
|||
data = buf;
|
||||
}
|
||||
|
||||
public byte[] encrypt(HandshakeContext hc, SSLSessionImpl session)
|
||||
throws IOException {
|
||||
public byte[] encrypt(HandshakeContext hc, SSLSessionImpl session) {
|
||||
byte[] encrypted;
|
||||
StatelessKey key = KeyState.getCurrentKey(hc);
|
||||
byte[] iv = new byte[16];
|
||||
|
||||
if (!hc.handshakeSession.isStatelessable(hc)) {
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
try {
|
||||
StatelessKey key = KeyState.getCurrentKey(hc);
|
||||
byte[] iv = new byte[16];
|
||||
|
||||
SecureRandom random = hc.sslContext.getSecureRandom();
|
||||
random.nextBytes(iv);
|
||||
Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
|
||||
|
@ -273,8 +276,11 @@ final class SessionTicketExtension {
|
|||
(byte)(key.num >>> 8),
|
||||
(byte)(key.num)}
|
||||
);
|
||||
encrypted = c.doFinal(session.write());
|
||||
|
||||
byte[] data = session.write();
|
||||
if (data.length == 0) {
|
||||
return data;
|
||||
}
|
||||
encrypted = c.doFinal(data);
|
||||
byte[] result = new byte[encrypted.length + Integer.BYTES +
|
||||
iv.length];
|
||||
result[0] = (byte)(key.num >>> 24);
|
||||
|
@ -286,7 +292,10 @@ final class SessionTicketExtension {
|
|||
Integer.BYTES + iv.length, encrypted.length);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
throw hc.conContext.fatal(Alert.UNEXPECTED_MESSAGE, e);
|
||||
if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) {
|
||||
SSLLogger.fine("Encryption failed." + e);
|
||||
}
|
||||
return new byte[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,11 +320,7 @@ final class SessionTicketExtension {
|
|||
(byte)(keyID >>> 8),
|
||||
(byte)(keyID)}
|
||||
);
|
||||
/*
|
||||
return ByteBuffer.wrap(c.doFinal(data,
|
||||
Integer.BYTES + iv.length,
|
||||
data.length - (Integer.BYTES + iv.length)));
|
||||
*/
|
||||
|
||||
ByteBuffer out;
|
||||
out = ByteBuffer.allocate(data.remaining() - GCM_TAG_LEN / 8);
|
||||
c.doFinal(data, out);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue