Initial commit (by create-cloudflare CLI)

This commit is contained in:
Jonas_Jones 2023-09-12 00:20:38 +02:00
parent 8cb86120f1
commit fff961078a
1777 changed files with 1011798 additions and 0 deletions

21
cool-dawn-3d3b/node_modules/blake3-wasm/LICENSE generated vendored Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Connor Peet
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

22
cool-dawn-3d3b/node_modules/blake3-wasm/benchmark.js generated vendored Normal file
View file

@ -0,0 +1,22 @@
const { hash: hashWasm } = require('./dist/node');
const { hash: hashNative } = require('./dist/node-native');
const { createHash } = require('crypto');
[
{ size: '64B', data: Buffer.alloc(64) },
{ size: '64KB', data: Buffer.alloc(1024 * 64) },
{ size: '6MB', data: Buffer.alloc(1024 * 1024 * 6) },
].forEach(({ size, data }) =>
suite(size, () => {
['md5', 'sha1', 'sha256'].forEach(alg =>
bench(alg, () =>
createHash(alg)
.update(data)
.digest(),
),
);
bench('blake3 wasm', () => hashWasm(data));
bench('blake3 native', () => hashNative(data));
}),
);

View file

@ -0,0 +1,7 @@
import * as blake3 from './esm/browser';
/**
* Manually loads the WebAssembly module, returning a promise that resolves
* to the BLAKE3 implementation once available.
*/
export default function load(module: string | URL | Request | object): Promise<typeof blake3>;

View file

@ -0,0 +1,20 @@
import { provideWasm } from './esm/browser/wasm.js';
import * as wasm from './dist/wasm/web/blake3_js.js';
import * as blake3 from './esm/browser/index.js';
let cached;
/**
* Manually loads the WebAssembly module, returning a promise that resolves
* to the BLAKE3 implementation once available.
*/
export default function load(module) {
if (!cached) {
cached = wasm.default(module).then(() => {
provideWasm(wasm);
return blake3;
});
}
return cached;
}

1
cool-dawn-3d3b/node_modules/blake3-wasm/browser.d.ts generated vendored Normal file
View file

@ -0,0 +1 @@
export * from './esm/browser';

6
cool-dawn-3d3b/node_modules/blake3-wasm/browser.js generated vendored Normal file
View file

@ -0,0 +1,6 @@
import { provideWasm } from './esm/browser/wasm';
import * as wasm from './dist/wasm/browser';
provideWasm(wasm);
export * from './esm/browser';

60
cool-dawn-3d3b/node_modules/blake3-wasm/changelog.md generated vendored Normal file
View file

