in pan-domain-auth-verification/src/main/scala/com/gu/pandomainauth/service/CryptoConf.scala [77:89]
private def bytesFromBase64(base64Encoded: String): SettingsResult[Array[Byte]] =
Either.cond(isBase64(base64Encoded), decodeBase64(base64Encoded), InvalidBase64)
private def keyFor[A](
base64EncodedKey: String,
keySpecFor: Array[Byte] => KeySpec,
keyForSpec: KeyFactory => KeySpec => A
): SettingsResult[A] = for {
bytes <- bytesFromBase64(base64EncodedKey)
key <- Try(keyForSpec(keyFactory)(keySpecFor(bytes))).map(Right(_)).recover {
case _: InvalidKeySpecException => Left(PublicKeyFormatFailure)
}.get
} yield key