@@ -83,29 +83,23 @@ fn getrandom_init() -> Result<RngSource, Error> {
8383 // Get the Web Crypto interface if we are in a browser, Web Worker, Deno,
8484 // or another environment that supports the Web Cryptography API. This
8585 // also allows for user-provided polyfills in unsupported environments.
86- let crypto = match global. crypto ( ) {
87- // Standard Web Crypto interface
88- c if c. is_object ( ) => c,
89- // Node.js CommonJS Crypto module
90- _ if is_node ( & global) => {
91- // If module.require isn't a valid function, we are in an ES module.
92- match Module :: require_fn ( ) . and_then ( JsCast :: dyn_into :: < Function > ) {
93- Ok ( require_fn) => match require_fn. call1 ( & global, & JsValue :: from_str ( "crypto" ) ) {
94- Ok ( n) => return Ok ( RngSource :: Node ( n. unchecked_into ( ) ) ) ,
95- Err ( _) => return Err ( Error :: NODE_CRYPTO ) ,
96- } ,
97- Err ( _) => return Err ( Error :: NODE_ES_MODULE ) ,
98- }
99- }
100- // IE 11 Workaround
101- _ => match global. ms_crypto ( ) {
102- c if c. is_object ( ) => c,
103- _ => return Err ( Error :: WEB_CRYPTO ) ,
104- } ,
105- } ;
106-
107- let buf = Uint8Array :: new_with_length ( WEB_CRYPTO_BUFFER_SIZE . into ( ) ) ;
108- Ok ( RngSource :: Web ( crypto, buf) )
86+ let crypto = global. crypto ( ) ;
87+ if crypto. is_object ( ) {
88+ let buf = Uint8Array :: new_with_length ( WEB_CRYPTO_BUFFER_SIZE . into ( ) ) ;
89+ Ok ( RngSource :: Web ( crypto, buf) )
90+ } else if is_node ( & global) {
91+ // If module.require isn't a valid function, we are in an ES module.
92+ let require_fn = Module :: require_fn ( )
93+ . and_then ( JsCast :: dyn_into :: < Function > )
94+ . map_err ( |_| Error :: NODE_ES_MODULE ) ?;
95+ let n = require_fn
96+ . call1 ( & global, & JsValue :: from_str ( "crypto" ) )
97+ . map_err ( |_| Error :: NODE_CRYPTO ) ?
98+ . unchecked_into ( ) ;
99+ Ok ( RngSource :: Node ( n) )
100+ } else {
101+ Err ( Error :: WEB_CRYPTO )
102+ }
109103}
110104
111105// Taken from https://www.npmjs.com/package/browser-or-node
0 commit comments