diff --git a/certificatetransparency/src/main/kotlin/com/appmattus/certificatetransparency/internal/verifier/CertificateTransparencyTrustManagerExtended.kt b/certificatetransparency/src/main/kotlin/com/appmattus/certificatetransparency/internal/verifier/CertificateTransparencyTrustManagerExtended.kt index 73d5fc83..0f8cdeec 100644 --- a/certificatetransparency/src/main/kotlin/com/appmattus/certificatetransparency/internal/verifier/CertificateTransparencyTrustManagerExtended.kt +++ b/certificatetransparency/src/main/kotlin/com/appmattus/certificatetransparency/internal/verifier/CertificateTransparencyTrustManagerExtended.kt @@ -76,6 +76,9 @@ internal class CertificateTransparencyTrustManagerExtended( } private val checkServerTrustedMethodApi36: Method? = try { + println("checkServerTrustedMethodApi36: availableMethods: ${delegate::class.java.declaredMethods.joinToString("\n") { method -> + "${method.name}(${method.genericParameterTypes.joinToString { it.typeName }}): ${method.genericReturnType.typeName}" + }}") delegate::class.java.getDeclaredMethod( "checkServerTrusted", Array::class.java, @@ -88,6 +91,20 @@ internal class CertificateTransparencyTrustManagerExtended( null } + private val checkServerTrustedMethodApi36Fallback: Method? = try { + println("checkServerTrustedMethodApi36: availableMethods: ${delegate::class.java.declaredMethods.joinToString("\n") { method -> + "${method.name}(${method.genericParameterTypes.joinToString { it.typeName }}): ${method.genericReturnType.typeName}" + }}") + delegate::class.java.getDeclaredMethod( + "checkServerTrusted", + Array::class.java, + String::class.java, + String::class.java + ) + } catch (ignored: NoSuchMethodException) { + null + } + private val isSameTrustConfigurationMethod: Method? = try { delegate::class.java.getDeclaredMethod("isSameTrustConfiguration", String::class.java, String::class.java) } catch (ignored: NoSuchMethodException) { @@ -188,7 +205,12 @@ internal class CertificateTransparencyTrustManagerExtended( host: String ): List { @Suppress("UNCHECKED_CAST") - val certs = checkServerTrustedMethodApi36!!.invoke(delegate, chain, ocspData, tlsSctData, authType, host) as List + val certs = try { + checkServerTrustedMethodApi36!!.invoke(delegate, chain, ocspData, tlsSctData, authType, host) as List + } catch (e: Exception) { + e.printStackTrace() + checkServerTrustedMethodApi36Fallback!!.invoke(delegate, chain, authType, host) as List + } val result = verifyCertificateTransparency(host, certs.toList())