Skip to content

Commit b0cb993

Browse files
authored
fix: use subarray instead of slice (#553)
slice allocates a new buffer and subarray is a view into the original. This ensures that we zero out the subarrays and not create new copies
1 parent 10be3d4 commit b0cb993

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

packages/crypto/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ const throwWrapUnwrapErrors = (operationError: unknown, wrapError: unknown, oper
4141
}
4242

4343
function rawSign(extendedSecretKey: Uint8Array, data: Uint8Array): Uint8Array {
44-
const scalar = bytesToNumberLE(extendedSecretKey.slice(0, 32))
44+
const scalar = bytesToNumberLE(extendedSecretKey.subarray(0, 32))
4545

46-
const kR = extendedSecretKey.slice(32, 64)
46+
const kR = extendedSecretKey.subarray(32, 64)
4747

4848
// (1): pubKey = scalar * G
4949
const publicKey = rawPubkey(extendedSecretKey)
@@ -66,7 +66,7 @@ function rawSign(extendedSecretKey: Uint8Array, data: Uint8Array): Uint8Array {
6666
}
6767

6868
function rawPubkey(extendedSecretKey: Uint8Array): Uint8Array {
69-
const scalar = bytesToNumberLE(extendedSecretKey.slice(0, 32))
69+
const scalar = bytesToNumberLE(extendedSecretKey.subarray(0, 32))
7070
const clearedTopBitScalar = scalar & ((1n << 255n) - 1n)
7171
const reducedScalar = mod(clearedTopBitScalar, ed25519.Point.Fn.ORDER)
7272

@@ -106,7 +106,7 @@ export const nobleEd25519SigningKeyFromWrappedSecret = async (wrapUnwrap: Wrappe
106106
} else if ('unwrapHdExtendedPrivateKey' in wrapUnwrap) {
107107
secret = await wrapUnwrap.unwrapHdExtendedPrivateKey()
108108
assertEd25519SecretLength(secret, 'HD extended key')
109-
signature = rawSign(secret.slice(0, 64), bytesToSign)
109+
signature = rawSign(secret.subarray(0, 64), bytesToSign)
110110
} else {
111111
throw new Error('Invalid WrappedEd25519Secret: missing unwrap function')
112112
}
@@ -153,7 +153,7 @@ export const nobleEd25519SigningKeyFromWrappedSecret = async (wrapUnwrap: Wrappe
153153
} else if ('unwrapHdExtendedPrivateKey' in wrapUnwrap) {
154154
secret = await wrapUnwrap.unwrapHdExtendedPrivateKey()
155155
assertEd25519SecretLength(secret, 'HD extended key')
156-
pubkey = rawPubkey(secret.slice(0, 64))
156+
pubkey = rawPubkey(secret.subarray(0, 64))
157157
} else {
158158
throw new Error('Invalid WrappedEd25519Secret: missing unwrap function')
159159
}

0 commit comments

Comments
 (0)