Skip to content

bctls-jdk15on_1.65: AbstractTlsContext#exportKeyingMaterial() checks for securityParametersConnection for null #707

Description

@cmeng-git

The method AbstractTlsContext#exportKeyingMaterial() checks securityParametersConnection
for null and throws IllegalStateException. However securityParametersConnection is always set to null in method handshakeComplete().
May be should consider to use getSecurityParameters() instead.

    public byte[] exportKeyingMaterial(String asciiLabel, byte[] context_value, int length)
    {
        SecurityParameters sp = getSecurityParametersConnection();
        if (null == sp)
        {
            throw new IllegalStateException("Export of key material unavailable before handshake completion");
        }
        if (!sp.isExtendedMasterSecret())
        {
            /*
             * RFC 7627 5.4. If a client or server chooses to continue with a full handshake without
             * the extended master secret extension, [..] the client or server MUST NOT export any
             * key material based on the new master secret for any subsequent application-level
             * authentication. In particular, it MUST disable [RFC5705] [..].
             */
            throw new IllegalStateException("cannot export keying material without extended_master_secret");
        }

        if (TlsUtils.isTLSv13(sp.getNegotiatedVersion()))
        {
            // TODO[tls13]
            TlsSecret exporter_secret = null; // exporter_master_secret

            return exportKeyingMaterial13(exporter_secret, asciiLabel, context_value, length);
        }

        byte[] seed = TlsUtils.calculateExporterSeed(sp, context_value);

        return TlsUtils.PRF(sp, sp.getMasterSecret(), asciiLabel, seed, length).extract();
    }

    synchronized void handshakeComplete(TlsPeer peer, TlsSession session) throws IOException
    {
        if (null == securityParametersHandshake)
        {
            throw new TlsFatalAlert(AlertDescription.internal_error);
        }

        this.session = session;

        securityParametersConnection = securityParametersHandshake;

        peer.notifyHandshakeComplete();

        securityParametersHandshake = null;
    }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions