Code Review Request: TLS 1.3 Implementation

Xuelei Fan xuelei.fan at oracle.com
Sun Jun 3 04:26:00 UTC 2018


 > KeyUpdate.java
 > --------------
Update: http://hg.openjdk.java.net/jdk/sandbox/rev/66c803c3ce32

Fixed two test issues and the following KeyUpdate implementation.  This 
update will be included in the next webrev for further review.

Xuelei

On 6/1/2018 12:56 PM, Xuelei Fan wrote:
>  > http://cr.openjdk.java.net/~xuelei/8196584/webrev-full.00
> 
> MaxFragExtension.java
> ---------------------
> Looks fine to me.
> 
> 
> KeyUpdate.java
> --------------
> - 74  new IOException("KeyUpdate message value invalid: " + status);
> + 74  throw new IOException("KeyUpdate message value invalid: " + status);
> Or
> + 74  context.conContext.fatal(...);
> The exception is not thrown.  Personally, I may prefer a 
> RuntimeException as it is used in generation side, or send a fatal alert 
> to indicate the problem.
> 
> 
>    81  if (m.remaining() != 1) {
>    82    throw new IOException("KeyUpdate has an unexpected length of "+
>    83        m.remaining());
>    84  }
> Personally, I'd prefer to send a fatal alert.
> 
> 
>    87  if (status > 1) {
>    88     new IOException("KeyUpdate message value invalid: " + status);
>    89  }
> The exception is not thrown.  I may use a fatal alert.
> 
> 
>   108  @Override
>   109  public String toString() {
>   110      throw new UnsupportedOperationException("Not supported yet.");
>   111  }
> For debugging, please implement this method and dump debug information 
> in the consumer and producer accordingly.
> 
> 
>   145  public void consume(ConnectionContext context,
>   146          ByteBuffer message) throws IOException {
> 
> I think we need to catch up with the following spec in this method:
>     Implementations that receive a KeyUpdate message prior to receiving
>     a Finished message MUST terminate the connection with an
>     unexpected_message" alert.
> 
> 
>   151  if (km.getStatus() == KeyUpdateMessage.NOTREQUSTED) {
>   152      return;
>   153  }
> 
> If I'm correct, the "update_not_requested" status means "recipient of 
> the KeyUpdate" may not respond with its own KeyUpdate", but still need 
> to update its receiving keys.  Am I missing something?
> 
> 
>   165 SSLKeyDerivation skd = kdg.createKeyDerivation(hc,
>   166        hc.conContext.inputRecord.readCipher.baseSecret);
>   167 SecretKey nplus1 = skd.deriveKey("TlsUpdateNplus1", null);
>   168 if (skd == null) {
>   169      // unlikely
>   170       hc.conContext.fatal(Alert.INTERNAL_ERROR,
>   171             "no key derivation");
>   172       return;
>   173 }
> Move line 167 bellow 173? he skd non-null checking can be performed  198 
>       new KeyUpdateMessage(hc, KeyUpdateMessage.NOTREQUSTED));earlier.
> 
> 
> The blank line 191 may be not necessary.
> 
> 
>   196  // Send Reply
>   197  handshakeProducer.produce(hc,
>   198      new KeyUpdateMessage(hc, KeyUpdateMessage.NOTREQUSTED));
> If one update the 151-153 block, please don't forgot to update this 
> block as well if needed: send reply if the status is REQUSTED.
> 
> 
>   219  if (km.getStatus() == KeyUpdateMessage.REQUSTED) {
>   220      secret = hc.conContext.outputRecord.writeCipher.baseSecret;
>   221  } else {
>   222      km.write(hc.handshakeOutput);
>   223      hc.handshakeOutput.flush();
>   224      return null;
>   225  }
> Similar comment as 151-153.  For NOTREQUSTED status, may still need to 
> update the write keys.
> 
> 
> Xuelei
> 
> On 5/25/2018 4:45 PM, Xuelei Fan wrote:
>> Hi,
>>
>> I'd like to invite you to review the TLS 1.3 implementation.  I 
>> appreciate it if I could have compatibility and specification feedback 
>> before May 31, 2018, and implementation feedback before June 7, 2018.
>>
>> Here is the webrev:
>>      http://cr.openjdk.java.net/~xuelei/8196584/webrev-full.00
>>
>> The formal TLS 1.3 specification is not finalized yet, although it had 
>> been approved to be a standard.  The implementation is based on the 
>> draft version 28:
>>      https://tools.ietf.org/html/draft-ietf-tls-tls13-28
>>
>> For the overall description of this enhancement, please refer to JEP 332:
>>      http://openjdk.java.net/jeps/332
>>
>> For the compatibility and specification update, please refer to CSR 
>> 8202625:
>>      https://bugs.openjdk.java.net/browse/JDK-8202625
>>
>> Note that we are using the sandbox for the development right now.  For 
>> more information, please refer to Bradford's previous email:
>>
>> http://mail.openjdk.java.net/pipermail/security-dev/2018-May/017139.html
>>
>> Thanks & Regards,
>> Xuelei



More information about the security-dev mailing list