A dart package for many helper methods fitting common situations

Overview

Basic Utils

pub package Null Safety License

A dart package for many helper methods fitting different situations.

Table of Contents

Preamble

As this package is written in pure Dart, it can be used on all platforms on which dart is currently running. This includes the use of frameworks like Flutter, Angular Dart and many more. This package can also be used for command line tools or rest services compiled with dart2native.

Note: Feel free to contribute by creating pull requests or file an issue for bugs, questions and feature requests.

Install

pubspec.yaml

Update pubspec.yaml and add the following line to your dependencies.

dependencies:
  basic_utils: ^4.2.0

Import

Import the package with :

import 'package:basic_utils/basic_utils.dart';

Util Classes

The package contains different classes. Each class contains methods that provide a solution for certain problems.

StringUtils

Helper class for String operations.

String defaultString(String? str, {String defaultStr = ''});
bool isNullOrEmpty(String? s);
bool isNotNullOrEmpty(String? s);
String camelCaseToUpperUnderscore(String s);
String camelCaseToLowerUnderscore(String s);
bool isLowerCase(String s);
bool isUpperCase(String s);
bool isAscii(String s);
String capitalize(String s, {bool allWords = false});
String reverse(String s);
int countChars(String s, String char, {bool caseSensitive = true});
bool isDigit(String s);
bool equalsIgnoreCase(String a, String b);
bool inList(String s, List<String> list, {bool ignoreCase = false});
bool isPalindrome(String s);
String hidePartial(String s, {int begin = 0, int end, String replace = "*"});
String addCharAtPosition(String s, String char, int position,{bool repeat = false});
List<String> chunk(String s, chunkSize);
String pickOnly(value, {int from = 1, int to = -1});
String removeCharAtPosition(String value, int index);
String removeExp(String value, String pattern,{bool repeat = true,bool caseSensitive = true,bool multiLine = false,bool dotAll = false,bool unicode = false});
String truncate(String value, int length, {String symbol = '...'}); 
String generateRandomString(int length,{alphabet = true,numeric = true,special = true,uppercase = true,lowercase = true,String from = ''});

DomainUtils

Helper class for operations on domain names.

bool isDomainName(String s);
bool isSubTld(String tld, String? subTld);
bool isSubDomain(String? s);
bool isSubDomainOf(String sub, String domain);
bool isCCTLD(String s);
bool isNGTLD(String s);
bool isTld(String s);
bool isGTLD(String s);
List<String> splitDomainName(String domainName);
Domain? getDomainFromUrl(String url);
Domain? parseDomain(String domainName);
List<String> splitSubdomainInDomains(String name);
String toIDN(String domain);
String fromIDN(String domain)

EmailUtils

Helper class for operations on email addresses.

bool isEmail(String s);
EmailAddress? parseEmailAddress(String s);

MathUtils

Helper class for simple math operations like calculating circular area or converting length units.

double calculateCircumference(double radius);
double calculateCircularArea(double radius);
double calculateCircleDiameter(double radius);
double calculateSquareArea(double a, {double? b});
double convertUnit(double value, LengthUnits sourceUnit, LengthUnits targetUnit);
double calculateMixingTemperature(double mA, double tA, double mB, double tB,{double? cA, double? cB});
num mean(List<num> l);
double round(double value, int decimals);
int getRandomNumber({int min = 0, int max = 999999999999});

HttpUtils

Helper class for simple http operations like sending requests.