@ -0,0 +1,60 @@
# Changelog
## 2.1.5 - 2020-11-28
- fix version matching on postinstall
- build for node 15
## 2.1.4 - 2020-05-11
- add support for Node 14
- validate native bindings before switching to them
## 2.1.3 - 2020-03-06
- update to BLAKE3@0.2, providing significant speed improvements for native Node
- fixed missing file causing installation of native Node extensions to fail
## 2.1.2 - 2020-03-01
- fix missing createKeyed function in browsers
## 2.1.1 - 2020-02-11
- allow importing the module without a bundler or with tools like Parcel
## 2.1.0 - 2020-01-23
- add keyed hash and key derivation support (fixes [#2](https://github.com/connor4312/blake3/issues/2), [#9](https://github.com/connor4312/blake3/issues/9))
- fixed a bug in hex encoding in the browser
## 2.0.1 - 2020-01-23
- fix browser bundle to use pure es modules (fixes [#8](https://github.com/connor4312/blake3/issues/8))
## 2.0.0 - 2020-01-19
- **breaking** the simple `hash` function no longer takes an encoding in its second parameter. Use `hash(data).toString(<encoding>)` instead.
- allow configuring the hash length in `hash()` and `hasher.digest()`
- add `using()` helper to deal with disposables
- add `dispose: boolean` option to Hashers' `.digest()` methods, so that you can read a head while continuing to update it
- add `hasher.reader()` method to retrieve a hash reader object, which allows seeking through and reading arbitrary amounts of data from the hash
- add helper methods for encoding and constant-time equality checking in the returned Hash within the browser
## 1.2.0 - 2020-01-14
- add native Node.js bindings
## 1.2.0-0 - 2020-01-14 (prerelease)
- add native Node.js bindings
## 1.1.0 - 2020-01-12
- add support for usage in browsers
- fix potential memory unsafety in WebAssembly land
- add support for output encoding in `Hash.digest([encoding])`
## 1.0.0 - 2020-01-09
Initial release

View file

@ -0,0 +1,17 @@
/**
* A type which requires manual disposal to free unmanaged resources. In the
* context of this library, this usually means freeing memory from WebAssembly
* code.
*/
export interface IDisposable {
/**
* Frees unmanaged resources of the object. This method is idempotent;
* calling it multiple times will have no ill effects.
*/
dispose(): void;
}
/**
* A helper function that calls `.dispose()` on the {@link IDisposable} when
* the given function (or promise returned by the function) returns.
*/
export declare const using: <T, D extends IDisposable>(disposable: D, fn: (d: D) => T) => T;

View file

@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const isPromiseLike = (value) => typeof value === 'object' && !!value && 'then' in value;
/**
* A helper function that calls `.dispose()` on the {@link IDisposable} when
* the given function (or promise returned by the function) returns.
*/
exports.using = (disposable, fn) => {
let ret;
try {
ret = fn(disposable);
}
catch (e) {
disposable.dispose();
throw e;
}
if (!isPromiseLike(ret)) {
disposable.dispose();
return ret;
}
return ret.then(value => {
disposable.dispose();
return value;
}, err => {
disposable.dispose();
throw err;
});
};
//# sourceMappingURL=disposable.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../ts/base/disposable.ts"],"names":[],"mappings":";;AAaA,MAAM,aAAa,GAAG,CAAC,KAAc,EAAiC,EAAE,CACtE,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AAE1D;;;GAGG;AACU,QAAA,KAAK,GAAG,CAA2B,UAAa,EAAE,EAAe,EAAK,EAAE;IACnF,IAAI,GAAmB,CAAC;IACxB,IAAI;QACF,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;KACtB;IAAC,OAAO,CAAC,EAAE;QACV,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC;KACT;IAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;QACvB,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC;KACZ;IAED,OAAQ,GAAG,CAAC,IAAI,CACd,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,EACD,GAAG,CAAC,EAAE;QACJ,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,CAAC;IACZ,CAAC,CACe,CAAC;AACrB,CAAC,CAAC"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,70 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_1 = require("../node");
const chai_1 = require("chai");
describe('disposable', () => {
describe('using', () => {
let disposed;
let disposable;
beforeEach(() => {
disposed = false;
disposable = { dispose: () => (disposed = true) };
});
it('disposes after sync call', () => {
const v = node_1.using(disposable, d => {
chai_1.expect(d).to.equal(disposable);
chai_1.expect(disposed).to.be.false;
return 42;
});
chai_1.expect(v).to.equal(42);
chai_1.expect(disposed).to.be.true;
});
it('disposes after sync throw', () => {
const err = new Error();
try {
node_1.using(disposable, () => {
throw err;
});
throw new Error('expected to throw');
}
catch (e) {
chai_1.expect(e).to.equal(err);
}
chai_1.expect(disposed).to.be.true;
});
it('disposes after promise resolve', () => __awaiter(void 0, void 0, void 0, function* () {
const v = yield node_1.using(disposable, () => __awaiter(void 0, void 0, void 0, function* () {
yield Promise.resolve();
chai_1.expect(disposed).to.be.false;
return 42;
}));
chai_1.expect(v).to.equal(42);
chai_1.expect(disposed).to.be.true;
}));
it('disposes after promise reject', () => __awaiter(void 0, void 0, void 0, function* () {
const err = new Error();
try {
yield node_1.using(disposable, () => __awaiter(void 0, void 0, void 0, function* () {
yield Promise.resolve();
chai_1.expect(disposed).to.be.false;
throw err;
}));
throw new Error('expected to throw');
}
catch (e) {
chai_1.expect(e).to.equal(err);
}
chai_1.expect(disposed).to.be.true;
}));
});
});
//# sourceMappingURL=disposable.test.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"disposable.test.js","sourceRoot":"","sources":["../../ts/base/disposable.test.ts"],"names":[],"mappings":"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"}

View file

@ -0,0 +1,23 @@
/**
* Options passed to hash functions.
*/
export interface IBaseHashOptions {
/**
* Length of the desired hash, in bytes. Note that when encoding the output
* as a string, this is *not* the string length.
*/
length?: number;
}
/**
* Default hash length, in bytes, unless otherwise specified.
*/
export declare const defaultHashLength = 32;
/**
* A type that can be hashed.
*/
export declare type BaseHashInput = Uint8Array | ArrayBuffer | SharedArrayBuffer | ArrayLike<number>;
/**
* Converts the input to an Uint8Array.
* @hidden
*/
export declare const inputToArray: (input: BaseHashInput) => Uint8Array;

View file

@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Default hash length, in bytes, unless otherwise specified.
*/
exports.defaultHashLength = 32;
/**
* Converts the input to an Uint8Array.
* @hidden
*/
exports.inputToArray = (input) => input instanceof Uint8Array ? input : new Uint8Array(input);
//# sourceMappingURL=hash-fn.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-fn.js","sourceRoot":"","sources":["../../ts/base/hash-fn.ts"],"names":[],"mappings":";;AAWA;;GAEG;AACU,QAAA,iBAAiB,GAAG,EAAE,CAAC;AAOpC;;;GAGG;AACU,QAAA,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE,CACnD,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC"}

View file

@ -0,0 +1,79 @@
import { BaseHashInput, IBaseHashOptions } from './hash-fn';
import { IHashReader } from './hash-reader';
/**
* A blake3 hash. Quite similar to Node's crypto hashing.
*
* Note that you must call {@link IHash#dispose} or {@link IHash#done} when
* you're finished with it to free memory.
*/
export interface IHasher<T> {
/**
* Adds the given data to the hash.
* @throws {Error} if {@link IHash#digest} has already been called.
*/
update(data: BaseHashInput): this;
/**
* Returns a digest of the hash.
*
* If `dispose: false` is given in the options, the hash will not
* automatically be disposed of, allowing you to continue updating
* it after obtaining the current reader.
*/
digest(options?: IBaseHashOptions & {
dispose?: boolean;
}): T;
/**
* Returns a {@link HashReader} for the current hash.
*
* If `dispose: false` is given in the options, the hash will not
* automatically be disposed of, allowing you to continue updating
* it after obtaining the current reader.
*/
reader(options?: {
dispose?: boolean;
}): IHashReader<T>;
/**
* Frees data associated with the hash. This *must* be called if
* {@link IHash#digest} is not called in order to free memory.
*/
dispose(): void;
}
/**
* @hidden
*/
export interface IInternalHash<Reader> {
free(): void;
reader(): Reader;
update(bytes: Uint8Array): void;
digest(into: Uint8Array): void;
}
export interface IHasherDigestOptions extends IBaseHashOptions {
dispose?: boolean;
}
/**
* Base implementation of hashing.
*/
export declare class BaseHash<Binary extends Uint8Array, InternalReader, Reader extends IHashReader<Binary>> implements IHasher<Binary> {
private readonly alloc;
private readonly getReader;
private hash;
constructor(implementation: IInternalHash<InternalReader>, alloc: (length: number) => Binary, getReader: (internal: InternalReader) => Reader);
/**
* @inheritdoc
*/
update(data: BaseHashInput): this;
/**
* @inheritdoc
*/
digest({ length, dispose }?: IHasherDigestOptions): Binary;
/**
* @inheritdoc
*/
reader({ dispose }?: {
dispose?: boolean;
}): Reader;
/**
* @inheritdoc
*/
dispose(): void;
}

View file

@ -0,0 +1,60 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_fn_1 = require("./hash-fn");
/**
* Base implementation of hashing.
*/
class BaseHash {
constructor(implementation, alloc, getReader) {
this.alloc = alloc;
this.getReader = getReader;
this.hash = implementation;
}
/**
* @inheritdoc
*/
update(data) {
if (!this.hash) {
throw new Error('Cannot continue updating hashing after dispose() has been called');
}
this.hash.update(hash_fn_1.inputToArray(data));
return this;
}
/**
* @inheritdoc
*/
digest({ length = hash_fn_1.defaultHashLength, dispose = true } = {}) {
if (!this.hash) {
throw new Error('Cannot call digest() after dipose() has been called');
}
const digested = this.alloc(length);
this.hash.digest(digested);
if (dispose) {
this.dispose();
}
return digested;
}
/**
* @inheritdoc
*/
reader({ dispose = true } = {}) {
if (!this.hash) {
throw new Error('Cannot call reader() after dipose() has been called');
}
const reader = this.getReader(this.hash.reader());
if (dispose) {
this.dispose();
}
return reader;
}
/**
* @inheritdoc
*/
dispose() {
var _a;
(_a = this.hash) === null || _a === void 0 ? void 0 : _a.free();
this.hash = undefined;
}
}
exports.BaseHash = BaseHash;
//# sourceMappingURL=hash-instance.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-instance.js","sourceRoot":"","sources":["../../ts/base/hash-instance.ts"],"names":[],"mappings":";;AAAA,uCAA6F;AAuD7F;;GAEG;AACH,MAAa,QAAQ;IAInB,YACE,cAA6C,EAC5B,KAAiC,EACjC,SAA+C;QAD/C,UAAK,GAAL,KAAK,CAA4B;QACjC,cAAS,GAAT,SAAS,CAAsC;QAEhE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,IAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;SACrF;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,EAAE,MAAM,GAAG,2BAAiB,EAAE,OAAO,GAAG,IAAI,KAA2B,EAAE;QACrF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;SACxE;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE3B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,KAA4B,EAAE;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;SACxE;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;;QACL,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,GAAG;QAClB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;CACF;AAjED,4BAiEC"}

View file

@ -0,0 +1,61 @@
import { IDisposable } from './disposable';
/**
* The maximum number of bytes that can be read from the hash.
*
* Calculated out 2^64-1, since `Xn` syntax (for `Xn ** Yn`) requires TS
* targeting esnext/es2020 which includes features that Node 10 doesn't
* yet supported.
*/
export declare const maxHashBytes: bigint;
/**
* The HashReader is a type returned from any of the hash functions. It can
*/
export interface IHashReader<T> extends IDisposable {
/**
* Returns the position of the reader in the hash. Can be written to to seek.
*/
position: bigint;
/**
* Reads data from the hash into the target array. The target will always
* be completely filled with data.
*/
readInto(target: Uint8Array): void;
/**
* Reads and returns the given number of bytes from the hash, advancing
* the position of the reader.
*/
read(bytes: number): T;
}
/**
* Underlying native or wasm module code backing the reader.
* @hidden
*/
export interface IInternalReader {
free?(): void;
fill(target: Uint8Array): void;
set_position(position: bigint): void;
}
/**
* Base hash reader implementation.
*/
export declare abstract class BaseHashReader<T extends Uint8Array> implements IHashReader<T> {
private reader;
private pos;
get position(): bigint;
set position(value: bigint);
constructor(reader: IInternalReader);
/**
* @inheritdoc
*/
readInto(target: Uint8Array): void;
/**
* @inheritdoc
*/
read(bytes: number): T;
/**
* @inheritdoc
*/
dispose(): void;
protected abstract alloc(bytes: number): T;
private boundsCheck;
}

View file

@ -0,0 +1,70 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* The maximum number of bytes that can be read from the hash.
*
* Calculated out 2^64-1, since `Xn` syntax (for `Xn ** Yn`) requires TS
* targeting esnext/es2020 which includes features that Node 10 doesn't
* yet supported.
*/
exports.maxHashBytes = BigInt('18446744073709551615');
/**
* Base hash reader implementation.
*/
class BaseHashReader {
constructor(reader) {
this.pos = BigInt(0);
this.reader = reader;
}
get position() {
return this.pos;
}
set position(value) {
var _a;
// to avoid footguns of people using numbers:
if (typeof value !== 'bigint') {
throw new Error(`Got a ${typeof value} set in to reader.position, expected a bigint`);
}
this.boundsCheck(value);
this.pos = value;
(_a = this.reader) === null || _a === void 0 ? void 0 : _a.set_position(value);
}
/**
* @inheritdoc
*/
readInto(target) {
if (!this.reader) {
throw new Error(`Cannot read from a hash after it was disposed`);
}
const next = this.pos + BigInt(target.length);
this.boundsCheck(next);
this.reader.fill(target);
this.position = next;
}
/**
* @inheritdoc
*/
read(bytes) {
const data = this.alloc(bytes);
this.readInto(data);
return data;
}
/**
* @inheritdoc
*/
dispose() {
var _a, _b;
(_b = (_a = this.reader) === null || _a === void 0 ? void 0 : _a.free) === null || _b === void 0 ? void 0 : _b.call(_a);
this.reader = undefined;
}
boundsCheck(position) {
if (position > exports.maxHashBytes) {
throw new RangeError(`Cannot read past ${exports.maxHashBytes} bytes in BLAKE3 hashes`);
}
if (position < BigInt(0)) {
throw new RangeError(`Cannot read to a negative position`);
}
}
}
exports.BaseHashReader = BaseHashReader;
//# sourceMappingURL=hash-reader.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-reader.js","sourceRoot":"","sources":["../../ts/base/hash-reader.ts"],"names":[],"mappings":";;AAEA;;;;;;GAMG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAkC3D;;GAEG;AACH,MAAsB,cAAc;IAmBlC,YAAY,MAAuB;QAjB3B,QAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAkBtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAjBD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAW,QAAQ,CAAC,KAAa;;QAC/B,6CAA6C;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,KAAK,+CAA+C,CAAC,CAAC;SACvF;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACjB,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC,KAAK,EAAE;IACnC,CAAC;IAMD;;OAEG;IACI,QAAQ,CAAC,MAAkB;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAClE;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,KAAa;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,OAAO;;QACZ,YAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,mDAAK;QACtB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAIO,WAAW,CAAC,QAAgB;QAClC,IAAI,QAAQ,GAAG,oBAAY,EAAE;YAC3B,MAAM,IAAI,UAAU,CAAC,oBAAoB,oBAAY,yBAAyB,CAAC,CAAC;SACjF;QAED,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;SAC5D;IACH,CAAC;CACF;AAjED,wCAiEC"}

View file

@ -0,0 +1,4 @@
export * from './hash-fn';
export * from './hash-reader';
export * from './hash-instance';
export * from './disposable';

View file

@ -0,0 +1,10 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./hash-fn"));
__export(require("./hash-reader"));
__export(require("./hash-instance"));
__export(require("./disposable"));
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/base/index.ts"],"names":[],"mappings":";;;;;AAAA,+BAA0B;AAC1B,mCAA8B;AAC9B,qCAAgC;AAChC,kCAA6B"}

View file

@ -0,0 +1,41 @@
/// <reference types="node" />
export declare const hello48: Buffer;
export declare const inputs: {
large: {
input: string;
hash: Buffer;
};
hello: {
input: string;
hash: Buffer;
};
goodbye: {
input: string;
hash: Buffer;
};
};
/**
* Test vectors from the BLAKE3 repo.
*
* > Each test is an input length and three outputs, one for each of the hash,
* > keyedHash, and deriveKey modes. The input in each case is filled with a
* > 251-byte-long repeating pattern: 0, 1, 2, ..., 249, 250, 0, 1, ... The
* > key used with keyedHash is the 32-byte ASCII string given in the 'key'
* > field below. For deriveKey, the test input is used as the input key, and
* > the context string is 'BLAKE3 2019-12-27 6:29:52 example context'.
* > (As good practice for following the security requirements of deriveKey,
* > test runners should make that context string a hardcoded constant, and we
* > do not provided it in machine-readable form.) Outputs are encoded as
* > hexadecimal. Each case is an extended output, and implementations should
* > also check that the first 32 bytes match their default-length output.
*/
export declare const ogTestVectors: {
key: string;
context: string;
cases: {
inputLen: number;
expectedHash: string;
expectedKeyed: string;
expectedDerive: string;
}[];
};

View file

@ -0,0 +1,166 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
exports.hello48 = Buffer.from('ea8f163db38682925e4491c5e58d4bb3506ef8c14eb78a86e908c5624a67200fe992405f0d785b599a2e3387f6d34d01', 'hex');
exports.inputs = {
large: {
input: fs_1.readFileSync(__dirname + '/../../test-input.txt', 'utf-8'),
hash: Buffer.from('2a2cf9cbc9f8d48f7d089273bc2d796a3cd0677b64234dab0c59e6e29d6a7164', 'hex'),
},
hello: {
input: 'hello',
hash: Buffer.from('ea8f163db38682925e4491c5e58d4bb3506ef8c14eb78a86e908c5624a67200f', 'hex'),
},
goodbye: {
input: 'goodbye',
hash: Buffer.from('f94a694227c5f31a07551908ad5fb252f5f0964030df5f2f200adedfae4d9b69', 'hex'),
},
};
/**
* Test vectors from the BLAKE3 repo.
*
* > Each test is an input length and three outputs, one for each of the hash,
* > keyedHash, and deriveKey modes. The input in each case is filled with a
* > 251-byte-long repeating pattern: 0, 1, 2, ..., 249, 250, 0, 1, ... The
* > key used with keyedHash is the 32-byte ASCII string given in the 'key'
* > field below. For deriveKey, the test input is used as the input key, and
* > the context string is 'BLAKE3 2019-12-27 6:29:52 example context'.
* > (As good practice for following the security requirements of deriveKey,
* > test runners should make that context string a hardcoded constant, and we
* > do not provided it in machine-readable form.) Outputs are encoded as
* > hexadecimal. Each case is an extended output, and implementations should
* > also check that the first 32 bytes match their default-length output.
*/
exports.ogTestVectors = {
key: 'whats the Elvish word for friend',
context: 'BLAKE3 2019-12-27 16:29:52 test vectors context',
cases: [
{
inputLen: 0,
expectedHash: 'af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262e00f03e7b69af26b7faaf09fcd333050338ddfe085b8cc869ca98b206c08243a26f5487789e8f660afe6c99ef9e0c52b92e7393024a80459cf91f476f9ffdbda7001c22e159b402631f277ca96f2defdf1078282314e763699a31c5363165421cce14d',
expectedKeyed: '92b2b75604ed3c761f9d6f62392c8a9227ad0ea3f09573e783f1498a4ed60d26b18171a2f22a4b94822c701f107153dba24918c4bae4d2945c20ece13387627d3b73cbf97b797d5e59948c7ef788f54372df45e45e4293c7dc18c1d41144a9758be58960856be1eabbe22c2653190de560ca3b2ac4aa692a9210694254c371e851bc8f',
expectedDerive: '2cc39783c223154fea8dfb7c1b1660f2ac2dcbd1c1de8277b0b0dd39b7e50d7d905630c8be290dfcf3e6842f13bddd573c098c3f17361f1f206b8cad9d088aa4a3f746752c6b0ce6a83b0da81d59649257cdf8eb3e9f7d4998e41021fac119deefb896224ac99f860011f73609e6e0e4540f93b273e56547dfd3aa1a035ba6689d89a0',
},
{
inputLen: 1,
expectedHash: '2d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213c3a6cb8bf623e20cdb535f8d1a5ffb86342d9c0b64aca3bce1d31f60adfa137b358ad4d79f97b47c3d5e79f179df87a3b9776ef8325f8329886ba42f07fb138bb502f4081cbcec3195c5871e6c23e2cc97d3c69a613eba131e5f1351f3f1da786545e5',
expectedKeyed: '6d7878dfff2f485635d39013278ae14f1454b8c0a3a2d34bc1ab38228a80c95b6568c0490609413006fbd428eb3fd14e7756d90f73a4725fad147f7bf70fd61c4e0cf7074885e92b0e3f125978b4154986d4fb202a3f331a3fb6cf349a3a70e49990f98fe4289761c8602c4e6ab1138d31d3b62218078b2f3ba9a88e1d08d0dd4cea11',
expectedDerive: 'b3e2e340a117a499c6cf2398a19ee0d29cca2bb7404c73063382693bf66cb06c5827b91bf889b6b97c5477f535361caefca0b5d8c4746441c57617111933158950670f9aa8a05d791daae10ac683cbef8faf897c84e6114a59d2173c3f417023a35d6983f2c7dfa57e7fc559ad751dbfb9ffab39c2ef8c4aafebc9ae973a64f0c76551',
},
{
inputLen: 1023,
expectedHash: '10108970eeda3eb932baac1428c7a2163b0e924c9a9e25b35bba72b28f70bd11a182d27a591b05592b15607500e1e8dd56bc6c7fc063715b7a1d737df5bad3339c56778957d870eb9717b57ea3d9fb68d1b55127bba6a906a4a24bbd5acb2d123a37b28f9e9a81bbaae360d58f85e5fc9d75f7c370a0cc09b6522d9c8d822f2f28f485',
expectedKeyed: 'c951ecdf03288d0fcc96ee3413563d8a6d3589547f2c2fb36d9786470f1b9d6e890316d2e6d8b8c25b0a5b2180f94fb1a158ef508c3cde45e2966bd796a696d3e13efd86259d756387d9becf5c8bf1ce2192b87025152907b6d8cc33d17826d8b7b9bc97e38c3c85108ef09f013e01c229c20a83d9e8efac5b37470da28575fd755a10',
expectedDerive: '74a16c1c3d44368a86e1ca6df64be6a2f64cce8f09220787450722d85725dea59c413264404661e9e4d955409dfe4ad3aa487871bcd454ed12abfe2c2b1eb7757588cf6cb18d2eccad49e018c0d0fec323bec82bf1644c6325717d13ea712e6840d3e6e730d35553f59eff5377a9c350bcc1556694b924b858f329c44ee64b884ef00d',
},
{
inputLen: 1024,
expectedHash: '42214739f095a406f3fc83deb889744ac00df831c10daa55189b5d121c855af71cf8107265ecdaf8505b95d8fcec83a98a6a96ea5109d2c179c47a387ffbb404756f6eeae7883b446b70ebb144527c2075ab8ab204c0086bb22b7c93d465efc57f8d917f0b385c6df265e77003b85102967486ed57db5c5ca170ba441427ed9afa684e',
expectedKeyed: '75c46f6f3d9eb4f55ecaaee480db732e6c2105546f1e675003687c31719c7ba4a78bc838c72852d4f49c864acb7adafe2478e824afe51c8919d06168414c265f298a8094b1ad813a9b8614acabac321f24ce61c5a5346eb519520d38ecc43e89b5000236df0597243e4d2493fd626730e2ba17ac4d8824d09d1a4a8f57b8227778e2de',
expectedDerive: '7356cd7720d5b66b6d0697eb3177d9f8d73a4a5c5e968896eb6a6896843027066c23b601d3ddfb391e90d5c8eccdef4ae2a264bce9e612ba15e2bc9d654af1481b2e75dbabe615974f1070bba84d56853265a34330b4766f8e75edd1f4a1650476c10802f22b64bd3919d246ba20a17558bc51c199efdec67e80a227251808d8ce5bad',
},
{
inputLen: 1025,
expectedHash: 'd00278ae47eb27b34faecf67b4fe263f82d5412916c1ffd97c8cb7fb814b8444f4c4a22b4b399155358a994e52bf255de60035742ec71bd08ac275a1b51cc6bfe332b0ef84b409108cda080e6269ed4b3e2c3f7d722aa4cdc98d16deb554e5627be8f955c98e1d5f9565a9194cad0c4285f93700062d9595adb992ae68ff12800ab67a',
expectedKeyed: '357dc55de0c7e382c900fd6e320acc04146be01db6a8ce7210b7189bd664ea69362396b77fdc0d2634a552970843722066c3c15902ae5097e00ff53f1e116f1cd5352720113a837ab2452cafbde4d54085d9cf5d21ca613071551b25d52e69d6c81123872b6f19cd3bc1333edf0c52b94de23ba772cf82636cff4542540a7738d5b930',
expectedDerive: 'effaa245f065fbf82ac186839a249707c3bddf6d3fdda22d1b95a3c970379bcb5d31013a167509e9066273ab6e2123bc835b408b067d88f96addb550d96b6852dad38e320b9d940f86db74d398c770f462118b35d2724efa13da97194491d96dd37c3c09cbef665953f2ee85ec83d88b88d11547a6f911c8217cca46defa2751e7f3ad',
},
{
inputLen: 2048,
expectedHash: 'e776b6028c7cd22a4d0ba182a8bf62205d2ef576467e838ed6f2529b85fba24a9a60bf80001410ec9eea6698cd537939fad4749edd484cb541aced55cd9bf54764d063f23f6f1e32e12958ba5cfeb1bf618ad094266d4fc3c968c2088f677454c288c67ba0dba337b9d91c7e1ba586dc9a5bc2d5e90c14f53a8863ac75655461cea8f9',
expectedKeyed: '879cf1fa2ea0e79126cb1063617a05b6ad9d0b696d0d757cf053439f60a99dd10173b961cd574288194b23ece278c330fbb8585485e74967f31352a8183aa782b2b22f26cdcadb61eed1a5bc144b8198fbb0c13abbf8e3192c145d0a5c21633b0ef86054f42809df823389ee40811a5910dcbd1018af31c3b43aa55201ed4edaac74fe',
expectedDerive: '7b2945cb4fef70885cc5d78a87bf6f6207dd901ff239201351ffac04e1088a23e2c11a1ebffcea4d80447867b61badb1383d842d4e79645d48dd82ccba290769caa7af8eaa1bd78a2a5e6e94fbdab78d9c7b74e894879f6a515257ccf6f95056f4e25390f24f6b35ffbb74b766202569b1d797f2d4bd9d17524c720107f985f4ddc583',
},
{
inputLen: 2049,
expectedHash: '5f4d72f40d7a5f82b15ca2b2e44b1de3c2ef86c426c95c1af0b687952256303096de31d71d74103403822a2e0bc1eb193e7aecc9643a76b7bbc0c9f9c52e8783aae98764ca468962b5c2ec92f0c74eb5448d519713e09413719431c802f948dd5d90425a4ecdadece9eb178d80f26efccae630734dff63340285adec2aed3b51073ad3',
expectedKeyed: '9f29700902f7c86e514ddc4df1e3049f258b2472b6dd5267f61bf13983b78dd5f9a88abfefdfa1e00b418971f2b39c64ca621e8eb37fceac57fd0c8fc8e117d43b81447be22d5d8186f8f5919ba6bcc6846bd7d50726c06d245672c2ad4f61702c646499ee1173daa061ffe15bf45a631e2946d616a4c345822f1151284712f76b2b0e',
expectedDerive: '2ea477c5515cc3dd606512ee72bb3e0e758cfae7232826f35fb98ca1bcbdf27316d8e9e79081a80b046b60f6a263616f33ca464bd78d79fa18200d06c7fc9bffd808cc4755277a7d5e09da0f29ed150f6537ea9bed946227ff184cc66a72a5f8c1e4bd8b04e81cf40fe6dc4427ad5678311a61f4ffc39d195589bdbc670f63ae70f4b6',
},
{
inputLen: 3072,
expectedHash: 'b98cb0ff3623be03326b373de6b9095218513e64f1ee2edd2525c7ad1e5cffd29a3f6b0b978d6608335c09dc94ccf682f9951cdfc501bfe47b9c9189a6fc7b404d120258506341a6d802857322fbd20d3e5dae05b95c88793fa83db1cb08e7d8008d1599b6209d78336e24839724c191b2a52a80448306e0daa84a3fdb566661a37e11',
expectedKeyed: '044a0e7b172a312dc02a4c9a818c036ffa2776368d7f528268d2e6b5df19177022f302d0529e4174cc507c463671217975e81dab02b8fdeb0d7ccc7568dd22574c783a76be215441b32e91b9a904be8ea81f7a0afd14bad8ee7c8efc305ace5d3dd61b996febe8da4f56ca0919359a7533216e2999fc87ff7d8f176fbecb3d6f34278b',
expectedDerive: '050df97f8c2ead654d9bb3ab8c9178edcd902a32f8495949feadcc1e0480c46b3604131bbd6e3ba573b6dd682fa0a63e5b165d39fc43a625d00207607a2bfeb65ff1d29292152e26b298868e3b87be95d6458f6f2ce6118437b632415abe6ad522874bcd79e4030a5e7bad2efa90a7a7c67e93f0a18fb28369d0a9329ab5c24134ccb0',
},
{
inputLen: 3073,
expectedHash: '7124b49501012f81cc7f11ca069ec9226cecb8a2c850cfe644e327d22d3e1cd39a27ae3b79d68d89da9bf25bc27139ae65a324918a5f9b7828181e52cf373c84f35b639b7fccbb985b6f2fa56aea0c18f531203497b8bbd3a07ceb5926f1cab74d14bd66486d9a91eba99059a98bd1cd25876b2af5a76c3e9eed554ed72ea952b603bf',
expectedKeyed: '68dede9bef00ba89e43f31a6825f4cf433389fedae75c04ee9f0cf16a427c95a96d6da3fe985054d3478865be9a092250839a697bbda74e279e8a9e69f0025e4cfddd6cfb434b1cd9543aaf97c635d1b451a4386041e4bb100f5e45407cbbc24fa53ea2de3536ccb329e4eb9466ec37093a42cf62b82903c696a93a50b702c80f3c3c5',
expectedDerive: '72613c9ec9ff7e40f8f5c173784c532ad852e827dba2bf85b2ab4b76f7079081576288e552647a9d86481c2cae75c2dd4e7c5195fb9ada1ef50e9c5098c249d743929191441301c69e1f48505a4305ec1778450ee48b8e69dc23a25960fe33070ea549119599760a8a2d28aeca06b8c5e9ba58bc19e11fe57b6ee98aa44b2a8e6b14a5',
},
{
inputLen: 4096,
expectedHash: '015094013f57a5277b59d8475c0501042c0b642e531b0a1c8f58d2163229e9690289e9409ddb1b99768eafe1623da896faf7e1114bebeadc1be30829b6f8af707d85c298f4f0ff4d9438aef948335612ae921e76d411c3a9111df62d27eaf871959ae0062b5492a0feb98ef3ed4af277f5395172dbe5c311918ea0074ce0036454f620',
expectedKeyed: 'befc660aea2f1718884cd8deb9902811d332f4fc4a38cf7c7300d597a081bfc0bbb64a36edb564e01e4b4aaf3b060092a6b838bea44afebd2deb8298fa562b7b597c757b9df4c911c3ca462e2ac89e9a787357aaf74c3b56d5c07bc93ce899568a3eb17d9250c20f6c5f6c1e792ec9a2dcb715398d5a6ec6d5c54f586a00403a1af1de',
expectedDerive: '1e0d7f3db8c414c97c6307cbda6cd27ac3b030949da8e23be1a1a924ad2f25b9d78038f7b198596c6cc4a9ccf93223c08722d684f240ff6569075ed81591fd93f9fff1110b3a75bc67e426012e5588959cc5a4c192173a03c00731cf84544f65a2fb9378989f72e9694a6a394a8a30997c2e67f95a504e631cd2c5f55246024761b245',
},
{
inputLen: 4097,
expectedHash: '9b4052b38f1c5fc8b1f9ff7ac7b27cd242487b3d890d15c96a1c25b8aa0fb99505f91b0b5600a11251652eacfa9497b31cd3c409ce2e45cfe6c0a016967316c426bd26f619eab5d70af9a418b845c608840390f361630bd497b1ab44019316357c61dbe091ce72fc16dc340ac3d6e009e050b3adac4b5b2c92e722cffdc46501531956',
expectedKeyed: '00df940cd36bb9fa7cbbc3556744e0dbc8191401afe70520ba292ee3ca80abbc606db4976cfdd266ae0abf667d9481831ff12e0caa268e7d3e57260c0824115a54ce595ccc897786d9dcbf495599cfd90157186a46ec800a6763f1c59e36197e9939e900809f7077c102f888caaf864b253bc41eea812656d46742e4ea42769f89b83f',
expectedDerive: 'aca51029626b55fda7117b42a7c211f8c6e9ba4fe5b7a8ca922f34299500ead8a897f66a400fed9198fd61dd2d58d382458e64e100128075fc54b860934e8de2e84170734b06e1d212a117100820dbc48292d148afa50567b8b84b1ec336ae10d40c8c975a624996e12de31abbe135d9d159375739c333798a80c64ae895e51e22f3ad',
},
{
inputLen: 5120,
expectedHash: '9cadc15fed8b5d854562b26a9536d9707cadeda9b143978f319ab34230535833acc61c8fdc114a2010ce8038c853e121e1544985133fccdd0a2d507e8e615e611e9a0ba4f47915f49e53d721816a9198e8b30f12d20ec3689989175f1bf7a300eee0d9321fad8da232ece6efb8e9fd81b42ad161f6b9550a069e66b11b40487a5f5059',
expectedKeyed: '2c493e48e9b9bf31e0553a22b23503c0a3388f035cece68eb438d22fa1943e209b4dc9209cd80ce7c1f7c9a744658e7e288465717ae6e56d5463d4f80cdb2ef56495f6a4f5487f69749af0c34c2cdfa857f3056bf8d807336a14d7b89bf62bef2fb54f9af6a546f818dc1e98b9e07f8a5834da50fa28fb5874af91bf06020d1bf0120e',
expectedDerive: '7a7acac8a02adcf3038d74cdd1d34527de8a0fcc0ee3399d1262397ce5817f6055d0cefd84d9d57fe792d65a278fd20384ac6c30fdb340092f1a74a92ace99c482b28f0fc0ef3b923e56ade20c6dba47e49227166251337d80a037e987ad3a7f728b5ab6dfafd6e2ab1bd583a95d9c895ba9c2422c24ea0f62961f0dca45cad47bfa0d',
},
{
inputLen: 5121,
expectedHash: '628bd2cb2004694adaab7bbd778a25df25c47b9d4155a55f8fbd79f2fe154cff96adaab0613a6146cdaabe498c3a94e529d3fc1da2bd08edf54ed64d40dcd6777647eac51d8277d70219a9694334a68bc8f0f23e20b0ff70ada6f844542dfa32cd4204ca1846ef76d811cdb296f65e260227f477aa7aa008bac878f72257484f2b6c95',
expectedKeyed: '6ccf1c34753e7a044db80798ecd0782a8f76f33563accaddbfbb2e0ea4b2d0240d07e63f13667a8d1490e5e04f13eb617aea16a8c8a5aaed1ef6fbde1b0515e3c81050b361af6ead126032998290b563e3caddeaebfab592e155f2e161fb7cba939092133f23f9e65245e58ec23457b78a2e8a125588aad6e07d7f11a85b88d375b72d',
expectedDerive: 'b07f01e518e702f7ccb44a267e9e112d403a7b3f4883a47ffbed4b48339b3c341a0add0ac032ab5aaea1e4e5b004707ec5681ae0fcbe3796974c0b1cf31a194740c14519273eedaabec832e8a784b6e7cfc2c5952677e6c3f2c3914454082d7eb1ce1766ac7d75a4d3001fc89544dd46b5147382240d689bbbaefc359fb6ae30263165',
},
{
inputLen: 6144,
expectedHash: '3e2e5b74e048f3add6d21faab3f83aa44d3b2278afb83b80b3c35164ebeca2054d742022da6fdda444ebc384b04a54c3ac5839b49da7d39f6d8a9db03deab32aade156c1c0311e9b3435cde0ddba0dce7b26a376cad121294b689193508dd63151603c6ddb866ad16c2ee41585d1633a2cea093bea714f4c5d6b903522045b20395c83',
expectedKeyed: '3d6b6d21281d0ade5b2b016ae4034c5dec10ca7e475f90f76eac7138e9bc8f1dc35754060091dc5caf3efabe0603c60f45e415bb3407db67e6beb3d11cf8e4f7907561f05dace0c15807f4b5f389c841eb114d81a82c02a00b57206b1d11fa6e803486b048a5ce87105a686dee041207e095323dfe172df73deb8c9532066d88f9da7e',
expectedDerive: '2a95beae63ddce523762355cf4b9c1d8f131465780a391286a5d01abb5683a1597099e3c6488aab6c48f3c15dbe1942d21dbcdc12115d19a8b8465fb54e9053323a9178e4275647f1a9927f6439e52b7031a0b465c861a3fc531527f7758b2b888cf2f20582e9e2c593709c0a44f9c6e0f8b963994882ea4168827823eef1f64169fef',
},
{
inputLen: 6145,
expectedHash: 'f1323a8631446cc50536a9f705ee5cb619424d46887f3c376c695b70e0f0507f18a2cfdd73c6e39dd75ce7c1c6e3ef238fd54465f053b25d21044ccb2093beb015015532b108313b5829c3621ce324b8e14229091b7c93f32db2e4e63126a377d2a63a3597997d4f1cba59309cb4af240ba70cebff9a23d5e3ff0cdae2cfd54e070022',
expectedKeyed: '9ac301e9e39e45e3250a7e3b3df701aa0fb6889fbd80eeecf28dbc6300fbc539f3c184ca2f59780e27a576c1d1fb9772e99fd17881d02ac7dfd39675aca918453283ed8c3169085ef4a466b91c1649cc341dfdee60e32231fc34c9c4e0b9a2ba87ca8f372589c744c15fd6f985eec15e98136f25beeb4b13c4e43dc84abcc79cd4646c',
expectedDerive: '379bcc61d0051dd489f686c13de00d5b14c505245103dc040d9e4dd1facab8e5114493d029bdbd295aaa744a59e31f35c7f52dba9c3642f773dd0b4262a9980a2aef811697e1305d37ba9d8b6d850ef07fe41108993180cf779aeece363704c76483458603bbeeb693cffbbe5588d1f3535dcad888893e53d977424bb707201569a8d2',
},
{
inputLen: 7168,
expectedHash: '61da957ec2499a95d6b8023e2b0e604ec7f6b50e80a9678b89d2628e99ada77a5707c321c83361793b9af62a40f43b523df1c8633cecb4cd14d00bdc79c78fca5165b863893f6d38b02ff7236c5a9a8ad2dba87d24c547cab046c29fc5bc1ed142e1de4763613bb162a5a538e6ef05ed05199d751f9eb58d332791b8d73fb74e4fce95',
expectedKeyed: 'b42835e40e9d4a7f42ad8cc04f85a963a76e18198377ed84adddeaecacc6f3fca2f01d5277d69bb681c70fa8d36094f73ec06e452c80d2ff2257ed82e7ba348400989a65ee8daa7094ae0933e3d2210ac6395c4af24f91c2b590ef87d7788d7066ea3eaebca4c08a4f14b9a27644f99084c3543711b64a070b94f2c9d1d8a90d035d52',
expectedDerive: '11c37a112765370c94a51415d0d651190c288566e295d505defdad895dae223730d5a5175a38841693020669c7638f40b9bc1f9f39cf98bda7a5b54ae24218a800a2116b34665aa95d846d97ea988bfcb53dd9c055d588fa21ba78996776ea6c40bc428b53c62b5f3ccf200f647a5aae8067f0ea1976391fcc72af1945100e2a6dcb88',
},
{
inputLen: 7169,
expectedHash: 'a003fc7a51754a9b3c7fae0367ab3d782dccf28855a03d435f8cfe74605e781798a8b20534be1ca9eb2ae2df3fae2ea60e48c6fb0b850b1385b5de0fe460dbe9d9f9b0d8db4435da75c601156df9d047f4ede008732eb17adc05d96180f8a73548522840779e6062d643b79478a6e8dbce68927f36ebf676ffa7d72d5f68f050b119c8',
expectedKeyed: 'ed9b1a922c046fdb3d423ae34e143b05ca1bf28b710432857bf738bcedbfa5113c9e28d72fcbfc020814ce3f5d4fc867f01c8f5b6caf305b3ea8a8ba2da3ab69fabcb438f19ff11f5378ad4484d75c478de425fb8e6ee809b54eec9bdb184315dc856617c09f5340451bf42fd3270a7b0b6566169f242e533777604c118a6358250f54',
expectedDerive: '554b0a5efea9ef183f2f9b931b7497995d9eb26f5c5c6dad2b97d62fc5ac31d99b20652c016d88ba2a611bbd761668d5eda3e568e940faae24b0d9991c3bd25a65f770b89fdcadabcb3d1a9c1cb63e69721cacf1ae69fefdcef1e3ef41bc5312ccc17222199e47a26552c6adc460cf47a72319cb5039369d0060eaea59d6c65130f1dd',
},
{
inputLen: 8192,
expectedHash: 'aae792484c8efe4f19e2ca7d371d8c467ffb10748d8a5a1ae579948f718a2a635fe51a27db045a567c1ad51be5aa34c01c6651c4d9b5b5ac5d0fd58cf18dd61a47778566b797a8c67df7b1d60b97b19288d2d877bb2df417ace009dcb0241ca1257d62712b6a4043b4ff33f690d849da91ea3bf711ed583cb7b7a7da2839ba71309bbf',
expectedKeyed: 'dc9637c8845a770b4cbf76b8daec0eebf7dc2eac11498517f08d44c8fc00d58a4834464159dcbc12a0ba0c6d6eb41bac0ed6585cabfe0aca36a375e6c5480c22afdc40785c170f5a6b8a1107dbee282318d00d915ac9ed1143ad40765ec120042ee121cd2baa36250c618adaf9e27260fda2f94dea8fb6f08c04f8f10c78292aa46102',
expectedDerive: 'ad01d7ae4ad059b0d33baa3c01319dcf8088094d0359e5fd45d6aeaa8b2d0c3d4c9e58958553513b67f84f8eac653aeeb02ae1d5672dcecf91cd9985a0e67f4501910ecba25555395427ccc7241d70dc21c190e2aadee875e5aae6bf1912837e53411dabf7a56cbf8e4fb780432b0d7fe6cec45024a0788cf5874616407757e9e6bef7',
},
{
inputLen: 8193,
expectedHash: 'bab6c09cb8ce8cf459261398d2e7aef35700bf488116ceb94a36d0f5f1b7bc3bb2282aa69be089359ea1154b9a9286c4a56af4de975a9aa4a5c497654914d279bea60bb6d2cf7225a2fa0ff5ef56bbe4b149f3ed15860f78b4e2ad04e158e375c1e0c0b551cd7dfc82f1b155c11b6b3ed51ec9edb30d133653bb5709d1dbd55f4e1ff6',
expectedKeyed: '954a2a75420c8d6547e3ba5b98d963e6fa6491addc8c023189cc519821b4a1f5f03228648fd983aef045c2fa8290934b0866b615f585149587dda2299039965328835a2b18f1d63b7e300fc76ff260b571839fe44876a4eae66cbac8c67694411ed7e09df51068a22c6e67d6d3dd2cca8ff12e3275384006c80f4db68023f24eebba57',
expectedDerive: 'af1e0346e389b17c23200270a64aa4e1ead98c61695d917de7d5b00491c9b0f12f20a01d6d622edf3de026a4db4e4526225debb93c1237934d71c7340bb5916158cbdafe9ac3225476b6ab57a12357db3abbad7a26c6e66290e44034fb08a20a8d0ec264f309994d2810c49cfba6989d7abb095897459f5425adb48aba07c5fb3c83c0',
},
{
inputLen: 16384,
expectedHash: 'f875d6646de28985646f34ee13be9a576fd515f76b5b0a26bb324735041ddde49d764c270176e53e97bdffa58d549073f2c660be0e81293767ed4e4929f9ad34bbb39a529334c57c4a381ffd2a6d4bfdbf1482651b172aa883cc13408fa67758a3e47503f93f87720a3177325f7823251b85275f64636a8f1d599c2e49722f42e93893',
expectedKeyed: '9e9fc4eb7cf081ea7c47d1807790ed211bfec56aa25bb7037784c13c4b707b0df9e601b101e4cf63a404dfe50f2e1865bb12edc8fca166579ce0c70dba5a5c0fc960ad6f3772183416a00bd29d4c6e651ea7620bb100c9449858bf14e1ddc9ecd35725581ca5b9160de04060045993d972571c3e8f71e9d0496bfa744656861b169d65',
expectedDerive: '160e18b5878cd0df1c3af85eb25a0db5344d43a6fbd7a8ef4ed98d0714c3f7e160dc0b1f09caa35f2f417b9ef309dfe5ebd67f4c9507995a531374d099cf8ae317542e885ec6f589378864d3ea98716b3bbb65ef4ab5e0ab5bb298a501f19a41ec19af84a5e6b428ecd813b1a47ed91c9657c3fba11c406bc316768b58f6802c9e9b57',
},
{
inputLen: 31744,
expectedHash: '62b6960e1a44bcc1eb1a611a8d6235b6b4b78f32e7abc4fb4c6cdcce94895c47860cc51f2b0c28a7b77304bd55fe73af663c02d3f52ea053ba43431ca5bab7bfea2f5e9d7121770d88f70ae9649ea713087d1914f7f312147e247f87eb2d4ffef0ac978bf7b6579d57d533355aa20b8b77b13fd09748728a5cc327a8ec470f4013226f',
expectedKeyed: 'efa53b389ab67c593dba624d898d0f7353ab99e4ac9d42302ee64cbf9939a4193a7258db2d9cd32a7a3ecfce46144114b15c2fcb68a618a976bd74515d47be08b628be420b5e830fade7c080e351a076fbc38641ad80c736c8a18fe3c66ce12f95c61c2462a9770d60d0f77115bbcd3782b593016a4e728d4c06cee4505cb0c08a42ec',
expectedDerive: '39772aef80e0ebe60596361e45b061e8f417429d529171b6764468c22928e28e9759adeb797a3fbf771b1bcea30150a020e317982bf0d6e7d14dd9f064bc11025c25f31e81bd78a921db0174f03dd481d30e93fd8e90f8b2fee209f849f2d2a52f31719a490fb0ba7aea1e09814ee912eba111a9fde9d5c274185f7bae8ba85d300a2b',
},
],
};
//# sourceMappingURL=test-helpers.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../ts/base/test-helpers.ts"],"names":[],"mappings":"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"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,266 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const fs_1 = require("fs");
const http_1 = require("http");
const os_1 = require("os");
const path_1 = require("path");
const puppeteer_1 = __importDefault(require("puppeteer"));
const serve_handler_1 = __importDefault(require("serve-handler"));
const webpack_1 = __importDefault(require("webpack"));
const test_helpers_1 = require("./base/test-helpers");
// Much of the browser code is also used in Node's wasm. We test things more
// thoroughly there because tests are easier to write and debug, these tests
// are primarily for sanity and checking browser-specific behavior.
describe('browser', () => {
const addInputs = `window.inputs = ${JSON.stringify(test_helpers_1.inputs)}`;
describe('webpack', () => {
const testDir = path_1.resolve(os_1.tmpdir(), 'blake3-browser-test');
let server;
let page;
/**
* Builds the browser lib into the testDir.
*/
function buildWebpack() {
return __awaiter(this, void 0, void 0, function* () {
try {
fs_1.mkdirSync(testDir);
}
catch (_a) {
// already exists, probably
}
fs_1.writeFileSync(path_1.resolve(testDir, 'entry-src.js'), `import("blake3/browser").then(b3 => window.blake3 = b3);`);
const stats = yield new Promise((res, rej) => webpack_1.default({
mode: 'production',
devtool: 'source-map',
entry: path_1.resolve(testDir, 'entry-src.js'),
output: {
path: testDir,
filename: 'main.js',
},
resolve: {
alias: {
'blake3/browser': path_1.resolve(__dirname, '../', 'browser.js'),
},
},
}, (err, stats) => (err ? rej(err) : res(stats))));
if (stats.hasErrors()) {
throw stats.toString('errors-only');
}
fs_1.writeFileSync(path_1.resolve(testDir, 'index.html'), `<script src="/main.js"></script>`);
});
}
function serve() {
return __awaiter(this, void 0, void 0, function* () {
server = http_1.createServer((req, res) => serve_handler_1.default(req, res, { public: testDir }));
yield new Promise(resolve => server.listen(0, resolve));
});
}
before(function () {
return __awaiter(this, void 0, void 0, function* () {
yield buildWebpack();
yield serve();
this.timeout(20 * 1000);
const { port } = server.address();
const browser = yield puppeteer_1.default.launch({
executablePath: 'google-chrome-stable',
args: ['--no-sandbox'],
});
page = yield browser.newPage();
yield page.goto(`http://localhost:${port}`);
yield page.waitForFunction('!!window.blake3');
yield page.evaluate(addInputs);
});
});
runTests({
get page() {
return page;
},
});
after(() => {
page === null || page === void 0 ? void 0 : page.browser().close();
server === null || server === void 0 ? void 0 : server.close();
});
});
describe('native browser', () => {
let server;
let page;
function serve() {
return __awaiter(this, void 0, void 0, function* () {
server = http_1.createServer((req, res) => serve_handler_1.default(req, res, { public: path_1.resolve(__dirname, '..') }));
yield new Promise(resolve => server.listen(0, resolve));
});
}
before(function () {
return __awaiter(this, void 0, void 0, function* () {
yield serve();
this.timeout(20 * 1000);
const { port } = server.address();
const browser = yield puppeteer_1.default.launch({
executablePath: 'google-chrome-stable',
args: ['--no-sandbox'],
});
page = yield browser.newPage();
page.on('console', console.log);
page.on('pageerror', console.log);
page.on('error', console.log);
yield page.goto(`http://localhost:${port}/browser-async.test.html`);
yield page.waitForFunction('!!window.blake3');
yield page.evaluate(addInputs);
});
});
runTests({
get page() {
return page;
},
});
after(() => {
page === null || page === void 0 ? void 0 : page.browser().close();
server.close();
});
});
});
function runTests(opts) {
it('hashes a string', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate('blake3.hash(inputs.large.input).toString("hex")');
chai_1.expect(result).to.equal(test_helpers_1.inputs.large.hash.toString('hex'));
}));
describe('input encoding', () => {
it('hashes a uint8array', () => __awaiter(this, void 0, void 0, function* () {
const contents = [...new Uint8Array(Buffer.from(test_helpers_1.inputs.hello.input))];
const result = yield opts.page.evaluate(`blake3.hash(new Uint8Array([${contents.join(',')}])).toString("hex")`);
chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
}));
it('hashes a string', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate('blake3.hash(inputs.large.input).toString("hex")');
chai_1.expect(result).to.equal(test_helpers_1.inputs.large.hash.toString('hex'));
}));
it('customizes output length', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate('blake3.hash(inputs.hello.input, { length: 16 }).toString("hex")');
chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.slice(0, 16).toString('hex'));
}));
});
describe('output encoding', () => {
const tcases = [
{ encoding: 'hex', expected: test_helpers_1.inputs.hello.hash.toString('hex') },
{ encoding: 'base64', expected: test_helpers_1.inputs.hello.hash.toString('base64') },
{ encoding: 'utf8', expected: test_helpers_1.inputs.hello.hash.toString('utf8') },
];
tcases.forEach(({ encoding, expected }) => it(encoding, () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`blake3.hash(inputs.hello.input).toString("${encoding}")`);
chai_1.expect(result).to.equal(expected);
})));
it('raw', () => __awaiter(this, void 0, void 0, function* () {
const result = (yield opts.page.evaluate(`blake3.hash(inputs.hello.input)`));
const actual = Buffer.alloc(32);
for (let i = 0; i < actual.length; i++) {
actual[i] = result[i]; // it comes as a plain object, we need to convert it to a buffer
}
chai_1.expect(actual).to.deep.equal(test_helpers_1.inputs.hello.hash);
}));
});
describe('hash class', () => {
it('digests', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`(() => {
const hash = blake3.createHash();
${[...Buffer.from(test_helpers_1.inputs.hello.input)]
.map(byte => `hash.update(new Uint8Array([${byte}]));`)
.join('\n')}
return hash.digest('hex');
})()`);
chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
}));
it('customizes the output length', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`(() => {
const hash = blake3.createHash();
hash.update(${JSON.stringify(test_helpers_1.inputs.hello.input)});
return hash.digest('hex', { length: 16 });
})()`);
chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.slice(0, 16).toString('hex'));
}));
it('returns a hash instance from digest', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`(() => {
const hash = blake3.createHash();
${[...Buffer.from(test_helpers_1.inputs.hello.input)]
.map(byte => `hash.update(new Uint8Array([${byte}]));`)
.join('\n')}
return hash.digest('hex');
})()`);
chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
}));
});
describe('reader', () => {
it('is sane with a Hash', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`(() => {
const hash = blake3.createHash();
hash.update("hello");
return blake3.using(hash.reader(), reader => [
reader.read(48).toString('hex'),
reader.toArray().toString('hex'),
reader.toString('hex'),
]);
})()`);
chai_1.expect(result).to.deep.equal([
test_helpers_1.hello48.toString('hex'),
test_helpers_1.inputs.hello.hash.toString('hex'),
test_helpers_1.inputs.hello.hash.toString('hex'),
]);
}));
});
describe('original test vectors', () => {
for (const { inputLen, expectedDerive, expectedHash, expectedKeyed, } of test_helpers_1.ogTestVectors.cases.slice(0, 6)) {
describe(`${inputLen}`, () => __awaiter(this, void 0, void 0, function* () {
const input = Buffer.alloc(inputLen);
for (let i = 0; i < inputLen; i++) {
input[i] = i % 251;
}
const inputStr = `new Uint8Array([${input.join(',')}])`;
it('hash()', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`blake3.hash(
${inputStr},
{ length: ${expectedHash.length / 2} }
).toString("hex")`);
chai_1.expect(result).to.equal(expectedHash);
}));
it('deriveKey()', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`blake3.deriveKey(
${JSON.stringify(test_helpers_1.ogTestVectors.context)},
${inputStr},
{ length: ${expectedHash.length / 2} }
).toString("hex")`);
chai_1.expect(result).to.equal(expectedDerive);
}));
it('createKeyed()', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`(() => {
const hasher = blake3.createKeyed(new Uint8Array([${Buffer.from(test_helpers_1.ogTestVectors.key).join(',')}]));
hasher.update(${inputStr});
return hasher.digest({ length: ${expectedHash.length / 2} }).toString('hex');
})()`);
chai_1.expect(result).to.equal(expectedKeyed);
}));
it('keyedHash()', () => __awaiter(this, void 0, void 0, function* () {
const result = yield opts.page.evaluate(`blake3.keyedHash(
new Uint8Array([${Buffer.from(test_helpers_1.ogTestVectors.key).join(',')}]),
${inputStr},
{ length: ${expectedHash.length / 2} }
).toString("hex")`);
chai_1.expect(result).to.equal(expectedKeyed);
}));
}));
}
});
}
//# sourceMappingURL=browser.test.js.map

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,5 @@
export declare type BrowserEncoding = 'hex' | 'base64' | 'utf8';
/**
* @hidden
*/
export declare const mustGetEncoder: (encoding: BrowserEncoding) => (data: Uint8Array) => string;

View file

@ -0,0 +1,30 @@
"use strict";
// A small collection of encodings for convenience of use in the browser.
Object.defineProperty(exports, "__esModule", { value: true });
const decoder = new TextDecoder();
const encoders = {
// certainly not the fastest, but hashes are pretty small
base64: data => btoa(String.fromCharCode(...data)),
hex: data => {
let out = '';
for (const byte of data) {
if (byte < 0x10) {
out += '0';
}
out += byte.toString(16);
}
return out;
},
utf8: data => decoder.decode(data),
};
/**
* @hidden
*/
exports.mustGetEncoder = (encoding) => {
const encoder = encoders[encoding];
if (!encoder) {
throw new Error(`Unknown encoding ${encoding}`);
}
return encoder;
};
//# sourceMappingURL=encoding.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../ts/browser/encoding.ts"],"names":[],"mappings":";AAAA,yEAAyE;;AAIzE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,MAAM,QAAQ,GAA6D;IACzE,yDAAyD;IACzD,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IAElD,GAAG,EAAE,IAAI,CAAC,EAAE;QACV,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,IAAI,GAAG,IAAI,EAAE;gBACf,GAAG,IAAI,GAAG,CAAC;aACZ;YAED,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC1B;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;CACnC,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAG,CAAC,QAAyB,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;KACjD;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}

