Skip to content

Commit b5df484

Browse files
committed
Copy buffers to JS memory and free
Signed-off-by: jamshale <jamiehalebc@gmail.com>
1 parent cf0586e commit b5df484

File tree

1 file changed

+68
-28
lines changed

1 file changed

+68
-28
lines changed

wrappers/javascript/packages/aries-askar-nodejs/src/NodeJSAriesAskar.ts

Lines changed: 68 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -321,9 +321,12 @@ export class NodeJSAriesAskar implements AriesAskar {
321321

322322
const errorCode = this.nativeAriesAskar.askar_entry_list_get_value(entryListHandle, index, ret)
323323
this.handleError(errorCode)
324-
325324
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
326-
return new Uint8Array(secretBufferToBuffer(byteBuffer))
325+
const view = secretBufferToBuffer(byteBuffer)
326+
const result = Buffer.from(view)
327+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
328+
329+
return new Uint8Array(result)
327330
}
328331

329332
public keyAeadDecrypt(options: KeyAeadDecryptOptions): Uint8Array {
@@ -332,9 +335,12 @@ export class NodeJSAriesAskar implements AriesAskar {
332335

333336
const errorCode = this.nativeAriesAskar.askar_key_aead_decrypt(localKeyHandle, ciphertext, nonce, tag, aad, ret)
334337
this.handleError(errorCode)
335-
336338
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
337-
return new Uint8Array(secretBufferToBuffer(byteBuffer))
339+
const view = secretBufferToBuffer(byteBuffer)
340+
const result = Buffer.from(view)
341+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
342+
343+
return new Uint8Array(result)
338344
}
339345

340346
public keyAeadEncrypt(options: KeyAeadEncryptOptions): EncryptedBuffer {
@@ -343,9 +349,11 @@ export class NodeJSAriesAskar implements AriesAskar {
343349

344350
const errorCode = this.nativeAriesAskar.askar_key_aead_encrypt(localKeyHandle, message, nonce, aad, ret)
345351
this.handleError(errorCode)
346-
347352
const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)
348-
return encryptedBufferStructToClass(encryptedBuffer)
353+
const view = encryptedBufferStructToClass(encryptedBuffer)
354+
this.nativeAriesAskar.askar_buffer_free(encryptedBuffer.secretBuffer)
355+
356+
return view
349357
}
350358

351359
public keyAeadGetPadding(options: KeyAeadGetPaddingOptions): number {
@@ -374,9 +382,12 @@ export class NodeJSAriesAskar implements AriesAskar {
374382

375383
const errorCode = this.nativeAriesAskar.askar_key_aead_random_nonce(localKeyHandle, ret)
376384
this.handleError(errorCode)
385+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
386+
const view = secretBufferToBuffer(byteBuffer)
387+
const result = Buffer.from(view)
388+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
377389

378-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
379-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
390+
return new Uint8Array(result)
380391
}
381392

382393
public keyConvert(options: KeyConvertOptions): LocalKeyHandle {
@@ -396,9 +407,12 @@ export class NodeJSAriesAskar implements AriesAskar {
396407

397408
const errorCode = this.nativeAriesAskar.askar_key_crypto_box(recipientKey, senderKey, message, nonce, ret)
398409
this.handleError(errorCode)
410+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
411+
const view = secretBufferToBuffer(byteBuffer)
412+
const result = Buffer.from(view)
413+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
399414

400-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
401-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
415+
return new Uint8Array(result)
402416
}
403417

404418
public keyCryptoBoxOpen(options: KeyCryptoBoxOpenOptions): Uint8Array {
@@ -407,19 +421,25 @@ export class NodeJSAriesAskar implements AriesAskar {
407421

408422
const errorCode = this.nativeAriesAskar.askar_key_crypto_box_open(recipientKey, senderKey, message, nonce, ret)
409423
this.handleError(errorCode)
424+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
425+
const view = secretBufferToBuffer(byteBuffer)
426+
const result = Buffer.from(view)
427+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
410428

411-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
412-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
429+
return new Uint8Array(result)
413430
}
414431

415432
public keyCryptoBoxRandomNonce(): Uint8Array {
416433
const ret = allocateSecretBuffer()
417434

418435
const errorCode = this.nativeAriesAskar.askar_key_crypto_box_random_nonce(ret)
419436
this.handleError(errorCode)
437+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
438+
const view = secretBufferToBuffer(byteBuffer)
439+
const result = Buffer.from(view)
440+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
420441

421-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
422-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
442+
return new Uint8Array(result)
423443
}
424444

425445
public keyCryptoBoxSeal(options: KeyCryptoBoxSealOptions): Uint8Array {
@@ -428,9 +448,12 @@ export class NodeJSAriesAskar implements AriesAskar {
428448

429449
const errorCode = this.nativeAriesAskar.askar_key_crypto_box_seal(localKeyHandle, message, ret)
430450
this.handleError(errorCode)
451+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
452+
const view = secretBufferToBuffer(byteBuffer)
453+
const result = Buffer.from(view)
454+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
431455

432-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
433-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
456+
return new Uint8Array(result)
434457
}
435458

436459
public keyCryptoBoxSealOpen(options: KeyCryptoBoxSealOpenOptions): Uint8Array {
@@ -439,9 +462,12 @@ export class NodeJSAriesAskar implements AriesAskar {
439462

440463
const errorCode = this.nativeAriesAskar.askar_key_crypto_box_seal_open(localKeyHandle, ciphertext, ret)
441464
this.handleError(errorCode)
465+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
466+
const view = secretBufferToBuffer(byteBuffer)
467+
const result = Buffer.from(view)
468+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
442469

443-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
444-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
470+
return new Uint8Array(result)
445471
}
446472

447473
public keyDeriveEcdh1pu(options: KeyDeriveEcdh1puOptions): LocalKeyHandle {
@@ -663,9 +689,12 @@ export class NodeJSAriesAskar implements AriesAskar {
663689

664690
const errorCode = this.nativeAriesAskar.askar_key_get_jwk_secret(localKeyHandle, ret)
665691
this.handleError(errorCode)
692+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
693+
const view = secretBufferToBuffer(byteBuffer)
694+
const result = Buffer.from(view)
695+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
666696

667-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
668-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
697+
return new Uint8Array(result)
669698
}
670699

671700
public keyGetJwkThumbprint(options: KeyGetJwkThumbprintOptions): string {
@@ -684,9 +713,12 @@ export class NodeJSAriesAskar implements AriesAskar {
684713

685714
const errorCode = this.nativeAriesAskar.askar_key_get_public_bytes(localKeyHandle, ret)
686715
this.handleError(errorCode)
716+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
717+
const view = secretBufferToBuffer(byteBuffer)
718+
const result = Buffer.from(view)
719+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
687720

688-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
689-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
721+
return new Uint8Array(result)
690722
}
691723

692724
public keyGetSecretBytes(options: KeyGetSecretBytesOptions): Uint8Array {
@@ -695,9 +727,12 @@ export class NodeJSAriesAskar implements AriesAskar {
695727

696728
const errorCode = this.nativeAriesAskar.askar_key_get_secret_bytes(localKeyHandle, ret)
697729
this.handleError(errorCode)
730+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
731+
const view = secretBufferToBuffer(byteBuffer)
732+
const result = Buffer.from(view)
733+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
698734

699-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
700-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
735+
return new Uint8Array(result)
701736
}
702737

703738
public keySignMessage(options: KeySignMessageOptions): Uint8Array {
@@ -706,9 +741,12 @@ export class NodeJSAriesAskar implements AriesAskar {
706741

707742
const errorCode = this.nativeAriesAskar.askar_key_sign_message(localKeyHandle, message, sigType, ret)
708743
this.handleError(errorCode)
744+
const byteBuffer = handleReturnPointer<ByteBufferType>(ret)
745+
const view = secretBufferToBuffer(byteBuffer)
746+
const result = Buffer.from(view)
747+
this.nativeAriesAskar.askar_buffer_free(byteBuffer)
709748

710-
const secretBuffer = handleReturnPointer<SecretBufferType>(ret)
711-
return new Uint8Array(secretBufferToBuffer(secretBuffer))
749+
return new Uint8Array(result)
712750
}
713751

714752
public keyUnwrapKey(options: KeyUnwrapKeyOptions): LocalKeyHandle {
@@ -738,9 +776,11 @@ export class NodeJSAriesAskar implements AriesAskar {
738776

739777
const errorCode = this.nativeAriesAskar.askar_key_wrap_key(localKeyHandle, other, nonce, ret)
740778
this.handleError(errorCode)
741-
742779
const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)
743-
return encryptedBufferStructToClass(encryptedBuffer)
780+
const view = encryptedBufferStructToClass(encryptedBuffer)
781+
this.nativeAriesAskar.askar_buffer_free(encryptedBuffer.secretBuffer)
782+
783+
return view
744784
}
745785

746786
public keyGetSupportedBackends(): string[] {

0 commit comments

Comments
 (0)