Skip to content

Commit 536711e

Browse files
committed
add askarKeyGetPublicBytes
1 parent 72dd4db commit 536711e

File tree

3 files changed

+36
-19
lines changed

3 files changed

+36
-19
lines changed

lib/askar/askar_wrapper.dart

+13-7
Original file line numberDiff line numberDiff line change
@@ -822,16 +822,22 @@ AskarResult<String> askarKeyGetJwkThumbprint(
822822
return AskarResult<String>(errorCode, value);
823823
}
824824

825-
ErrorCode askarKeyGetPublicBytes(
826-
LocalKeyHandle handle,
827-
Pointer<NativeSecretBuffer> out,
828-
) {
829-
final result = nativeAskarKeyGetPublicBytes(
825+
AskarResult<Uint8List> askarKeyGetPublicBytes(LocalKeyHandle handle) {
826+
Pointer<NativeSecretBuffer> secretBufferPtr = calloc<NativeSecretBuffer>();
827+
828+
final funcResult = nativeAskarKeyGetPublicBytes(
830829
handle,
831-
out,
830+
secretBufferPtr,
832831
);
833832

834-
return ErrorCode.fromInt(result);
833+
final errorCode = ErrorCode.fromInt(funcResult);
834+
835+
final value = Uint8List.fromList(secretBufferToBytesList(secretBufferPtr.ref));
836+
837+
calloc.free(secretBufferPtr.ref.data);
838+
calloc.free(secretBufferPtr);
839+
840+
return AskarResult<Uint8List>(errorCode, value);
835841
}
836842

837843
AskarResult<Uint8List> askarKeyGetSecretBytes(LocalKeyHandle handle) {

test/askar_test.dart

+22-11
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ void main() {
173173

174174
final thumbprintResult = keyGetJwkThumbprintTest(localKeyHandle, algorithm);
175175

176+
keyGetPublicBytesTest(localKeyHandle);
177+
176178
await sessionInsertKeyTest(
177179
sessionHandle, localKeyHandle, '${name}_1', metadata, tags);
178180

@@ -308,8 +310,7 @@ void main() {
308310
receive: true)
309311
.value;
310312

311-
keyUnwrapKeyTest(
312-
derivedReceiver, KeyAlgorithm.aesA256CbcHs512, encryptedKey);
313+
keyUnwrapKeyTest(derivedReceiver, KeyAlgorithm.aesA256CbcHs512, encryptedKey);
313314

314315
askarKeyFree(alice);
315316
askarKeyFree(bob);
@@ -417,26 +418,26 @@ void main() {
417418
});
418419
});
419420

420-
group('Key Aead Decryption Tests:', () {
421+
group('Key Aead Decryption Tests:', () {
421422
test('Decryption with and without aad', () {
422423
final keyGenerateResult = keyGenerateTest(KeyAlgorithm.aesA256Gcm);
423424
final localKeyHandle = keyGenerateResult.value;
424425
final nonce = askarKeyAeadRandomNonce(localKeyHandle);
425426
final aad = Uint8List(0);
426427
final Uint8List message = Uint8List.fromList([1, 2, 3, 4]);
427-
428+
428429
final encryptedBuffer = askarKeyAeadEncrypt(
429430
localKeyHandle,
430431
message,
431432
nonce: nonce.value,
432433
);
433434

434-
keyAeadDecryptTest(
435-
localKeyHandle, encryptedBuffer.value.ciphertext, nonce.value, encryptedBuffer.value.tag, aad: aad,
436-
expected: message);
437-
keyAeadDecryptTest(
438-
localKeyHandle, encryptedBuffer.value.ciphertext, nonce.value, encryptedBuffer.value.tag,
439-
expected: message);
435+
keyAeadDecryptTest(localKeyHandle, encryptedBuffer.value.ciphertext, nonce.value,
436+
encryptedBuffer.value.tag,
437+
aad: aad, expected: message);
438+
keyAeadDecryptTest(localKeyHandle, encryptedBuffer.value.ciphertext, nonce.value,
439+
encryptedBuffer.value.tag,
440+
expected: message);
440441
});
441442
});
442443
}
@@ -467,7 +468,7 @@ AskarResult<Uint8List> keyAeadDecryptTest(
467468
final result = askarKeyAeadDecrypt(handle, ciphertext, nonce, tag, aad: aad);
468469

469470
printAskarResult('KeyAeadDecryptTest', result);
470-
471+
471472
expect(result.errorCode, equals(ErrorCode.success));
472473
expect(result.value, equals(expected));
473474

@@ -703,6 +704,16 @@ AskarResult<Uint8List> keyGetSecretBytesTest(LocalKeyHandle handle,
703704
return result;
704705
}
705706

707+
AskarResult<Uint8List> keyGetPublicBytesTest(LocalKeyHandle handle) {
708+
final result = askarKeyGetPublicBytes(handle);
709+
710+
printAskarResult('KeyGetPublicBytes', result);
711+
expect(result.errorCode, ErrorCode.success);
712+
expect(result.value.isNotEmpty, equals(true));
713+
714+
return result;
715+
}
716+
706717
AskarResult<String> keyEntryListGetNameTest(KeyEntryListHandle handle, int index,
707718
{required String expectedValue}) {
708719
final result = askarKeyEntryListGetName(handle, index);

todo.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696

9797
- [x] askar_key_get_jwk_thumbprint: (args_0: Buffer, args_1: string, args_2: Buffer) => number;
9898

99-
- [ ] askar_key_get_public_bytes: (args_0: Buffer, args_1: Buffer) => number; **(required)**
99+
- [x] askar_key_get_public_bytes: (args_0: Buffer, args_1: Buffer) => number; **(required)**
100100

101101
- [x] askar_key_get_secret_bytes: (args_0: Buffer, args_1: Buffer) => number; **(required)**
102102

0 commit comments

Comments
 (0)