{"id":32309251,"url":"https://github.com/ephenodrom/dart-basic-utils","last_synced_at":"2026-02-20T23:01:54.576Z","repository":{"id":37932689,"uuid":"171837570","full_name":"Ephenodrom/Dart-Basic-Utils","owner":"Ephenodrom","description":"A dart package for many helper methods fitting common situations","archived":false,"fork":false,"pushed_at":"2025-02-23T17:46:46.000Z","size":1237,"stargazers_count":388,"open_issues_count":15,"forks_count":81,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-10-23T08:32:41.584Z","etag":null,"topics":["basic","colorutils","common-utils","csr","dart","date","dateutils","dns","dns-utils","domain","domain-utils","email","email-utils","flutter","http","http-utils","string","string-utils","x509"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ephenodrom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.paypal.me/ephenodrom"]}},"created_at":"2019-02-21T09:07:20.000Z","updated_at":"2025-10-17T11:17:37.000Z","dependencies_parsed_at":"2023-01-31T07:15:43.280Z","dependency_job_id":"f147088f-0fe8-4887-947a-cf41f2aaac46","html_url":"https://github.com/Ephenodrom/Dart-Basic-Utils","commit_stats":{"total_commits":342,"total_committers":19,"mean_commits":18.0,"dds":"0.32748538011695905","last_synced_commit":"45ed0a3087b2051004f17b39eb5289874b9c0390"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ephenodrom/Dart-Basic-Utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ephenodrom%2FDart-Basic-Utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ephenodrom%2FDart-Basic-Utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ephenodrom%2FDart-Basic-Utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ephenodrom%2FDart-Basic-Utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ephenodrom","download_url":"https://codeload.github.com/Ephenodrom/Dart-Basic-Utils/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ephenodrom%2FDart-Basic-Utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29667119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T19:49:36.704Z","status":"ssl_error","status_checked_at":"2026-02-20T19:44:05.372Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["basic","colorutils","common-utils","csr","dart","date","dateutils","dns","dns-utils","domain","domain-utils","email","email-utils","flutter","http","http-utils","string","string-utils","x509"],"created_at":"2025-10-23T08:19:37.913Z","updated_at":"2026-02-20T23:01:54.571Z","avatar_url":"https://github.com/Ephenodrom.png","language":"Dart","readme":"# Basic Utils\n\n[![pub package](https://img.shields.io/pub/v/basic_utils.svg?logo=dart\u0026logoColor=00b9fc)](https://pub.dev/packages/basic_utils)\n[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)\n[![License](https://img.shields.io/github/license/ephenodrom/Dart-Basic-Utils?logo=open-source-initiative\u0026logoColor=green)](https://github.com/Ephenodrom/Dart-Basic-Utils/blob/master/LICENSE)\n\nA dart package for many helper methods fitting different situations.\n\n## Table of Contents\n\n- [Basic Utils](#basic-utils)\n  - [Table of Contents](#table-of-contents)\n  - [Preamble](#preamble)\n  - [Install](#install)\n    - [pubspec.yaml](#pubspecyaml)\n  - [Import](#import)\n  - [Util Classes](#util-classes)\n    - [StringUtils](#stringutils)\n    - [DomainUtils](#domainutils)\n    - [EmailUtils](#emailutils)\n    - [MathUtils](#mathutils)\n    - [HttpUtils](#httputils)\n    - [DnsUtils](#dnsutils)\n    - [SortUtils](#sortutils)\n    - [ColorUtils](#colorutils)\n    - [DateUtils](#dateutils)\n    - [X509Utils](#x509utils)\n    - [PKCS12Utils](#pkcs12utils)\n    - [IterableUtils](#iterableutils)\n    - [CryptoUtils](#cryptoutils)\n    - [ASN1Utils](#asn1utils)\n    - [HexUtils](#hexutils)\n    - [EnumUtils](#enumutils)\n    - [BooleanUtils](#booleanutils)\n    - [FunctionDefs](#functiondefs)\n  - [Changelog](#changelog)\n  - [Real Live Examples](#real-live-examples)\n    - [SSL Toolkit](#ssl-toolkit)\n  - [Copyright and license](#copyright-and-license)\n\n## Preamble\n\nAs this package is written in pure [Dart](https://dart.dev), it can be used on all [platforms](https://dart.dev/platforms) on which dart is currently running. This includes the use of frameworks like [Flutter](https://flutter.dev), [Angular Dart](https://angulardart.dev) and many more. This package can also be used for command line tools or rest services compiled with [dart2native](https://dart.dev/tools/dart2native).\n\n**Note:** Feel free to contribute by creating pull requests or file an issue for bugs, questions and feature requests.\n\n## Install\n\n### pubspec.yaml\n\nUpdate pubspec.yaml and add the following line to your dependencies.\n\n```yaml\ndependencies:\n  basic_utils: ^5.8.2\n```\n\n## Import\n\nImport the package with :\n\n```dart\nimport 'package:basic_utils/basic_utils.dart';\n```\n\n## Util Classes\n\nThe package contains different classes. Each class contains methods that provide a solution for certain problems.\n\n### StringUtils\n\nHelper class for String operations.\n\n```dart\nString defaultString(String? str, {String defaultStr = ''});\nbool isNullOrEmpty(String? s);\nbool isNotNullOrEmpty(String? s);\nString camelCaseToUpperUnderscore(String s);\nString camelCaseToLowerUnderscore(String s);\nbool isLowerCase(String s);\nbool isUpperCase(String s);\nbool isAscii(String s);\nString capitalize(String s, {bool allWords = false});\nString reverse(String s);\nint countChars(String s, String char, {bool caseSensitive = true});\nbool isDigit(String s);\nbool equalsIgnoreCase(String a, String b);\nbool inList(String s, List\u003cString\u003e list, {bool ignoreCase = false});\nbool isPalindrome(String s);\nString hidePartial(String s, {int begin = 0, int end, String replace = \"*\"});\nString addCharAtPosition(String s, String char, int position,{bool repeat = false});\nList\u003cString\u003e chunk(String s, chunkSize);\nString pickOnly(value, {int from = 1, int to = -1});\nString removeCharAtPosition(String value, int index);\nString removeExp(String value, String pattern,{bool repeat = true,bool caseSensitive = true,bool multiLine = false,bool dotAll = false,bool unicode = false});\nString truncate(String value, int length, {String symbol = '...'}); \nString generateRandomString(int length,{alphabet = true,numeric = true,special = true,uppercase = true,lowercase = true,String from = ''});\nString toPascalCase(String s);\nList\u003cString\u003e generateRandomStrings(int amount,int length,{alphabet = true,numeric = true,special = true,uppercase = true,lowercase = true,String from = ''});\n```\n\n### DomainUtils\n\nHelper class for operations on domain names.\n\n```dart\nbool isDomainName(String s);\nbool isSubTld(String tld, String? subTld);\nbool isSubDomain(String? s);\nbool isSubDomainOf(String sub, String domain);\nbool isCCTLD(String s);\nbool isNGTLD(String s);\nbool isTld(String s);\nbool isGTLD(String s);\nList\u003cString\u003e splitDomainName(String domainName);\nDomain? getDomainFromUrl(String url);\nDomain? parseDomain(String domainName);\nList\u003cString\u003e splitSubdomainInDomains(String name);\nString toIDN(String domain);\nString fromIDN(String domain)\n```\n\n### EmailUtils\n\nHelper class for operations on email addresses.\n\n```dart\nbool isEmail(String s);\nEmailAddress? parseEmailAddress(String s);\n```\n\n### MathUtils\n\nHelper class for simple math operations like calculating circular area or converting length units.\n\n```dart\ndouble calculateCircumference(double radius);\ndouble calculateCircularArea(double radius);\ndouble calculateCircleDiameter(double radius);\ndouble calculateSquareArea(double a, {double? b});\ndouble convertUnit(double value, LengthUnits sourceUnit, LengthUnits targetUnit);\ndouble calculateMixingTemperature(double mA, double tA, double mB, double tB,{double? cA, double? cB});\nnum mean(List\u003cnum\u003e l);\ndouble round(double value, int decimals);\nint getRandomNumber({int min = 0, int max = 999999999999});\nnum median(List\u003cnum\u003e sorted);\ndouble logBase(num x, num base);\ndouble log2(num x);\ndouble log10(num x);\n```\n\n### HttpUtils\n\nHelper class for simple http operations like sending requests.\n\n```dart\nFuture\u003cMap\u003cResponse\u003e getForFullResponse(String url, {Map\u003cString, dynamic\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cMap\u003cString, dynamic\u003e\u003e getForJson(String url, {Map\u003cString, dynamic\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cString\u003e getForString(String url, {Map\u003cString, dynamic\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cMap\u003cResponse\u003e postForFullResponse(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cMap\u003cString, dynamic\u003e\u003e postForJson(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cString\u003e postForString(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cResponse\u003e putForFullResponse(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cMap\u003cString, dynamic\u003e\u003e putForJson(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cString\u003e putForString(String url, {String? body, Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cResponse deleteForFullResponse(String url, {Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cMap\u003cString, dynamic\u003e\u003e deleteForJson(String url, {Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nFuture\u003cString\u003e deleteForString(String url, {Map\u003cString, String\u003e? queryParameters, Map\u003cString, String\u003e? headers});\nMap\u003cString, dynamic\u003e? getQueryParameterFromUrl(String url);\nString addQueryParameterToUrl(String url, Map\u003cString, dynamic\u003e? queryParameters);\n```\n\n### DnsUtils\n\nHelper class for lookup resource records. Uses google dns resolver api.\n\n```dart\nFuture\u003cList\u003cRRecord\u003e?\u003e lookupRecord(String name, RRecordType type,{bool dnssec = false, DnsApiProvider provider = DnsApiProvider.GOOGLE});\nRRecordType intToRRecordType(int type);\nint rRecordTypeToInt(RRecordType type);\nFuture\u003cList\u003cRRecord\u003e?\u003e reverseDns(String ip,{DnsApiProvider provider = DnsApiProvider.GOOGLE});\nString? getReverseAddr(String ip);\nString toBind(RRecord record);\n```\n\n### SortUtils\n\nHelper class for sorting lists. Implementation of different sorting algorithms.\n\n```dart\nList quickSort(List list);\nList bubbleSort(List list);\nList heapSort(List list);\n```\n\n### ColorUtils\n\nHelper class for color operations.\n\n```dart\nint hexToInt(String hex);\nString intToHex(int i);\nString shadeColor(String hex, int percent);\nString fillUpHex(String hex);\nbool isDark(String hex);\nString contrastColor(String hex);\nMap\u003cString, int\u003e basicColorsFromHex(String hex);\ndouble calculateRelativeLuminance(int red, int green, int blue,{int decimals = 2});\nList\u003cString\u003e swatchColor(String hex, {double percentage = 15, int amount = 5});\nString invertColor(String color);\n```\n\n### DateUtils\n\nHelper class for date operations like converting textual datetime description.\n\n```dart\nDateTime stringToDateTime(String s, {DateTime time});\nint getCalendarWeek(DateTime date);\n```\n\n### X509Utils\n\nHelper class for operations on x509 certificates, like generating csr and many more.\n\n```dart\nString formatKeyString(String key, String begin, String end,{int chunkSize = 64, String lineDelimiter = \"\\n\"});\nString generateRsaCsrPem(Map\u003cString, String\u003e attributes, RSAPrivateKey privateKey, RSAPublicKey publicKey, {List\u003cString\u003e? san, String signingAlgorithm = 'SHA-256'});\nString generateEccCsrPem(Map\u003cString, String\u003e attributes, ECPrivateKey privateKey, ECPublicKey publicKey, {List\u003cString\u003e? san, String signingAlgorithm = 'SHA-256'});\nString encodeASN1ObjectToPem(ASN1Object asn1Object, String begin, String end, {String newLine = '\\n'});\nRSAPrivateKey privateKeyFromASN1Sequence(ASN1Sequence asnSequence);\nASN1Object encodeDN(Map\u003cString, String\u003e dn);\nX509CertificateData x509CertificateFromPem(String pem);\nPkcs7CertificateData pkcs7fromPem(String pem);\nCertificateSigningRequestData csrFromPem(String pem);\nASN1Sequence buildOCSPRequest(String pem, {String? intermediate});\nString getOCSPUrl(String pem);\nOCSPResponse parseOCSPResponse(Uint8List bytes);\nBigInt getModulusFromRSACsrPem(String pem);\nBigInt getModulusFromRSAX509Pem(String pem);\nString pemToPkcs7(List\u003cString\u003e pems);\nString generateSelfSignedCertificate(PrivateKey privateKey, String csr,int days, { List\u003cString\u003e? sans, List\u003cExtendedKeyUsage\u003e? extKeyUsage, String serialNumber = '1'});\nList\u003cString\u003e parseChainStringAsString(String s);\nList\u003cX509CertificateData\u003e parseChainString(String chain);\nCertificateRevokeListeData crlDataFromPem(String pem);\nString crlDerToPem(Uint8List bytes);\nbool checkCsrSignature(String pem);\nbool checkX509Signature(String pem, {String? parent});\nString fixPem(String pem);\nCertificateChainCheckData checkChain(List\u003cX509CertificateData\u003e x509);\n```\n\n### PKCS12Utils\n\nHelper class for operations on PKCS12 files.\n\n```dart\nUint8List generatePkcs12(String privateKey, List\u003cString\u003e certificates, {String? password, String keyPbe = 'PBE-SHA1-3DES', String certPbe = 'PBE-SHA1-RC2-40', String digestAlgorithm = 'SHA-1', int macIter = 2048, Uint8List? salt, Uint8List? certSalt, Uint8List? keySalt, String? friendlyName, Uint8List? localKeyId});\n```\n\n### IterableUtils\n\nHelper class for operations on iterables\n\n```dart\nT randomItem\u003cT\u003e(Iterable\u003cT\u003e iterable);\nbool isNullOrEmpty(Iterable? iterable);\nbool isNotNullOrEmpty(Iterable? iterable);\nList\u003cList\u003cT\u003e\u003e chunk\u003cT\u003e(List\u003cT\u003e list, int size);\nswap(List\u003cdynamic\u003e input, int a, int b);\nList\u003cList\u003cdynamic\u003e\u003e permutate(List\u003cdynamic\u003e data);\n```\n\n### CryptoUtils\n\nHelper class for cryptographic operations. This is some kind of high level api for pointycastle and asn1lib.\n\n```dart\nString getSha1ThumbprintFromBytes(Uint8List bytes);\nString getSha256ThumbprintFromBytes(Uint8List bytes);\nString getMd5ThumbprintFromBytes(Uint8List bytes);\nUint8List rsaPublicKeyModulusToBytes(RSAPublicKey publicKey);\nUint8List rsaPublicKeyExponentToBytes(RSAPublicKey publicKey);\nUint8List rsaPrivateKeyToBytes(RSAPrivateKey privateKey);\nUint8List rsaPrivateKeyExponentToBytes(RSAPrivateKey privateKey);\nAsymmetricKeyPair generateRSAKeyPair({int keySize = 2048});\nAsymmetricKeyPair generateEcKeyPair({String curve = 'prime256v1'});\nString encodeRSAPublicKeyToPem(RSAPublicKey publicKey);\nString encodeRSAPrivateKeyToPem(RSAPrivateKey rsaPrivateKey);\nUint8List encodeRSAPublicKeyToDERBytes(RSAPublicKey publicKey);\nUint8List encodeRSAPrivateKeyToDERBytes(RSAPrivateKey privateKey);\nRSAPrivateKey rsaPrivateKeyFromPem(String pem);\nRSAPublicKey rsaPublicKeyFromPem(String pem);\nRSAPrivateKey rsaPrivateKeyFromDERBytes(Uint8List bytes);\nRSAPublicKey rsaPublicKeyFromDERBytes(Uint8List bytes);\nUint8List getBytesFromPEMString(String pem, {bool checkHeader = true});\nString encodeEcPrivateKeyToPem(ECPrivateKey ecPrivateKey);\nString encodeEcPublicKeyToPem(ECPublicKey publicKey);\nECPublicKey ecPublicKeyFromPem(String pem);\nECPrivateKey ecPrivateKeyFromPem(String pem);\nECPrivateKey ecPrivateKeyFromDerBytes(Uint8List bytes,{bool pkcs8 = false})\nECPublicKey ecPublicKeyFromDerBytes(Uint8List bytes);\nString rsaEncrypt(String message, RSAPublicKey publicKey);\nString rsaDecrypt(String cipherMessage, RSAPrivateKey privateKey);\nUint8List rsaSign(RSAPrivateKey privateKey, Uint8List dataToSign, {String algorithmName = 'SHA-256/RSA'});\nbool rsaVerify(RSAPublicKey publicKey, Uint8List signedData, Uint8List signature,{String algorithm = 'SHA-256/RSA'});\nString encodeRSAPrivateKeyToPemPkcs1(RSAPrivateKey rsaPrivateKey);\nString encodeRSAPublicKeyToPemPkcs1(RSAPublicKey rsaPublicKey);\nRSAPublicKey rsaPublicKeyFromPemPkcs1(String pem);\nRSAPrivateKey rsaPrivateKeyFromPemPkcs1(String pem);\nRSAPublicKey rsaPublicKeyFromDERBytesPkcs1(Uint8List bytes);\nRSAPrivateKey rsaPrivateKeyFromDERBytesPkcs1(Uint8List bytes);\nECSignature ecSign(ECPrivateKey privateKey, Uint8List dataToSign, {String algorithmName = 'SHA-1/ECDSA'});\nbool ecVerify(ECPublicKey publicKey, Uint8List signedData, ECSignature signature, {String algorithm = 'SHA-1/ECDSA'});\nString getHash(Uint8List bytes, {String algorithmName = 'SHA-256'});\nBigInt getModulusFromRSAPrivateKeyPem(String pem);\nString ecSignatureToBase64(ECSignature signature);\nECSignature ecSignatureFromBase64(String b64);\nbool ecVerifyBase64(ECPublicKey publicKey, Uint8List origData, String signature, {String algorithm = 'SHA-1/ECDSA'});\nECSignature ecSignatureFromDerBytes(Uint8List data);\nUint8List i2osp(BigInt number,{int? outLen, Endian endian = Endian.big});\nBigInt osp2i(Iterable\u003cint\u003e bytes, {Endian endian = Endian.big});\nUint8List rsaPssSign(RSAPrivateKey privateKey, Uint8List dataToSign, Uint8List salt, {String algorithm = 'SHA-256/PSS'});\nbool rsaPssVerify(RSAPublicKey publicKey, Uint8List signedData, Uint8List signature, Uint8List salt, {String algorithm = 'SHA-256/PSS'});\n```\n\n### ASN1Utils\n\nHelper class for operation on ASN1 objects.\n\n```dart\nString dump(String pem, {bool checkHeader = true});\nASN1DumpWrapper complexDump(String pem, {bool checkHeader = true});\n```\n\n### HexUtils\n\nHelper class for converting hexadecimal string/bytes.\n\n```dart\nUint8List decode(String hex);\nString encode(Uint8List bytes);\n```\n\n### EnumUtils\n\nHelper class for operation on enums.\n\n```dart\nT getEnum\u003cT extends Enum\u003e(final String enumName, final List\u003cT\u003e enumList, final T defaultEnum, {bool ignoreCase = false});\nbool isValidEnum(final String enumName, final List\u003cEnum\u003e enumList, {bool ignoreCase = false});\nMap getEnumMap(final List\u003cEnum\u003e enumList);\n```\n\n### BooleanUtils\n\nHelper class for operation on booleans.\n\n```dart\nbool and(final List\u003cbool\u003e array);\nbool or(final List\u003cbool\u003e array);\nbool xor(final List\u003cbool\u003e array);\nList\u003cbool\u003e booleanValues();\nint compare(final bool x, final bool y);\nbool toBoolean(final int value);\nbool toBooleanObject(final String? str);\nbool toBooleanDefaultIfNull(final bool? value, final bool valueIfNull);\nint toInteger(final bool bool);\nString toBooleanString(final bool value);\n```\n\n### FunctionDefs\n\nHelper with various function prototype definitions.\n\n```dart\nBiConsumer\u003cT,U\u003e\nBiFunction\u003cT,U,R\u003e\nBinaryOperator\u003cT\u003e\nBiPredicate\u003cT,U\u003e\nConsumer\u003cT\u003e\nSupplier\u003cT\u003e\nBooleanSupplier\nSingleFunction\u003cT,R\u003e\nPredicate\u003cT\u003e\nUnaryOperator\u003cT\u003e\n```\n\n## Changelog\n\nFor a detailed changelog, see the [CHANGELOG.md](CHANGELOG.md) file\n\n## Real Live Examples\n\n### SSL Toolkit\n\nAll-in-one crossplatform ([Android](https://play.google.com/store/apps/details?id=de.feuerbergsoftware.ssl_checker)/[iOS/macOS](https://apps.apple.com/us/app/ssl-toolkit/id1547278785)/[Windows](https://www.microsoft.com/en-us/p/ssl-toolkit/9nc62bnkndvx)) toolkit for SSL, including SSL install check, TLS check, PEM parser, CSR generator and certificate transparency log check.\n\n## Copyright and license\n\nMIT License\n\nCopyright (c) 2024 Ephenodrom\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","funding_links":["https://www.paypal.me/ephenodrom"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fephenodrom%2Fdart-basic-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fephenodrom%2Fdart-basic-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fephenodrom%2Fdart-basic-utils/lists"}