+static Boolean isFalseStartAllowed(SSLContext *ctx)
+{
+ SSL_CipherAlgorithm c=sslCipherSuiteGetSymmetricCipherAlgorithm(ctx->selectedCipher);
+ KeyExchangeMethod kem=sslCipherSuiteGetKeyExchangeMethod(ctx->selectedCipher);
+
+
+ /* Whitelisting allowed ciphers, kem and client auth type */
+ return
+ (
+ (c==SSL_CipherAlgorithmAES_128_CBC) ||
+ (c==SSL_CipherAlgorithmAES_128_GCM) ||
+ (c==SSL_CipherAlgorithmAES_256_CBC) ||
+ (c==SSL_CipherAlgorithmAES_256_GCM) ||
+ (c==SSL_CipherAlgorithmRC4_128)
+ ) && (
+ (kem==SSL_ECDHE_ECDSA) ||
+ (kem==SSL_ECDHE_RSA) ||
+ (kem==SSL_DHE_RSA) ||
+ (kem==SSL_DHE_DSS)
+ ) && (
+ (ctx->negAuthType==SSLClientAuthNone) ||
+ (ctx->negAuthType==SSLClientAuth_DSSSign) ||
+ (ctx->negAuthType==SSLClientAuth_RSASign) ||
+ (ctx->negAuthType==SSLClientAuth_ECDSASign)
+ );
+}
+
+
+OSStatus