Skip to main content

RSA Key Generate Flutter

Generate RSA Key Pairs in Flutter With PointyCastle. Generate Same Key Pairs based on n inputs, Such as User Name and Password.

Generation Link Documentation

Awesome Crypto Utility Dart File

Utility Requirement Dart File 


Here is a Code thanks to above three, RSA Key Pairs based on User Email and Password.

import 'dart:typed_data';
import 'package:pointycastle/api.dart' as crypto;
import 'dart:convert';
import '../../../storage.dart'; //Shared Prefs file to Store Keys
import '../Helper/CryptoUtils.dart'; //Awesome Utility Dart File
import "package:pointycastle/export.dart";

class RSAGeneration {
String _email;
String _password;
String myPublicKey = '';
String myPrivateKey = '';

RSAGeneration({required String email, required String password}) : _email = email, _password = password;

Uint8List deriveKeyFromInput(String input) {
Digest digest = SHA256Digest();
Uint8List data = Uint8List.fromList(utf8.encode(input));
Uint8List hash = digest.process(data);
return hash;
}

AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey> generateRSAkeyPair(
SecureRandom secureRandom,
{int bitLength = 2048}) {
// Create an RSA key generator and initialize it

// final keyGen = KeyGenerator('RSA'); // Get using registry
final keyGen = RSAKeyGenerator();

keyGen.init(ParametersWithRandom(
RSAKeyGeneratorParameters(BigInt.parse('65537'), bitLength, 64),
secureRandom));

// Use the generator
print("Generating Key Pairs");
final pair = keyGen.generateKeyPair();

// Cast the generated key pair into the RSA key types

final myPublic = pair.publicKey as RSAPublicKey;
final myPrivate = pair.privateKey as RSAPrivateKey;
print(myPublic);

return AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey>(myPublic, myPrivate);
}

SecureRandom exampleSecureRandom() {
String input = _email + _password;
final seed = deriveKeyFromInput(input);
final secureRandom = SecureRandom('Fortuna')
..seed(crypto.KeyParameter(seed));
return secureRandom;
}

void generateMyRSAKeyPairs() {
final pair = generateRSAkeyPair(exampleSecureRandom());
print('GENERATED KEY PAIRS');
final public = pair.publicKey;
final private = pair.privateKey;
print('PRIVATE KEY');
myPrivateKey = CryptoUtils.encodeRSAPrivateKeyToPem(private);
print(myPrivateKey);
print('PUBLIC KEY');
myPublicKey = CryptoUtils.encodeRSAPublicKeyToPem(public);
print(myPublicKey);
Storage.saveUserRSAKeys(myPublicKey, myPrivateKey);
_email = '';
_password = '';
}
}
RSAPublicKey decodeRSAPublicKeyFromPem(String input){
RSAPublicKey publicKey = CryptoUtils.rsaPublicKeyFromPem(input);
return publicKey;
}
RSAPrivateKey decodeRSAPrivateKeyFromPem(String input){
RSAPrivateKey privateKey = CryptoUtils.rsaPrivateKeyFromPem(input);
return privateKey;
}

Comments

Popular posts from this blog

PARROT GRUB LUKS ENCRYPTED BOOT

  If you have encrypted /boot, make sure it's LUKS1, GRUB doesn't support LUKS2 , if you want to use LUKS2 make sure it is the pbkdf2 and not argon , as it is not supported as of yet and is the default one used by LUKS2, so take care of it. cryptsetup luksDump /dev/sda** BOOT INTO THE LIVE ENVIRONMENT Make folders for mount mkdir /mnt/ boot mkdir /mnt/ boot/efi #Decrypt luks drives / and /boot Cryptsetup luksOpen /dev/ sda** mount-name-x // both root and boot mount -o subvol=@ /dev/m apper /mount-name-root /m nt mount /dev/m apper /mount-name-boot /m nt/boot mount /dev/ sda1 /mnt/ boot/efi #Bind /dev /proc /sys /run mount --bind /dev /m nt/dev mount --bind /proc /m nt/proc mount --bind /sys /m nt/sys mount --bind /run /m nt/run update-grub // Update the grub config (grub.cfg) based on current working update-initramfs -u // Update the initramfs grub-install /dev/ sda // Update the efi one, only use when /boot part is changed aka change in / dev /sda-boot, like when you en...

Dolphin as Root

Terminal  pkexec env DISPLAY = $DISPLAY XAUTHORITY = $XAUTHORITY KDE_SESSION_VERSION =5 KDE_FULL_SESSION = true dolphin Desktop ( RIGHT CLICK) Create New >> Link To Application (Recommended) OR Create Dolphin.desktop Modify this .desktop file created with Link To Application from Terminal Using gedit, "gedit Dolphin.desktop" with [Desktop Entry] Comment[en_US]= Comment= Exec=pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin GenericName[en_US]= GenericName= Icon=file-manager MimeType= Name[en_US]=Dolphin Name=Dolphin Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application X-KDE-SubstituteUID=false X-KDE-Username= Easy Way in Link to Application, Direct Add: Environment Variable: add full Exec command, just make sure it doesn't add '' in commands like in my case, after clicking ok, recheck '' . So, modify it with gedit.