Fixing a NodeJS Digital Envelope Routines Error
Tags: node, errors, hack
Published: 2022-11-10 03:14:08

---
title: Fixing a NodeJS Digital Envelope Routines Error
published: true
date: 2022-11-09 03:55:21 UTC
tags: nodejs, error, hack
canonical_url: https://paulyu.dev/article/fixing-node-digital-envelope-routines-error/
---

In my journey to learn Rust, I've decided to pick up this book called ["Practical Rust Web Projects" by Shing Lyu](https://www.amazon.com/Practical-Rust-Web-Projects-Applications/dp/1484265882).

In the last chapter, you walk through an example of packaging a WebAssembly module using `wasm-pack` and using the .wasm binary in a NodeJS application. On the step where I needed to compile the application, I ran into the following error:

```bash
$ npm run build

> create-wasm-app@0.1.0 build
> webpack --config webpack.config.js

node:internal/crypto/hash:71
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:471:10)
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:503:5
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
    at Storage.finished (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:43:16)
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:79:9
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/graceful-fs/graceful-fs.js:78:16
    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.7.0
```

After a bit of Googling, I ran across someone suggesting to run the following command:

```bash
$ export NODE_OPTIONS=--openssl-legacy-provider
```

Then run the build command again, and it compiled 🎉

```bash
$ npm run build

> create-wasm-app@0.1.0 build
> webpack --config webpack.config.js

Hash: 1707689247fe60c788af
Version: webpack 4.42.0
Time: 67ms
Built at: 11/08/2022 7:50:56 PM
                           Asset       Size  Chunks                         Chunk Names
                  0.bootstrap.js   5.31 KiB       0  [emitted]
7e852f2346d8cc54b57a.module.wasm  296 bytes       0  [emitted] [immutable]
                    bootstrap.js     11 KiB    main  [emitted]              main
                      index.html  297 bytes          [emitted]
Entrypoint main = bootstrap.js
[../pkg/hello_wasm.js] 81 bytes {0} [built]
[../pkg/hello_wasm_bg.js] 784 bytes {0} [built]
[../pkg/hello_wasm_bg.wasm] 270 bytes {0} [built]
[./bootstrap.js] 279 bytes {main} [built]
[./index.js] 51 bytes {0} [built]
[./node_modules/webpack/buildin/harmony-module.js] (webpack)/buildin/harmony-module.js 573 bytes {0} [built]
```

This is definitely not the proper fix in a production scenario, but good enough to get me through the example 😉

Cheers!