Future<Map<Response> getForFullResponse(String url, {Map<String, dynamic>? queryParameters, Map<String, String>? headers});
Future<Map<String, dynamic>> getForJson(String url, {Map<String, dynamic>? queryParameters, Map<String, String>? headers});
Future<String> getForString(String url, {Map<String, dynamic>? queryParameters, Map<String, String>? headers});
Future<Map<Response> postForFullResponse(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<Map<String, dynamic>> postForJson(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<String> postForString(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<Response> putForFullResponse(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<Map<String, dynamic>> putForJson(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<String> putForString(String url, {String? body, Map<String, String>? queryParameters, Map<String, String>? headers});
Future<Response deleteForFullResponse(String url, {Map<String, String>? queryParameters, Map<String, String>? headers});
Future<Map<String, dynamic>> deleteForJson(String url, {Map<String, String>? queryParameters, Map<String, String>? headers});
Future<String> deleteForString(String url, {Map<String, String>? queryParameters, Map<String, String>? headers});
Map<String, dynamic>? getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic>? queryParameters);

DnsUtils

Helper class for lookup resource records. Uses google dns resolver api.

Future<List<RRecord>?> lookupRecord(String name, RRecordType type,{bool dnssec = false, DnsApiProvider provider = DnsApiProvider.GOOGLE});
RRecordType intToRRecordType(int type);
int rRecordTypeToInt(RRecordType type);
Future<List<RRecord>?> reverseDns(String ip,{DnsApiProvider provider = DnsApiProvider.GOOGLE});
String? getReverseAddr(String ip);
String toBind(RRecord record);

SortUtils

Helper class for sorting lists. Implementation of different sorting algorithms.

List quickSort(List list);
List bubbleSort(List list);
List heapSort(List list);

ColorUtils

Helper class for color operations.

int hexToInt(String hex);
String intToHex(int i);
String shadeColor(String hex, int percent);
String fillUpHex(String hex);
bool isDark(String hex);
String contrastColor(String hex);
Map<String, int> basicColorsFromHex(String hex);
double calculateRelativeLuminance(int red, int green, int blue,{int decimals = 2});
List<String> swatchColor(String hex, {double percentage = 15, int amount = 5});
String invertColor(String color);

DateUtils

Helper class for date operations like converting textual datetime description.

DateTime stringToDateTime(String s, {DateTime time});
int getCalendarWeek(DateTime date);

X509Utils

Helper class for operations on x509 certificates, like generating csr and many more.

String formatKeyString(String key, String begin, String end,{int chunkSize = 64, String lineDelimiter = "\n"});
String generateRsaCsrPem(Map<String, String> attributes, RSAPrivateKey privateKey, RSAPublicKey publicKey, {List<String>? san, String signingAlgorithm = 'SHA-256'});
String generateEccCsrPem(Map<String, String> attributes, ECPrivateKey privateKey, ECPublicKey publicKey, {List<String>? san, String signingAlgorithm = 'SHA-256'});
String encodeASN1ObjectToPem(ASN1Object asn1Object, String begin, String end, {String newLine = '\n'});
RSAPrivateKey privateKeyFromASN1Sequence(ASN1Sequence asnSequence);
ASN1Object encodeDN(Map<String, String> dn);
X509CertificateData x509CertificateFromPem(String pem);
Pkcs7CertificateData pkcs7fromPem(String pem);
CertificateSigningRequestData csrFromPem(String pem);
ASN1Sequence buildOCSPRequest(String pem, {String? intermediate});
String getOCSPUrl(String pem);
OCSPResponse parseOCSPResponse(Uint8List bytes);
BigInt getModulusFromRSACsrPem(String pem);
BigInt getModulusFromRSAX509Pem(String pem);
String pemToPkcs7(List<String> pems);
String generateSelfSignedCertificate(PrivateKey privateKey, String csr,int days, { List<String>? sans, List<ExtendedKeyUsage>? extKeyUsage, String serialNumber = '1'});

IterableUtils

Helper class for operations on iterables

T randomItem<T>(Iterable<T> iterable);
bool isNullOrEmpty(Iterable? iterable);
bool isNotNullOrEmpty(Iterable? iterable);
List<List<T>> chunk<T>(List<T> list, int size);

CryptoUtils

Helper class for cryptographic operations. This is some kind of high level api for pointycastle and asn1lib.

String getSha1ThumbprintFromBytes(Uint8List bytes);
String getSha256ThumbprintFromBytes(Uint8List bytes);
String getMd5ThumbprintFromBytes(Uint8List bytes);
Uint8List rsaPublicKeyModulusToBytes(RSAPublicKey publicKey);
Uint8List rsaPublicKeyExponentToBytes(RSAPublicKey publicKey);
Uint8List rsaPrivateKeyToBytes(RSAPrivateKey privateKey);
Uint8List rsaPrivateKeyExponentToBytes(RSAPrivateKey privateKey);
AsymmetricKeyPair generateRSAKeyPair({int keySize = 2048});
AsymmetricKeyPair generateEcKeyPair({String curve = 'prime256v1'});
String encodeRSAPublicKeyToPem(RSAPublicKey publicKey);
String encodeRSAPrivateKeyToPem(RSAPrivateKey rsaPrivateKey);
RSAPrivateKey rsaPrivateKeyFromPem(String pem);
RSAPublicKey rsaPublicKeyFromPem(String pem);
RSAPrivateKey rsaPrivateKeyFromDERBytes(Uint8List bytes);
RSAPublicKey rsaPublicKeyFromDERBytes(Uint8List bytes);
Uint8List getBytesFromPEMString(String pem);
String encodeEcPrivateKeyToPem(ECPrivateKey ecPrivateKey);
String encodeEcPublicKeyToPem(ECPublicKey publicKey);
ECPublicKey ecPublicKeyFromPem(String pem);
ECPrivateKey ecPrivateKeyFromPem(String pem);
ECPrivateKey ecPrivateKeyFromDerBytes(Uint8List bytes,{bool pkcs8 = false})
ECPublicKey ecPublicKeyFromDerBytes(Uint8List bytes);
String rsaEncrypt(String message, RSAPublicKey publicKey);
String rsaDecrypt(String cipherMessage, RSAPrivateKey privateKey);
Uint8List rsaSign(RSAPrivateKey privateKey, Uint8List dataToSign, {String algorithmName = 'SHA-256/RSA'});
bool rsaVerify(RSAPublicKey publicKey, Uint8List signedData, Uint8List signature,{String algorithm = 'SHA-256/RSA'});
String encodeRSAPrivateKeyToPemPkcs1(RSAPrivateKey rsaPrivateKey);
String encodeRSAPublicKeyToPemPkcs1(RSAPublicKey rsaPublicKey);
RSAPublicKey rsaPublicKeyFromPemPkcs1(String pem);
RSAPrivateKey rsaPrivateKeyFromPemPkcs1(String pem);
RSAPublicKey rsaPublicKeyFromDERBytesPkcs1(Uint8List bytes);
RSAPrivateKey rsaPrivateKeyFromDERBytesPkcs1(Uint8List bytes);
ECSignature ecSign(ECPrivateKey privateKey, Uint8List dataToSign, {String algorithmName = 'SHA-1/ECDSA'});
bool ecVerify(ECPublicKey publicKey, Uint8List signedData, ECSignature signature, {String algorithm = 'SHA-1/ECDSA'});
String getHash(Uint8List bytes, {String algorithmName = 'SHA-256'});
BigInt getModulusFromRSAPrivateKeyPem(String pem);

ASN1Utils

Helper class for operation on ASN1 objects.

String dump(String pem);

EnumUtils

Helper class for operation on enums.

T getEnum<T extends Enum>(final String enumName, final List<T> enumList, final T defaultEnum, {bool ignoreCase = false});
bool isValidEnum(final String enumName, final List<Enum> enumList, {bool ignoreCase = false});
Map getEnumMap(final List<Enum> enumList);

BooleanUtils

Helper class for operation on booleans.

bool and(final List<bool> array);
bool or(final List<bool> array);
bool xor(final List<bool> array);
List<bool> booleanValues();
int compare(final bool x, final bool y);
bool toBoolean(final int value);
bool toBooleanObject(final String? str);
bool toBooleanDefaultIfNull(final bool? value, final bool valueIfNull);
int toInteger(final bool bool);
String toBooleanString(final bool value);

FunctionDefs

Helper with various function prototype definitions.

BiConsumer<T,U>
BiFunction<T,U,R>
BinaryOperator<T>
BiPredicate<T,U>
Consumer<T>
Supplier<T>
BooleanSupplier
SingleFunction<T,R>
Predicate<T>
UnaryOperator<T>

Changelog

For a detailed changelog, see the CHANGELOG.md file

Real Live Examples

SSL Toolkit

All-in-one crossplatform (Android/iOS/macOSWindows) toolkit for SSL, including SSL install check, TLS check, PEM parser, CSR generator and certificate transparency log check.

Copyright and license

MIT License

Copyright (c) 2022 Ephenodrom

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Invalid pem generated for ECDSA pair

    Invalid pem generated for ECDSA pair

    Hi, I am using your lib to implement crypto functions in my project, ECDSA key pair for secp256k1 curve.

    AsymmetricKeyPair asymmetricKeyPair = CryptoUtils.generateEcKeyPair(curve: 'secp256k1');
    ECPrivateKey ecPrivateKey = asymmetricKeyPair.privateKey as ECPrivateKey;
    String ecPrivateKeyPem = CryptoUtils.encodeEcPrivateKeyToPem(ecPrivateKey);
    

    But generated pem string is not correct, when I try to import it with php or nodejs code.

    I checked code and found this part confusing:

    https://github.com/Ephenodrom/Dart-Basic-Utils/blob/dcb0dcd12235d6e4fdeef7dfcfbd1fc34379fb23/lib/src/CryptoUtils.dart#L591

    I think this is wrong because here is encoding of curve parameters, I think there need to be publicKey points x, y.

      ECPoint G = ecPrivateKey.parameters!.G;
      ECPoint? Q = G * ecPrivateKey.d;
    

    But that is not all. I am beginner in Dart, so I can not easy understand code. I think there are also some errors in further encoding of pem, and also added padding ASN1BitString.

    Because there is no any other alternative for this, I will try my best to find out and help in solving this issue.

    opened by phpcoinn 15
  • CSR attribute EMAIL is missing.

    CSR attribute EMAIL is missing.

    https://github.com/Ephenodrom/Dart-Basic-Utils/blob/ab6efdf73baecef4cb07d6f4b26d31d53a70e5d7/lib/src/X509Utils.dart#L613

    Attribute EMAIL is a valid one: https://en.wikipedia.org/wiki/Certificate_signing_request

    opened by gmpassos 11
  • Tag 164 is not supported yet for X509Util in read Certificate Signing Request (CSR)

    Tag 164 is not supported yet for X509Util in read Certificate Signing Request (CSR)

    hi every one. I need help when I try get Certificate from CSR file . the contain of csr file is : var x509Pem ='''-----BEGIN CERTIFICATE REQUEST----- MIIB7TCCAZMCAQAwXzELMAkGA1UEBhMCU0ExEzARBgNVBAsMCjMxMjM0NTY3ODkx EzARBgNVBAoMCjMxMjM0NTY3ODkxJjAkBgNVBAMMHVRTVC04ODY0MzExNDUtMzEy MzQ1Njc4OTAwMDAzMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEkNOiV8GaCBVDnQw2 bM1Wy6PqIRZ6t+/hxJNQxg7FAdWK0PcUiUdv5ry2SVyFSz/qY34IJuPstO01fLWv c41ny6CB1DCB0QYJKoZIhvcNAQkOMYHDMIHAMCEGCSsGAQQBgjcUAgQUDBJaQVRD QS1Db2RlLVNpZ25pbmcwgZoGA1UdEQSBkjCBj6SBjDCBiTE7MDkGA1UEBAwyMS1U U1R8Mi1UU1R8My1lZDIyZjFkOC1lNmEyLTExMTgtOWI1OC1kOWE4ZjExZTQ0NWYx HzAdBgoJkiaJk/IsZAEBDA8zMTIzNDU2Nzg5MDAwMDMxDTALBgNVBAwMBDExMTEx DDAKBgNVBBoMA1RTVDEMMAoGA1UEDwwDVFNUMAoGCCqGSM49BAMCA0gAMEUCIQCJ bnRkFWRGFymr/HW84klYXSoxQLe8yuhewNOD86OdKQIgEeuUUbMzr2C5VGTKAOFo ia4a0ZuZLVXe3JGRUtmvLZk= -----END CERTIFICATE REQUEST-----''';

    CertificateSigningRequestData data = X509Utils.csrFromPem(x509Pem);
    

    the error is Tag 164 is not supported yet

    thanks and best regards.

    opened by engaref2000 7
  • X509Utils crash when cert has no CN but a SAN

    X509Utils crash when cert has no CN but a SAN

    I am checking certificates to see if the SAN/CN matches what I am expecting and everything works just fine until I started using certificates from BUYPASS.COM.

    I use the same code with a LetsEncrypt and or a ZeroSSL cert and everything works as expected, I guess because they both include a CN/Subject.. Interestingly everything work fine also with a cert with a CN/Subject and SAN.. Example cert for that below also from stackoverflow..

    Being a European CA they give out certificates without a CN but with a SAN and that causes a failure..

    Unhandled exception: type 'ASN1Boolean' is not a subtype of type 'ASN1OctetString' in type cast #0 X509Utils._fetchSansFromExtension (package:basic_utils/src/X509Utils.dart:504:25) #1 X509Utils.x509CertificateFromPem. (package:basic_utils/src/X509Utils.dart:368:18) #2 List.forEach (dart:core-patch/growable_array.dart:282:8) #3 X509Utils.x509CertificateFromPem (package:basic_utils/src/X509Utils.dart:364:28) #4 main (file:///C:/Users/colin/Github/certcheck/bin/certcheck.dart:8:24) #5 _startIsolate. (dart:isolate-patch/isolate_patch.dart:299:32) #6 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

    Process finished with exit code 255

    Small bit of sample code import 'dart:io';

    import 'package:basic_utils/basic_utils.dart';

    void main(List arguments) { var x509Pem = new File('testlab.pem').readAsStringSync(); var data = X509Utils.x509CertificateFromPem(x509Pem); var subjectAlternativeName = data.subjectAlternativNames; print("SAN: ${subjectAlternativeName}"); var commonName = data.subject["2.5.4.3"]; print("CN: ${commonName}"); print("---------------"); }

    and a test.lab.shaduf.com cert to test with..

    -----BEGIN CERTIFICATE----- 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 8UhhGUUcPT6NuTN1LY7k+wvsdcRayEU= -----END CERTIFICATE-----

    And the StackOverflow cert with CN and SAN

    -----BEGIN CERTIFICATE----- MIIHJTCCBg2gAwIBAgISA72+1m+qM4K1gtDMN1jR2FJbMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA4MDcxMzAxMDBaFw0y MDExMDUxMzAxMDBaMB4xHDAaBgNVBAMMEyouc3RhY2tleGNoYW5nZS5jb20wggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChAaaXCGRfHl8uAuVzaQIAsNWj sz679b63jJSb8HQOi4ZIc7puQXNZ78L/QrKeomO3+CsR4vd4k7RAITzmsyP3Xnz+ hrgbkG2iFGfN6APhnfC3jaSNsDk/zcy1EKzpuUVYOp+fpqqJuYvXP4eG3o8Gmeln rweONZWyA2KxQYyiNNbnwdSpSASDbObhtDgXDS8g8fiFtZvjxaSrAPydx/L7AbYG jyslc4Boo+JoXl4/teVWLQkKMHXEiDzaaOec/LFqyh2dGmlZs+EDis77I1qRegA8 x/Z/HvhUyagjXB9eqqpiaMR5WkVXRcAoSPa1kM+VcXRyZh+XN3nvB0Pbenc/AgMB AAGjggQvMIIEKzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBtuDXxB32488D9N/baT nSOcs9BtMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUF BwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNy eXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNy eXB0Lm9yZy8wggHkBgNVHREEggHbMIIB14IPKi5hc2t1YnVudHUuY29tghIqLmJs b2dvdmVyZmxvdy5jb22CEioubWF0aG92ZXJmbG93Lm5ldIIYKi5tZXRhLnN0YWNr ZXhjaGFuZ2UuY29tghgqLm1ldGEuc3RhY2tvdmVyZmxvdy5jb22CESouc2VydmVy ZmF1bHQuY29tgg0qLnNzdGF0aWMubmV0ghMqLnN0YWNrZXhjaGFuZ2UuY29tghMq LnN0YWNrb3ZlcmZsb3cuY29tghUqLnN0YWNrb3ZlcmZsb3cuZW1haWyCDyouc3Vw ZXJ1c2VyLmNvbYINYXNrdWJ1bnR1LmNvbYIQYmxvZ292ZXJmbG93LmNvbYIQbWF0 aG92ZXJmbG93Lm5ldIIUb3BlbmlkLnN0YWNrYXV0aC5jb22CD3NlcnZlcmZhdWx0 LmNvbYILc3N0YXRpYy5uZXSCDXN0YWNrYXBwcy5jb22CDXN0YWNrYXV0aC5jb22C EXN0YWNrZXhjaGFuZ2UuY29tghJzdGFja292ZXJmbG93LmJsb2eCEXN0YWNrb3Zl cmZsb3cuY29tghNzdGFja292ZXJmbG93LmVtYWlsghFzdGFja3NuaXBwZXRzLm5l dIINc3VwZXJ1c2VyLmNvbTBMBgNVHSAERTBDMAgGBmeBDAECATA3BgsrBgEEAYLf EwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCC AQMGCisGAQQB1nkCBAIEgfQEgfEA7wB1AOcS8rA3fhpi+47JDGGE8ep7N8tWHREm W/Pg80vyQVRuAAABc8k5k1sAAAQDAEYwRAIgaSN4+Dp0Ok5hMAHQfloLqMw0AHS5 g/qCdCkjDXTIZZkCICauC3SqsvYGYfMD0MFJIwcKVZ0LyyeFmi84MfLLQ0v1AHYA sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4AAAFzyTmTTAAABAMARzBF AiAlqHGi3QFuPFuKjh1M9PHK83/e2P1RUBElKWcFMj1KPAIhAP/7SHtOGAGXJ9lu cw35Pa+O1DB2knhkQvfW6UiJP2iQMA0GCSqGSIb3DQEBCwUAA4IBAQBKVczMFdHl yg79pfqtAdcex97XrcH85D9fHeM1WkJEOIMtSWFXOkCTnr3iPvtP11d3ObNT+gu0 njjH5xcVxBfcXuB8fFtVdgH38dTs/HqeLQYz1iF8luG8F9i0FOQb8P6tyD7BaRn8 7MQoMhay5VWF+zubAKac7IxcdnGpOEl7rGnKixaDul/VTgW9faTg69QBO2lzla1+ dWotBc/zK9WCHYSaX7IsHJBjYU1mSxa29myjCGGOmk2pXZP5yB/9NZSzkQkje87o Qc7UCbvUWX6qBFZnFpehBucXfQlsQizCOA9GykjfpuFAw8g9W6MzBclbVhEi8VaA G1xBoiCDrqfh -----END CERTIFICATE-----

    opened by cconstab 7
  • Support for PKCS#1 format keys

    Support for PKCS#1 format keys

    Is there any support for PKCS#1 format keys in the future? I see the current implementation only supports PKCS#8 format keys, it would be a great addition to the existing functionalities in the package.

    enhancement 
    opened by hongfeiyang 7
  • Using Method

    Using Method

    i'm using method like this,

    Future<Map<String, dynamic>> deleteForJson(String url, {Map<String, String> queryParameters, Map<String, String> headers}) async { Map<String, dynamic> response = await HttpUtils.deleteForJson(url, queryParameters: queryParameters, headers: headers); Map responseJson = json.decode(response); print(responseJson); return responseJson; } But I'm getting error The argument type 'Map<String, dynamic>' can't be assigned to the parameter type 'String'. Something mistake ?

    opened by zgramming 7
  • feat: elliptic curve base64 signature support and bug fixes

    feat: elliptic curve base64 signature support and bug fixes

    Fixes the ff:

    • follow latest ec pem openssh standard .. See https://wiki.openssl.org/index.php/Command_Line_Elliptic_Curve_Operations

    Added the ff:

    • support other curves for encoding public key to pem
    • support for signing and verifying signature in base64 format
    • add elliptic curve crypto example
    opened by kabaluyot 6
  • ECDSA Sign/Verifier

    ECDSA Sign/Verifier

    Hi, was testing out your library since one of it's dependency is PointyCastle. Just would like to know if there is an ECDSA Sign/Verifier included in your CryptoUtils, or in another dart file?

    opened by azim92 6
  • Organizational Unit number is wrong

    Organizational Unit number is wrong

    This line https://github.com/Ephenodrom/Dart-Basic-Utils/blob/master/lib/src/X509Utils.dart#L50 defines it as 2.5.6.5, but when you print data.toJson().toString(), the OU is 2.5.4.11, which is confirmed by a simple search https://books.google.com/books?id=kEXIBAAAQBAJ&pg=PA25&lpg=PA25&dq=2.5.4.11+organizational+unit++certificate&source=bl&ots=YRgJH0Vgp0&sig=ACfU3U10ooyCzrVNQ5GSmSqrxWfe6jqlBA&hl=en&sa=X&ved=2ahUKEwiK4LfD9qbqAhUi-2EKHXTsBWYQ6AEwA3oECAsQAQ#v=onepage&q=2.5.4.11%20organizational%20unit%20%20certificate&f=false

    opened by certaintls 6
  • Provide a SPKI field

    Provide a SPKI field

    Comparing the hash of a certificate SubjectPublicKeyInfo is the best practice to tell if two certs have the same key, more information on https://www.imperialviolet.org/2011/05/04/pinning.html .

    Can we please add a field SPKI, so something like hash(data.subject['SPKI']) can easily offer user/developer the capability to compare keys if they need to.

    opened by certaintls 6
  • The following ASN1Exception object was thrown building Instance of 'ASN1Exception'

    The following ASN1Exception object was thrown building Instance of 'ASN1Exception'

    When I was decoding this certificate, I ran into the error below:

    [+6401 ms] I/flutter (17765): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    [        ] I/flutter (17765): The following ASN1Exception object was thrown building:
    [        ] I/flutter (17765):   Instance of 'ASN1Exception'
    [        ] I/flutter (17765): 
    [        ] I/flutter (17765): When the exception was thrown, this was the stack:
    [        ] I/flutter (17765): #0      ASN1Parser._doPrimitive (package:asn1lib/asn1parser.dart:109:9)
    [        ] I/flutter (17765): #1      ASN1Parser.nextObject (package:asn1lib/asn1parser.dart:51:13)
    [        ] I/flutter (17765): #2      ASN1Sequence._decodeSeq (package:asn1lib/asn1sequence.dart:73:27)
    [        ] I/flutter (17765): #3      new ASN1Sequence.fromBytes (package:asn1lib/asn1sequence.dart:23:5)
    [        ] I/flutter (17765): #4      ASN1Parser._doPrimitive (package:asn1lib/asn1parser.dart:72:29)
    [        ] I/flutter (17765): #5      ASN1Parser.nextObject (package:asn1lib/asn1parser.dart:51:13)
    [        ] I/flutter (17765): #6      ASN1Sequence._decodeSeq (package:asn1lib/asn1sequence.dart:73:27)
    [        ] I/flutter (17765): #7      new ASN1Sequence.fromBytes (package:asn1lib/asn1sequence.dart:23:5)
    [        ] I/flutter (17765): #8      ASN1Parser._doPrimitive (package:asn1lib/asn1parser.dart:72:29)
    [        ] I/flutter (17765): #9      ASN1Parser.nextObject (package:asn1lib/asn1parser.dart:51:13)
    [        ] I/flutter (17765): #10     ASN1Sequence._decodeSeq (package:asn1lib/asn1sequence.dart:73:27)
    [        ] I/flutter (17765): #11     new ASN1Sequence.fromBytes (package:asn1lib/asn1sequence.dart:23:5)
    [        ] I/flutter (17765): #12     ASN1Parser._doPrimitive (package:asn1lib/asn1parser.dart:72:29)
    [        ] I/flutter (17765): #13     ASN1Parser.nextObject (package:asn1lib/asn1parser.dart:51:13)
    [        ] I/flutter (17765): #14     X509Utils.x509CertificateFromPem (package:basic_utils/src/X509Utils.dart:260:34)
    

    The PEM string is below:

    -----BEGIN CERTIFICATE-----
    MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
    MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
    czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
    CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
    MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
    ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
    b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
    AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
    euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
    bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
    WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
    MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
    1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
    VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
    zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
    BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
    BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
    v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
    E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
    uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
    iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
    GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
    -----END CERTIFICATE-----
    

    The data in text format is:

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                54:80:f9:a0:73:ed:3f:00:4c:ca:89:d8:e3:71:e6:4a
        Signature Algorithm: sha1WithRSAEncryption
            Issuer: C=EE, O=AS Sertifitseerimiskeskus, CN=EE Certification Centre Root CA/[email protected]
            Validity
                Not Before: Oct 30 10:10:30 2010 GMT
                Not After : Dec 17 23:59:59 2030 GMT
            Subject: C=EE, O=AS Sertifitseerimiskeskus, CN=EE Certification Centre Root CA/[email protected]
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
                    Modulus:
                        00:c8:20:c0:ec:e0:c5:4b:ab:07:78:95:f3:44:ee:
                        fb:0b:0c:ff:74:8e:61:bb:b1:62:ea:23:d8:ab:a1:
                        65:32:7a:eb:8e:17:4f:96:d8:0a:7b:91:a2:63:6c:
                        c7:8c:4c:2e:79:bf:a9:05:fc:69:5c:95:8d:62:f9:
                        b9:70:ed:c3:51:7d:d0:93:e6:6c:eb:30:4b:e1:bc:
                        7d:bf:52:9b:ce:6e:7b:65:f2:38:b1:c0:a2:32:ef:
                        62:b2:68:e0:61:53:c1:36:95:ff:ec:94:ba:36:ae:
                        9c:1c:a7:32:0f:e5:7c:b4:c6:6f:74:fd:7b:18:e8:
                        ac:57:ed:06:20:4b:32:30:58:5b:fd:cd:a8:e6:a1:
                        fc:70:bc:8e:92:73:db:97:a7:7c:21:ae:3d:c1:f5:
                        48:87:6c:27:bd:9f:25:74:81:55:b0:f7:75:f6:3d:
                        a4:64:6b:d6:4f:e7:ce:40:ad:0f:dd:32:d3:bc:8a:
                        12:53:98:c9:89:fb:10:1d:4d:7e:cd:7e:1f:56:0d:
                        21:70:85:f6:20:83:1f:f6:ba:1f:04:8f:ea:77:88:
                        35:c4:ff:ea:4e:a1:8b:4d:3f:63:1b:44:c3:44:d4:
                        25:76:ca:b7:8d:d7:1e:4a:66:64:cd:5c:c5:9c:83:
                        e1:c2:08:88:9a:ec:4e:a3:f1:3e:1c:2c:d9:6c:1d:
                        a1:4b
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Key Usage: critical
                    Certificate Sign, CRL Sign
                X509v3 Subject Key Identifier: 
                    12:F2:5A:3E:EA:56:1C:BF:CD:06:AC:F1:F1:25:C9:A9:4B:D4:14:99
                X509v3 Extended Key Usage: 
                    TLS Web Client Authentication, TLS Web Server Authentication, Code Signing, E-mail Protection, Time Stamping, OCSP Signing
        Signature Algorithm: sha1WithRSAEncryption
             7b:f6:e4:c0:0d:aa:19:47:b7:4d:57:a3:fe:ad:bb:b1:6a:d5:
             0f:9e:db:e4:63:c5:8e:a1:50:56:93:96:b8:38:c0:24:22:66:
             bc:53:14:61:95:bf:d0:c7:2a:96:39:3f:7d:28:b3:10:40:21:
             6a:c4:af:b0:52:77:18:e1:96:d8:56:5d:e3:dd:36:5e:1d:a7:
             50:54:a0:c5:2a:e4:aa:8c:94:8a:4f:9d:35:ff:76:a4:06:13:
             91:a2:a2:7d:00:44:3f:55:d3:82:3c:1a:d5:5b:bc:56:4c:22:
             2e:46:43:8a:24:40:2d:f3:12:b8:3b:70:1a:a4:96:b9:1a:af:
             87:41:1a:6a:18:0d:06:4f:c7:3e:6e:b9:29:4d:0d:49:89:11:
             87:32:5b:e6:4b:04:c8:e4:5c:e6:74:73:94:5d:16:98:13:95:
             fe:fb:db:b1:44:e5:3a:70:ac:37:6b:e6:b3:33:72:28:c9:b3:
             57:a0:f6:02:16:88:06:0b:b6:a6:4b:20:28:d4:de:3d:8b:ad:
             37:05:53:74:fe:6e:cc:bc:43:17:71:5e:f9:c5:cc:1a:a9:61:
             ee:f7:76:0c:f3:72:f4:72:ad:cf:72:02:36:07:47:cf:ef:19:
             50:89:60:cc:e9:24:95:0f:c2:cb:1d:f2:6f:76:90:c7:cc:75:
             c1:96:c5:9d
    SHA1 Fingerprint=C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7
    

    ASN.1 JavaScript decoder of this certificate is at http://lapo.it/asn1js/#MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0-W2Ap7kaJjbMeMTC55v6kF_GlclY1i-blw7cNRfdCT5mzrMEvhvH2_UpvObntl8jixwKIy72KyaOBhU8E2lf_slLo2rpwcpzIP5Xy0xm90_XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ_dMtO8ihJTmMmJ-xAdTX7Nfh9WDSFwhfYggx_2uh8Ej-p3iDXE_-pOoYtNP2MbRMNE1CV2yreN1x5KZmTNXMWcg-HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0TAQH_BAUwAwEB_zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy_zQas8fElyalL1BSZMEUGA1UdJQQ-MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo_6tu7Fq1Q-e2-RjxY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX_dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5uuSlNDUmJEYcyW-ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU3j2LrTcFU3T-bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8_vGVCJYMzpJJUPwssd8m92kMfMdcGWxZ0

    opened by certaintls 6
  • added ColorUtils.lerp(List<Color> colors, double t) function

    added ColorUtils.lerp(List colors, double t) function

    Similar to Color.lerp, but it supports more than just two colors.

    Very useful in my case, so I thought I might as well share it.

    Edit: Please add import 'dart:math' as math;, I forgot it

    Example usage:

    LinearProgressIndicator(
      value: progress,
      color: ColorUtils.lerp([
        Colors.red,
        Colors.yellow,
        Colors.green,
      ], progress),
    )
    
    opened by xonaman 1
  • How to request extensions in generateRsaCsrPem

    How to request extensions in generateRsaCsrPem

    Hi.

    I am trying to include codesigning extensions in my CSR using generateRsaCsrPem. I've read through the code and previous issues and it isn't obvious how I would do it.

    Many thanks!

    enhancement 
    opened by wilsondy 1
  • Dart Basic Utils real life usage examples

    Dart Basic Utils real life usage examples

    As far as I can see, this package seems to be used quite often. If you use this package in one of your projects, feel free to mention the project in this issue. If we get a nice list of real life usage examples, I will create a list and display it on this repository ( README and/or seperate file ).

    Some Infos that would be nice to have :

    • Projekt name
    • Link ( to Github / App store / website )
    • Which Utils do you use
    help wanted question 
    opened by Ephenodrom 2
Owner
null
:bug: Flutter debug helper widget with common and custom actions

Debug Friend Flutter debug helper widget with common and custom actions This helps you reduce the development and testing time of new features Show so

Stanislav Ilin 43 Dec 7, 2022
Dart and Flutter sealed class generator and annotations, with match methods and other utilities. There is also super_enum compatible API.

Dart Sealed Class Generator Generate sealed class hierarchy for Dart and Flutter. Features Generate sealed class with abstract super type and data sub

6thSolution 15 Jan 2, 2023
Superpowers for Dart. Collection of useful static extension methods.

If you miss an extension, please open an issue or pull request Resources: Documentation Pub Package GitHub Repository On this page you can find some o

Simon Leier 955 Jan 8, 2023
Learn how to use Dart List Utility Methods in Flutter

Flutter Tutorial - List Utility Methods Learn how to use Dart List Utility Metho

Behruz Hurramov 0 Dec 29, 2021
Ruqe brings the convenient types and methods found in Rust into Dart, such as the Result, Option, pattern-matching, etc.

ruqe Ruqe brings the convenient types and methods found in Rust into Dart, such as the Result, Option, pattern-matching, etc. Additionally, the librar

Alexander Nitiola 12 Dec 28, 2022
Helper pub package for flutter_icons

flutter_icons_helper An helper implementing utility methods for package flutter_

Nicolò Sonnino 3 Jun 22, 2022
JSON formatted API Get, Patch, Put, Post, Delete methods implemented as a dummy.

json_api_handle A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Md. Sabik Alam Rahat 4 Nov 13, 2022
The easiest way to use navigation, context less and useful methods.

Starlight Utils The easiest way to use navigation, context less and useful methods. Features Name Status Context Less Navigation Service ✅ Context Les

Ye Myo Aung 5 Jul 10, 2022
Hive Wait provide a Hive repository to calling methods in the box as async.

Hive Wait provide a Hive repository to calling methods in the box as async.

Giáo Hồ 1 May 10, 2022
This package helps developer to sort the flutter/dart packages and plugins alphabetically, This makes it easier when managing too many packages and when working with teams

Package helps to sort the flutter/dart packages and plugins alphabetically, This makes it easier when managing too many packages and when working with

DANCHE 7 Dec 21, 2022
Isolate helper for flutter and dart.

Isolation Overview The package simplifies the creation and interaction between isolates. It encapsulates the entire boilerplate, leaving the developer

Plague Fox 15 Oct 29, 2022
package library for extended_image, extended_text and extended_text_field,provide common base class.

extended_image_library package library for extended_image extended_image A powerful official extension library of image, which support placeholder(loa

FlutterCandies 124 Dec 31, 2022
Contactus - a flutter package. The most common functionality added in any commercial app is the Developer's contact details

Contact Us The most common functionality added in any commercial app is the Developer's contact details!! So this package helps the developers to simp

Abhishek Doshi 19 Aug 4, 2022
Flutter package to render html as widgets that supports hyperlink, image, audio, video, iframe and many other tags.

HtmlWidget monorepo This repo contains the source code for everything HtmlWidget-related. Name Link flutter_widget_from_html_core flutter_widget_from_

Đào Hoàng Sơn 445 Jan 6, 2023
A sign in button helper library for Flutter

A Flutter plugin for iOS and Android for generating signin buttons for different social media account. Feedback and Pull Requests are most welcome! In

Liu Zhiheng 229 Dec 29, 2022
Helper for building advanced multi child layouts.

About Boxy is designed to overcome the limitations of Flutter's built-in layout widgets, it provides utilities for flex, custom multi-child layouts, d

Andre 329 Dec 12, 2022
Zooper flutter encoding utf16 - Helper classes to encode and decode UTF16 string to List

zooper_flutter_encoding_utf16 Helper classes to encode and decode UTF16 string t

Zooper 0 Feb 10, 2022
Helper app to run code on Aliucord iOS via websocket.

aliucordebug A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Zoey 2 Jan 25, 2022
Nebula makes your Flutter development journey easier by providing helper widgets, utilities and abstractions.

Nebula makes your Flutter development journey easier by providing helper widgets, utilities and abstractions.

Aldrin's Art Factory 1 Apr 21, 2022