75 lines
2.3 KiB
Markdown
75 lines
2.3 KiB
Markdown
[](https://raw.githubusercontent.com/PeculiarVentures/webcrypto-core/master/LICENSE)
|
|
[](https://github.com/PeculiarVentures/webcrypto-core/actions/workflows/test.yml)
|
|
[](https://coveralls.io/github/PeculiarVentures/webcrypto-core?branch=master)
|
|
[](https://badge.fury.io/js/webcrypto-core)
|
|
|
|
[](https://nodei.co/npm/webcrypto-core/)
|
|
|
|
# webcrypto-core
|
|
|
|
We have created a number of WebCrypto polyfills including: [node-webcrypto-ossl](https://github.com/PeculiarVentures/node-webcrypto-ossl), [node-webcrypto-p11](https://github.com/PeculiarVentures/node-webcrypto-p11), and [webcrypto-liner](https://github.com/PeculiarVentures/webcrypto-liner). `webcrypto-core` was designed to be a common layer to be used by all of these libraries for input validation.
|
|
|
|
Unless you intend to create a WebCrypto polyfill this library is probably not useful to you.
|
|
|
|
## Installing
|
|
|
|
```
|
|
npm install webcrypto-core
|
|
```
|
|
|
|
## Example
|
|
|
|
Current examples shows how you can implement your own WebCrypt interface
|
|
|
|
```js
|
|
const core = require(".");
|
|
const crypto = require("crypto");
|
|
|
|
class Sha1Provider extends core.ProviderCrypto {
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
this.name = "SHA-1";
|
|
this.usages = [];
|
|
}
|
|
|
|
async onDigest(algorithm, data) {
|
|
const hash = crypto.createHash("SHA1").update(Buffer.from(data)).digest();
|
|
return new Uint8Array(hash).buffer;
|
|
}
|
|
|
|
}
|
|
|
|
class SubtleCrypto extends core.SubtleCrypto {
|
|
constructor() {
|
|
super();
|
|
|
|
// Add SHA1 provider to SubtleCrypto
|
|
this.providers.set(new Sha1Provider());
|
|
}
|
|
}
|
|
|
|
class Crypto extends core.Crypto {
|
|
|
|
constructor() {
|
|
this.subtle = new SubtleCrypto();
|
|
}
|
|
|
|
getRandomValues(array) {
|
|
const buffer = Buffer.from(array.buffer);
|
|
crypto.randomFillSync(buffer);
|
|
return array;
|
|
}
|
|
|
|
}
|
|
|
|
const webcrypto = new Crypto();
|
|
webcrypto.subtle.digest("SHA-1", Buffer.from("TEST MESSAGE"))
|
|
.then((hash) => {
|
|
console.log(Buffer.from(hash).toString("hex")); // dbca505deb07e1612d944a69c0c851f79f3a4a60
|
|
})
|
|
.catch((err) => {
|
|
console.error(err);
|
|
});
|
|
``` |