@@ -12,6 +12,7 @@ import 'package:import_so_libaskar/askar/enums/askar_key_algorithm.dart';
12
12
import 'package:import_so_libaskar/askar/enums/askar_key_backend.dart' ;
13
13
import 'package:import_so_libaskar/askar/enums/askar_signature_algorithm.dart' ;
14
14
import 'package:import_so_libaskar/askar/enums/askar_store_key_method.dart' ;
15
+ import 'package:import_so_libaskar/askar/exceptions/exceptions.dart' ;
15
16
16
17
import 'askar_native_functions.dart' ;
17
18
import 'askar_utils.dart' ;
@@ -26,6 +27,13 @@ final class AskarResult<T> {
26
27
String toString () {
27
28
return "AskarResult($errorCode , $value )" ;
28
29
}
30
+
31
+ T getValueOrException () {
32
+ if (errorCode == ErrorCode .success) {
33
+ return value;
34
+ }
35
+ throw AskarErrorCodeException (errorCode);
36
+ }
29
37
}
30
38
31
39
typedef LocalKeyHandle = int ;
@@ -211,8 +219,8 @@ AskarResult<String> askarStringListGetItem(StringListHandle handle, int index) {
211
219
}
212
220
213
221
AskarResult <Uint8List > askarKeyAeadDecrypt (
214
- LocalKeyHandle handle, Uint8List ciphertext, Uint8List nonce, Uint8List tag,
215
- {Uint8List ? aad}) {
222
+ LocalKeyHandle handle, Uint8List ciphertext, Uint8List nonce,
223
+ {Uint8List ? tag, Uint8List ? aad}) {
216
224
aad ?? = Uint8List (0 );
217
225
218
226
Pointer <NativeByteBuffer > ciphertextPtr = bytesListToByteBuffer (ciphertext);
@@ -421,36 +429,54 @@ ErrorCode askarKeyCryptoBoxSealOpen(
421
429
return ErrorCode .fromInt (result);
422
430
}
423
431
424
- ErrorCode askarKeyDeriveEcdh1pu (
425
- String alg ,
426
- LocalKeyHandle ephemKey ,
432
+ AskarResult < LocalKeyHandle > askarKeyDeriveEcdh1pu (
433
+ KeyAlgorithm algorithm ,
434
+ LocalKeyHandle ephemeralKey ,
427
435
LocalKeyHandle senderKey,
428
- LocalKeyHandle recipKey,
429
- Pointer <NativeByteBuffer > algId,
430
- Pointer <NativeByteBuffer > apu,
431
- Pointer <NativeByteBuffer > apv,
432
- Pointer <NativeByteBuffer > ccTag,
433
- int receive,
434
- Pointer <NativeLocalKeyHandle > out,
436
+ LocalKeyHandle recipientKey,
437
+ Uint8List algId,
438
+ Uint8List apu,
439
+ Uint8List apv,
440
+ Uint8List ccTag,
441
+ bool receive,
435
442
) {
436
- final algPointer = alg.toNativeUtf8 ();
443
+ Pointer <NativeLocalKeyHandle > outPtr = calloc <NativeLocalKeyHandle >();
444
+
445
+ final algPointer = algorithm.value.toNativeUtf8 ();
446
+ final algIdByteBufferPtr = bytesListToByteBuffer (algId);
447
+ final apuByteBufferPtr = bytesListToByteBuffer (apu);
448
+ final apvByteBufferPtr = bytesListToByteBuffer (apv);
449
+ final ccTagByteBufferPtr = bytesListToByteBuffer (ccTag);
437
450
438
- final result = nativeAskarKeyDeriveEcdh1pu (
451
+ final funcResult = nativeAskarKeyDeriveEcdh1pu (
439
452
algPointer,
440
- ephemKey ,
453
+ ephemeralKey ,
441
454
senderKey,
442
- recipKey ,
443
- algId ,
444
- apu ,
445
- apv ,
446
- ccTag ,
447
- receive,
448
- out ,
455
+ recipientKey ,
456
+ algIdByteBufferPtr.ref ,
457
+ apuByteBufferPtr.ref ,
458
+ apvByteBufferPtr.ref ,
459
+ ccTagByteBufferPtr.ref ,
460
+ boolToInt ( receive) ,
461
+ outPtr ,
449
462
);
450
463
464
+ final errorCode = ErrorCode .fromInt (funcResult);
465
+
466
+ LocalKeyHandle value = (errorCode == ErrorCode .success ? outPtr.value : 0 );
467
+
468
+ calloc.free (algIdByteBufferPtr.ref.data);
469
+ calloc.free (algIdByteBufferPtr);
470
+ calloc.free (apuByteBufferPtr.ref.data);
471
+ calloc.free (apuByteBufferPtr);
472
+ calloc.free (apvByteBufferPtr.ref.data);
473
+ calloc.free (apvByteBufferPtr);
474
+ calloc.free (ccTagByteBufferPtr.ref.data);
475
+ calloc.free (ccTagByteBufferPtr);
451
476
calloc.free (algPointer);
477
+ calloc.free (outPtr);
452
478
453
- return ErrorCode . fromInt (result );
479
+ return AskarResult < LocalKeyHandle >(errorCode, value );
454
480
}
455
481
456
482
AskarResult <LocalKeyHandle > askarKeyDeriveEcdhEs (
@@ -632,22 +658,31 @@ ErrorCode askarKeyFromKeyExchange(
632
658
return ErrorCode .fromInt (result);
633
659
}
634
660
635
- ErrorCode askarKeyFromPublicBytes (
636
- String alg,
637
- Pointer <NativeByteBuffer > public_,
638
- Pointer <NativeLocalKeyHandle > out,
661
+ AskarResult <LocalKeyHandle > askarKeyFromPublicBytes (
662
+ KeyAlgorithm algorithm,
663
+ Uint8List publicBytes,
639
664
) {
640
- final algPointer = alg.toNativeUtf8 ();
665
+ Pointer <IntPtr > localKeyHandlePtr = calloc <IntPtr >();
666
+
667
+ final algPointer = algorithm.value.toNativeUtf8 ();
668
+ final byteBufferPointer = bytesListToByteBuffer (publicBytes);
641
669
642
- final result = nativeAskarKeyFromPublicBytes (
670
+ final funcResult = nativeAskarKeyFromPublicBytes (
643
671
algPointer,
644
- public_ ,
645
- out ,
672
+ byteBufferPointer.ref ,
673
+ localKeyHandlePtr ,
646
674
);
647
675
676
+ final errorCode = ErrorCode .fromInt (funcResult);
677
+
678
+ final localKeyHandle = (errorCode == ErrorCode .success) ? localKeyHandlePtr.value : 0 ;
679
+
648
680
calloc.free (algPointer);
681
+ calloc.free (localKeyHandlePtr);
682
+ calloc.free (byteBufferPointer.ref.data);
683
+ calloc.free (byteBufferPointer);
649
684
650
- return ErrorCode . fromInt (result );
685
+ return AskarResult < LocalKeyHandle >(errorCode, localKeyHandle );
651
686
}
652
687
653
688
AskarResult <LocalKeyHandle > askarKeyFromSecretBytes (
@@ -804,16 +839,22 @@ AskarResult<String> askarKeyGetJwkThumbprint(
804
839
return AskarResult <String >(errorCode, value);
805
840
}
806
841
807
- ErrorCode askarKeyGetPublicBytes (
808
- LocalKeyHandle handle,
809
- Pointer <NativeSecretBuffer > out,
810
- ) {
811
- final result = nativeAskarKeyGetPublicBytes (
842
+ AskarResult <Uint8List > askarKeyGetPublicBytes (LocalKeyHandle handle) {
843
+ Pointer <NativeSecretBuffer > secretBufferPtr = calloc <NativeSecretBuffer >();
844
+
845
+ final funcResult = nativeAskarKeyGetPublicBytes (
812
846
handle,
813
- out ,
847
+ secretBufferPtr ,
814
848
);
815
849
816
- return ErrorCode .fromInt (result);
850
+ final errorCode = ErrorCode .fromInt (funcResult);
851
+
852
+ final value = Uint8List .fromList (secretBufferToBytesList (secretBufferPtr.ref));
853
+
854
+ calloc.free (secretBufferPtr.ref.data);
855
+ calloc.free (secretBufferPtr);
856
+
857
+ return AskarResult <Uint8List >(errorCode, value);
817
858
}
818
859
819
860
AskarResult <Uint8List > askarKeyGetSecretBytes (LocalKeyHandle handle) {
@@ -867,12 +908,8 @@ AskarResult<Uint8List> askarKeySignMessage(
867
908
}
868
909
869
910
AskarResult <LocalKeyHandle > askarKeyUnwrapKey (
870
- LocalKeyHandle handle,
871
- KeyAlgorithm algorithm,
872
- Uint8List ciphertext,
873
- Uint8List nonce,
874
- Uint8List tag,
875
- ) {
911
+ LocalKeyHandle handle, KeyAlgorithm algorithm, Uint8List ciphertext,
912
+ {Uint8List ? nonce, Uint8List ? tag}) {
876
913
Pointer <NativeLocalKeyHandle > out = calloc <NativeLocalKeyHandle >();
877
914
878
915
final algPtr = algorithm.value.toNativeUtf8 ();
@@ -941,14 +978,12 @@ AskarResult<bool> askarKeyVerifySignature(
941
978
}
942
979
943
980
AskarResult <AskarEncryptedBuffer > askarKeyWrapKey (
944
- LocalKeyHandle handle,
945
- LocalKeyHandle other,
946
- Uint8List nonce,
947
- ) {
948
- final byteBufferPointer = bytesListToByteBuffer (nonce);
949
-
981
+ LocalKeyHandle handle, LocalKeyHandle other,
982
+ {Uint8List ? nonce}) {
950
983
Pointer <NativeEncryptedBuffer > encryptedBufferPtr = calloc <NativeEncryptedBuffer >();
951
984
985
+ final byteBufferPointer = bytesListToByteBuffer (nonce);
986
+
952
987
final errorCode = ErrorCode .fromInt (nativeAskarKeyWrapKey (
953
988
handle,
954
989
other,
0 commit comments