Use browser friendly concatUint8Arrays instead of Buffer.concat
This commit is contained in:
parent
13ea412c3f
commit
7f76672a40
|
@ -20,3 +20,17 @@ export function validateBytes(
|
||||||
export function isZeroUint8Array(bytes: Uint8Array): boolean {
|
export function isZeroUint8Array(bytes: Uint8Array): boolean {
|
||||||
return bytes.every((byte) => byte === 0);
|
return bytes.every((byte) => byte === 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function concatUint8Arrays(bytesArr: Uint8Array[]): Uint8Array {
|
||||||
|
const totalLen = bytesArr.reduce((total, bytes) => total + bytes.length, 0);
|
||||||
|
|
||||||
|
const merged = new Uint8Array(totalLen);
|
||||||
|
let mergedLen = 0;
|
||||||
|
|
||||||
|
for (const bytes of bytesArr) {
|
||||||
|
merged.set(bytes, mergedLen);
|
||||||
|
mergedLen += bytes.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ import {SIGNATURE_LENGTH} from "../constants";
|
||||||
import {SignatureType, multiVerify} from "bls-eth-wasm";
|
import {SignatureType, multiVerify} from "bls-eth-wasm";
|
||||||
import {getContext} from "./context";
|
import {getContext} from "./context";
|
||||||
import {PublicKey} from "./publicKey";
|
import {PublicKey} from "./publicKey";
|
||||||
import {bytesToHex, hexToBytes, isZeroUint8Array} from "../helpers";
|
import {bytesToHex, concatUint8Arrays, hexToBytes, isZeroUint8Array} from "../helpers";
|
||||||
import {Signature as ISignature} from "../interface";
|
import {Signature as ISignature} from "../interface";
|
||||||
import {EmptyAggregateError, InvalidLengthError, InvalidOrderError} from "../errors";
|
import {EmptyAggregateError, InvalidLengthError, InvalidOrderError} from "../errors";
|
||||||
|
|
||||||
|
@ -65,10 +65,9 @@ export class Signature implements ISignature {
|
||||||
}
|
}
|
||||||
|
|
||||||
verifyMultiple(publicKeys: PublicKey[], messages: Uint8Array[]): boolean {
|
verifyMultiple(publicKeys: PublicKey[], messages: Uint8Array[]): boolean {
|
||||||
const msgs = Buffer.concat(messages);
|
|
||||||
return this.value.aggregateVerifyNoCheck(
|
return this.value.aggregateVerifyNoCheck(
|
||||||
publicKeys.map((key) => key.value),
|
publicKeys.map((key) => key.value),
|
||||||
msgs
|
concatUint8Arrays(messages)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {expect} from "chai";
|
import {expect} from "chai";
|
||||||
import {isZeroUint8Array} from "../../../src/helpers/utils";
|
import {concatUint8Arrays, isZeroUint8Array} from "../../../src/helpers/utils";
|
||||||
|
import {hexToBytesNode} from "../../util";
|
||||||
|
|
||||||
describe("helpers / bytes", () => {
|
describe("helpers / bytes", () => {
|
||||||
describe("isZeroUint8Array", () => {
|
describe("isZeroUint8Array", () => {
|
||||||
|
@ -21,8 +22,22 @@ describe("helpers / bytes", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
function hexToBytesNode(hex: string): Buffer {
|
describe("concatUint8Arrays", () => {
|
||||||
return Buffer.from(hex.replace("0x", ""), "hex");
|
it("Should merge multiple Uint8Array", () => {
|
||||||
}
|
const bytesArr = [
|
||||||
|
new Uint8Array([1, 2, 3]),
|
||||||
|
new Uint8Array([4, 5]),
|
||||||
|
new Uint8Array([6]),
|
||||||
|
new Uint8Array([7, 8]),
|
||||||
|
new Uint8Array([9, 10, 11]),
|
||||||
|
];
|
||||||
|
|
||||||
|
const expectedBytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
|
||||||
|
|
||||||
|
const bytes = concatUint8Arrays(bytesArr);
|
||||||
|
|
||||||
|
expect(bytes.toString()).to.equal(expectedBytes.toString());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {expect} from "chai";
|
import {expect} from "chai";
|
||||||
import {hexToBytes, bytesToHex} from "../../../src/helpers/hex";
|
import {hexToBytes, bytesToHex} from "../../../src/helpers/hex";
|
||||||
|
import {hexToBytesNode} from "../../util";
|
||||||
|
|
||||||
describe("helpers / hex", () => {
|
describe("helpers / hex", () => {
|
||||||
const testCases: {id: string; hex: string}[] = [
|
const testCases: {id: string; hex: string}[] = [
|
||||||
|
@ -23,7 +24,3 @@ describe("helpers / hex", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function hexToBytesNode(hex: string): Buffer {
|
|
||||||
return Buffer.from(hex.replace("0x", ""), "hex");
|
|
||||||
}
|
|
||||||
|
|
Reference in New Issue