Socket
Socket
Sign inDemoInstall

@cipherstash/ore-rs

Package Overview
Dependencies
0
Maintainers
2
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.4.6 to 0.5.0

18

dist/index.d.ts
/// <reference types="node" />
export declare type Key = Buffer;
export declare type CipherText = Buffer;
export declare type OrePlainText = number;
export declare type OrePlainText = Buffer;
export declare type OreRange = {

@@ -10,4 +10,4 @@ min: OrePlainText;

export declare type ORECipher = {
encrypt: (input: number) => CipherText;
encryptLeft: (input: number) => CipherText;
encrypt: (input: OrePlainText) => CipherText;
encryptLeft: (input: OrePlainText) => CipherText;
};

@@ -47,8 +47,8 @@ export declare type Ordering = -1 | 0 | 1;

encode: (input: number | Buffer | string) => OrePlainText;
encodeRangeLt: (value: OrePlainText) => OreRange;
encodeRangeLte: (value: OrePlainText) => OreRange;
encodeRangeGt: (value: OrePlainText) => OreRange;
encodeRangeGte: (value: OrePlainText) => OreRange;
encodeRangeEq: (value: OrePlainText) => OreRange;
encodeRangeBetween: (min: OrePlainText, max: OrePlainText) => OreRange;
encodeRangeLt: (value: number) => OreRange;
encodeRangeLte: (value: number) => OreRange;
encodeRangeGt: (value: number) => OreRange;
encodeRangeGte: (value: number) => OreRange;
encodeRangeEq: (value: number) => OreRange;
encodeRangeBetween: (min: number, max: number) => OreRange;
/**

@@ -55,0 +55,0 @@ * Initialize a new ORE cipher with a key pair (both keys must be 16-byte

@@ -40,2 +40,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMEZBQTBGO0FBQzFGLE1BQU0sRUFDSixVQUFVLEVBQ1YsT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGFBQWEsRUFDYixjQUFjLEdBQ2YsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7QUFnRjVCOzs7R0FHRztBQUNVLFFBQUEsR0FBRyxHQUFRO0lBRXRCLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtJQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNkLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQzNCO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDcEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7YUFBTTtZQUNMLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsYUFBYTtJQUNiLGNBQWM7SUFDZCxhQUFhO0lBQ2IsY0FBYztJQUdkLElBQUksRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFPLEVBQWEsRUFBRTtRQUNwQyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxLQUFhLEVBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBRTlELFdBQVcsRUFBRSxDQUFDLEtBQWEsRUFBYyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDdkUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQyxDQUFhLEVBQUUsQ0FBYSxFQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNuRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogSW1wb3J0aW5nIHRoZSBydXN0IGNvbXBpbGVkIGxpYiAoaW5kZXgubm9kZSkgZG9lc24ndCB3b3JrIGFuZCBzbyB3ZSB1c2UgcmVxdWlyZSBoZXJlICovXG5jb25zdCB7XG4gIGluaXRDaXBoZXIsXG4gIGVuY3J5cHQsXG4gIGVuY3J5cHRMZWZ0LFxuICBjb21wYXJlLFxuICBlbmNvZGVOdW1iZXIsXG4gIGVuY29kZVN0cmluZyxcbiAgZW5jb2RlQnVmZmVyLFxuICBlbmNvZGVSYW5nZUJldHdlZW4sXG4gIGVuY29kZVJhbmdlRXEsXG4gIGVuY29kZVJhbmdlR3QsXG4gIGVuY29kZVJhbmdlR3RlLFxuICBlbmNvZGVSYW5nZUx0LFxuICBlbmNvZGVSYW5nZUx0ZSxcbn0gPSByZXF1aXJlKFwiLi4vaW5kZXgubm9kZVwiKVxuXG5leHBvcnQgdHlwZSBLZXkgPSBCdWZmZXJcbmV4cG9ydCB0eXBlIENpcGhlclRleHQgPSBCdWZmZXJcbmV4cG9ydCB0eXBlIE9yZVBsYWluVGV4dCA9IG51bWJlclxuZXhwb3J0IHR5cGUgT3JlUmFuZ2UgPSB7IG1pbjogT3JlUGxhaW5UZXh0LCBtYXg6IE9yZVBsYWluVGV4dCB9XG5cbmV4cG9ydCB0eXBlIE9SRUNpcGhlciA9IHtcbiAgLypcbiAgICogRW5jcnlwdCB0aGUgZ2l2ZW4gYFBsYWluVGV4dGAgb3V0cHV0dGluZyBhIFwiZnVsbFwiIENpcGhlclRleHQgKGkuZS4gYVxuICAgKiBgQnVmZmVyYCBjb250YWluaW5nIGJvdGggdGhlIExlZnQgYW5kIFJpZ2h0IGNvbXBvbmVudHMpLlxuICAgKi9cbiAgZW5jcnlwdDogKGlucHV0OiBudW1iZXIpID0+IENpcGhlclRleHQsXG5cbiAgLypcbiAgICogRW5jcnlwdCB0aGUgZ2l2ZW4gYFBsYWluVGV4dGAgb3V0cHV0dGluZyBvbmx5IGEgTGVmdCBDaXBoZXJUZXh0IChpLmUuIGFcbiAgICogYEJ1ZmZlcmAgY29udGFpbmluZyBqdXN0IHRoZSBMZWZ0IGNvbXBvbmVudCkuXG4gICAqL1xuICBlbmNyeXB0TGVmdDogKGlucHV0OiBudW1iZXIpID0+IENpcGhlclRleHRcbn1cblxuZXhwb3J0IHR5cGUgT3JkZXJpbmcgPSAtMSB8IDAgfCAxXG5cbmV4cG9ydCBpbnRlcmZhY2UgT1JFIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgT1JFLWNvbXBhdGlibGUgcGxhaW50ZXh0IChhIEpTIG51bWJlcikuIFRoZSBudW1iZXJcbiAgICogaXMgdGhlIHNpcGhhc2ggb2YgdGhlIHN0cmluZy5cbiAgICpcbiAgICogQ2lwaGVydGV4dHMgbWFkZSBmcm9tIHRoZSBwbGFpbnRleHQgY2FuIG9ubHkgYmUgbWVhbmluZ2Z1bGx5IGNoZWNrZWQgZm9yXG4gICAqIGVxdWFsaXR5LiBJbiB0aGUgbWVkaXVtIHRlcm0gd2Ugd2lsbCB1c2UgYW4gIGVxdWFsaXR5IHJldmVhbGluZyBzY2hlbWUgZm9yXG4gICAqIHN0cmluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dCB0aGUgSlMgc3RyaW5nIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyBhIEpTIG51bWJlciB0aGF0IGNhbiBiZSBlbmNyeXB0ZWQgd2l0aCB0aGUgT1JFIHNjaGVtZVxuICAgKi9cbiAgZW5jb2RlU3RyaW5nOiAoaW5wdXQ6IHN0cmluZykgPT4gT3JlUGxhaW5UZXh0XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgcGxhaW50ZXh0IChhIEpTIG51bWJlciBBS0EgZjY0KSBmb3IgT1JFIGVuY3J5cHRpb24gYnkgY29udmVydGluZ1xuICAgKiB0byBhbiBvcmRlcmFibGUgaW50ZWdlciAodTY0KS4gIFRoZSBvcmRlcmFibGUgaW50ZWdlciBpcyByZXR1cm5lZCBhcyBhIEpTXG4gICAqIG51bWJlciB3aGljaCB3aWxsIGJlIGRpZmZlcmVudCB0byB0aGUgaW5wdXQgcGxhaW50ZXh0IGFuZCBzaG91bGQgYmUgdHJlYXRlZFxuICAgKiBhcyBhbiBvcGFxdWUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dCB0aGUgSlMgbnVtYmVyIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyBhIEpTIG51bWJlciB0aGF0IGNhbiBiZSBlbmNyeXB0ZWQgd2l0aCB0aGUgT1JFIHNjaGVtZVxuICAgKi9cbiAgZW5jb2RlTnVtYmVyOiAoaW5wdXQ6IG51bWJlcikgPT4gT3JlUGxhaW5UZXh0XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIDggYnl0ZSBidWZmZXIgY29udGFpbmluZyBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGludG8gYW5cbiAgICogT1JFLWNvbXBhdGlibGUgcGxhaW50ZXh0IChhIEpTIG51bWJlcikuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dCB0aGUgSlMgYnVmZmVyIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyBhIEpTIG51bWJlciB0aGF0IGNhbiBiZSBlbmNyeXB0ZWQgd2l0aCB0aGUgT1JFIHNjaGVtZVxuICAgKi9cbiAgZW5jb2RlQnVmZmVyOiAoaW5wdXQ6IEJ1ZmZlcikgPT4gT3JlUGxhaW5UZXh0XG5cbiAgZW5jb2RlOiAoaW5wdXQ6IG51bWJlciB8IEJ1ZmZlciB8IHN0cmluZykgPT4gT3JlUGxhaW5UZXh0XG5cblxuICBlbmNvZGVSYW5nZUx0OiAodmFsdWU6IE9yZVBsYWluVGV4dCkgPT4gT3JlUmFuZ2VcbiAgZW5jb2RlUmFuZ2VMdGU6ICh2YWx1ZTogT3JlUGxhaW5UZXh0KSA9PiBPcmVSYW5nZVxuICBlbmNvZGVSYW5nZUd0OiAodmFsdWU6IE9yZVBsYWluVGV4dCkgPT4gT3JlUmFuZ2VcbiAgZW5jb2RlUmFuZ2VHdGU6ICh2YWx1ZTogT3JlUGxhaW5UZXh0KSA9PiBPcmVSYW5nZVxuICBlbmNvZGVSYW5nZUVxOiAodmFsdWU6IE9yZVBsYWluVGV4dCkgPT4gT3JlUmFuZ2VcbiAgZW5jb2RlUmFuZ2VCZXR3ZWVuOiAobWluOiBPcmVQbGFpblRleHQsIG1heDogT3JlUGxhaW5UZXh0KSA9PiBPcmVSYW5nZVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IE9SRSBjaXBoZXIgd2l0aCBhIGtleSBwYWlyIChib3RoIGtleXMgbXVzdCBiZSAxNi1ieXRlXG4gICAqIGJ1ZmZlcnMpXG4gICAqL1xuICBpbml0OiAoazE6IEtleSwgazI6IEtleSkgPT4gT1JFQ2lwaGVyXG5cbiAgLypcbiAgICogQ29tcGFyZSB0d28gY2lwaGVyIHRleHRzIHJldHVybmluZyAtMSBpZiBhIDwgYiwgMCBpZiBhID09PSBiLCBhbmQgMSBpZiBhID5cbiAgICogYi4gIFRocm93cyBpZiB0aGUgaW5wdXRzIGFyZSBub3QgY29tcGFyYWJsZS5cbiAgICovXG4gIGNvbXBhcmU6IChhOiBDaXBoZXJUZXh0LCBiOiBDaXBoZXJUZXh0KSA9PiBPcmRlcmluZ1xufVxuXG4vKipcbiAqIE1vZHVsZSB0byBwZXJmb3JtIE9yZGVyLXJldmVhbGluZyBFbmNyeXB0aW9uIHVzaW5nIHRoZSB1bmRlcmx5aW5nIG9yZS5ycyBSdXN0XG4gKiBsaWJyYXJ5LlxuICovXG5leHBvcnQgY29uc3QgT1JFOiBPUkUgPSB7XG5cbiAgZW5jb2RlTnVtYmVyLFxuICBlbmNvZGVTdHJpbmcsXG4gIGVuY29kZUJ1ZmZlcixcbiAgZW5jb2RlOiBpbnB1dCA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBlbmNvZGVOdW1iZXIoaW5wdXQpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKGlucHV0KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5jb2RlQnVmZmVyKGlucHV0KVxuICAgIH1cbiAgfSxcblxuICBlbmNvZGVSYW5nZUJldHdlZW4sXG4gIGVuY29kZVJhbmdlRXEsXG4gIGVuY29kZVJhbmdlR3QsXG4gIGVuY29kZVJhbmdlR3RlLFxuICBlbmNvZGVSYW5nZUx0LFxuICBlbmNvZGVSYW5nZUx0ZSxcblxuXG4gIGluaXQ6IChrMTogS2V5LCBrMjogS2V5KTogT1JFQ2lwaGVyID0+IHtcbiAgICBsZXQgY2lwaGVyID0gaW5pdENpcGhlcihrMSwgazIpO1xuICAgIHJldHVybiB7XG4gICAgICBlbmNyeXB0OiAoaW5wdXQ6IG51bWJlcik6IENpcGhlclRleHQgPT4gZW5jcnlwdChjaXBoZXIsIGlucHV0KSxcblxuICAgICAgZW5jcnlwdExlZnQ6IChpbnB1dDogbnVtYmVyKTogQ2lwaGVyVGV4dCA9PiBlbmNyeXB0TGVmdChjaXBoZXIsIGlucHV0KVxuICAgIH1cbiAgfSxcblxuICBjb21wYXJlOiAoYTogQ2lwaGVyVGV4dCwgYjogQ2lwaGVyVGV4dCk6IE9yZGVyaW5nID0+IGNvbXBhcmUoYSwgYilcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMEZBQTBGO0FBQzFGLE1BQU0sRUFDSixVQUFVLEVBQ1YsT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGFBQWEsRUFDYixjQUFjLEdBQ2YsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7QUFnRjVCOzs7R0FHRztBQUNVLFFBQUEsR0FBRyxHQUFRO0lBRXRCLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtJQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNkLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQzNCO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDcEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7YUFBTTtZQUNMLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsYUFBYTtJQUNiLGNBQWM7SUFDZCxhQUFhO0lBQ2IsY0FBYztJQUVkLElBQUksRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFPLEVBQWEsRUFBRTtRQUNwQyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxLQUFtQixFQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUVwRSxXQUFXLEVBQUUsQ0FBQyxLQUFtQixFQUFjLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUM3RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFDLENBQWEsRUFBRSxDQUFhLEVBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ25FLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJbXBvcnRpbmcgdGhlIHJ1c3QgY29tcGlsZWQgbGliIChpbmRleC5ub2RlKSBkb2Vzbid0IHdvcmsgYW5kIHNvIHdlIHVzZSByZXF1aXJlIGhlcmUgKi9cbmNvbnN0IHtcbiAgaW5pdENpcGhlcixcbiAgZW5jcnlwdCxcbiAgZW5jcnlwdExlZnQsXG4gIGNvbXBhcmUsXG4gIGVuY29kZU51bWJlcixcbiAgZW5jb2RlU3RyaW5nLFxuICBlbmNvZGVCdWZmZXIsXG4gIGVuY29kZVJhbmdlQmV0d2VlbixcbiAgZW5jb2RlUmFuZ2VFcSxcbiAgZW5jb2RlUmFuZ2VHdCxcbiAgZW5jb2RlUmFuZ2VHdGUsXG4gIGVuY29kZVJhbmdlTHQsXG4gIGVuY29kZVJhbmdlTHRlLFxufSA9IHJlcXVpcmUoXCIuLi9pbmRleC5ub2RlXCIpXG5cbmV4cG9ydCB0eXBlIEtleSA9IEJ1ZmZlclxuZXhwb3J0IHR5cGUgQ2lwaGVyVGV4dCA9IEJ1ZmZlclxuZXhwb3J0IHR5cGUgT3JlUGxhaW5UZXh0ID0gQnVmZmVyXG5leHBvcnQgdHlwZSBPcmVSYW5nZSA9IHsgbWluOiBPcmVQbGFpblRleHQsIG1heDogT3JlUGxhaW5UZXh0IH1cblxuZXhwb3J0IHR5cGUgT1JFQ2lwaGVyID0ge1xuICAvKlxuICAgKiBFbmNyeXB0IHRoZSBnaXZlbiBgUGxhaW5UZXh0YCBvdXRwdXR0aW5nIGEgXCJmdWxsXCIgQ2lwaGVyVGV4dCAoaS5lLiBhXG4gICAqIGBCdWZmZXJgIGNvbnRhaW5pbmcgYm90aCB0aGUgTGVmdCBhbmQgUmlnaHQgY29tcG9uZW50cykuXG4gICAqL1xuICBlbmNyeXB0OiAoaW5wdXQ6IE9yZVBsYWluVGV4dCkgPT4gQ2lwaGVyVGV4dCxcblxuICAvKlxuICAgKiBFbmNyeXB0IHRoZSBnaXZlbiBgUGxhaW5UZXh0YCBvdXRwdXR0aW5nIG9ubHkgYSBMZWZ0IENpcGhlclRleHQgKGkuZS4gYVxuICAgKiBgQnVmZmVyYCBjb250YWluaW5nIGp1c3QgdGhlIExlZnQgY29tcG9uZW50KS5cbiAgICovXG4gIGVuY3J5cHRMZWZ0OiAoaW5wdXQ6IE9yZVBsYWluVGV4dCkgPT4gQ2lwaGVyVGV4dFxufVxuXG5leHBvcnQgdHlwZSBPcmRlcmluZyA9IC0xIHwgMCB8IDFcblxuZXhwb3J0IGludGVyZmFjZSBPUkUge1xuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBPUkUtY29tcGF0aWJsZSBwbGFpbnRleHQgKGEgSlMgbnVtYmVyKS4gVGhlIG51bWJlclxuICAgKiBpcyB0aGUgc2lwaGFzaCBvZiB0aGUgc3RyaW5nLlxuICAgKlxuICAgKiBDaXBoZXJ0ZXh0cyBtYWRlIGZyb20gdGhlIHBsYWludGV4dCBjYW4gb25seSBiZSBtZWFuaW5nZnVsbHkgY2hlY2tlZCBmb3JcbiAgICogZXF1YWxpdHkuIEluIHRoZSBtZWRpdW0gdGVybSB3ZSB3aWxsIHVzZSBhbiAgZXF1YWxpdHkgcmV2ZWFsaW5nIHNjaGVtZSBmb3JcbiAgICogc3RyaW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0IHRoZSBKUyBzdHJpbmcgdG8gZW5jb2RlXG4gICAqIEByZXR1cm5zIGEgSlMgbnVtYmVyIHRoYXQgY2FuIGJlIGVuY3J5cHRlZCB3aXRoIHRoZSBPUkUgc2NoZW1lXG4gICAqL1xuICBlbmNvZGVTdHJpbmc6IChpbnB1dDogc3RyaW5nKSA9PiBPcmVQbGFpblRleHRcblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBwbGFpbnRleHQgKGEgSlMgbnVtYmVyIEFLQSBmNjQpIGZvciBPUkUgZW5jcnlwdGlvbiBieSBjb252ZXJ0aW5nXG4gICAqIHRvIGFuIG9yZGVyYWJsZSBpbnRlZ2VyICh1NjQpLiAgVGhlIG9yZGVyYWJsZSBpbnRlZ2VyIGlzIHJldHVybmVkIGFzIGEgSlNcbiAgICogbnVtYmVyIHdoaWNoIHdpbGwgYmUgZGlmZmVyZW50IHRvIHRoZSBpbnB1dCBwbGFpbnRleHQgYW5kIHNob3VsZCBiZSB0cmVhdGVkXG4gICAqIGFzIGFuIG9wYXF1ZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0IHRoZSBKUyBudW1iZXIgdG8gZW5jb2RlXG4gICAqIEByZXR1cm5zIGEgSlMgbnVtYmVyIHRoYXQgY2FuIGJlIGVuY3J5cHRlZCB3aXRoIHRoZSBPUkUgc2NoZW1lXG4gICAqL1xuICBlbmNvZGVOdW1iZXI6IChpbnB1dDogbnVtYmVyKSA9PiBPcmVQbGFpblRleHRcblxuICAvKipcbiAgICogQ29udmVydHMgYW4gOCBieXRlIGJ1ZmZlciBjb250YWluaW5nIGEgNjQgYml0IHVuc2lnbmVkIGludGVnZXIgaW50byBhblxuICAgKiBPUkUtY29tcGF0aWJsZSBwbGFpbnRleHQgKGEgSlMgbnVtYmVyKS5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0IHRoZSBKUyBidWZmZXIgdG8gZW5jb2RlXG4gICAqIEByZXR1cm5zIGEgSlMgbnVtYmVyIHRoYXQgY2FuIGJlIGVuY3J5cHRlZCB3aXRoIHRoZSBPUkUgc2NoZW1lXG4gICAqL1xuICBlbmNvZGVCdWZmZXI6IChpbnB1dDogQnVmZmVyKSA9PiBPcmVQbGFpblRleHRcblxuICBlbmNvZGU6IChpbnB1dDogbnVtYmVyIHwgQnVmZmVyIHwgc3RyaW5nKSA9PiBPcmVQbGFpblRleHRcblxuXG4gIGVuY29kZVJhbmdlTHQ6ICh2YWx1ZTogbnVtYmVyKSA9PiBPcmVSYW5nZVxuICBlbmNvZGVSYW5nZUx0ZTogKHZhbHVlOiBudW1iZXIpID0+IE9yZVJhbmdlXG4gIGVuY29kZVJhbmdlR3Q6ICh2YWx1ZTogbnVtYmVyKSA9PiBPcmVSYW5nZVxuICBlbmNvZGVSYW5nZUd0ZTogKHZhbHVlOiBudW1iZXIpID0+IE9yZVJhbmdlXG4gIGVuY29kZVJhbmdlRXE6ICh2YWx1ZTogbnVtYmVyKSA9PiBPcmVSYW5nZVxuICBlbmNvZGVSYW5nZUJldHdlZW46IChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+IE9yZVJhbmdlXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgT1JFIGNpcGhlciB3aXRoIGEga2V5IHBhaXIgKGJvdGgga2V5cyBtdXN0IGJlIDE2LWJ5dGVcbiAgICogYnVmZmVycylcbiAgICovXG4gIGluaXQ6IChrMTogS2V5LCBrMjogS2V5KSA9PiBPUkVDaXBoZXJcblxuICAvKlxuICAgKiBDb21wYXJlIHR3byBjaXBoZXIgdGV4dHMgcmV0dXJuaW5nIC0xIGlmIGEgPCBiLCAwIGlmIGEgPT09IGIsIGFuZCAxIGlmIGEgPlxuICAgKiBiLiAgVGhyb3dzIGlmIHRoZSBpbnB1dHMgYXJlIG5vdCBjb21wYXJhYmxlLlxuICAgKi9cbiAgY29tcGFyZTogKGE6IENpcGhlclRleHQsIGI6IENpcGhlclRleHQpID0+IE9yZGVyaW5nXG59XG5cbi8qKlxuICogTW9kdWxlIHRvIHBlcmZvcm0gT3JkZXItcmV2ZWFsaW5nIEVuY3J5cHRpb24gdXNpbmcgdGhlIHVuZGVybHlpbmcgb3JlLnJzIFJ1c3RcbiAqIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBPUkU6IE9SRSA9IHtcblxuICBlbmNvZGVOdW1iZXIsXG4gIGVuY29kZVN0cmluZyxcbiAgZW5jb2RlQnVmZmVyLFxuICBlbmNvZGU6IGlucHV0ID0+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGVuY29kZU51bWJlcihpbnB1dClcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBlbmNvZGVTdHJpbmcoaW5wdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVCdWZmZXIoaW5wdXQpXG4gICAgfVxuICB9LFxuXG4gIGVuY29kZVJhbmdlQmV0d2VlbixcbiAgZW5jb2RlUmFuZ2VFcSxcbiAgZW5jb2RlUmFuZ2VHdCxcbiAgZW5jb2RlUmFuZ2VHdGUsXG4gIGVuY29kZVJhbmdlTHQsXG4gIGVuY29kZVJhbmdlTHRlLFxuXG4gIGluaXQ6IChrMTogS2V5LCBrMjogS2V5KTogT1JFQ2lwaGVyID0+IHtcbiAgICBsZXQgY2lwaGVyID0gaW5pdENpcGhlcihrMSwgazIpO1xuICAgIHJldHVybiB7XG4gICAgICBlbmNyeXB0OiAoaW5wdXQ6IE9yZVBsYWluVGV4dCk6IENpcGhlclRleHQgPT4gZW5jcnlwdChjaXBoZXIsIGlucHV0KSxcblxuICAgICAgZW5jcnlwdExlZnQ6IChpbnB1dDogT3JlUGxhaW5UZXh0KTogQ2lwaGVyVGV4dCA9PiBlbmNyeXB0TGVmdChjaXBoZXIsIGlucHV0KVxuICAgIH1cbiAgfSxcblxuICBjb21wYXJlOiAoYTogQ2lwaGVyVGV4dCwgYjogQ2lwaGVyVGV4dCk6IE9yZGVyaW5nID0+IGNvbXBhcmUoYSwgYilcbn1cbiJdfQ==

@@ -20,2 +20,7 @@ "use strict";

});
describe("encode number", () => {
test("0", () => {
expect(index_1.ORE.encode(0)).toEqual(Buffer.from([0, 0, 0, 0, 0, 0, 0, 0x80]));
});
});
describe("Encrypt", () => {

@@ -107,5 +112,5 @@ test("encrypt number", () => {

test('correct min and max generated in range', () => {
expect(index_1.ORE.encodeRangeBetween(1, 100)).toEqual({ min: 1, max: 100 });
expect(index_1.ORE.encodeRangeBetween(1, 100)).toEqual({ min: index_1.ORE.encode(1), max: index_1.ORE.encode(100) });
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQTZCO0FBQzdCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDM0IsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsV0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FB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LENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPUkUgfSBmcm9tIFwiLi9pbmRleFwiXG5jb25zdCBrMSA9IEJ1ZmZlci5mcm9tKFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1XSk7XG5jb25zdCBrMiA9IEJ1ZmZlci5mcm9tKFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1XSk7XG5cbmRlc2NyaWJlKFwiSW5pdFwiLCAoKSA9PiB7XG4gIHRlc3QoXCJpbnZhbGlkIGsxIHNpemVcIiwgKCkgPT4ge1xuICAgIGxldCBrYmFkID0gQnVmZmVyLmZyb20oWzAsIDEsIDJdKTtcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgT1JFLmluaXQoa2JhZCwgazIpO1xuICAgIH0pLnRvVGhyb3coXCJJbnZhbGlkIGtleSBsZW5ndGhcIilcbiAgfSlcblxuICB0ZXN0KFwiaW52YWxpZCBrMiBzaXplXCIsICgpID0+IHtcbiAgICBsZXQga2JhZCA9IEJ1ZmZlci5mcm9tKFswLCAxLCAyXSk7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIE9SRS5pbml0KGsxLCBrYmFkKTtcbiAgICB9KS50b1Rocm93KFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpXG4gIH0pXG59KVxuXG5kZXNjcmliZShcIkVuY3J5cHRcIiwgKCkgPT4ge1xuICB0ZXN0KFwiZW5jcnlwdCBudW1iZXJcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuICAgIGV4cGVjdChvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDQ1NikpLmxlbmd0aCkudG9FcXVhbCg0MDgpO1xuICB9KVxufSlcblxuZGVzY3JpYmUoXCJFbmNyeXB0IExlZnRcIiwgKCkgPT4ge1xuICB0ZXN0KFwiZW5jcnlwdCBudW1iZXJcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuICAgIGV4cGVjdChvcmUuZW5jcnlwdExlZnQoT1JFLmVuY29kZU51bWJlcig0NTYpKS5sZW5ndGgpLnRvRXF1YWwoMTM2KTtcbiAgfSlcbn0pXG5cblxuZGVzY3JpYmUoXCJDb21wYXJlIChiaWctaW50KVwiLCAoKSA9PiB7XG4gIHRlc3QoXCJjb21wYXJlIGdyZWF0ZXIgdGhhblwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig0NTYpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigxMDApKVxuICAgICAgKSkudG9FcXVhbCgxKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBsZXNzIHRoYW5cIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoNzg4ODgxMDAxKSlcbiAgICAgICkpLnRvRXF1YWwoLTEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGVxdWFsXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDEwMDg4OCkpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDEwMDg4OCkpXG4gICAgICApKS50b0VxdWFsKDApO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGVxdWFsIDBcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMCkpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDApKVxuICAgICAgKSkudG9FcXVhbCgwKTtcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiQ29tcGFyZSAobnVtYmVyKVwiLCAoKSA9PiB7XG4gIHRlc3QoXCJjb21wYXJlIGdyZWF0ZXIgdGhhblwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig0NTYpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigxMDApKVxuICAgICAgKSkudG9FcXVhbCgxKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBsZXNzIHRoYW5cIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoNzg4ODgxMDAxLjc1KSlcbiAgICAgICkpLnRvRXF1YWwoLTEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGVxdWFsXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDEwMDg4KSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwODgpKVxuICAgICAgKSkudG9FcXVhbCgwKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBlcXVhbCAwXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDApKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigwKSlcbiAgICAgICkpLnRvRXF1YWwoMCk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgZXF1YWwgNjQtYml0IG1heFwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSlcbiAgICAgICkpLnRvRXF1YWwoMCk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgZGlmZmVyZW50IGZyYWN0aW9uYWwgY29tcG9uZW50XCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDgwMC4zKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoODAwLjcpKVxuICAgICAgKSkudG9FcXVhbCgtMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgc2hpZnRlZCBkZWNpbWFsIHBvaW50XCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDgwMDAwLjc1KSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoODAwLjAwNzUpKVxuICAgICAgKSkudG9FcXVhbCgxKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBuZWdhdGl2ZSB0byBwb3NpdGl2ZVwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigtODAwKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoNzAwKSlcbiAgICAgICkpLnRvRXF1YWwoLTEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIG5lZ2F0aXZlIHRvIG5lZ2F0aXZlXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC04MDApKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigtOTAwKSlcbiAgICAgICkpLnRvRXF1YWwoMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgbmVnYXRpdmUgdG8gbmVnYXRpdmUgd2l0aCBkaWZmZXJlbnQgZnJhY3Rpb25hbCBjb21wb25lbnRzXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC04MDAuMykpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC04MDAuNzY2KSlcbiAgICAgICkpLnRvRXF1YWwoMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgbmVnYXRpdmUgdG8gbmVnYXRpdmUgd2l0aCBzaGlmdGVkIGRlY2ltYWwgcG9pbnRcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoLTgwMDc2LjYpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigtODAwLjc2NikpXG4gICAgICApKS50b0VxdWFsKC0xKTtcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiZW5jb2RlU3RyaW5nXCIsICgpID0+IHtcbiAgdGVzdChcImRpZmZlcmVudCBzdHJpbmdzIHdpdGggc2FtZSBORkMgZm9ybSBnZW5lcmF0ZSB0aGUgc2FtZSBlbmNvZGluZ1wiLCAoKSA9PiB7XG4gICAgLy8gU2VlOiBodHRwczovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIxNS8jU2luZ2xldG9uc19GaWd1cmVcbiAgICBsZXQgczEgPSAnXFx1MUUwQVxcdTAzMjMnXG4gICAgbGV0IHMyID0gJ1xcdTFFMENcXHUwMzA3J1xuICAgIGV4cGVjdChPUkUuZW5jb2RlU3RyaW5nKHMxKSkudG9FcXVhbChPUkUuZW5jb2RlU3RyaW5nKHMyKSlcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiZW5jb2RlUmFuZ2VCZXR3ZWVuXCIsICgpID0+IHtcbiAgdGVzdCgnY29ycmVjdCBtaW4gYW5kIG1heCBnZW5lcmF0ZWQgaW4gcmFuZ2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KE9SRS5lbmNvZGVSYW5nZUJldHdlZW4oMSwgMTAwKSkudG9FcXVhbCh7IG1pbjogMSwgbWF4OiAxMDB9KVxuICB9KVxufSkiXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQTZCO0FBQzdCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDM0IsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsV0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FB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QUMsV0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsTUFBTSxDQUFDLFdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDN0YsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9SRSB9IGZyb20gXCIuL2luZGV4XCJcbmNvbnN0IGsxID0gQnVmZmVyLmZyb20oWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTVdKTtcbmNvbnN0IGsyID0gQnVmZmVyLmZyb20oWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTVdKTtcblxuZGVzY3JpYmUoXCJJbml0XCIsICgpID0+IHtcbiAgdGVzdChcImludmFsaWQgazEgc2l6ZVwiLCAoKSA9PiB7XG4gICAgbGV0IGtiYWQgPSBCdWZmZXIuZnJvbShbMCwgMSwgMl0pO1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBPUkUuaW5pdChrYmFkLCBrMik7XG4gICAgfSkudG9UaHJvdyhcIkludmFsaWQga2V5IGxlbmd0aFwiKVxuICB9KVxuXG4gIHRlc3QoXCJpbnZhbGlkIGsyIHNpemVcIiwgKCkgPT4ge1xuICAgIGxldCBrYmFkID0gQnVmZmVyLmZyb20oWzAsIDEsIDJdKTtcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgT1JFLmluaXQoazEsIGtiYWQpO1xuICAgIH0pLnRvVGhyb3coXCJJbnZhbGlkIGtleSBsZW5ndGhcIilcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiZW5jb2RlIG51bWJlclwiLCAoKSA9PiB7XG4gIHRlc3QoXCIwXCIsICgpID0+IHtcbiAgICBleHBlY3QoT1JFLmVuY29kZSgwKSkudG9FcXVhbChCdWZmZXIuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHg4MF0pKTtcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiRW5jcnlwdFwiLCAoKSA9PiB7XG4gIHRlc3QoXCJlbmNyeXB0IG51bWJlclwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG4gICAgZXhwZWN0KG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoNDU2KSkubGVuZ3RoKS50b0VxdWFsKDQwOCk7XG4gIH0pXG59KVxuXG5kZXNjcmliZShcIkVuY3J5cHQgTGVmdFwiLCAoKSA9PiB7XG4gIHRlc3QoXCJlbmNyeXB0IG51bWJlclwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG4gICAgZXhwZWN0KG9yZS5lbmNyeXB0TGVmdChPUkUuZW5jb2RlTnVtYmVyKDQ1NikpLmxlbmd0aCkudG9FcXVhbCgxMzYpO1xuICB9KVxufSlcblxuXG5kZXNjcmliZShcIkNvbXBhcmUgKGJpZy1pbnQpXCIsICgpID0+IHtcbiAgdGVzdChcImNvbXBhcmUgZ3JlYXRlciB0aGFuXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDQ1NikpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDEwMCkpXG4gICAgICApKS50b0VxdWFsKDEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGxlc3MgdGhhblwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigxMDApKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig3ODg4ODEwMDEpKVxuICAgICAgKSkudG9FcXVhbCgtMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgZXF1YWxcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwODg4KSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwODg4KSlcbiAgICAgICkpLnRvRXF1YWwoMCk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgZXF1YWwgMFwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigwKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMCkpXG4gICAgICApKS50b0VxdWFsKDApO1xuICB9KVxufSlcblxuZGVzY3JpYmUoXCJDb21wYXJlIChudW1iZXIpXCIsICgpID0+IHtcbiAgdGVzdChcImNvbXBhcmUgZ3JlYXRlciB0aGFuXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDQ1NikpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDEwMCkpXG4gICAgICApKS50b0VxdWFsKDEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGxlc3MgdGhhblwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigxMDApKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig3ODg4ODEwMDEuNzUpKVxuICAgICAgKSkudG9FcXVhbCgtMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgZXF1YWxcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMTAwODgpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigxMDA4OCkpXG4gICAgICApKS50b0VxdWFsKDApO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIGVxdWFsIDBcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoMCkpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKDApKVxuICAgICAgKSkudG9FcXVhbCgwKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBlcXVhbCA2NC1iaXQgbWF4XCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKVxuICAgICAgKSkudG9FcXVhbCgwKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBkaWZmZXJlbnQgZnJhY3Rpb25hbCBjb21wb25lbnRcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoODAwLjMpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig4MDAuNykpXG4gICAgICApKS50b0VxdWFsKC0xKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBzaGlmdGVkIGRlY2ltYWwgcG9pbnRcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoODAwMDAuNzUpKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig4MDAuMDA3NSkpXG4gICAgICApKS50b0VxdWFsKDEpO1xuICB9KVxuXG4gIHRlc3QoXCJjb21wYXJlIG5lZ2F0aXZlIHRvIHBvc2l0aXZlXCIsICgpID0+IHtcbiAgICBsZXQgb3JlID0gT1JFLmluaXQoazEsIGsyKTtcblxuICAgIGV4cGVjdChcbiAgICAgIE9SRS5jb21wYXJlKFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC04MDApKSxcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcig3MDApKVxuICAgICAgKSkudG9FcXVhbCgtMSk7XG4gIH0pXG5cbiAgdGVzdChcImNvbXBhcmUgbmVnYXRpdmUgdG8gbmVnYXRpdmVcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoLTgwMCkpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC05MDApKVxuICAgICAgKSkudG9FcXVhbCgxKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBuZWdhdGl2ZSB0byBuZWdhdGl2ZSB3aXRoIGRpZmZlcmVudCBmcmFjdGlvbmFsIGNvbXBvbmVudHNcIiwgKCkgPT4ge1xuICAgIGxldCBvcmUgPSBPUkUuaW5pdChrMSwgazIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgT1JFLmNvbXBhcmUoXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoLTgwMC4zKSksXG4gICAgICAgIG9yZS5lbmNyeXB0KE9SRS5lbmNvZGVOdW1iZXIoLTgwMC43NjYpKVxuICAgICAgKSkudG9FcXVhbCgxKTtcbiAgfSlcblxuICB0ZXN0KFwiY29tcGFyZSBuZWdhdGl2ZSB0byBuZWdhdGl2ZSB3aXRoIHNoaWZ0ZWQgZGVjaW1hbCBwb2ludFwiLCAoKSA9PiB7XG4gICAgbGV0IG9yZSA9IE9SRS5pbml0KGsxLCBrMik7XG5cbiAgICBleHBlY3QoXG4gICAgICBPUkUuY29tcGFyZShcbiAgICAgICAgb3JlLmVuY3J5cHQoT1JFLmVuY29kZU51bWJlcigtODAwNzYuNikpLFxuICAgICAgICBvcmUuZW5jcnlwdChPUkUuZW5jb2RlTnVtYmVyKC04MDAuNzY2KSlcbiAgICAgICkpLnRvRXF1YWwoLTEpO1xuICB9KVxufSlcblxuZGVzY3JpYmUoXCJlbmNvZGVTdHJpbmdcIiwgKCkgPT4ge1xuICB0ZXN0KFwiZGlmZmVyZW50IHN0cmluZ3Mgd2l0aCBzYW1lIE5GQyBmb3JtIGdlbmVyYXRlIHRoZSBzYW1lIGVuY29kaW5nXCIsICgpID0+IHtcbiAgICAvLyBTZWU6IGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjE1LyNTaW5nbGV0b25zX0ZpZ3VyZVxuICAgIGxldCBzMSA9ICdcXHUxRTBBXFx1MDMyMydcbiAgICBsZXQgczIgPSAnXFx1MUUwQ1xcdTAzMDcnXG4gICAgZXhwZWN0KE9SRS5lbmNvZGVTdHJpbmcoczEpKS50b0VxdWFsKE9SRS5lbmNvZGVTdHJpbmcoczIpKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJlbmNvZGVSYW5nZUJldHdlZW5cIiwgKCkgPT4ge1xuICB0ZXN0KCdjb3JyZWN0IG1pbiBhbmQgbWF4IGdlbmVyYXRlZCBpbiByYW5nZScsICgpID0+IHtcbiAgICBleHBlY3QoT1JFLmVuY29kZVJhbmdlQmV0d2VlbigxLCAxMDApKS50b0VxdWFsKHsgbWluOiBPUkUuZW5jb2RlKDEpLCBtYXg6IE9SRS5lbmNvZGUoMTAwKX0pXG4gIH0pXG59KVxuIl19
{
"name": "@cipherstash/ore-rs",
"version": "0.4.6",
"version": "0.5.0",
"description": "Node bindings for ore.rs",
"main": "dist/index.js",
"scripts": {
"build": "npx cargo-cp-artifact -nc index.node -- cargo build --message-format=json-render-diagnostics && npx tsc",
"build-release": "npx cargo-cp-artifact -nc index.node -- cargo build --message-format=json-render-diagnostics --release",
"prepublishOnly": "npm run build-release && npx tsc",
"install": "npm run build-release",
"test": "cargo test && npx jest"
},
"repository": {

@@ -74,3 +67,10 @@ "type": "git",

"tsconfig.json"
]
}
],
"scripts": {
"build": "npx cargo-cp-artifact -nc index.node -- cargo build --message-format=json-render-diagnostics && npx tsc",
"build-release": "npx cargo-cp-artifact -nc index.node -- cargo build --message-format=json-render-diagnostics --release",
"install": "npm run build-release",
"test": "cargo test && npx jest"
},
"readme": "# ore-rs\n\n**ore-rs:** Node bindings for [ore.rs](https://github.com/cipherstash/ore.rs).\n\nThis project was bootstrapped by [create-neon](https://www.npmjs.com/package/create-neon).\n\n## Installing ore-rs\n\nInstalling ore-rs requires a [supported version of Node and Rust](https://github.com/neon-bindings/neon#platform-support).\n\nYou can install the project with npm. In the project directory, run:\n\n```sh\n$ npm install\n```\n\nThis fully installs the project, including installing any dependencies and running the build.\n\n## Building ore-rs\n\nIf you have already installed the project and only want to run the build, run:\n\n```sh\n$ npm run build\n```\n\nThis command performs 2 steps:\n\n1. It uses the [cargo-cp-artifact](https://github.com/neon-bindings/cargo-cp-artifact) utility to run the Rust build and copy the built library into `./index.node`.\n2. It compiles the TypeScript code (in `src/index.ts`) with the output being stored in `dist`\n\n## Exploring ore-rs\n\nAfter building ore-rs, you can explore its exports at the TS Node REPL:\n\n```sh\n$ npm install\n$ npx ts-node\n> const ORE = require('.')\n> import { ORE } from '@cipherstash/ore-rs'\n> let k1 = Buffer.from(\"1216a6700004fe46c5c07166025e681e\", \"hex\")\n> let k2 = Buffer.from(\"3f13a569d5d2c6ce8d2a85cb9e347804\", \"hex\")\n> let cipher = new ORE(k1, k2)\n> let cipher = ORE.init(k1, k2)\n> cipher.encrypt(ORE.encodeNumber(100))\n```\n\n## Comparison\n\nTo compare two encrypted ciphertext values, you can use the `ORE.compare` function which returns -1, 0 or 1 if the first\noperand is less-than, equal-to or greater than the second operand respectively.\n\nInternally, this uses [cmp](https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#tymethod.cmp).\n\n```typescript\nlet a = ore.encrypt(ORE.encodeNumber(100))\nlet b = ore.encrypt(ORE.encodeNumber(1560))\nORE.compare(a, b) // => -1\n```\n\n## Data Types\n\n`ore-rs` can encrypt the following types:\n\n### Number\n\nJavaScript numbers are 64-bit floats which the underlying ORE library converts into an order-preserving integer. The\nunderlying value no longer represents the source number (unlike `f64::from(i)`) but guarantees ordering is preserved.\n\n```typescript\n// All valid\ncipher.encrypt(ORE.encodeNumber(456))\ncipher.encrypt(ORE.encodeNumber(3.14159))\ncipher.encrypt(ORE.encodeNumber(-100))\n```\n\n### String\n\n`ORE.encodeString` performs unicode normalisation (NFC) on the input string, then hashes the result using siphash.\nThe resulting number can be encrypted. However, because strings are hashed only equality comparisons make sense.\n\n```typescript\nlet s1 = cipher.encrypt(ORE.encodeString(\"Hello from CipherStash!\")) // OK\nlet s2 = cipher.encrypt(ORE.encodeString(\"Hello from CipherStash!\")) // OK\nORE.compare(s1, s2) // => 0\n```\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm install`\n\nInstalls the project, including running `npm run build`.\n\n### `npm build`\n\nBuilds the Node addon (`index.node`) from source and compiles the TypeScript wrapper files.\n\nAdditional [`cargo build`](https://doc.rust-lang.org/cargo/commands/cargo-build.html) arguments may be passed to `npm build` and `npm build-*` commands. For example, to enable a [cargo feature](https://doc.rust-lang.org/cargo/reference/features.html):\n\n```\nnpm run build -- --feature=beetle\n```\n\n#### `npm build-debug`\n\nAlias for `npm build`.\n\n#### `npm build-release`\n\nSame as [`npm build`](#npm-build) but, builds the module with the [`release`](https://doc.rust-lang.org/cargo/reference/profiles.html#release) profile. Release builds will compile slower, but run faster.\n\n### `npm test`\n\nRuns the unit tests in Rust by calling `cargo test` and in TypeScript (Jest) by calling `npx jest`.\n\n## Project Layout\n\nThe directory structure of this project is:\n\n```\nore-rs/\n├── Cargo.toml\n├── README.md\n├── index.node\n├── package.json\n├── native/\n| └── lib.rs\n├── src/\n| └── index.ts\n| └── index.test.ts\n└── target/\n```\n\n### Cargo.toml\n\nThe Cargo [manifest file](https://doc.rust-lang.org/cargo/reference/manifest.html), which informs the `cargo` command.\n\n### README.md\n\nThis file.\n\n### index.node\n\nThe Node addon—i.e., a binary Node module—generated by building the project. This is the main module for this package, as dictated by the `\"main\"` key in `package.json`.\n\nUnder the hood, a [Node addon](https://nodejs.org/api/addons.html) is a [dynamically-linked shared object](https://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries). The `\"build\"` script produces this file by copying it from within the `target/` directory, which is where the Rust build produces the shared object.\n\n### package.json\n\nThe npm [manifest file](https://docs.npmjs.com/cli/v7/configuring-npm/package-json), which informs the `npm` command.\n\n### native/\n\nThe directory tree containing the Rust source code for the project.\n\n### native/lib.rs\n\nThe Rust library's main module.\n\n### src/\n\nTypeScript wrapper files - clients call this code rather than calling the functions in `index.node` directly.\n\n### target/\n\nBinary artifacts generated by the Rust build.\n\n## Learn More\n\nTo learn more about Neon, see the [Neon documentation](https://neon-bindings.com).\n\nTo learn more about Rust, see the [Rust documentation](https://www.rust-lang.org).\n\nTo learn more about Node, see the [Node documentation](https://nodejs.org).\n"
}

@@ -21,2 +21,8 @@ import { ORE } from "./index"

describe("encode number", () => {
test("0", () => {
expect(ORE.encode(0)).toEqual(Buffer.from([0, 0, 0, 0, 0, 0, 0, 0x80]));
})
})
describe("Encrypt", () => {

@@ -202,4 +208,4 @@ test("encrypt number", () => {

test('correct min and max generated in range', () => {
expect(ORE.encodeRangeBetween(1, 100)).toEqual({ min: 1, max: 100})
expect(ORE.encodeRangeBetween(1, 100)).toEqual({ min: ORE.encode(1), max: ORE.encode(100)})
})
})
})

@@ -20,3 +20,3 @@ /* Importing the rust compiled lib (index.node) doesn't work and so we use require here */

export type CipherText = Buffer
export type OrePlainText = number
export type OrePlainText = Buffer
export type OreRange = { min: OrePlainText, max: OrePlainText }

@@ -29,3 +29,3 @@

*/
encrypt: (input: number) => CipherText,
encrypt: (input: OrePlainText) => CipherText,

@@ -36,3 +36,3 @@ /*

*/
encryptLeft: (input: number) => CipherText
encryptLeft: (input: OrePlainText) => CipherText
}

@@ -79,8 +79,8 @@

encodeRangeLt: (value: OrePlainText) => OreRange
encodeRangeLte: (value: OrePlainText) => OreRange
encodeRangeGt: (value: OrePlainText) => OreRange
encodeRangeGte: (value: OrePlainText) => OreRange
encodeRangeEq: (value: OrePlainText) => OreRange
encodeRangeBetween: (min: OrePlainText, max: OrePlainText) => OreRange
encodeRangeLt: (value: number) => OreRange
encodeRangeLte: (value: number) => OreRange
encodeRangeGt: (value: number) => OreRange
encodeRangeGte: (value: number) => OreRange
encodeRangeEq: (value: number) => OreRange
encodeRangeBetween: (min: number, max: number) => OreRange

@@ -126,9 +126,8 @@ /**

init: (k1: Key, k2: Key): ORECipher => {
let cipher = initCipher(k1, k2);
return {
encrypt: (input: number): CipherText => encrypt(cipher, input),
encrypt: (input: OrePlainText): CipherText => encrypt(cipher, input),
encryptLeft: (input: number): CipherText => encryptLeft(cipher, input)
encryptLeft: (input: OrePlainText): CipherText => encryptLeft(cipher, input)
}

@@ -135,0 +134,0 @@ },

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc