diff --git a/std/js/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala b/std/js/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala index 95aaca72d3..4ffe111546 100644 --- a/std/js/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala +++ b/std/js/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala @@ -114,9 +114,15 @@ private[std] trait SecureRandomCompanionPlatform { } } + @deprecated("Use 'of' instead", "3.7.0") def javaSecuritySecureRandom[F[_]: Sync]: F[SecureRandom[F]] = Sync[F].delay(unsafeJavaSecuritySecureRandom()) + def of[F[_]: Sync]: F[SecureRandom[F]] = in[F, F] + + def in[F[_]: Sync, G[_]: Sync]: F[SecureRandom[G]] = + Sync[F].delay(unsafeJavaSecuritySecureRandom[G]()) + private[effect] def unsafeJavaSecuritySecureRandom[F[_]: Sync](): SecureRandom[F] = new ScalaRandom[F](Applicative[F].pure(new JavaSecureRandom())) with SecureRandom[F] {} diff --git a/std/jvm/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala b/std/jvm/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala index 6d55c388f6..04a499597c 100644 --- a/std/jvm/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala +++ b/std/jvm/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala @@ -43,9 +43,15 @@ private[std] trait SecureRandomCompanionPlatform { private def javaUtilRandomBlocking[F[_]: Sync](random: JavaSecureRandom): SecureRandom[F] = new ScalaRandom[F](Applicative[F].pure(random), Sync.Type.Blocking) with SecureRandom[F] {} + @deprecated("Use 'of' instead", "3.7.0") def javaSecuritySecureRandom[F[_]: Sync]: F[SecureRandom[F]] = Sync[F].delay(unsafeJavaSecuritySecureRandom()) + def of[F[_]: Sync]: F[SecureRandom[F]] = in[F, F] + + def in[F[_]: Sync, G[_]: Sync]: F[SecureRandom[G]] = + Sync[F].delay(unsafeJavaSecuritySecureRandom[G]()) + /** * Ported from https://github.com/http4s/http4s/. */ diff --git a/std/native/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala b/std/native/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala index 2aa8ca8d89..f455845729 100644 --- a/std/native/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala +++ b/std/native/src/main/scala/cats/effect/std/SecureRandomCompanionPlatform.scala @@ -57,9 +57,15 @@ private[std] trait SecureRandomCompanionPlatform { } + @deprecated("Use 'of' instead", "3.7.0") def javaSecuritySecureRandom[F[_]: Sync]: F[SecureRandom[F]] = Sync[F].delay(unsafeJavaSecuritySecureRandom()) + def of[F[_]: Sync]: F[SecureRandom[F]] = in[F, F] + + def in[F[_]: Sync, G[_]: Sync]: F[SecureRandom[G]] = + Sync[F].delay(unsafeJavaSecuritySecureRandom()) + private[effect] def unsafeJavaSecuritySecureRandom[F[_]: Sync](): SecureRandom[F] = new ScalaRandom[F](Applicative[F].pure(new JavaSecureRandom())) with SecureRandom[F] {} diff --git a/std/shared/src/main/scala/cats/effect/std/SecureRandom.scala b/std/shared/src/main/scala/cats/effect/std/SecureRandom.scala index 991e266690..e25046dfb6 100644 --- a/std/shared/src/main/scala/cats/effect/std/SecureRandom.scala +++ b/std/shared/src/main/scala/cats/effect/std/SecureRandom.scala @@ -124,6 +124,9 @@ object SecureRandom extends SecureRandomCompanionPlatform { } /** + * Builds a `SecureRandom[F]` value for effect types that are [[cats.effect.kernel.Sync]] and + * initializes random state using the same effect type + * * On the JVM, delegates to [[java.security.SecureRandom]]. * * In browsers, delegates to the @@ -136,7 +139,31 @@ object SecureRandom extends SecureRandomCompanionPlatform { * on Linux, macOS, and BSD. Unsupported platforms such as Windows will encounter link-time * errors. */ - override def javaSecuritySecureRandom[F[_]: Sync]: F[SecureRandom[F]] = - super.javaSecuritySecureRandom[F] + override def javaSecuritySecureRandom[F[_]: Sync]: F[SecureRandom[F]] = of + + /** + * Builds a `SecureRandom[F]` value for effect types that are [[cats.effect.kernel.Sync]] and + * initializes random state using the same effect type + * + * On the JVM, delegates to [[java.security.SecureRandom]]. + * + * In browsers, delegates to the + * [[https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API Web Crypto API]]. + * + * In Node.js, delegates to the [[https://nodejs.org/api/crypto.html crypto module]]. + * + * On Native, delegates to + * [[https://man7.org/linux/man-pages/man3/getentropy.3.html getentropy]] which is supported + * on Linux, macOS, and BSD. Unsupported platforms such as Windows will encounter link-time + * errors. + */ + override def of[F[_]: Sync]: F[SecureRandom[F]] = in[F, F] + + /** + * Builds a `SecureRandom[G]` value for effect types that are [[cats.effect.kernel.Sync]] but + * initializes random state using another effect constructor + */ + override def in[F[_]: Sync, G[_]: Sync]: F[SecureRandom[G]] = + Sync[F].delay(unsafeJavaSecuritySecureRandom[G]()) }