View file

@ -0,0 +1,24 @@
import { BaseHashInput, IBaseHashOptions } from '../base/hash-fn';
import { Hash } from './hash';
/**
* Input used for browser-based hashes.
*/
export declare type HashInput = BaseHashInput | string;
/**
* @hidden
*/
export declare const normalizeInput: (input: import("..").HashInput) => Uint8Array;
/**
* Returns a blake3 hash of the input.
*/
export declare function hash(input: HashInput, { length }?: IBaseHashOptions): Hash;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
export declare function deriveKey(context: string, material: HashInput, { length }?: IBaseHashOptions): Hash;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
export declare function keyedHash(key: Uint8Array, input: HashInput, { length }?: IBaseHashOptions): Hash;

View file

@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_fn_1 = require("../base/hash-fn");
const hash_1 = require("./hash");
const wasm_1 = require("./wasm");
const textEncoder = new TextEncoder();
/**
* @hidden
*/
exports.normalizeInput = (input) => hash_fn_1.inputToArray(typeof input === 'string' ? textEncoder.encode(input) : input);
/**
* Returns a blake3 hash of the input.
*/
function hash(input, { length = hash_fn_1.defaultHashLength } = {}) {
const result = new hash_1.Hash(length);
wasm_1.getWasm().hash(exports.normalizeInput(input), result);
return result;
}
exports.hash = hash;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
function deriveKey(context, material, { length = hash_fn_1.defaultHashLength } = {}) {
const derive = wasm_1.getWasm().create_derive(context);
derive.update(exports.normalizeInput(material));
const result = new hash_1.Hash(length);
derive.digest(result);
return result;
}
exports.deriveKey = deriveKey;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
function keyedHash(key, input, { length = hash_fn_1.defaultHashLength } = {}) {
if (key.length !== 32) {
throw new Error(`key provided to keyedHash must be 32 bytes, got ${key.length}`);
}
const derive = wasm_1.getWasm().create_keyed(key);
derive.update(exports.normalizeInput(input));
const result = new hash_1.Hash(length);
derive.digest(result);
return result;
}
exports.keyedHash = keyedHash;
//# sourceMappingURL=hash-fn.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-fn.js","sourceRoot":"","sources":["../../ts/browser/hash-fn.ts"],"names":[],"mappings":";;AAAA,6CAAmG;AACnG,iCAA8B;AAC9B,iCAAiC;AAOjC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;GAEG;AACU,QAAA,cAAc,GAAG,CAAC,KAAgB,EAAc,EAAE,CAC7D,sBAAY,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE9E;;GAEG;AACH,SAAgB,IAAI,CAClB,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,IAAI,WAAI,CAAC,MAAM,CAAC,CAAC;IAChC,cAAO,EAAE,CAAC,IAAI,CAAC,sBAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAPD,oBAOC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,OAAe,EACf,QAAmB,EACnB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,cAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,WAAI,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,8BAUC;AAED;;GAEG;AACH,SAAgB,SAAS,CACvB,GAAe,EACf,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;KAClF;IAED,MAAM,MAAM,GAAG,cAAO,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,WAAI,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAdD,8BAcC"}

View file

@ -0,0 +1,31 @@
import { BaseHash as BaseHasher } from '../base/index';
import { HashInput } from './hash-fn';
import { BrowserEncoding } from './encoding';
import { IBaseHashOptions } from '../base/hash-fn';
import { BrowserHashReader } from './hash-reader';
import { IInternalReader } from '../base/hash-reader';
import { Hash } from './hash';
/**
* @inheritdoc
*/
export declare class BrowserHasher extends BaseHasher<Hash, IInternalReader, BrowserHashReader> {
/**
* @inheritdoc
* @override
*/
update(data: HashInput): this;
/**
* Returns a digest of the hash with the given encoding.
*/
digest(options?: IBaseHashOptions): Hash;
digest(encoding: undefined, options: IBaseHashOptions): Hash;
digest(encoding: BrowserEncoding, options?: IBaseHashOptions): string;
}
/**
* A Node.js crypto-like createHash method.
*/
export declare const createHash: () => BrowserHasher;
/**
* A Node.js crypto-like createHash method.
*/
export declare const createKeyed: (key: Uint8Array) => BrowserHasher;

View file

@ -0,0 +1,44 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../base/index");
const hash_fn_1 = require("./hash-fn");
const encoding_1 = require("./encoding");
const hash_reader_1 = require("./hash-reader");
const hash_1 = require("./hash");
const wasm_1 = require("./wasm");
/**
* @inheritdoc
*/
class BrowserHasher extends index_1.BaseHash {
/**
* @inheritdoc
* @override
*/
update(data) {
return super.update(hash_fn_1.normalizeInput(data));
}
digest(encoding, options) {
let resolvedOpts;
let resolvedEnc;
if (encoding && typeof encoding === 'object') {
resolvedOpts = encoding;
resolvedEnc = undefined;
}
else {
resolvedOpts = options;
resolvedEnc = encoding;
}
const result = super.digest(resolvedOpts);
return resolvedEnc ? encoding_1.mustGetEncoder(resolvedEnc)(result) : result;
}
}
exports.BrowserHasher = BrowserHasher;
/**
* A Node.js crypto-like createHash method.
*/
exports.createHash = () => new BrowserHasher(wasm_1.getWasm().create_hasher(), l => new hash_1.Hash(l), r => new hash_reader_1.BrowserHashReader(r));
/**
* A Node.js crypto-like createHash method.
*/
exports.createKeyed = (key) => new BrowserHasher(wasm_1.getWasm().create_keyed(key), l => new hash_1.Hash(l), r => new hash_reader_1.BrowserHashReader(r));
//# sourceMappingURL=hash-instance.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-instance.js","sourceRoot":"","sources":["../../ts/browser/hash-instance.ts"],"names":[],"mappings":";;AAAA,yCAAuD;AACvD,uCAAsD;AACtD,yCAA6D;AAE7D,+CAAkD;AAElD,iCAA8B;AAC9B,iCAAiC;AAEjC;;GAEG;AACH,MAAa,aAAc,SAAQ,gBAAoD;IACrF;;;OAGG;IACI,MAAM,CAAC,IAAe;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,wBAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAQM,MAAM,CACX,QAA6C,EAC7C,OAA0B;QAE1B,IAAI,YAA0C,CAAC;QAC/C,IAAI,WAAwC,CAAC;QAC7C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC5C,YAAY,GAAG,QAAQ,CAAC;YACxB,WAAW,GAAG,SAAS,CAAC;SACzB;aAAM;YACL,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,GAAG,QAAQ,CAAC;SACxB;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,OAAO,WAAW,CAAC,CAAC,CAAC,yBAAc,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;CACF;AAhCD,sCAgCC;AAED;;GAEG;AACU,QAAA,UAAU,GAAG,GAAG,EAAE,CAC7B,IAAI,aAAa,CACf,cAAO,EAAE,CAAC,aAAa,EAAE,EACzB,CAAC,CAAC,EAAE,CAAC,IAAI,WAAI,CAAC,CAAC,CAAC,EAChB,CAAC,CAAC,EAAE,CAAC,IAAI,+BAAiB,CAAC,CAAC,CAAC,CAC9B,CAAC;AAEJ;;GAEG;AACU,QAAA,WAAW,GAAG,CAAC,GAAe,EAAE,EAAE,CAC7C,IAAI,aAAa,CACf,cAAO,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAC3B,CAAC,CAAC,EAAE,CAAC,IAAI,WAAI,CAAC,CAAC,CAAC,EAChB,CAAC,CAAC,EAAE,CAAC,IAAI,+BAAiB,CAAC,CAAC,CAAC,CAC9B,CAAC"}

View file

@ -0,0 +1,17 @@
import { BaseHashReader } from '../base/hash-reader';
import { BrowserEncoding } from './encoding';
import { Hash } from './hash';
/**
* A hash reader for WebAssembly targets.
*/
export declare class BrowserHashReader extends BaseHashReader<Hash> {
/**
* Converts first 32 bytes of the hash to a string with the given encoding.
*/
toString(encoding?: BrowserEncoding): string;
/**
* Converts first 32 bytes of the hash to an array.
*/
toArray(): Hash;
protected alloc(bytes: number): Hash;
}

View file

@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_reader_1 = require("../base/hash-reader");
const hash_1 = require("./hash");
const index_1 = require("../base/index");
/**
* A hash reader for WebAssembly targets.
*/
class BrowserHashReader extends hash_reader_1.BaseHashReader {
/**
* Converts first 32 bytes of the hash to a string with the given encoding.
*/
toString(encoding = 'hex') {
return this.toArray().toString(encoding);
}
/**
* Converts first 32 bytes of the hash to an array.
*/
toArray() {
this.position = BigInt(0);
return this.read(index_1.defaultHashLength);
}
alloc(bytes) {
return new hash_1.Hash(bytes);
}
}
exports.BrowserHashReader = BrowserHashReader;
//# sourceMappingURL=hash-reader.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-reader.js","sourceRoot":"","sources":["../../ts/browser/hash-reader.ts"],"names":[],"mappings":";;AAAA,qDAAqD;AAErD,iCAA8B;AAC9B,yCAAkD;AAElD;;GAEG;AACH,MAAa,iBAAkB,SAAQ,4BAAoB;IACzD;;OAEG;IACI,QAAQ,CAAC,WAA4B,KAAK;QAC/C,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,yBAAiB,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,KAAa;QAC3B,OAAO,IAAI,WAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF;AAnBD,8CAmBC"}

View file

@ -0,0 +1,11 @@
import { BrowserEncoding } from './encoding';
/**
* Hash returned from functions in the browser.
*/
export declare class Hash extends Uint8Array {
/**
* A constant-time comparison against the other hash/array.
*/
equals(other: unknown): boolean;
toString(encoding?: BrowserEncoding): string;
}

View file

@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const encoding_1 = require("./encoding");
/**
* Hash returned from functions in the browser.
*/
class Hash extends Uint8Array {
/**
* A constant-time comparison against the other hash/array.
*/
equals(other) {
if (!(other instanceof Uint8Array)) {
return false;
}
if (other.length !== this.length) {
return false;
}
let cmp = 0;
for (let i = 0; i < this.length; i++) {
cmp |= this[i] ^ other[i];
}
return cmp === 0;
}
toString(encoding = 'hex') {
return encoding_1.mustGetEncoder(encoding)(this);
}
}
exports.Hash = Hash;
//# sourceMappingURL=hash.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../ts/browser/hash.ts"],"names":[],"mappings":";;AAAA,yCAA6D;AAE7D;;GAEG;AACH,MAAa,IAAK,SAAQ,UAAU;IAClC;;OAEG;IACI,MAAM,CAAC,KAAc;QAC1B,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE;YAClC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3B;QAED,OAAO,GAAG,KAAK,CAAC,CAAC;IACnB,CAAC;IAEM,QAAQ,CAAC,WAA4B,KAAK;QAC/C,OAAO,yBAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAxBD,oBAwBC"}

View file

@ -0,0 +1,3 @@
export { hash, HashInput, deriveKey, keyedHash } from './hash-fn';
export * from './hash-instance';
export * from '../base/index';

View file

@ -0,0 +1,12 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
var hash_fn_1 = require("./hash-fn");
exports.hash = hash_fn_1.hash;
exports.deriveKey = hash_fn_1.deriveKey;
exports.keyedHash = hash_fn_1.keyedHash;
__export(require("./hash-instance"));
__export(require("../base/index"));
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/browser/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAkE;AAAzD,yBAAA,IAAI,CAAA;AAAa,8BAAA,SAAS,CAAA;AAAE,8BAAA,SAAS,CAAA;AAC9C,qCAAgC;AAChC,mCAA8B"}

View file

@ -0,0 +1,10 @@
import * as rawWasm from '../../dist/wasm/browser/blake3_js';
/**
* Gets the webassembly module provided in provideWasm.
*/
export declare const getWasm: () => typeof rawWasm;
/**
* Sets the webassembly module used for the browser build. This indirection is
* needed to provide compatibility between the "browser" and "browser-async" modes.
*/
export declare const provideWasm: (w: typeof rawWasm) => void;

View file

@ -0,0 +1,20 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
let wasm;
/**
* Gets the webassembly module provided in provideWasm.
*/
exports.getWasm = () => {
if (!wasm) {
throw new Error('BLAKE3 webassembly not loaded. Please import the module via `blake3/browser` or `blake3/browser-async`');
}
return wasm;
};
/**
* Sets the webassembly module used for the browser build. This indirection is
* needed to provide compatibility between the "browser" and "browser-async" modes.
*/
exports.provideWasm = (w) => {
wasm = w;
};
//# sourceMappingURL=wasm.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../ts/browser/wasm.ts"],"names":[],"mappings":";;AAEA,IAAI,IAAoB,CAAC;AAEzB;;GAEG;AACU,QAAA,OAAO,GAAG,GAAG,EAAE;IAC1B,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;KACH;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACU,QAAA,WAAW,GAAG,CAAC,CAAiB,EAAE,EAAE;IAC/C,IAAI,GAAG,CAAC,CAAC;AACX,CAAC,CAAC"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,49 @@
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const ts = __importStar(require("typescript"));
const fs_1 = require("fs");
const path_1 = require("path");
/**
* Script that adds .js extension to imports so that it's compatible with plain
* browser/non-webpack bundlers. TS doesn't support this natively yet.
* @see https://github.com/microsoft/TypeScript/issues/16577
*/
function processFile(file) {
let source = fs_1.readFileSync(file, 'utf-8');
const program = ts.createSourceFile(path_1.basename(file), source, ts.ScriptTarget.ES2015, true);
let offset = 0;
const process = (node) => {
if ((!ts.isImportDeclaration(node) && !ts.isExportDeclaration(node)) || !node.moduleSpecifier) {
return ts.forEachChild(node, process);
}
const specifier = node.moduleSpecifier;
if (path_1.extname(specifier.getText()) === '') {
const idx = specifier.end + offset - 1;
source = source.slice(0, idx) + '.js' + source.slice(idx);
offset += 3;
}
};
process(program);
fs_1.writeFileSync(file, source);
}
function processDir(dir) {
const entries = fs_1.readdirSync(dir);
for (const entry of entries) {
const path = path_1.join(dir, entry);
if (path.endsWith('.js')) {
processFile(path);
}
else if (fs_1.statSync(path).isDirectory()) {
processDir(path);
}
}
}
processDir(path_1.resolve(__dirname, '..', '..', 'esm'));
//# sourceMappingURL=add-js-extensions.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"add-js-extensions.js","sourceRoot":"","sources":["../../ts/build/add-js-extensions.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAiC;AACjC,2BAAwE;AACxE,+BAAwD;AAExD;;;;GAIG;AAEH,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,MAAM,GAAG,iBAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,eAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE1F,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,CAAC,IAAa,EAAQ,EAAE;QACtC,IAAI,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAC7F,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACvC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,IAAI,cAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,IAAI,CAAC,CAAC;SACb;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjB,kBAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,OAAO,GAAG,gBAAW,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,IAAI,GAAG,WAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC,CAAC;SACnB;aAAM,IAAI,aAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,CAAC;SAClB;KACF;AACH,CAAC;AAED,UAAU,CAAC,cAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,88 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const js_yaml_1 = require("js-yaml");
const node_fetch_1 = __importDefault(require("node-fetch"));
const path_1 = require("path");
const minVersion = 64;
(() => __awaiter(void 0, void 0, void 0, function* () {
const res = yield node_fetch_1.default('https://nodejs.org/dist/index.json');
if (!res.ok) {
throw new Error(`${res.status} error from Node.js releases page`);
}
const releases = yield res.json();
const buildVersion = new Map();
const versionMap = {};
for (const release of releases) {
const moduleVersion = Number(release.modules);
if (!moduleVersion || moduleVersion < minVersion) {
break;
}
versionMap[release.version] = Number(moduleVersion);
if (buildVersion.has(moduleVersion)) {
continue;
}
buildVersion.set(moduleVersion, release.version);
}
const buildYaml = {
name: 'Generate Binaries',
on: {
push: {
branches: ['generate-binary'],
},
},
jobs: {
build: {
name: 'Build',
'runs-on': '${{ matrix.os }}',
strategy: {
matrix: { os: ['macos-latest', 'ubuntu-latest', 'windows-latest'] },
},
steps: [
{ uses: 'actions/checkout@master' },
{ run: 'mkdir dist' },
{
uses: 'actions-rs/toolchain@v1',
with: { target: 'wasm32-unknown-unknown', toolchain: 'nightly' },
},
...[...buildVersion.entries()]
.map(([moduleVersion, nodeVersion], i) => [
{ uses: 'actions/setup-node@v1', with: { 'node-version': nodeVersion } },
{
// See: https://github.com/actions/setup-node/issues/68
shell: 'powershell',
name: 'patch node-gyp for VS 2019',
run: 'npm install --global node-gyp@latest\r\nnpm prefix -g | % {npm config set node_gyp "$_\\node_modules\\node-gyp\\bin\\node-gyp.js"}',
if: "matrix.os == 'windows-latest'",
},
i === 0
? { run: 'npm install neon-cli rimraf' }
: { run: './node_modules/.bin/rimraf rs/native/target' },
{ run: '../node_modules/.bin/neon build --release', 'working-directory': 'rs' },
{ run: `mv rs/native/index.node dist/\${{ matrix.os }}-${moduleVersion}.node` },
])
.reduce((acc, v) => [...acc, ...v], []),
{
uses: 'actions/upload-artifact@v1',
with: { name: 'dist', path: 'dist' },
},
],
},
},
};
fs_1.writeFileSync(path_1.join(__dirname, '..', '..', '.github', 'workflows', 'build-neon.yml'), js_yaml_1.dump(buildYaml));
fs_1.writeFileSync(path_1.join(__dirname, '..', '..', 'targets.json'), JSON.stringify(versionMap));
}))();
//# sourceMappingURL=generate-tasks.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"generate-tasks.js","sourceRoot":"","sources":["../../ts/build/generate-tasks.ts"],"names":[],"mappings":"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"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,100 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const https_1 = require("https");
const path_1 = require("path");
const stream_1 = require("stream");
const versions_1 = require("./versions");
/**
* Post-install script. Downloads the binary for the current Node.js version
* from the Gitub releases page, if it's available.
*/
const builtPlatforms = {
win32: 'windows-latest',
linux: 'ubuntu-latest',
darwin: 'macos-latest',
};
const { version } = require('../../package.json');
const repoUrl = process.env.BLAKE3_REPO_URL || 'https://github.com/connor4312/blake3';
const targets = require('../../targets.json');
const bindingPath = path_1.join(__dirname, '..', 'native.node');
function install() {
return __awaiter(this, void 0, void 0, function* () {
const current = versions_1.parseVersion(process.version);
const api = getBestAbiVersion(current);
if (!api) {
console.error('Your Node.js release is out of LTS and BLAKE3 bindings are not built for it. Update it to use native BLAKE3 bindings.');
return fallback();
}
const platform = builtPlatforms[process.platform];
if (!platform) {
console.error(`BLAKE3 bindings are not built for your platform (${process.platform})`);
return fallback();
}
console.log(`Retrieving native BLAKE3 bindings for Node ${api.nodeVersion} on ${process.platform}...`);
yield download(`${repoUrl}/releases/download/v${version}/${platform}-${api.abiVersion}.node`);
try {
require(bindingPath);
}
catch (e) {
console.log(`Error trying to import bindings: ${e.message}`);
return fallback();
}
useNativeImport();
console.log('BLAKE3 bindings retrieved');
});
}
function getBestAbiVersion(current) {
for (const targetVersion of Object.keys(targets)) {
const parsed = versions_1.parseVersion(targetVersion);
if (versions_1.compareVersion(current, parsed) >= 0) {
return { nodeVersion: targetVersion, abiVersion: targets[targetVersion] };
}
}
return undefined;
}
function fallback() {
console.error('BLAKE3 will use slower WebAssembly bindings when required in Node.js');
}
function download(url) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise(resolve => {
const onError = (err) => {
console.error(`Could not download binding from ${url}: ${err.stack || err.message}`);
resolve(false);
};
const req = https_1.get(url, res => {
if (res.headers.location) {
resolve(download(res.headers.location));
return;
}
if (!res.statusCode || res.statusCode >= 300) {
console.error(`Unexpected ${res.statusCode} from ${url}`);
resolve(false);
return;
}
stream_1.pipeline(res, fs_1.createWriteStream(bindingPath), err => (err ? onError(err) : resolve(true)));
});
req.on('error', onError);
});
});
}
function useNativeImport() {
const indexFile = path_1.join(__dirname, '..', 'index.js');
const contents = fs_1.readFileSync(indexFile, 'utf-8');
fs_1.writeFileSync(indexFile, contents.replace('"./node"', '"./node-native"'));
}
install().catch(err => {
console.error(`There was an uncaught error installing native bindings: ${err.stack}`);
fallback();
});
//# sourceMappingURL=install.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../ts/build/install.ts"],"names":[],"mappings":"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"}

View file

@ -0,0 +1,14 @@
export declare const minNodeVersion = 10;
/**
* @hidden
*/
export interface IVersion {
major: number;
minor: number;
patch: number;
}
/**
* @hidden
*/
export declare const parseVersion: (version: string) => IVersion;
export declare const compareVersion: (a: IVersion, b: IVersion) => number;

View file

@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.minNodeVersion = 10;
/**
* @hidden
*/
exports.parseVersion = (version) => {
const [, major, minor, patch] = /^v([0-9]+)\.([0-9]+)\.([0-9]+)/.exec(version) || [];
return { major: Number(major), minor: Number(minor), patch: Number(patch) };
};
exports.compareVersion = (a, b) => a.major - b.major || a.minor - b.minor || a.patch - b.patch;
//# sourceMappingURL=versions.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../ts/build/versions.ts"],"names":[],"mappings":";;AAAa,QAAA,cAAc,GAAG,EAAE,CAAC;AAWjC;;GAEG;AACU,QAAA,YAAY,GAAG,CAAC,OAAe,EAAY,EAAE;IACxD,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACrF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEW,QAAA,cAAc,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CACzD,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC"}

View file

@ -0,0 +1 @@
export * from './node';

19
cool-dawn-3d3b/node_modules/blake3-wasm/dist/index.js generated vendored Normal file
View file

@ -0,0 +1,19 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
// Bunlers add the `process.browser` flag to indicate the build enviroment.
// Throw a verbose error if we see people bundling the Node.js build in their
// browser, since it probably won't work for them (or at least not give them)
// nice tree shaking and such.
//
// Note that we don't check the presence of window/document, since those can
// be emulated in common test scenarios (e.g. jest's default setup with jsdom).
if (process.browser) {
throw new Error('You tried to import the Node.js version of blake3, instead of the browser ' +
'version, in your build. You can fix this by importing "blake3/browser" ' +
'instead of "blake3"');
}
__export(require("./node"));
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;;;AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,8BAA8B;AAC9B,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,IAAK,OAAe,CAAC,OAAO,EAAE;IAC5B,MAAM,IAAI,KAAK,CACb,4EAA4E;QAC1E,yEAAyE;QACzE,qBAAqB,CACxB,CAAC;CACH;AAED,4BAAuB"}

View file

