mlkem_native 1.0.0 copy "mlkem_native: ^1.0.0" to clipboard
mlkem_native: ^1.0.0 copied to clipboard

MLKEM native usage of lib

example/lib/main.dart

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),
              ],
            ),
          ),
        ),
      ),
    );
  }
}