Source:
<code>public ClientHandshaker(DTLSSession session, RecordLayer recordLayer, SessionListener sessionListener, DtlsConnectorConfig config, int maxTransmissionUnit) { super(true, session, recordLayer, sessionListener, config.getTrustStore(), maxTransmissionUnit, config.getRpkTrustStore()); this.privateKey = config.getPrivateKey(); this.certificateChain = config.getCertificateChain(); this.publicKey = config.getPublicKey(); this.pskStore = config.getPskStore(); this.serverNameResolver = config.getServerNameResolver(); this.preferredCipherSuites = config.getSupportedCipherSuites(); this.maxFragmentLengthCode = config.getMaxFragmentLengthCode(); this.supportedServerCertificateTypes = new ArrayList<>(); this.supportedClientCertificateTypes = new ArrayList<>(); <START> if (config.useEcdheEcdsa()) { <END> this.supportedServerCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); if (rootCertificates != null && rootCertificates.length > 0) { int index = config.isSendRawKey() ? 1 : 0; this.supportedServerCertificateTypes.add(index, CertificateType.X_509); } if (privateKey != null && publicKey != null) { if (certificateChain == null || certificateChain.length == 0) { this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); } else if (config.isSendRawKey()) { this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); this.supportedClientCertificateTypes.add(CertificateType.X_509); } else { this.supportedClientCertificateTypes.add(CertificateType.X_509); this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); } } } }</code><technical_language>So, idea is need preference for types of certificates if supporting a cipher suite requires exchange of more certificates, right? If so, I rename config.useEcdheEcdsa method reflects purpose. more cipher suites require exchange of certificates, in do support based RSA asked in already. isCipherRequiringCertificateExchangeSupported</technical_language>

Target:
public ClientHandshaker(DTLSSession session, RecordLayer recordLayer, SessionListener sessionListener, DtlsConnectorConfig config, int maxTransmissionUnit) { super(true, session, recordLayer, sessionListener, config.getTrustStore(), maxTransmissionUnit, config.getRpkTrustStore()); this.privateKey = config.getPrivateKey(); this.certificateChain = config.getCertificateChain(); this.publicKey = config.getPublicKey(); this.pskStore = config.getPskStore(); this.serverNameResolver = config.getServerNameResolver(); this.preferredCipherSuites = Arrays.asList(config.getSupportedCipherSuites()); this.maxFragmentLengthCode = config.getMaxFragmentLengthCode(); this.supportedServerCertificateTypes = new ArrayList<>(); this.supportedClientCertificateTypes = new ArrayList<>(); if (CipherSuite.containsEccBasedCipherSuite(preferredCipherSuites)) { this.supportedServerCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); if (rootCertificates != null && rootCertificates.length > 0) { int index = config.isSendRawKey() ? 1 : 0; this.supportedServerCertificateTypes.add(index, CertificateType.X_509); } if (privateKey != null && publicKey != null) { if (certificateChain == null || certificateChain.length == 0) { this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); } else if (config.isSendRawKey()) { this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); this.supportedClientCertificateTypes.add(CertificateType.X_509); } else { this.supportedClientCertificateTypes.add(CertificateType.X_509); this.supportedClientCertificateTypes.add(CertificateType.RAW_PUBLIC_KEY); } } } }