diff --git a/packages/crypto/src/keccak.ts b/packages/crypto/src/keccak.ts index 66f647a7..4f82b047 100644 --- a/packages/crypto/src/keccak.ts +++ b/packages/crypto/src/keccak.ts @@ -1,6 +1,7 @@ import { keccak_256 } from "@noble/hashes/sha3"; import { HashFunction } from "./hash"; +import { toRealUint8Array } from "./utils"; export class Keccak256 implements HashFunction { public readonly blockSize = 512 / 8; @@ -14,7 +15,7 @@ export class Keccak256 implements HashFunction { } public update(data: Uint8Array): Keccak256 { - this.impl.update(data); + this.impl.update(toRealUint8Array(data)); return this; } diff --git a/packages/crypto/src/ripemd.ts b/packages/crypto/src/ripemd.ts index 263e573c..2aad9402 100644 --- a/packages/crypto/src/ripemd.ts +++ b/packages/crypto/src/ripemd.ts @@ -1,6 +1,7 @@ import { ripemd160 as nobleRipemd160 } from "@noble/hashes/ripemd160"; import { HashFunction } from "./hash"; +import { toRealUint8Array } from "./utils"; export class Ripemd160 implements HashFunction { public readonly blockSize = 512 / 8; @@ -14,7 +15,7 @@ export class Ripemd160 implements HashFunction { } public update(data: Uint8Array): Ripemd160 { - this.impl.update(data); + this.impl.update(toRealUint8Array(data)); return this; } diff --git a/packages/crypto/src/sha.ts b/packages/crypto/src/sha.ts index 25656aed..4e59e81d 100644 --- a/packages/crypto/src/sha.ts +++ b/packages/crypto/src/sha.ts @@ -2,6 +2,7 @@ import { sha256 as nobleSha256 } from "@noble/hashes/sha256"; import { sha512 as nobleSha512 } from "@noble/hashes/sha512"; import { HashFunction } from "./hash"; +import { toRealUint8Array } from "./utils"; export class Sha256 implements HashFunction { public readonly blockSize = 512 / 8; @@ -15,7 +16,7 @@ export class Sha256 implements HashFunction { } public update(data: Uint8Array): Sha256 { - this.impl.update(data); + this.impl.update(toRealUint8Array(data)); return this; } @@ -41,7 +42,7 @@ export class Sha512 implements HashFunction { } public update(data: Uint8Array): Sha512 { - this.impl.update(data); + this.impl.update(toRealUint8Array(data)); return this; } diff --git a/packages/crypto/src/utils.ts b/packages/crypto/src/utils.ts new file mode 100644 index 00000000..9dbec0d0 --- /dev/null +++ b/packages/crypto/src/utils.ts @@ -0,0 +1,5 @@ +// See https://github.com/paulmillr/noble-hashes/issues/25 for why this is needed +export function toRealUint8Array(data: ArrayLike): Uint8Array { + if (data instanceof Uint8Array) return data; + else return Uint8Array.from(data); +}