@ -0,0 +1,21 @@
/// <reference types="node" />
import { HashInput } from '../node/hash-fn';
import { IBaseHashOptions } from '../base/hash-fn';
/**
* @hidden
*/
export declare const normalizeInput: (input: HashInput, encoding?: "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "latin1" | "binary" | "hex" | undefined) => Buffer;
/**
* Returns a blake3 hash of the input, returning the binary hash data.
*/
export declare function hash(input: HashInput, { length }?: IBaseHashOptions): Buffer | string;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
export declare function deriveKey(context: string, material: HashInput, { length }?: IBaseHashOptions): Buffer;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
export declare function keyedHash(key: Buffer, input: HashInput, { length }?: IBaseHashOptions): Buffer;

View file

@ -0,0 +1,51 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const native_1 = __importDefault(require("./native"));
const hash_fn_1 = require("../base/hash-fn");
/**
* @hidden
*/
exports.normalizeInput = (input, encoding) => {
if (input instanceof Buffer) {
return input;
}
if (typeof input === 'string') {
return Buffer.from(input, encoding);
}
return Buffer.from(input);
};
/**
* Returns a blake3 hash of the input, returning the binary hash data.
*/
function hash(input, { length = hash_fn_1.defaultHashLength } = {}) {
return native_1.default.hash(exports.normalizeInput(input), length);
}
exports.hash = hash;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
function deriveKey(context, material, { length = hash_fn_1.defaultHashLength } = {}) {
const hasher = new native_1.default.Hasher(undefined, context);
hasher.update(exports.normalizeInput(material));
const result = Buffer.alloc(length);
hasher.digest(result);
return result;
}
exports.deriveKey = deriveKey;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
function keyedHash(key, input, { length = hash_fn_1.defaultHashLength } = {}) {
const hasher = new native_1.default.Hasher(key);
hasher.update(exports.normalizeInput(input));
const result = Buffer.alloc(length);
hasher.digest(result);
return result;
}
exports.keyedHash = keyedHash;
//# sourceMappingURL=hash-fn.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-fn.js","sourceRoot":"","sources":["../../ts/node-native/hash-fn.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAE9B,6CAAsE;AAEtE;;GAEG;AACU,QAAA,cAAc,GAAG,CAAC,KAAgB,EAAE,QAAyB,EAAU,EAAE;IACpF,IAAI,KAAK,YAAY,MAAM,EAAE;QAC3B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACrC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF;;GAEG;AACH,SAAgB,IAAI,CAClB,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,OAAO,gBAAM,CAAC,IAAI,CAAC,sBAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AALD,oBAKC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,OAAe,EACf,QAAmB,EACnB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,8BAUC;AAED;;GAEG;AACH,SAAgB,SAAS,CACvB,GAAW,EACX,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,8BAUC"}

View file

@ -0,0 +1,15 @@
/// <reference types="node" />
import { INativeReader } from './native';
import { NodeHash } from '../node/hash-instance';
/**
* A Node.js crypto-like createHash method.
*/
export declare const createHash: () => NodeHash<INativeReader>;
/**
* Construct a new Hasher for the keyed hash function.
*/
export declare const createKeyed: (key: Buffer) => NodeHash<INativeReader>;
/**
* Construct a new Hasher for the key derivation function.
*/
export declare const createDeriveKey: (context: string) => NodeHash<INativeReader>;

View file

@ -0,0 +1,31 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const native_1 = __importDefault(require("./native"));
const hash_instance_1 = require("../node/hash-instance");
const hash_reader_1 = require("../node/hash-reader");
// A buffer we reuse for sending bigints. set_position is synchronous, so
// this just saves creating garbage.
const bigIntBuffer = Buffer.alloc(8);
const readerFactory = (r) => new hash_reader_1.NodeHashReader({
fill: target => r.fill(target),
set_position: position => {
bigIntBuffer.writeBigUInt64BE(position);
r.set_position(bigIntBuffer);
},
});
/**
* A Node.js crypto-like createHash method.
*/
exports.createHash = () => new hash_instance_1.NodeHash(new native_1.default.Hasher(), readerFactory);
/**
* Construct a new Hasher for the keyed hash function.
*/
exports.createKeyed = (key) => new hash_instance_1.NodeHash(new native_1.default.Hasher(key), readerFactory);
/**
* Construct a new Hasher for the key derivation function.
*/
exports.createDeriveKey = (context) => new hash_instance_1.NodeHash(new native_1.default.Hasher(undefined, context), readerFactory);
//# sourceMappingURL=hash-instance.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-instance.js","sourceRoot":"","sources":["../../ts/node-native/hash-instance.ts"],"names":[],"mappings":";;;;;AAAA,sDAAiD;AACjD,yDAAiD;AACjD,qDAAqD;AAErD,yEAAyE;AACzE,oCAAoC;AACpC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErC,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE,CACzC,IAAI,4BAAc,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,EAAE;QACvB,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC,CAAC;AAEL;;GAEG;AACU,QAAA,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,wBAAQ,CAAC,IAAI,gBAAM,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;AAEjF;;GAEG;AACU,QAAA,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,wBAAQ,CAAC,IAAI,gBAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAEhG;;GAEG;AACU,QAAA,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CACjD,IAAI,wBAAQ,CAAC,IAAI,gBAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC"}

View file

@ -0,0 +1,5 @@
export { HashInput } from '../node/hash-fn';
export { hash, deriveKey, keyedHash } from './hash-fn';
export * from '../node/hash-reader';
export * from './hash-instance';
export * from '../base/index';

View file

@ -0,0 +1,13 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
var hash_fn_1 = require("./hash-fn");
exports.hash = hash_fn_1.hash;
exports.deriveKey = hash_fn_1.deriveKey;
exports.keyedHash = hash_fn_1.keyedHash;
__export(require("../node/hash-reader"));
__export(require("./hash-instance"));
__export(require("../base/index"));
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/node-native/index.ts"],"names":[],"mappings":";;;;;AACA,qCAAuD;AAA9C,yBAAA,IAAI,CAAA;AAAE,8BAAA,SAAS,CAAA;AAAE,8BAAA,SAAS,CAAA;AACnC,yCAAoC;AACpC,qCAAgC;AAChC,mCAA8B"}

View file

@ -0,0 +1,16 @@
/// <reference types="node" />
import { IInternalHash } from '../base/index';
export interface INativeReader {
free?(): void;
fill(target: Uint8Array): void;
set_position(position: Buffer): void;
}
export interface INativeHash extends IInternalHash<INativeReader> {
new (hashKey?: Buffer, context?: string): INativeHash;
}
export interface INativeModule {
Hasher: INativeHash;
hash(input: Buffer, length: number): Buffer;
}
declare const native: INativeModule;
export default native;

View file

@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const native = require('../native.node');
exports.default = native;
//# sourceMappingURL=native.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../ts/node-native/native.ts"],"names":[],"mappings":";;AAiBA,MAAM,MAAM,GAAkB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAExD,kBAAe,MAAM,CAAC"}

View file

@ -0,0 +1 @@
export {};

View file

@ -0,0 +1,207 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const wasm = __importStar(require("./node"));
const native = __importStar(require("./node-native"));
const chai_1 = require("chai");
const test_helpers_1 = require("./base/test-helpers");
const stream_buffers_1 = require("stream-buffers");
const hash_reader_1 = require("./base/hash-reader");
function suite({ hash, createHash, keyedHash, deriveKey, createDeriveKey, createKeyed, }) {
describe('encoding', () => {
it('hashes a buffer', () => {
chai_1.expect(hash(Buffer.from(test_helpers_1.inputs.hello.input))).to.deep.equal(test_helpers_1.inputs.hello.hash);
});
it('hashes a string', () => {
chai_1.expect(hash(test_helpers_1.inputs.hello.input)).to.deep.equal(test_helpers_1.inputs.hello.hash);
});
it('hashes an arraybuffer', () => {
const buf = Buffer.from(test_helpers_1.inputs.hello.input);
chai_1.expect(hash(new Uint8Array(buf).buffer)).to.deep.equal(test_helpers_1.inputs.hello.hash);
});
it('customizes the output length', () => {
chai_1.expect(hash(test_helpers_1.inputs.hello.input, { length: 16 })).to.deep.equal(test_helpers_1.inputs.hello.hash.slice(0, 16));
});
});
describe('memory-safety (#5)', () => {
it('hash', () => {
const hashA = hash('hello');
const hashB = hash('goodbye');
chai_1.expect(hashA.toString('hex')).to.equal('ea8f163db38682925e4491c5e58d4bb3506ef8c14eb78a86e908c5624a67200f');
chai_1.expect(hashB.toString('hex')).to.equal('f94a694227c5f31a07551908ad5fb252f5f0964030df5f2f200adedfae4d9b69');
});
it('hasher', () => {
const hasherA = createHash();
const hasherB = createHash();
hasherA.update('hel');
hasherB.update('good');
hasherA.update('lo');
hasherB.update('bye');
const hashA = hasherA.digest();
const hashB = hasherB.digest();
chai_1.expect(hashA.toString('hex')).to.equal('ea8f163db38682925e4491c5e58d4bb3506ef8c14eb78a86e908c5624a67200f');
chai_1.expect(hashB.toString('hex')).to.equal('f94a694227c5f31a07551908ad5fb252f5f0964030df5f2f200adedfae4d9b69');
});
});
describe('hasher', () => {
it('digests', callback => {
const buffer = new stream_buffers_1.ReadableStreamBuffer();
buffer.put(Buffer.from(test_helpers_1.inputs.large.input));
buffer.stop();
const hash = createHash();
buffer.on('data', b => hash.update(b));
buffer.on('end', () => {
const actual = hash.digest();
chai_1.expect(actual).to.deep.equal(test_helpers_1.inputs.large.hash);
callback();
});
});
it('is a transform stream', callback => {
const buffer = new stream_buffers_1.ReadableStreamBuffer();
buffer.put(Buffer.from(test_helpers_1.inputs.large.input));
buffer.stop();
buffer
.pipe(createHash())
.on('error', callback)
.on('data', hash => {
chai_1.expect(hash).to.deep.equal(test_helpers_1.inputs.large.hash);
callback();
});
});
it('customizes the output length', () => {
const hash = createHash();
hash.update(test_helpers_1.inputs.hello.input);
chai_1.expect(hash.digest('hex', { length: 16 })).to.equal(test_helpers_1.inputs.hello.hash.slice(0, 16).toString('hex'));
});
it('throws on write after dispose', () => {
const hash = createHash();
hash.dispose();
chai_1.expect(() => hash.update('')).to.throw(/after dispose/);
});
it('allows taking incremental hashes', () => {
const hasher = createHash();
hasher.update('hel');
const hashA = hasher.digest(undefined, { dispose: false });
const readA = hasher.reader({ dispose: false });
hasher.update('lo');
const hashB = hasher.digest(undefined, { dispose: false });
const readB = hasher.reader({ dispose: false });
const expectedA = Buffer.from('3121c5bb1b9193123447ac7cfda042f67f967e7a8cf5c12e7570e25529746e4a', 'hex');
chai_1.expect(hashA).to.deep.equal(expectedA);
chai_1.expect(readA.toBuffer()).to.deep.equal(expectedA);
chai_1.expect(hashB).to.deep.equal(test_helpers_1.inputs.hello.hash);
chai_1.expect(readB.toBuffer()).to.deep.equal(test_helpers_1.inputs.hello.hash);
hasher.dispose();
readA.dispose();
readB.dispose();
});
});
describe('reader', () => {
let reader;
beforeEach(() => {
const hash = createHash();
hash.update(test_helpers_1.inputs.hello.input);
reader = hash.reader();
});
afterEach(() => reader.dispose());
it('implements toString()', () => {
chai_1.expect(reader.toString('hex')).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
reader.position = BigInt(42);
chai_1.expect(reader.toString('hex')).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
});
it('implements toBuffer()', () => {
chai_1.expect(reader.toBuffer()).to.deep.equal(test_helpers_1.inputs.hello.hash);
reader.position = BigInt(42);
chai_1.expect(reader.toBuffer()).to.deep.equal(test_helpers_1.inputs.hello.hash);
});
it('implements readInto() and advances', () => {
const actual = Buffer.alloc(32);
reader.readInto(actual.slice(0, 10));
reader.readInto(actual.slice(10));
chai_1.expect(actual).to.deep.equal(test_helpers_1.inputs.hello.hash);
chai_1.expect(reader.position).to.equal(BigInt(32));
});
it('implements read() and advances', () => {
const actual = reader.read(32);
chai_1.expect(actual).to.deep.equal(test_helpers_1.inputs.hello.hash);
chai_1.expect(reader.position).to.equal(BigInt(32));
const actualNext = reader.read(16);
chai_1.expect(actualNext).to.deep.equal(test_helpers_1.hello48.slice(32));
chai_1.expect(reader.position).to.equal(BigInt(48));
});
it('manually sets position', () => {
reader.position = BigInt(32);
const actual = reader.read(16);
chai_1.expect(actual).to.deep.equal(test_helpers_1.hello48.slice(32));
});
it('throws if set out of range', () => {
chai_1.expect(() => (reader.position = BigInt(-1))).to.throw(RangeError);
chai_1.expect(() => (reader.position = BigInt('18446744073709551616'))).to.throw(RangeError);
reader.position = hash_reader_1.maxHashBytes - BigInt(1);
chai_1.expect(() => reader.read(2)).to.throw(RangeError);
});
});
describe('original test vectors', () => {
for (const { inputLen, expectedDerive, expectedKeyed, expectedHash } of test_helpers_1.ogTestVectors.cases) {
describe(`${inputLen}`, () => __awaiter(this, void 0, void 0, function* () {
const input = Buffer.alloc(inputLen);
for (let i = 0; i < inputLen; i++) {
input[i] = i % 251;
}
it('hash()', () => {
chai_1.expect(hash(input, { length: expectedHash.length / 2 }).toString('hex')).to.equal(expectedHash);
});
it('deriveKey()', () => {
chai_1.expect(deriveKey(test_helpers_1.ogTestVectors.context, input, { length: expectedDerive.length / 2 }).toString('hex')).to.equal(expectedDerive);
});
it('createDeriveKey()', callback => {
const buffer = new stream_buffers_1.ReadableStreamBuffer();
buffer.put(Buffer.from(input));
buffer.stop();
const hash = createDeriveKey(test_helpers_1.ogTestVectors.context);
buffer.on('data', b => hash.update(b));
buffer.on('end', () => {
const actual = hash.digest({ length: expectedDerive.length / 2 }).toString('hex');
chai_1.expect(actual).to.equal(expectedDerive);
callback();
});
});
it('keyedHash()', () => {
chai_1.expect(keyedHash(Buffer.from(test_helpers_1.ogTestVectors.key), input, {
length: expectedKeyed.length / 2,
}).toString('hex')).to.equal(expectedKeyed);
});
it('createKeyed()', callback => {
const buffer = new stream_buffers_1.ReadableStreamBuffer();
buffer.put(Buffer.from(input));
buffer.stop();
const hash = createKeyed(Buffer.from(test_helpers_1.ogTestVectors.key));
buffer.on('data', b => hash.update(b));
buffer.on('end', () => {
const actual = hash.digest({ length: expectedDerive.length / 2 }).toString('hex');
chai_1.expect(actual).to.equal(expectedKeyed);
callback();
});
});
}));
}
});
}
describe('node.js wasm', () => suite(wasm));
describe('node.js native', () => suite(native));
//# sourceMappingURL=node.test.js.map

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,24 @@
/// <reference types="node" />
import { BaseHashInput, IBaseHashOptions } from '../base/hash-fn';
/**
* Input used for node-based hashes.
*/
export declare type HashInput = BaseHashInput | string;
/**
* @hidden
*/
export declare const normalizeInput: (input: HashInput, encoding?: "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "latin1" | "binary" | "hex" | undefined) => Uint8Array;
/**
* Returns a blake3 hash of the input, returning the binary hash data.
*/
export declare function hash(input: HashInput, { length }?: IBaseHashOptions): Buffer | string;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
export declare function deriveKey(context: string, material: HashInput, { length }?: IBaseHashOptions): Buffer;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
export declare function keyedHash(key: Buffer, input: HashInput, { length }?: IBaseHashOptions): Buffer;

View file

@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_fn_1 = require("../base/hash-fn");
const blake3_js_1 = require("../../dist/wasm/nodejs/blake3_js");
/**
* @hidden
*/
exports.normalizeInput = (input, encoding) => hash_fn_1.inputToArray(typeof input === 'string' ? Buffer.from(input, encoding) : input);
/**
* Returns a blake3 hash of the input, returning the binary hash data.
*/
function hash(input, { length = hash_fn_1.defaultHashLength } = {}) {
const result = Buffer.alloc(length);
blake3_js_1.hash(exports.normalizeInput(input), result);
return result;
}
exports.hash = hash;
/**
* Given cryptographic key material and a context string, services a subkey of
* any length. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.derive_key.html}
* for more information.
*/
function deriveKey(context, material, { length = hash_fn_1.defaultHashLength } = {}) {
const derive = blake3_js_1.create_derive(context);
derive.update(exports.normalizeInput(material));
const result = Buffer.alloc(length);
derive.digest(result);
return result;
}
exports.deriveKey = deriveKey;
/**
* The keyed hash function. See {@link https://docs.rs/blake3/0.1.3/blake3/fn.keyed_hash.html}.
*/
function keyedHash(key, input, { length = hash_fn_1.defaultHashLength } = {}) {
if (key.length !== 32) {
throw new Error(`key provided to keyedHash must be 32 bytes, got ${key.length}`);
}
const derive = blake3_js_1.create_keyed(key);
derive.update(exports.normalizeInput(input));
const result = Buffer.alloc(length);
derive.digest(result);
return result;
}
exports.keyedHash = keyedHash;
//# sourceMappingURL=hash-fn.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-fn.js","sourceRoot":"","sources":["../../ts/node/hash-fn.ts"],"names":[],"mappings":";;AAAA,6CAAmG;AACnG,gEAI0C;AAO1C;;GAEG;AACU,QAAA,cAAc,GAAG,CAAC,KAAgB,EAAE,QAAyB,EAAc,EAAE,CACxF,sBAAY,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEjF;;GAEG;AACH,SAAgB,IAAI,CAClB,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,gBAAO,CAAC,sBAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAPD,oBAOC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,OAAe,EACf,QAAmB,EACnB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,MAAM,MAAM,GAAG,yBAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,8BAUC;AAED;;GAEG;AACH,SAAgB,SAAS,CACvB,GAAW,EACX,KAAgB,EAChB,EAAE,MAAM,GAAG,2BAAiB,KAAuB,EAAE;IAErD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;KAClF;IAED,MAAM,MAAM,GAAG,wBAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAdD,8BAcC"}

View file

@ -0,0 +1,75 @@
/// <reference types="node" />
import { HashInput } from './hash-fn';
import { IHasher, IInternalHash, IHasherDigestOptions } from '../base/index';
import { Transform, TransformCallback } from 'stream';
import { IBaseHashOptions } from '../base/hash-fn';
import { NodeHashReader } from './hash-reader';
export interface INodeHash extends IHasher<Buffer> {
/**
* @inheritdoc
* @override
*/
update(data: HashInput, encoding?: BufferEncoding): this;
/**
* @inheritdoc
* @override
*/
digest(options?: IBaseHashOptions): Buffer;
/**
* Returns a digest of the hash with the given set of hash options.
*/
digest(encoding: undefined, options: IBaseHashOptions): Buffer;
/**
* Returns a digest of the hash with the given encoding.
*/
digest(encoding: BufferEncoding, options?: IBaseHashOptions): string;
}
/**
* @inheritdoc
*/
export declare class NodeHash<Reader> extends Transform implements IHasher<Buffer> {
private readonly hash;
constructor(implementation: IInternalHash<Reader>, getReader: (r: Reader) => NodeHashReader);
/**
* @reader
*/
reader(options?: {
dispose?: boolean;
}): NodeHashReader;
/**
* @inheritdoc
*/
update(data: HashInput, encoding?: BufferEncoding): this;
/**
* @inheritdoc
*/
digest(encoding?: IHasherDigestOptions): Buffer;
digest(encoding: undefined, options: IHasherDigestOptions): Buffer;
digest(encoding: BufferEncoding, options?: IHasherDigestOptions): string;
/**
* @inheritdoc
*/
dispose(): void;
/**
* @inheritdoc
* @hidden
*/
_transform(chunk: Buffer | string, encoding: string, callback: TransformCallback): void;
/**
* @inheritdoc
* @hidden
*/
_flush(callback: TransformCallback): void;
}
/**
* A Node.js crypto-like createHash method.
*/
export declare const createHash: () => NodeHash<import("../../dist/wasm/nodejs/blake3_js").HashReader>;
/**
* Construct a new Hasher for the keyed hash function.
*/
export declare const createKeyed: (key: Buffer) => NodeHash<import("../../dist/wasm/nodejs/blake3_js").HashReader>;
/**
* Construct a new Hasher for the key derivation function.
*/
export declare const createDeriveKey: (context: string) => NodeHash<import("../../dist/wasm/nodejs/blake3_js").HashReader>;

View file

@ -0,0 +1,79 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_fn_1 = require("./hash-fn");
const index_1 = require("../base/index");
const stream_1 = require("stream");
const wasm_1 = require("./wasm");
const hash_reader_1 = require("./hash-reader");
/**
* @inheritdoc
*/
class NodeHash extends stream_1.Transform {
constructor(implementation, getReader) {
super();
this.hash = new index_1.BaseHash(implementation, l => Buffer.alloc(l), getReader);
}
/**
* @reader
*/
reader(options) {
const reader = this.hash.reader(options);
return reader;
}
/**
* @inheritdoc
*/
update(data, encoding) {
this.hash.update(hash_fn_1.normalizeInput(data, encoding));
return this;
}
digest(encoding, options) {
let resolvedOpts;
let resolvedEnc;
if (encoding && typeof encoding === 'object') {
resolvedOpts = encoding;
resolvedEnc = undefined;
}
else {
resolvedOpts = options;
resolvedEnc = encoding;
}
const result = this.hash.digest(resolvedOpts);
return resolvedEnc ? result.toString(resolvedEnc) : result;
}
/**
* @inheritdoc
*/
dispose() {
this.hash.dispose();
}
/**
* @inheritdoc
* @hidden
*/
_transform(chunk, encoding, callback) {
this.update(chunk, encoding);
callback();
}
/**
* @inheritdoc
* @hidden
*/
_flush(callback) {
callback(null, this.digest());
}
}
exports.NodeHash = NodeHash;
/**
* A Node.js crypto-like createHash method.
*/
exports.createHash = () => new NodeHash(wasm_1.getWasm().create_hasher(), r => new hash_reader_1.NodeHashReader(r));
/**
* Construct a new Hasher for the keyed hash function.
*/
exports.createKeyed = (key) => new NodeHash(wasm_1.getWasm().create_keyed(key), r => new hash_reader_1.NodeHashReader(r));
/**
* Construct a new Hasher for the key derivation function.
*/
exports.createDeriveKey = (context) => new NodeHash(wasm_1.getWasm().create_derive(context), r => new hash_reader_1.NodeHashReader(r));
//# sourceMappingURL=hash-instance.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-instance.js","sourceRoot":"","sources":["../../ts/node/hash-instance.ts"],"names":[],"mappings":";;AAAA,uCAAsD;AACtD,yCAAuF;AACvF,mCAAsD;AAEtD,iCAAiC;AACjC,+CAA+C;AA0B/C;;GAEG;AACH,MAAa,QAAiB,SAAQ,kBAAS;IAG7C,YAAY,cAAqC,EAAE,SAAwC;QACzF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,IAAe,EAAE,QAAyB;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAQM,MAAM,CACX,QAAgD,EAChD,OAA8B;QAE9B,IAAI,YAA8C,CAAC;QACnD,IAAI,WAAuC,CAAC;QAC5C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC5C,YAAY,GAAG,QAAQ,CAAC;YACxB,WAAW,GAAG,SAAS,CAAC;SACzB;aAAM;YACL,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,GAAG,QAAQ,CAAC;SACxB;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,KAAsB,EAAE,QAAgB,EAAE,QAA2B;QAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAA0B,CAAC,CAAC;QAC/C,QAAQ,EAAE,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAA2B;QAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAvED,4BAuEC;AAED;;GAEG;AACU,QAAA,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAO,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,4BAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG;;GAEG;AACU,QAAA,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CACzC,IAAI,QAAQ,CAAC,cAAO,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,4BAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE;;GAEG;AACU,QAAA,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CACjD,IAAI,QAAQ,CAAC,cAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,4BAAc,CAAC,CAAC,CAAC,CAAC,CAAC"}

View file

@ -0,0 +1,16 @@
/// <reference types="node" />
import { BaseHashReader } from '../base/hash-reader';
/**
* A hash reader for WebAssembly targets.
*/
export declare class NodeHashReader extends BaseHashReader<Buffer> {
/**
* Converts first 32 bytes of the hash to a string with the given encoding.
*/
toString(encoding?: BufferEncoding): string;
/**
* Converts first 32 bytes of the hash to an array.
*/
toBuffer(): Buffer;
protected alloc(bytes: number): Buffer;
}

View file

@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_reader_1 = require("../base/hash-reader");
const hash_fn_1 = require("../base/hash-fn");
/**
* A hash reader for WebAssembly targets.
*/
class NodeHashReader extends hash_reader_1.BaseHashReader {
/**
* Converts first 32 bytes of the hash to a string with the given encoding.
*/
toString(encoding = 'hex') {
return this.toBuffer().toString(encoding);
}
/**
* Converts first 32 bytes of the hash to an array.
*/
toBuffer() {
this.position = BigInt(0);
return this.read(hash_fn_1.defaultHashLength);
}
alloc(bytes) {
return Buffer.alloc(bytes);
}
}
exports.NodeHashReader = NodeHashReader;
//# sourceMappingURL=hash-reader.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"hash-reader.js","sourceRoot":"","sources":["../../ts/node/hash-reader.ts"],"names":[],"mappings":";;AAAA,qDAAqD;AACrD,6CAAoD;AAEpD;;GAEG;AACH,MAAa,cAAe,SAAQ,4BAAsB;IACxD;;OAEG;IACI,QAAQ,CAAC,WAA2B,KAAK;QAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,2BAAiB,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,KAAa;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAnBD,wCAmBC"}

View file

@ -0,0 +1,4 @@
export { hash, deriveKey, keyedHash, HashInput } from './hash-fn';
export * from './hash-instance';
export * from './hash-reader';
export * from '../base/index';

View file

@ -0,0 +1,13 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
var hash_fn_1 = require("./hash-fn");
exports.hash = hash_fn_1.hash;
exports.deriveKey = hash_fn_1.deriveKey;
exports.keyedHash = hash_fn_1.keyedHash;
__export(require("./hash-instance"));
__export(require("./hash-reader"));
__export(require("../base/index"));
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/node/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAkE;AAAzD,yBAAA,IAAI,CAAA;AAAE,8BAAA,SAAS,CAAA;AAAE,8BAAA,SAAS,CAAA;AACnC,qCAAgC;AAChC,mCAA8B;AAC9B,mCAA8B"}

View file

@ -0,0 +1,6 @@
import * as wasm from '../../dist/wasm/nodejs/blake3_js';
/**
* Lazyily get the WebAssembly module. Used to avoid unnecessarily importing
* the wasm when extending the WebAssembly node code for native bindings.
*/
export declare const getWasm: () => typeof wasm;

View file

@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
let w;
/**
* Lazyily get the WebAssembly module. Used to avoid unnecessarily importing
* the wasm when extending the WebAssembly node code for native bindings.
*/
exports.getWasm = () => {
if (!w) {
w = require('../../dist/wasm/nodejs/blake3_js');
}
return w;
};
//# sourceMappingURL=wasm.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../ts/node/wasm.ts"],"names":[],"mappings":";;AAEA,IAAI,CAA0B,CAAC;AAE/B;;;GAGG;AACU,QAAA,OAAO,GAAG,GAAG,EAAE;IAC1B,IAAI,CAAC,CAAC,EAAE;QACN,CAAC,GAAG,OAAO,CAAC,kCAAkC,CAAgB,CAAC;KAChE;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}

View file

@ -0,0 +1,51 @@
/* tslint:disable */
/* eslint-disable */
/**
* @param {Uint8Array} data
* @param {Uint8Array} out
*/
export function hash(data: Uint8Array, out: Uint8Array): void;
/**
* @returns {Blake3Hash}
*/
export function create_hasher(): Blake3Hash;
/**
* @param {Uint8Array} key_slice
* @returns {Blake3Hash}
*/
export function create_keyed(key_slice: Uint8Array): Blake3Hash;
/**
* @param {string} context
* @returns {Blake3Hash}
*/
export function create_derive(context: string): Blake3Hash;
/**
*/
export class Blake3Hash {
free(): void;
/**
* @returns {HashReader}
*/
reader(): HashReader;
/**
* @param {Uint8Array} input_bytes
*/
update(input_bytes: Uint8Array): void;
/**
* @param {Uint8Array} out
*/
digest(out: Uint8Array): void;
}
/**
*/
export class HashReader {
free(): void;
/**
* @param {Uint8Array} bytes
*/
fill(bytes: Uint8Array): void;
/**
* @param {BigInt} position
*/
set_position(position: BigInt): void;
}

View file

@ -0,0 +1,2 @@
import * as wasm from "./blake3_js_bg.wasm";
export * from "./blake3_js_bg.js";

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more