Skip to content

Commit

Permalink
wasm_js: remove IE 11 workaround (#554)
Browse files Browse the repository at this point in the history
Internet Explorer is superseded by Edge (which has 3-5% usage share) and
effectively no longer supported. Citing Wikipedia:

>For SAC versions of Windows 10, Internet Explorer 11 support ended on
June 15, 2022, Internet Explorer was permanently disabled on February
14, 2023, and any remaining icons or shortcuts were due to be removed on
June 13, 2023.

Technically, it's still supported on LTSC, but Microsoft discourages the
use of LTSC editions outside of "special-purpose devices" that perform a
fixed function and thus do not require new user experience features, so
I think we can ignore it.
  • Loading branch information
newpavlov authored Dec 4, 2024
1 parent cddf861 commit 584926e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
in favor of configuration flags [#504]
- `register_custom_getrandom!` macro [#504]
- Implementation of `From<NonZeroU32>` for `Error` and `Error::code` method [#507]
- Internet Explorer 11 support [#554]

### Changed
- Use `ProcessPrng` on Windows 10 and up, and use RtlGenRandom on older legacy Windows versions [#415]
Expand Down Expand Up @@ -52,6 +53,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#532]: https://github.com/rust-random/getrandom/pull/532
[#542]: https://github.com/rust-random/getrandom/pull/542
[#544]: https://github.com/rust-random/getrandom/pull/544
[#554]: https://github.com/rust-random/getrandom/pull/554

## [0.2.15] - 2024-05-06
### Added
Expand Down
40 changes: 17 additions & 23 deletions src/backends/wasm_js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,29 +83,23 @@ fn getrandom_init() -> Result<RngSource, Error> {
// Get the Web Crypto interface if we are in a browser, Web Worker, Deno,
// or another environment that supports the Web Cryptography API. This
// also allows for user-provided polyfills in unsupported environments.
let crypto = match global.crypto() {
// Standard Web Crypto interface
c if c.is_object() => c,
// Node.js CommonJS Crypto module
_ if is_node(&global) => {
// If module.require isn't a valid function, we are in an ES module.
match Module::require_fn().and_then(JsCast::dyn_into::<Function>) {
Ok(require_fn) => match require_fn.call1(&global, &JsValue::from_str("crypto")) {
Ok(n) => return Ok(RngSource::Node(n.unchecked_into())),
Err(_) => return Err(Error::NODE_CRYPTO),
},
Err(_) => return Err(Error::NODE_ES_MODULE),
}
}
// IE 11 Workaround
_ => match global.ms_crypto() {
c if c.is_object() => c,
_ => return Err(Error::WEB_CRYPTO),
},
};

let buf = Uint8Array::new_with_length(WEB_CRYPTO_BUFFER_SIZE.into());
Ok(RngSource::Web(crypto, buf))
let crypto = global.crypto();
if crypto.is_object() {
let buf = Uint8Array::new_with_length(WEB_CRYPTO_BUFFER_SIZE.into());
Ok(RngSource::Web(crypto, buf))
} else if is_node(&global) {
// If module.require isn't a valid function, we are in an ES module.
let require_fn = Module::require_fn()
.and_then(JsCast::dyn_into::<Function>)
.map_err(|_| Error::NODE_ES_MODULE)?;
let n = require_fn
.call1(&global, &JsValue::from_str("crypto"))
.map_err(|_| Error::NODE_CRYPTO)?
.unchecked_into();
Ok(RngSource::Node(n))
} else {
Err(Error::WEB_CRYPTO)
}
}

// Taken from https://www.npmjs.com/package/browser-or-node
Expand Down

0 comments on commit 584926e

Please sign in to comment.