Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Security0 implementation #18

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/esp_provisioning_ble.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export 'src/connection_models.dart';
export 'src/esp_prov.dart';
export 'src/security.dart';
export 'src/security0.dart';
export 'src/security1.dart';
export 'src/transport.dart';
export 'src/connection_models.dart';
5 changes: 5 additions & 0 deletions lib/src/security.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ enum SecurityState {
finish,
}

enum Security0State {
step0Request,
step0Response,
}

abstract class ProvSecurity {
Future<Uint8List> encrypt(Uint8List data);

Expand Down
76 changes: 76 additions & 0 deletions lib/src/security0.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import 'package:flutter/foundation.dart';

import 'protos/generated/sec0.pb.dart';
import 'protos/generated/session.pb.dart';
import 'security.dart';

class Security0 implements ProvSecurity {
final bool verbose;
Security0State sessionState;

Security0({
this.verbose = false,
this.sessionState = Security0State.step0Request,
});

void _verbose(dynamic data) {
if (verbose) {
if (kDebugMode) {
print('+++ $data +++');
}
}
}

@override
Future<Uint8List> encrypt(Uint8List data) async {
return data;
}

@override
Future<Uint8List> decrypt(Uint8List data) async {
return data;
}

@override
Future<SessionData?> securitySession(SessionData? responseData) async {
SessionData? sessionData;
switch (sessionState) {
case Security0State.step0Request:
sessionState = Security0State.step0Response;
sessionData = getStep0Request();
break;

case Security0State.step0Response:
processStep0Response(responseData);
break;
}
return sessionData;
}

SessionData getStep0Request() {
_verbose('step0Request');
var setupRequest = SessionData();

setupRequest.secVer = SecSchemeVersion.SecScheme0;

S0SessionCmd sc0 = S0SessionCmd();
Sec0Payload s0p = Sec0Payload();

s0p.sc = sc0;
setupRequest.sec0 = s0p;
return setupRequest;
}

void processStep0Response(SessionData? responseData) {
try {
if (responseData == null) {
throw Exception('No response from device');
}
if (responseData.secVer != SecSchemeVersion.SecScheme0) {
throw Exception('Security version mismatch');
}
} catch (e) {
throw Exception('Unsupported security protocol');
}
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: esp_provisioning_ble
description: A Flutter plugin that simplifies the provisioning configuration of ESP32 modules using Bluetooth Low Energy (BLE).
version: 1.0.0
version: 1.1.0
homepage: https://github.com/ogabrielinacio/esp_provisioning_ble

environment:
Expand Down