crosspki 0.3.0-nullsafety.1 copy "crosspki: ^0.3.0-nullsafety.1" to clipboard
crosspki: ^0.3.0-nullsafety.1 copied to clipboard

outdated

Flutter plugin for handling X509 certificates and key pairs from native platform key stores.

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:crosspki/crosspki.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    runCrossPkiApis();
  }

  Future<void> runCrossPkiApis() async {
    try {
      print('LISTING CERTIFICATES');
      var certs = await CrossPki.listCertificatesWithKey();
      print('Certs count: ${certs.length}');

      print('IMPORTING PKCS#12');
      final p12Content = base64Decode('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');
      await CrossPki.importPkcs12(p12Content, "1234");
      certs = await CrossPki.listCertificatesWithKey();
      print('Certs count: ${certs.length}');
      final userCertificate = certs.first;
      print('Imported: ${userCertificate.subjectName}');
      print('CPF: ${userCertificate.pkiBrazil.cpfFormatted}');

      print('SIGN DATA TEST');
      var sig = await CrossPki.signData(userCertificate.thumbprint, DigestAlgorithm.sha256, base64Decode('SGVsbG8sIFdvcmxkIQ=='));
      print('Signature: ${base64Encode(sig.toList())}');

      print('SIGN HASH TEST');
      sig = await CrossPki.signHash(userCertificate.thumbprint, DigestAlgorithm.sha256, base64Decode('3/1gIbsr1bCvZ2KQgJ7DpTGR3YHH9wpLKGiKNiGCmG8='));
      print('Signature: ${base64Encode(sig.toList())}');

      await CrossPki.removeCertificate(certs[0].thumbprint);
      print('Removed');
      certs = await CrossPki.listCertificatesWithKey();
      print('Certs count: ${certs.length}');

      print('GENERATING RSA KEY PAIR...');
      var keyPair = await CrossPki.generateRsaKeyPair(2048);
      print('keyId: ${keyPair.keyId}');
      print('publicKey ${keyPair.algorithm}: ${base64Encode(keyPair.publicKeyEncoded.toList())}');

      print('GENERATING CSR...');
      var csr = await CrossPki.generateCsr(keyPair);
      print('CSR: ${base64Encode(csr.toList())}');

      print('DONE');
      
    } on CrossPkiException catch (ex) {
      print('ERROR: $ex');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Cross PKI Plugin example app'),
        ),
        body: Center(
          child: Text('Running Cross PKI API'),
        ),
      ),
    );
  }
}
2
likes
0
pub points
32%
popularity

Publisher

verified publisherlacunasoftware.com

Flutter plugin for handling X509 certificates and key pairs from native platform key stores.

Homepage

License

unknown (LICENSE)

Dependencies

asn1lib, collection, flutter

More

Packages that depend on crosspki