Implement chat server auth, models, handlers, and docs context
This commit is contained in:
1 parent
23602efd5f
commit
f6b27565cd
16 files changed
+1285
-152
No files matched your search
@@ -1,13 +1,13 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:bcrypt/bcrypt.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:crypto/crypto.dart';
|
||||
import 'package:crypton/crypton.dart';
|
||||
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
|
||||
import 'package:crypton/crypton.dart' as crypton;
|
||||
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart' as jwt;
|
||||
|
||||
import '../config/config.dart';
|
||||
import '../../config/config.dart';
|
||||
|
||||
class KeyPair {
|
||||
final String publicKey;
|
||||
@@ -31,7 +31,7 @@ class KeyPair {
|
||||
class CryptoService {
|
||||
/// Generate a new Ed25519 key pair
|
||||
static KeyPair generateKeyPair() {
|
||||
final keyPair = ECKeypair.fromRandom();
|
||||
final keyPair = crypton.ECKeypair.fromRandom();
|
||||
return KeyPair(
|
||||
publicKey: keyPair.publicKey.toString(),
|
||||
privateKey: keyPair.privateKey.toString(),
|
||||
@@ -40,17 +40,19 @@ class CryptoService {
|
||||
|
||||
/// Sign data with private key
|
||||
static String sign(String data, String privateKey) {
|
||||
final privKey = ECPrivateKey.fromString(privateKey);
|
||||
final signature = privKey.createSignature(data);
|
||||
return signature.toString();
|
||||
final privKey = crypton.ECPrivateKey.fromString(privateKey);
|
||||
final message = Uint8List.fromList(utf8.encode(data));
|
||||
final signature = privKey.createSHA256Signature(message);
|
||||
return base64Encode(signature);
|
||||
}
|
||||
|
||||
/// Verify signature with public key
|
||||
static bool verify(String data, String signature, String publicKey) {
|
||||
try {
|
||||
final pubKey = ECPublicKey.fromString(publicKey);
|
||||
final sig = ECSignature.fromString(signature);
|
||||
return pubKey.verifySignature(data, sig);
|
||||
final pubKey = crypton.ECPublicKey.fromString(publicKey);
|
||||
final message = Uint8List.fromList(utf8.encode(data));
|
||||
final signatureBytes = Uint8List.fromList(base64Decode(signature));
|
||||
return pubKey.verifySHA256Signature(message, signatureBytes);
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
@@ -118,6 +120,8 @@ class EncryptedKey {
|
||||
}
|
||||
|
||||
class AuthService {
|
||||
static final _nonceRandom = Random.secure();
|
||||
|
||||
/// Generate JWT token for user
|
||||
static String generateToken(String userId, String username) {
|
||||
final payload = {
|
||||
@@ -125,9 +129,9 @@ class AuthService {
|
||||
'username': username,
|
||||
};
|
||||
|
||||
final jwt = JWT(payload);
|
||||
return jwt.sign(
|
||||
SecretKey(Config.jwtSecret),
|
||||
final token = jwt.JWT(payload);
|
||||
return token.sign(
|
||||
jwt.SecretKey(Config.jwtSecret),
|
||||
expiresIn: Config.tokenExpiry,
|
||||
);
|
||||
}
|
||||
@@ -135,8 +139,8 @@ class AuthService {
|
||||
/// Verify JWT token and return payload
|
||||
static Map<String, dynamic>? verifyToken(String token) {
|
||||
try {
|
||||
final jwt = JWT.verify(token, SecretKey(Config.jwtSecret));
|
||||
return Map<String, dynamic>.from(jwt.payload as Map);
|
||||
final verified = jwt.JWT.verify(token, jwt.SecretKey(Config.jwtSecret));
|
||||
return Map<String, dynamic>.from(verified.payload as Map);
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
@@ -154,8 +158,8 @@ class AuthService {
|
||||
|
||||
/// Generate a nonce for signature verification
|
||||
static String generateNonce() {
|
||||
final bytes = List<int>.generate(32, (_) => DateTime.now().microsecondsSinceEpoch % 256);
|
||||
final randomBytes = sha256.convert(bytes as Uint8List);
|
||||
return randomBytes.toString().substring(0, 32);
|
||||
final bytes = List<int>.generate(32, (_) => _nonceRandom.nextInt(256));
|
||||
final hash = sha256.convert(bytes);
|
||||
return hash.toString().substring(0, 32);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user