generateCertificateMobile function

Future<Map<String, dynamic>> generateCertificateMobile(
  1. Map<String, String> keyPair
)

Implementation

Future<Map<String, dynamic>> generateCertificateMobile(
    Map<String, String> keyPair) async {
  // 1. Decodificar las claves PEM
  RSAPublicKey publicKey =
      CryptoUtils.rsaPublicKeyFromPem(keyPair['publicKey']!);
  RSAPrivateKey privateKey =
      CryptoUtils.rsaPrivateKeyFromPem(keyPair['privateKey']!);

  Map<String, String> subject = {
    'C': 'VE',
    // 'E': userData.email,
  };

  String csrPem = X509Utils.generateRsaCsrPem(
    subject,
    privateKey,
    publicKey,
    signingAlgorithm: 'SHA-512',
  );

  String berBase64 = csrPem
      .replaceAll('-----BEGIN CERTIFICATE REQUEST-----', '')
      .replaceAll('-----END CERTIFICATE REQUEST-----', '')
      .replaceAll(RegExp(r'\s'), '');

  var subjectAsn1 = ASN1Set();
  subject.forEach((key, value) {
    String oid;
    switch (key) {
      case 'C':
        oid = '2.5.4.6';
        break;
      case 'E':
        oid = '1.2.840.113549.1.9.1';
        break;
      default:
        oid = '';
    }

    if (oid.isNotEmpty) {
      var subjectSequence = ASN1Sequence();
      subjectSequence.add(ASN1ObjectIdentifier.fromComponentString(oid));
      subjectSequence.add(ASN1PrintableString(value));
      subjectAsn1.add(subjectSequence);
    }
  });

  return {
    'csr': berBase64,
    'subject': subjectAsn1,
  };
}