mlkem_native 1.0.0
mlkem_native: ^1.0.0 copied to clipboard
MLKEM native usage of lib
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:mlkem_native/mlkem_native.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final mlKem768 = MLKEM768();
final mlKem1024 = MLKEM1024();
final mlkem512 = MLKEM512();
// MLKEM512 variables
late String encapsulatedSS512;
late String decapsulatedSS512;
late bool resultsAreEqual512;
// MLKEM768 variables
late String encapsulatedSS768;
late String decapsulatedSS768;
late bool resultsAreEqual768;
// MLKEM1024 variables
late String encapsulatedSS1024;
late String decapsulatedSS1024;
late bool resultsAreEqual1024;
@override
void initState() {
super.initState();
// MLKEM512
late KeyPair kp512 = mlkem512.generateKeyPair();
final result512 = mlkem512.encapsulate(kp512.publicKey);
final decapsulatedResult512 = mlkem512.decapsulate(
result512.ciphertext,
kp512.secretKey,
);
encapsulatedSS512 = base64Encode(result512.sharedSecret);
decapsulatedSS512 = base64Encode(decapsulatedResult512);
resultsAreEqual512 = encapsulatedSS512 == decapsulatedSS512;
// MLKEM768
late KeyPair kp768 = mlKem768.generateKeyPair();
final result768 = mlKem768.encapsulate(kp768.publicKey);
final decapsulatedResult768 = mlKem768.decapsulate(
result768.ciphertext,
kp768.secretKey,
);
encapsulatedSS768 = base64Encode(result768.sharedSecret);
decapsulatedSS768 = base64Encode(decapsulatedResult768);
resultsAreEqual768 = encapsulatedSS768 == decapsulatedSS768;
// MLKEM1024
late KeyPair kp1024 = mlKem1024.generateKeyPair();
final result1024 = mlKem1024.encapsulate(kp1024.publicKey);
final decapsulatedResult1024 = mlKem1024.decapsulate(
result1024.ciphertext,
kp1024.secretKey,
);
encapsulatedSS1024 = base64Encode(result1024.sharedSecret);
decapsulatedSS1024 = base64Encode(decapsulatedResult1024);
resultsAreEqual1024 = encapsulatedSS1024 == decapsulatedSS1024;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('MLKEM Native')),
body: Container(
padding: const EdgeInsets.all(10),
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
spacing: 10,
children: [
Text("MLKEM 512", textAlign: TextAlign.center),
Text(encapsulatedSS512),
Text(
resultsAreEqual512 ? "EQUAL" : "NOT EQUAL",
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(decapsulatedSS512),
SizedBox(height: 50),
Text("MLKEM 768", textAlign: TextAlign.center),
Text(encapsulatedSS768),
Text(
resultsAreEqual768 ? "EQUAL" : "NOT EQUAL",
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(decapsulatedSS768),
SizedBox(height: 50),
Text("MLKEM 1024", textAlign: TextAlign.center),
Text(encapsulatedSS1024),
Text(
resultsAreEqual1024 ? "EQUAL" : "NOT EQUAL",
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(decapsulatedSS1024),
],
),
),
),
),
);
}
}