SMP transport handshake works
This commit is contained in:
parent
61e452356b
commit
e8fe5632f4
@ -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);
|
||||
}
|
@ -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<RSAPublicKey, RSAPrivateKey> generateRSAkeyPair(
|
||||
}
|
||||
|
||||
Uint8List encryptOAEP(RSAPublicKey key, Uint8List data) {
|
||||
final oaep = OAEPEncoding(RSAEngine())
|
||||
final oaep = OAEPEncoding.withSHA256(RSAEngine())
|
||||
..init(true, PublicKeyParameter<RSAPublicKey>(key));
|
||||
return oaep.process(data);
|
||||
}
|
||||
|
||||
Uint8List decryptOAEP(RSAPrivateKey key, Uint8List data) {
|
||||
final oaep = OAEPEncoding(RSAEngine())
|
||||
final oaep = OAEPEncoding.withSHA256(RSAEngine())
|
||||
..init(false, PrivateKeyParameter<RSAPrivateKey>(key));
|
||||
return oaep.process(data);
|
||||
}
|
||||
|
@ -115,7 +115,6 @@ class SMPTransportClient {
|
||||
|
||||
Future<void> _sendEncryptedKeys_4(RSAPublicKey serverKey) async {
|
||||
final header = encryptOAEP(serverKey, _clientHeader());
|
||||
// print(header);
|
||||
await _conn.write(header);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -12,7 +12,7 @@ void main() {
|
||||
group('transport', () {
|
||||
Future<ServerSocket> 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<Uint8List>();
|
||||
|
||||
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]);
|
||||
|
@ -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',
|
||||
);
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user