in ktor-client/ktor-client-ios/darwin/src/io/ktor/client/engine/ios/certificates/PinnedCertificate.kt [71:102]
public fun new(pattern: String, pin: String): PinnedCertificate {
require(
pattern.startsWith("*.") && pattern.indexOf("*", 1) == -1 ||
pattern.startsWith("**.") && pattern.indexOf("*", 2) == -1 ||
pattern.indexOf("*") == -1
) {
"Unexpected pattern: $pattern"
}
val canonicalPattern = pattern.toLowerCase()
return when {
pin.startsWith(HASH_ALGORITHM_SHA_1) -> {
val hash = pin.substring(HASH_ALGORITHM_SHA_1.length)
PinnedCertificate(
pattern = canonicalPattern,
hashAlgorithm = HASH_ALGORITHM_SHA_1,
hash = hash
)
}
pin.startsWith(HASH_ALGORITHM_SHA_256) -> {
val hash = pin.substring(HASH_ALGORITHM_SHA_256.length)
PinnedCertificate(
pattern = canonicalPattern,
hashAlgorithm = HASH_ALGORITHM_SHA_256,
hash = hash
)
}
else -> throw IllegalArgumentException(
"Pins must start with '${HASH_ALGORITHM_SHA_256}' or " +
"'${HASH_ALGORITHM_SHA_1}': $pin"
)
}
}