diff --git a/packages/simplexmq/example/simplexmq_example.dart b/packages/simplexmq/example/simplexmq_example.dart index ef6b175bc5..e69de29bb2 100644 --- a/packages/simplexmq/example/simplexmq_example.dart +++ b/packages/simplexmq/example/simplexmq_example.dart @@ -1,39 +0,0 @@ -import 'dart:typed_data'; - -import 'package:simplexmq/src/buffer.dart'; -import 'package:simplexmq/src/crypto.dart'; -import 'package:simplexmq/src/rsa_keys.dart'; -// import 'package:simplexmq/src/transport.dart'; -// import 'dart:io'; -// import 'package:rsa_pkcs/rsa_pkcs.dart' show RSAPKCSParser; -// import 'package:pointycastle/asymmetric/api.dart'; -// import 'package:ssh_key/ssh_key.dart'; - -void main() async { - // final socket = await Socket.connect('localhost', 8080); - // socket.add([65, 66, 67]); - // await socket.flush(); - final keyStr = - // 'MIIBoDANBgkqhkiG9w0BAQEFAAOCAY0AMIIBiAKCAQEAtfalLDtEveHNlKq782D9kIRYbICBckd+v83HeAs7MI/u39fBRmk8kHZ8k/OzN5o+aBWDoBAm7m+24fnolR2QwQG4WSSLPLr3uXQDm7hHWHCu5TqNryf70QlJAbdljnwWauLxWwJ9bfCtjnBPBxL1Aypd/stIZJA4qKpuOtIMBh9n8RzuyRFEKGTrDguTOVTFK2R3/DF10G1LmU2cKC/QTCt/fVJsjihfivTanrNri8ue0Hs3pK+sL7L5zlN7srnU2CZHZtuoXldx1LRIn3Y1Rj33ASpfM7gDkndWjqdK6t5FQdxe3R+j5txqg8EMTb9PF4PfhdvEi9f7238AovMeowKBgAtXNGoxBEvCfVQbM9RCYS90nPIEfgV3D7jK9HrrvCewYnU55fhTsNZFYQNj/iq3m9t6VTG/helpM6bK4rLvW5YAY+1dVltHErPODy3Tz+3Fg7aP7EZ1XrPjHfCd87zTr5/ima4GZIxutbDfNd1WecIIK9gVrstSjG/fIuQ3Ay6X'; - 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvV/IhWtgS1CENNl38Jo9mJqeJ63agN8zo2PAIHNxuorlFUpaXOkLtHcASn3PiXwjNgFuO2FtiP1QRIz7Cg8bACHtdsA20moUCnfExOgwhHsePCFxxcWTfPTeYqb83OJXKJdc3t0ihPD9Zo2o75BY6ahSiNY4NLQHEnuqCK+P/ItUDa7QqqzHcinlRPVgO7HbE/5YsGafd7McHVmd8dv0nild0y29SILXvGKOvHIkUBthb32VaCI+75b9A1eNvLdUlF0kSmWzQTLjSYwWVSvfP0zAetZ1vlksFaohYrSZUtZ0PlTkti1rdyCMdvLpsS2A6g3vjuobm0oUKiRgikNYywIDAQAB'; - // final pair = RSAPKCSParser().parsePEM(''' -// final key = publicKeyDecode(''' -// -----BEGIN PUBLIC KEY----- -// MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzknLODTvx9LrwnWrgoe5zSF7olPnp20O/0PLw/WtvV9paLzkeyhf07RqBzYUEyGccpOMEwY98SsJk/8GJnVPUclAHj2rqxAkwYTKHbsMjbZ18VuL0vC5JTBwnvqMUa+fj3oi7QxHMWLY9w1iYLauYM/aYWBc/Fg5LZoawG0Yf3nuZ3rGWic88tf5y8BIVgSEeRovF/NQKX8LsFgaxXdpTMfMwu7xVh0jaFUU98T6ke+GADszmuqeUXFs9IRZoRUieTSafM8XQ+Xr7g513TYTpXuj9GQ04nmE+BEZ5O2MBNjYFle91SsvCyPwYxv0aFbFZ05/vZKZIdbhgpFxh03p3wIDAQAB -// -----END PUBLIC KEY----- -// ''') as RSAPublicKey; - // final key = RSAPublicKey((pair.public?.modulus) as BigInt, - // BigInt.from((pair.public?.publicExponent) as int)); - - final key = decodeRsaPubKey(decode64(encodeAscii(keyStr))!); - print(key); - final Uint8List header = encodeAscii('hello'); - // concatN([ - // encodeInt32(4096), - // encodeInt16(0), - // SessionKey.create().serialize(), - // SessionKey.create().serialize() - // ]); - final enc = decodeAscii(encode64(encryptOAEP(key, header))); - print(enc); -} diff --git a/packages/simplexmq/lib/src/crypto.dart b/packages/simplexmq/lib/src/crypto.dart index 5a184c1142..46fa8943a9 100644 --- a/packages/simplexmq/lib/src/crypto.dart +++ b/packages/simplexmq/lib/src/crypto.dart @@ -36,7 +36,6 @@ Uint8List pseudoRandomBytes(int len) { return _randomBytes(len, sessionSeed); } -// len should be divisible by 4 Uint8List _randomBytes(int len, Random seedSource) { final bytes = Uint8List(len); for (int i = 0; i < len; i++) { @@ -81,13 +80,13 @@ AsymmetricKeyPair generateRSAkeyPair( } Uint8List encryptOAEP(RSAPublicKey key, Uint8List data) { - final oaep = OAEPEncoding(RSAEngine()) + final oaep = OAEPEncoding.withSHA256(RSAEngine()) ..init(true, PublicKeyParameter(key)); return oaep.process(data); } Uint8List decryptOAEP(RSAPrivateKey key, Uint8List data) { - final oaep = OAEPEncoding(RSAEngine()) + final oaep = OAEPEncoding.withSHA256(RSAEngine()) ..init(false, PrivateKeyParameter(key)); return oaep.process(data); } diff --git a/packages/simplexmq/lib/src/transport.dart b/packages/simplexmq/lib/src/transport.dart index 3e9f0213e1..031c77672f 100644 --- a/packages/simplexmq/lib/src/transport.dart +++ b/packages/simplexmq/lib/src/transport.dart @@ -115,7 +115,6 @@ class SMPTransportClient { Future _sendEncryptedKeys_4(RSAPublicKey serverKey) async { final header = encryptOAEP(serverKey, _clientHeader()); - // print(header); await _conn.write(header); } diff --git a/packages/simplexmq/pubspec.yaml b/packages/simplexmq/pubspec.yaml index 5b90e7c3f9..479d90ebce 100644 --- a/packages/simplexmq/pubspec.yaml +++ b/packages/simplexmq/pubspec.yaml @@ -8,7 +8,12 @@ environment: dependencies: asn1lib: ^1.0.2 - pointycastle: ^3.3.4 + pointycastle: + git: + url: git@github.com:simplex-chat/pc-dart.git + ref: nullsafety + + # pointycastle: ^3.3.4 dev_dependencies: lints: ^1.0.0 diff --git a/packages/simplexmq_io/test/simplexmq_io_test.dart b/packages/simplexmq_io/test/simplexmq_io_test.dart index dc2a5e1e9f..861ff3513a 100644 --- a/packages/simplexmq_io/test/simplexmq_io_test.dart +++ b/packages/simplexmq_io/test/simplexmq_io_test.dart @@ -12,7 +12,7 @@ void main() { group('transport', () { Future startServer( void Function(Socket client) handleConnection) async { - var server = await ServerSocket.bind(localhost, 5223); + var server = await ServerSocket.bind(localhost, 8080); server.listen(handleConnection); return server; } @@ -21,14 +21,13 @@ void main() { var completer = Completer(); var server = await startServer((Socket client) { - print('client connected'); client.listen( (Uint8List data) async { completer.complete(data); }, ); }); - var transport = await SocketTransport.connect(localhost, 5223); + var transport = await SocketTransport.connect(localhost, 8080); await transport.write(Uint8List.fromList([1, 2, 3])); expect(await completer.future, [1, 2, 3]); diff --git a/packages/simplexmq_io/test/transport_test.dart b/packages/simplexmq_io/test/transport_test.dart index d5bb789d45..11a68b89bc 100644 --- a/packages/simplexmq_io/test/transport_test.dart +++ b/packages/simplexmq_io/test/transport_test.dart @@ -5,13 +5,14 @@ import 'package:test/test.dart'; void main() { group('SMP transport', () { - test('establish connection (expects SMP server on localhost:5223)', - () async { - // await Socket.connect('localhost', 5223); - final conn = await SocketTransport.connect('localhost', 5223); - final smp = await SMPTransportClient.connect(conn); - print('connected'); - print(smp); - }, skip: 'requires server; pc OAEP impl is not compatible as it uses SHA1'); + test( + 'establish connection (expects SMP server on localhost:5223)', + () async { + final conn = await SocketTransport.connect('localhost', 5223); + final smp = await SMPTransportClient.connect(conn); + expect(smp is SMPTransportClient, true); + }, + skip: 'requires SMP server on port 5223', + ); }); }