From 0097f851ef8b613aadd5d42663f60fb8a4b7a19e Mon Sep 17 00:00:00 2001 From: HamdaanAliQuatil Date: Fri, 28 Feb 2025 23:53:15 +0530 Subject: [PATCH 1/2] refactor: replace keypair class with typedef --- lib/src/impl_ffi/impl_ffi.ec_common.dart | 6 +-- lib/src/impl_ffi/impl_ffi.ecdh.dart | 6 +-- lib/src/impl_ffi/impl_ffi.ecdsa.dart | 6 +-- lib/src/impl_ffi/impl_ffi.rsa_common.dart | 6 +-- lib/src/impl_ffi/impl_ffi.rsaoaep.dart | 6 +-- lib/src/impl_ffi/impl_ffi.rsapss.dart | 6 +-- lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart | 6 +-- lib/src/impl_interface/impl_interface.dart | 15 +----- lib/src/impl_js/impl_js.ecdh.dart | 6 +-- lib/src/impl_js/impl_js.ecdsa.dart | 6 +-- lib/src/impl_js/impl_js.rsaoaep.dart | 6 +-- lib/src/impl_js/impl_js.rsapss.dart | 6 +-- lib/src/impl_js/impl_js.rsassapkcs1v15.dart | 6 +-- lib/src/testing/utils/testrunner.dart | 47 +++++++++---------- lib/src/testing/webcrypto/ecdh.dart | 13 +---- lib/src/webcrypto/webcrypto.ecdh.dart | 2 +- lib/src/webcrypto/webcrypto.ecdsa.dart | 2 +- lib/src/webcrypto/webcrypto.rsaoaep.dart | 2 +- lib/src/webcrypto/webcrypto.rsapss.dart | 2 +- .../webcrypto/webcrypto.rsassapkcs1v15.dart | 2 +- 20 files changed, 66 insertions(+), 91 deletions(-) diff --git a/lib/src/impl_ffi/impl_ffi.ec_common.dart b/lib/src/impl_ffi/impl_ffi.ec_common.dart index 77bb89be..9c097127 100644 --- a/lib/src/impl_ffi/impl_ffi.ec_common.dart +++ b/lib/src/impl_ffi/impl_ffi.ec_common.dart @@ -351,9 +351,9 @@ KeyPair<_EvpPKey, _EvpPKey> _generateEcKeyPair( final pubKey = _EvpPKey(); _checkOpIsOne(ssl.EVP_PKEY_set1_EC_KEY.invoke(pubKey, ecPub)); - return createKeyPair( - privKey, - pubKey, + return ( + privateKey: privKey, + publicKey: pubKey, ); }); } diff --git a/lib/src/impl_ffi/impl_ffi.ecdh.dart b/lib/src/impl_ffi/impl_ffi.ecdh.dart index fb720822..fb8e42d6 100644 --- a/lib/src/impl_ffi/impl_ffi.ecdh.dart +++ b/lib/src/impl_ffi/impl_ffi.ecdh.dart @@ -39,9 +39,9 @@ Future> EllipticCurve curve, ) async { final p = _generateEcKeyPair(curve); - return createKeyPair( - _EcdhPrivateKeyImpl(p.privateKey), - _EcdhPublicKeyImpl(p.publicKey), + return ( + privateKey: _EcdhPrivateKeyImpl(p.privateKey), + publicKey: _EcdhPublicKeyImpl(p.publicKey), ); } diff --git a/lib/src/impl_ffi/impl_ffi.ecdsa.dart b/lib/src/impl_ffi/impl_ffi.ecdsa.dart index 109a329f..9f9db6fa 100644 --- a/lib/src/impl_ffi/impl_ffi.ecdsa.dart +++ b/lib/src/impl_ffi/impl_ffi.ecdsa.dart @@ -55,9 +55,9 @@ Future> EllipticCurve curve, ) async { final p = _generateEcKeyPair(curve); - return createKeyPair( - _EcdsaPrivateKeyImpl(p.privateKey), - _EcdsaPublicKeyImpl(p.publicKey), + return ( + privateKey: _EcdsaPrivateKeyImpl(p.privateKey), + publicKey: _EcdsaPublicKeyImpl(p.publicKey), ); } diff --git a/lib/src/impl_ffi/impl_ffi.rsa_common.dart b/lib/src/impl_ffi/impl_ffi.rsa_common.dart index 5d8f1603..1bb2fa37 100644 --- a/lib/src/impl_ffi/impl_ffi.rsa_common.dart +++ b/lib/src/impl_ffi/impl_ffi.rsa_common.dart @@ -278,9 +278,9 @@ KeyPair<_EvpPKey, _EvpPKey> _generateRsaKeyPair( final pubKey = _EvpPKey(); _checkOp(ssl.EVP_PKEY_set1_RSA.invoke(pubKey, pubRSA) == 1); - return createKeyPair( - privKey, - pubKey, + return ( + privateKey: privKey, + publicKey: pubKey, ); }); } diff --git a/lib/src/impl_ffi/impl_ffi.rsaoaep.dart b/lib/src/impl_ffi/impl_ffi.rsaoaep.dart index 2136854b..93014b12 100644 --- a/lib/src/impl_ffi/impl_ffi.rsaoaep.dart +++ b/lib/src/impl_ffi/impl_ffi.rsaoaep.dart @@ -51,9 +51,9 @@ Future> // Get hash first, to avoid a leak of EVP_PKEY if _HashImpl.fromHash throws final h = _HashImpl.fromHash(hash); final keys = _generateRsaKeyPair(modulusLength, publicExponent); - return createKeyPair( - _RsaOaepPrivateKeyImpl(keys.privateKey, h), - _RsaOaepPublicKeyImpl(keys.publicKey, h), + return ( + privateKey: _RsaOaepPrivateKeyImpl(keys.privateKey, h), + publicKey: _RsaOaepPublicKeyImpl(keys.publicKey, h), ); } diff --git a/lib/src/impl_ffi/impl_ffi.rsapss.dart b/lib/src/impl_ffi/impl_ffi.rsapss.dart index 5c4d8242..85088891 100644 --- a/lib/src/impl_ffi/impl_ffi.rsapss.dart +++ b/lib/src/impl_ffi/impl_ffi.rsapss.dart @@ -51,9 +51,9 @@ Future> // Validate and get hash function final h = _HashImpl.fromHash(hash); final keys = _generateRsaKeyPair(modulusLength, publicExponent); - return createKeyPair( - _RsaPssPrivateKeyImpl(keys.privateKey, h), - _RsaPssPublicKeyImpl(keys.publicKey, h), + return ( + privateKey: _RsaPssPrivateKeyImpl(keys.privateKey, h), + publicKey: _RsaPssPublicKeyImpl(keys.publicKey, h), ); } diff --git a/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart b/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart index 747eaa2a..9132cdd3 100644 --- a/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart +++ b/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart @@ -51,9 +51,9 @@ Future> // Get hash first, to avoid a leak of EVP_PKEY if _HashImpl.fromHash throws final h = _HashImpl.fromHash(hash); final keys = _generateRsaKeyPair(modulusLength, publicExponent); - return createKeyPair( - _RsaSsaPkcs1V15PrivateKeyImpl(keys.privateKey, h), - _RsaSsaPkcs1V15PublicKeyImpl(keys.publicKey, h), + return ( + privateKey: _RsaSsaPkcs1V15PrivateKeyImpl(keys.privateKey, h), + publicKey: _RsaSsaPkcs1V15PublicKeyImpl(keys.publicKey, h), ); } diff --git a/lib/src/impl_interface/impl_interface.dart b/lib/src/impl_interface/impl_interface.dart index 12be55b6..845a177f 100644 --- a/lib/src/impl_interface/impl_interface.dart +++ b/lib/src/impl_interface/impl_interface.dart @@ -34,20 +34,7 @@ part 'impl_interface.digest.dart'; part 'impl_interface.random.dart'; /// A key-pair as returned from key generation. -class KeyPair { - KeyPair._(this.privateKey, this.publicKey); // keep the constructor private. - - /// Private key for [publicKey]. - final S privateKey; - - /// Public key matching [privateKey]. - final T publicKey; -} - -/// Factory method to create KeyPair instance -KeyPair createKeyPair(S privateKey, T publicKey) { - return KeyPair._(privateKey, publicKey); -} +typedef KeyPair = ({T privateKey, S publicKey}); /// Elliptic curves supported by ECDSA and ECDH. /// diff --git a/lib/src/impl_js/impl_js.ecdh.dart b/lib/src/impl_js/impl_js.ecdh.dart index 19ac91f7..36cbb727 100644 --- a/lib/src/impl_js/impl_js.ecdh.dart +++ b/lib/src/impl_js/impl_js.ecdh.dart @@ -66,9 +66,9 @@ Future> ), _usagesDeriveBits, ); - return createKeyPair( - _EcdhPrivateKeyImpl(pair.privateKey), - _EcdhPublicKeyImpl(pair.publicKey), + return ( + privateKey: _EcdhPrivateKeyImpl(pair.privateKey), + publicKey: _EcdhPublicKeyImpl(pair.publicKey), ); } diff --git a/lib/src/impl_js/impl_js.ecdsa.dart b/lib/src/impl_js/impl_js.ecdsa.dart index 71817997..06ff5210 100644 --- a/lib/src/impl_js/impl_js.ecdsa.dart +++ b/lib/src/impl_js/impl_js.ecdsa.dart @@ -60,9 +60,9 @@ Future> ), _usagesSignVerify, ); - return createKeyPair( - _EcdsaPrivateKeyImpl(pair.privateKey), - _EcdsaPublicKeyImpl(pair.publicKey), + return ( + privateKey: _EcdsaPrivateKeyImpl(pair.privateKey), + publicKey: _EcdsaPublicKeyImpl(pair.publicKey), ); } diff --git a/lib/src/impl_js/impl_js.rsaoaep.dart b/lib/src/impl_js/impl_js.rsaoaep.dart index f0363c81..346813a0 100644 --- a/lib/src/impl_js/impl_js.rsaoaep.dart +++ b/lib/src/impl_js/impl_js.rsaoaep.dart @@ -64,9 +64,9 @@ Future> ), _usagesEncryptDecrypt, ); - return createKeyPair( - _RsaOaepPrivateKeyImpl(pair.privateKey), - _RsaOaepPublicKeyImpl(pair.publicKey), + return ( + privateKey: _RsaOaepPrivateKeyImpl(pair.privateKey), + publicKey: _RsaOaepPublicKeyImpl(pair.publicKey), ); } diff --git a/lib/src/impl_js/impl_js.rsapss.dart b/lib/src/impl_js/impl_js.rsapss.dart index 3c72740b..34a92f6f 100644 --- a/lib/src/impl_js/impl_js.rsapss.dart +++ b/lib/src/impl_js/impl_js.rsapss.dart @@ -58,9 +58,9 @@ Future> ), _usagesSignVerify, ); - return createKeyPair( - _RsaPssPrivateKeyImpl(pair.privateKey), - _RsaPssPublicKeyImpl(pair.publicKey), + return ( + privateKey: _RsaPssPrivateKeyImpl(pair.privateKey), + publicKey: _RsaPssPublicKeyImpl(pair.publicKey), ); } diff --git a/lib/src/impl_js/impl_js.rsassapkcs1v15.dart b/lib/src/impl_js/impl_js.rsassapkcs1v15.dart index 8b979aeb..f2af1f7c 100644 --- a/lib/src/impl_js/impl_js.rsassapkcs1v15.dart +++ b/lib/src/impl_js/impl_js.rsassapkcs1v15.dart @@ -57,9 +57,9 @@ Future> ), _usagesSignVerify, ); - return createKeyPair( - _RsaSsaPkcs1V15PrivateKeyImpl(pair.privateKey), - _RsaSsaPkcs1V15PublicKeyImpl(pair.publicKey), + return ( + privateKey: _RsaSsaPkcs1V15PrivateKeyImpl(pair.privateKey), + publicKey: _RsaSsaPkcs1V15PublicKeyImpl(pair.publicKey), ); } diff --git a/lib/src/testing/utils/testrunner.dart b/lib/src/testing/utils/testrunner.dart index 6aed509a..971b0012 100644 --- a/lib/src/testing/utils/testrunner.dart +++ b/lib/src/testing/utils/testrunner.dart @@ -213,15 +213,7 @@ typedef DeriveBitsFn = Future> Function( Map deriveParams, ); -class _KeyPair implements KeyPair { - @override - final S privateKey; - - @override - final T publicKey; - - _KeyPair({required this.privateKey, required this.publicKey}); -} +typedef KeyPair = ({S privateKey, T publicKey}); @sealed class TestRunner { @@ -402,7 +394,7 @@ class TestRunner { exportPrivateJsonWebKey: exportPrivateJsonWebKey, generateKeyPair: (params) async { final k = await generateKey(params); - return _KeyPair(privateKey: k, publicKey: k); + return (privateKey: k, publicKey: k); }, signBytes: signBytes, signStream: signStream, @@ -867,9 +859,10 @@ void _runTests( } else { test('create derivedBits', () async { derivedBits = await r._deriveBits( - _KeyPair( - privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey), + ( + privateKey: privateKey as PrivateKey, + publicKey: publicKey as PublicKey + ), c.derivedLength!, c.deriveParams!, ); @@ -878,9 +871,10 @@ void _runTests( test('validated derivedBits', () async { final derived = await r._deriveBits( - _KeyPair( - privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey), + ( + privateKey: privateKey as PrivateKey, + publicKey: publicKey as PublicKey + ), c.derivedLength!, c.deriveParams!, ); @@ -983,9 +977,10 @@ void _runTests( } if (r._deriveBits != null) { final derived = await r._deriveBits( - _KeyPair( - privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey), + ( + privateKey: privateKey as PrivateKey, + publicKey: publicKey as PublicKey + ), c.derivedLength!, c.deriveParams!, ); @@ -1009,9 +1004,10 @@ void _runTests( } if (r._deriveBits != null) { final derived = await r._deriveBits( - _KeyPair( - privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey), + ( + privateKey: privateKey as PrivateKey, + publicKey: publicKey as PublicKey + ), c.derivedLength!, c.deriveParams!, ); @@ -1363,9 +1359,10 @@ void _runTests( if (r._deriveBits != null) { test('deriveBits', () async { final derived = await r._deriveBits( - _KeyPair( - privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey), + ( + privateKey: privateKey as PrivateKey, + publicKey: publicKey as PublicKey + ), c.derivedLength!, c.deriveParams!, ); diff --git a/lib/src/testing/webcrypto/ecdh.dart b/lib/src/testing/webcrypto/ecdh.dart index a410f1af..848572b7 100644 --- a/lib/src/testing/webcrypto/ecdh.dart +++ b/lib/src/testing/webcrypto/ecdh.dart @@ -17,16 +17,7 @@ import '../utils/utils.dart'; import '../utils/testrunner.dart'; import '../utils/detected_runtime.dart'; -class _KeyPair - implements KeyPair { - @override - final S privateKey; - - @override - final T publicKey; - - _KeyPair({required this.privateKey, required this.publicKey}); -} +typedef KeyPair = ({S privateKey, T publicKey}); final runner = TestRunner.asymmetric( algorithm: 'ECDH', @@ -58,7 +49,7 @@ final runner = TestRunner.asymmetric( final b = await EcdhPrivateKey.generateKey(curveFromJson( generateKeyPairParams, )); - return _KeyPair( + return ( privateKey: a.privateKey, publicKey: b.publicKey, ); diff --git a/lib/src/webcrypto/webcrypto.ecdh.dart b/lib/src/webcrypto/webcrypto.ecdh.dart index 46712862..34a8d174 100644 --- a/lib/src/webcrypto/webcrypto.ecdh.dart +++ b/lib/src/webcrypto/webcrypto.ecdh.dart @@ -193,7 +193,7 @@ final class EcdhPrivateKey { final privateKey = EcdhPrivateKey(privateKeyImpl); final publicKey = EcdhPublicKey(publicKeyImpl); - return createKeyPair(privateKey, publicKey); + return (privateKey: privateKey, publicKey: publicKey); } /// Derive a shared secret from two ECDH key pairs using the private key from one pair diff --git a/lib/src/webcrypto/webcrypto.ecdsa.dart b/lib/src/webcrypto/webcrypto.ecdsa.dart index 6e5c9be5..c5b09075 100644 --- a/lib/src/webcrypto/webcrypto.ecdsa.dart +++ b/lib/src/webcrypto/webcrypto.ecdsa.dart @@ -50,7 +50,7 @@ final class EcdsaPrivateKey { final privateKey = EcdsaPrivateKey(privateKeyImpl); final publicKey = EcdsaPublicKey(publicKeyImpl); - return createKeyPair(privateKey, publicKey); + return (privateKey: privateKey, publicKey: publicKey); } /// TODO: Document that this returns the raw signature format specified diff --git a/lib/src/webcrypto/webcrypto.rsaoaep.dart b/lib/src/webcrypto/webcrypto.rsaoaep.dart index 91fa8546..5ce53a6a 100644 --- a/lib/src/webcrypto/webcrypto.rsaoaep.dart +++ b/lib/src/webcrypto/webcrypto.rsaoaep.dart @@ -231,7 +231,7 @@ final class RsaOaepPrivateKey { final privateKey = RsaOaepPrivateKey(privateKeyImpl); final publicKey = RsaOaepPublicKey(publicKeyImpl); - return createKeyPair(privateKey, publicKey); + return (privateKey: privateKey, publicKey: publicKey); } /// Decrypt [data] encrypted with [RsaOaepPublicKey.encryptBytes] from the diff --git a/lib/src/webcrypto/webcrypto.rsapss.dart b/lib/src/webcrypto/webcrypto.rsapss.dart index d8476214..b4e2b8d7 100644 --- a/lib/src/webcrypto/webcrypto.rsapss.dart +++ b/lib/src/webcrypto/webcrypto.rsapss.dart @@ -223,7 +223,7 @@ final class RsaPssPrivateKey { final privateKey = RsaPssPrivateKey(privateKeyImpl); final publicKey = RsaPssPublicKey(publicKeyImpl); - return createKeyPair(privateKey, publicKey); + return (privateKey: privateKey, publicKey: publicKey); } /// Sign [data] with this RSASSA-PSS private key. diff --git a/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart b/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart index acb1745b..1a7a98eb 100644 --- a/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart +++ b/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart @@ -259,7 +259,7 @@ final class RsassaPkcs1V15PrivateKey { final privateKey = RsassaPkcs1V15PrivateKey(privateKeyImpl); final publicKey = RsassaPkcs1V15PublicKey(publicKeyImpl); - return createKeyPair(privateKey, publicKey); + return (privateKey: privateKey, publicKey: publicKey); } /// Sign [data] with this RSASSA-PKCS1-v1_5 private key. From 11b04cf36588ff79165b77bb9f6102b664c7fb18 Mon Sep 17 00:00:00 2001 From: HamdaanAliQuatil Date: Sun, 4 May 2025 16:06:34 +0530 Subject: [PATCH 2/2] fix: remove unused declarations --- lib/src/testing/utils/testrunner.dart | 2 -- lib/src/testing/webcrypto/ecdh.dart | 2 -- 2 files changed, 4 deletions(-) diff --git a/lib/src/testing/utils/testrunner.dart b/lib/src/testing/utils/testrunner.dart index 971b0012..42eeaa09 100644 --- a/lib/src/testing/utils/testrunner.dart +++ b/lib/src/testing/utils/testrunner.dart @@ -213,8 +213,6 @@ typedef DeriveBitsFn = Future> Function( Map deriveParams, ); -typedef KeyPair = ({S privateKey, T publicKey}); - @sealed class TestRunner { final String algorithm; diff --git a/lib/src/testing/webcrypto/ecdh.dart b/lib/src/testing/webcrypto/ecdh.dart index 848572b7..4c689916 100644 --- a/lib/src/testing/webcrypto/ecdh.dart +++ b/lib/src/testing/webcrypto/ecdh.dart @@ -17,8 +17,6 @@ import '../utils/utils.dart'; import '../utils/testrunner.dart'; import '../utils/detected_runtime.dart'; -typedef KeyPair = ({S privateKey, T publicKey}); - final runner = TestRunner.asymmetric( algorithm: 'ECDH', importPrivateRawKey: null, // not supported