<div dir="ltr"><div>Hi Valerie,</div><div><br></div><div>Thanks for your feedback!</div><div><br></div><div>CKM_TLS12_MAC looks like it's not in use. Authentication codes are calculated through CKM_TLS12_KEY_AND_MAC_DERIVE mechanism. Do you know of a library supporting CKM_TLS12_MAC but not CKM_TLS12_KEY_AND_MAC_DERIVE? I've been testing this with NSS software token which does not support CKM_TLS12_MAC.</div><div><br></div><div>module-info.java changes were from when we used SSL/TLS constants, but then I replaced these constants with hardcoded numbers -after discussing with Xuelei-. I forgot to revert changes on this file. Thanks.</div><div><br></div><div>Config.java changes were from a wrong version I uploaded. This has been already fixed.</div><div><br></div><div>SunPKCS11.java: I agree with you that registration must be done separately. SunTls12MasterSecret and SunTls12KeyMaterial are now registered separately. I've added CKM_TLS12_MASTER_KEY_DERIVE_DH mechanism to SunTls12MasterSecret algorithm. It's still assumed that if CKM_TLS12_MASTER_KEY_DERIVE is supported, then CKM_TLS12_MASTER_KEY_DERIVE_DH it's and vice-versa -same as with previous key derivation mechanisms-. Not a big deal though I think: it's unlikely that a library implements only one of these. Using protocol version to decide which mechanism to use should be valid in this case because if an instance of P11TlsMasterSecretGenerator is used and algorithm is SunTls12MasterSecret, then protocol must be TLS 1.2 and we can assume that there is support of these mechanisms in the underlying library.</div><div>L527: I've realized that a better place for this map is Functions.java. I've moved it there.</div><div><br></div><div>P11TlsPrfGenerator.java: This code is for TLS 1.2 only. That's because CKM_TLS_MAC mechanism is registered for SunTls12Prf algorithm. Previous TLS versions use CKM_TLS_PRF and CKM_NSS_TLS_PRF_GENERAL.</div><div><br></div><div>P11TlsRsaPremasterSecretGenerator.java: Yes, we can remove it and call all keys "TlsRsaPremasterSecret", disregarding the mechanism used to generate it (CKM_SSL3_PRE_MASTER_KEY_GEN or CKM_TLS_PRE_MASTER_KEY_GEN). At the end of the day, this is just an array of 48 bytes. I've removed the field too.</div><div><br></div><div>Functions.java: New entries (CKM_TLS12_MASTER_KEY_DERIVE, CKM_TLS12_MASTER_KEY_DERIVE_DH and CKM_TLS_MAC) moved after line 721. CKM_TLS12_KEY_AND_MAC_DERIVE has been added for completeness.</div><div><br></div><div>CK_ATTRIBUTE.java: SENSITIVE_TRUE removed.</div><div><br></div><div>Removed a dependency in TestTLS12.java to HexDumper (internal).</div><div><br></div><div>Webrev 06 with all these changes here:</div><div><br></div><div> * <a href="http://cr.openjdk.java.net/~mbalao/webrevs/8029661/8029661.webrev.06/">http://cr.openjdk.java.net/~mbalao/webrevs/8029661/8029661.webrev.06/</a></div><div> * <a href="http://cr.openjdk.java.net/~mbalao/webrevs/8029661/8029661.webrev.06.zip">http://cr.openjdk.java.net/~mbalao/webrevs/8029661/8029661.webrev.06.zip</a></div><div><br></div><div>Regression testing on jdk/sun/security/pkcs11 passes with samae pass rate.</div><div><br></div><div>Kind regards,</div><div>Martin.-</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 24, 2018 at 11:00 PM, Valerie Peng <span dir="ltr"><<a href="mailto:valerie.peng@oracle.com" target="_blank">valerie.peng@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <p>Hi Martin,</p>
    <p>Sorry for the delay, I am able to resume on reviewing this now.</p>
    <p>Here are some initial comments.<br>
    </p>
    <p>What about CKM_TLS12_MAC? I see that it's defined under TLS 1.2
      mechanisms, but not much other details for it.<br>
    </p>
    <module-info.java><br>
    - Is this change still necessary? I didn't notice any new import
    statement with sun.security.ssl package in the rest of changes.<br>
    <br>
    <sun/security/pkcs11/Config.<wbr>java><br>
    - Why removing the <span class="m_-1525013007785267772removed">SENSITIVE_FALSE attribute
      on line 829 and 854?<br>
    </span><br>
    <sun/security/pkcs11/<wbr>P11TlsKeyMaterialGenerator.<wbr>java><br>
    - As my comments for the SunPKCS11.java (see below), I think we
    should not assume the support for CKM_TLS12_KEY_AND_MAC_DERIVE. The
    existing impl and how it's registered in SunPKCS11 class is already
    somewhat problematic when CKM_TLS_KEY_AND_MAC_DERIVE is not
    supported. We should avoid assuming CKM_TLS12_KEY_AND_MAC_DERIVE is
    supported which may create even more problems. Overriding
    this.mechanism based on the TLS version specified in the parameters
    from the engineInit(...) call will lead to failure when the
    mechanism is not supported by underlying PKCS11 library<br>
    <br>
    <sun/security/pkcs11/<wbr>P11TlsMasterSecretGenerator.<wbr>java><br>
    - Please see above comments for P11TlsKeyMaterialGenerator.<wbr>java<br>
    <br>
    <sun/security/pkcs11/<wbr>P11TlsPrfGenerator.java><br>
    - Retrieve label outside of the new code block for TLS 1.2, i.e.
    line 133- 167, as it's used by all mechanisms.<br>
    <br>
    <span class="m_-1525013007785267772new"><sun/security/pkcs11/<wbr>P11TlsRsaPremasterSecretGenera<wbr>tor.java><br>
      - Line 131, Is it really necessary to use
      SunTls12RsaPremasterSecret? SunJCE provider uses
      SunTlsRsaPremasterSecret for all cases. If different algorithm is
      not needed, then no need to save tlsVersion as a field<br>
      <br>
    </span><sun/security/pkcs11/<wbr>SunPKCS11.java><br>
    - Hmm, for TLS 12 specific mechanisms, some PKCS11 libraries may not
    support them. Instead of registering
    SunTls12MasterSecret/<wbr>SunTls12KeyMaterial as aliases, they should be
    registered separately so that if the native TLS 12 mechanisms were
    not supported, the new entry will be skipped. The corresponding
    implementation classes such as P11TlsMasterSecretGenerator and
    P11TlsKeyMaterialGenerator will have to check the specified
    parameter spec in their engineInit(..) calls to make sure things
    line up, e.g. error out if the TLS version in the spec does not
    match the native mechanism.<br>
    - Lines 528 - 532, the mapping is stored without checking for
    support. May become an issue when the underlying PKCS11 library does
    not support all of these hash mechanisms. Probably not a big deal as
    these are fairly common hash algorithms, but I think it'd be good to
    add a comment on line 527 with something like "// assuming all hash
    mechanisms below are supported".<br>
    <br>
    <sun/security/pkcs11/wrapper/<wbr>Functions.java><br>
    - Miss the mapping for CKM_TLS12_KEY_AND_MAC_DERIVE? Move these new
    entries to be after the existing SSL3/TLS entries (from line
    711-721) <br>
    <span class="m_-1525013007785267772new"><span class="m_-1525013007785267772new"><span class="m_-1525013007785267772new"></span></span><br>
      I still have a few files left and will send you comments on them
      later.<br>
      Thanks,<br>
      Valerie</span></div>

</blockquote></div><br></div></div>