{"id":19224084,"url":"https://github.com/pedroalbanese/edgetk","last_synced_at":"2026-02-12T20:01:44.494Z","repository":{"id":64996507,"uuid":"543201698","full_name":"pedroalbanese/edgetk","owner":"pedroalbanese","description":"🔒 Encrypted Data Gateway Engine - Command-line Integrated Security Suite written in Go (OpenSSL compliant)","archived":false,"fork":false,"pushed_at":"2026-02-09T16:36:47.000Z","size":46381,"stargazers_count":17,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-09T20:29:44.057Z","etag":null,"topics":["aria","blake2","camellia","chacha20","ecdsa-cryptography","ed25519","golang","gost3410-2012","kuznechik","openssl","poly1305","rsa-cryptography","seed","sm2","sm3","sm4","streebog","tlcp","tls","whirlpool"],"latest_commit_sha":null,"homepage":"http://albanese.atwebpages.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedroalbanese.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-29T15:47:00.000Z","updated_at":"2026-02-09T16:36:51.000Z","dependencies_parsed_at":"2023-09-29T19:34:34.357Z","dependency_job_id":"d65a4459-d950-4582-89a0-40dbc3416a04","html_url":"https://github.com/pedroalbanese/edgetk","commit_stats":null,"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/pedroalbanese/edgetk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedroalbanese%2Fedgetk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedroalbanese%2Fedgetk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedroalbanese%2Fedgetk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedroalbanese%2Fedgetk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedroalbanese","download_url":"https://codeload.github.com/pedroalbanese/edgetk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedroalbanese%2Fedgetk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29379636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T19:05:20.189Z","status":"ssl_error","status_checked_at":"2026-02-12T19:01:44.216Z","response_time":55,"last_error":"SSL_read: 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":["aria","blake2","camellia","chacha20","ecdsa-cryptography","ed25519","golang","gost3410-2012","kuznechik","openssl","poly1305","rsa-cryptography","seed","sm2","sm3","sm4","streebog","tlcp","tls","whirlpool"],"created_at":"2024-11-09T15:10:29.259Z","updated_at":"2026-02-12T20:01:44.477Z","avatar_url":"https://github.com/pedroalbanese.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EDGE Toolkit\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/pedroalbanese/edgetk/blob/master/LICENSE.md) \n[![GoDoc](https://godoc.org/github.com/pedroalbanese/edgetk?status.png)](http://godoc.org/github.com/pedroalbanese/edgetk)\n[![GitHub downloads](https://img.shields.io/github/downloads/pedroalbanese/edgetk/total.svg?logo=github\u0026logoColor=white)](https://github.com/pedroalbanese/edgetk/releases)\n[![Go Report Card](https://goreportcard.com/badge/github.com/pedroalbanese/edgetk)](https://goreportcard.com/report/github.com/pedroalbanese/edgetk)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/pedroalbanese/edgetk)](https://golang.org)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/pedroalbanese/edgetk)](https://github.com/pedroalbanese/edgetk/releases)\n[![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.17155950-blue.svg)](https://doi.org/10.5281/zenodo.17155950)\n\nMulti-purpose cross-platform hybrid cryptography tool for symmetric and asymmetric encryption, cipher-based message authentication code (CMAC|PMAC|GMAC|VMAC), recursive hash digest, hash-based message authentication code (HMAC), HMAC-based key derivation function (HKDF), password-based key derivation function (PBKDF2|Lyra2|Scrypt), password-hashing scheme (Bcrypt|Argon2|Lyra2|Makwa), shared key agreement (ECDH|VKO|X25519|X448|ML-KEM), digital signature (RSA|ECDSA|EdDSA|GOST|SLH-DSA|ML-DSA), X.509 CSRs, CRLs and Certificates, and TCP instant server with TLS 1.3 and TLCP encryption layers for small or embedded systems. \n\n***Fully OpenSSL/LibreSSL/GmSSL/Botan/libsodium/RHash/Mcrypt compliant***\n\n\u003cdetails\u003e\u003csummary\u003eImplements\u003c/summary\u003e  \n    \n1. Africacrypt 2009: Galindo-Garcia Identity-Based Signature (IBS)\n3. Anubis Involutional SPN 128-bit block cipher (Barreto, ESAT/COSIC)\n4. Asiacrypt 2001: Short Signatures from the Weil Pairing (BLS)\n5. Asi­acrypt 2005: Barreto Identity-Based Signature (IBS)\n6. BSI TR-03111 Elliptic Curve Cryptography (ECC) Technical Guideline\n7. CHASKEY Message Authentication Code (Nicky Mouha, ESAT/COSIC)\n8. CubeHash and SipHash64/128 (Daniel J. Bernstein \u0026 JP Aumasson)\n9. CRYPTO 1999: IND-CCA2 Fujisaki-Okamoto Transformation (IBE)\n10. CRYPTO 2001: Boneh-Franklin Identity-Based Encryption (IBE)\n11. DSTU 7564:2014 A New Standard of Ukraine: The Kupyna Hash Function\n12. DSTU 7624:2014 A Encryption Standard of Ukraine: Kalyna Block Cipher\n13. Eurocrypt 1996: Security Proofs for Signature Schemes (EUF-CMA ElGamal)\n14. Eurocrypt 2004: Boneh-Boyen Identity-Based Encryption (IBE)\n15. GB/T 32907-2016 - SM4 128-bit Block Cipher\n16. GB/T 32918.4-2016 SM2 Elliptic Curve Asymmetric Encryption\n17. GB/T 38636-2020 - Transport Layer Cryptography Protocol (TLCP)\n18. GM/T 0001-2012 ZUC Zu Chongzhi Stream cipher 128/256-bit key\n19. GM/T 0002-2012 SM4 Block cipher with 128-bit key\n20. GM/T 0003-2012 SM2 Public key algorithm 256-bit\n21. GM/T 0004-2012 SM3 Message digest algorithm 256-bit hash value\n22. GM/T 0044-2016 SM9 Public key algorithm 256-bit\n23. GM/T 0086-2020 Specification of key management system based on SM9\n24. GOST 28147-89 64-bit block cipher (RFC 5830)\n25. GOST R 34.10-2012 VKO key agreement function (RFC 7836)\n26. GOST R 34.10-2012 public key signature function (RFC 7091)\n27. GOST R 34.11-2012 Streebog hash function (RFC 6986)\n28. GOST R 34.11-94 CryptoPro hash function (RFC 5831)\n29. GOST R 34.12-2015 128-bit block cipher Kuznechik (RFC 7801)\n30. GOST R 34.12-2015 64-bit block cipher Magma (RFC 8891)\n31. GOST R 50.1.114-2016 GOST R 34.10-2012 and GOST R 34.11-2012\n32. HC-128 Stream Cipher simplified version of HC-256 (Wu, ESAT/COSIC)\n33. IGE (Infinite Garble Extension) Mode of Operation for Block ciphers\n34. ISO/IEC 10118-3:2003 RIPEMD128/160/256 and Whirlpool (ESAT/COSIC)\n35. ISO/IEC 18033-3:2010 HIGHT, SEED, Camellia and MISTY1 Block ciphers\n36. ISO/IEC 18033-4:2011 KCipher-2 stream cipher (RFC 7008)\n37. ISO/IEC 29192-3:2012 Trivium Stream cipher with 80-bit key\n38. ISO/IEC 18033-5:2015 IBE - Identity-based Encryption Mechanisms\n39. ISO/IEC 18033-5:2015/Amd.1:2021(E) SM9 Mechanism\n40. ISO/IEC 14888-3:2018 EC-SDSA Schnorr-based Signature Scheme\n41. ISO/IEC 29192-2:2019 PRESENT, CLEFIA and LEA block ciphers\n42. ISO/IEC 15946-5:2022 Barreto-Naehrig and Barreto-Lynn-Scott Curves\n43. ITI DOC-ICP-01.01 Curve E-521 Brazilian Digital Signature Standard\n44. KS X 1213-1 ARIA 128-bit block cipher with 128/192/256-bit keys\n45. KS X 3246 LEA - Lightweight Encryption Algorithm (TTAK.KO-12.0223)\n46. KS X 3262 LSH - A New Fast Secure Hash Function Family (in Korean)\n47. LNCS 1838 - A One Round Protocol for Tripartite Diffie-Hellman\n48. NIST SP800-186 X25519 Diffie-Hellman (OpenSSL compliant)\n49. NIST SP800-38D GCM AEAD mode for 128-bit block ciphers (RFC 5288)\n50. NIST SP800-232 Ascon-Based Lightweight Cryptography Standard\n51. PKC 2003: Cha-Cheon Identity-Based Signature (IBS)\n52. RFC 1423: Privacy Enhancement for Internet Electronic Mail\n53. RFC 2104: HMAC - Keyed-Hashing for Message Authentication\n54. RFC 2144: CAST-128 64-bit Block cipher with 128-bit key\n55. RFC 2612: The CAST-256 Encryption Algorithm\n56. RFC 3610: Counter with CBC-MAC Mode of Operation (CCM Mode)\n57. RFC 4009: The SEED Encryption Algorithm (KISA)\n58. RFC 4253: Serpent 128-bit Block cipher with 128/192/256-bit keys\n59. RFC 4493: Cipher-based Message Authentication Code (CMAC)\n60. RFC 4503: Rabbit Stream Cipher Algorithm with 128-bit key\n61. RFC 4543: Galois Message Authentication Code (GMAC)\n62. RFC 4764: EAX Authenticated-Encryption Mode of Operation\n63. RFC 4648: Base16, Base32, and Base64 Data Encodings\n64. RFC 5246: Transport Layer Security (TLS) Protocol Version 1.2\n65. RFC 5280: Internet X.509 PKI Certificate Revocation List (CRL)\n50. RFC 5297: Synthetic Initialization Vector (SIV Mode)\n51. RFC 5639: Elliptic Curve Cryptography (ECC) Brainpool Standard Curves\n53. RFC 5869: HMAC-based Key Derivation Function (HKDF)\n54. RFC 6114: The 128-Bit Blockcipher CLEFIA (Sony)\n55. RFC 7008: KCipher-2 Encryption Algorithm (KDDI R\u0026D Laboratories)\n56. RFC 7253: OCB3 Offset Codebook Authenticated-Encryption Algorithm\n57. RFC 7292: PKCS #12 Personal Information Exchange Syntax v1.1\n58. RFC 7539: ChaCha20-Poly1305 AEAD Stream cipher\n59. RFC 7693: The BLAKE2 Cryptographic Hash and MAC (JP Aumasson)\n60. RFC 7748: Curve25519 and Curve448: Elliptic Curves for Security\n61. RFC 7914: The Scrypt Password-Based Key Derivation Function\n62. RFC 8032: Ed25519 Signature a.k.a. EdDSA (Daniel J. Bernstein)\n63. RFC 8446: Transport Layer Security (TLS) Protocol Version 1.3\n64. RFC 8554: Post-Quantum Leighton-Micali Hash-Based Signatures\n65. RFC 9058: MGM AEAD mode for 64 and 128 bit ciphers (E. Griboedova)\n66. RFC 9367: GOST Cipher Suites for Transport Layer Security (TLS 1.3)\n13. SAC 2002: Hess Efficient Identity Based Signature (IBS)\n66. SBRC 2007: Curupira 96-bit block cipher with 96/144/192-bit keys\n67. STB 34.101.31-2011 Belarusian standard (Bel-T) block cipher\n68. STB 34.101.45-2013 Belarusian BignV1 public key algorithhm\n69. STB 34.101.77-2020 Belarusian standard BASH hash function\n70. TTAS.KO-12.0004/R1 128-bit Block Cipher SEED (ISO/IEC 18033-3:2010)\n71. TTAS.KO-12.0040/R1 64-bit Block Cipher HIGHT (ISO/IEC 18033-3:2010)\n72. TTAS.KO-12.0011/R2 HAS-160 Korean-standardized hash algorithm\n73. TTAK.KO-12.0015/R3 EC-KCDSA Korean Digital Signature Algorithm\n74. TTAK.KO-12.0223 LEA 128-bit block cipher (ISO/IEC 29192-2:2019)\n75. TTAK.KO-12.0276 LSH Message digest algorithm (KS X 3262)\n76. US FIPS 197 Advanced Encryption Standard (AES)\n77. US FIPS 180-2 Secure Hash Standard (SHS) SHA1 and SHA2 Algorithms\n78. US FIPS 202 SHA-3 Permutation-Based Hash (instance of the Keccak)\n79. US FIPS 203 Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM)\n80. US FIPS 204 Module-Lattice-Based Digital Signature Standard (ML-DSA)\n81. US FIPS 205 Stateless Hash-Based Digital Signature Standard (SLH-DSA)\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003eNational Cryptographic Standards\u003c/summary\u003e\n \n#### 🇨🇳 SM2, SM3, SM4, SM9, ZUC — Chinese national cryptographic standards  \nDefined by the **State Cryptography Administration (SCA)** and standardized under **GB/T** and **GM/T** series. Widely used in Chinese government, banking, and telecom infrastructure.\n\n---\n\n#### 🇷🇺 GOST R 34.10, Kuznechik, Streebog — Russian Federation cryptographic standards  \nApproved by **FSTEC** and **Federal Security Service (FSB)**, standardized under **GOST R** series. Used across official and military systems in Russia.\n\n---\n\n#### 🇺🇦 Kalyna, Kupyna — Ukrainian national cryptographic standards  \nStandardized as **DSTU 7624:2014** (Kalyna block cipher) and **DSTU 7564:2014** (Kupyna hash function) by the **Ukrainian State Service for Special Communications and Information Protection**.\n\n---\n\n#### 🇰🇷 ARIA, SEED, LEA, LSH, KCDSA — Korean national cryptographic algorithms  \nDeveloped under **TTAS.KO** and **KS X** standards. Used in public sector systems and Korean financial institutions. Published by **KISA** and **TTA**.\n\n---\n\n#### 🇧🇾 BignV1, Bel-T, BASH — Belarusian cryptographic standards  \nStandardized by the **STB 34.101** series. Designed for public key encryption (**BignV1**), block cipher encryption (**Bel-T**), and hashing (**BASH**), primarily for use within Belarusian national security frameworks.\n\n---\n\n#### 🇫🇷 ANSSI FRP256v1 — French national elliptic curve for digital signatures  \nDeveloped by the **ANSSI** (Agence nationale de la sécurité des systèmes d'information). Used for secure digital signature implementations within French governmental and critical infrastructure systems.\n\n---\n\n#### 🇯🇵 KCipher-2, Camellia — Japanese national cryptographic algorithms  \n**KCipher-2** is a lightweight stream cipher standardized under **ISO/IEC 18033-4:2011**.  \n**Camellia** is a block cipher developed by Mitsubishi and NTT, internationally adopted and widely used in Japan for various secure communications.\n\n---\n\n#### 🇧🇷 ITI DOC-ICP-01.01 — Brazilian Cryptographic Standards for Public-Key Algorithms  \nBrazil's national public key cryptographic standards are defined in the **DOC-ICP-01.01**, issued by the **Instituto Nacional de Tecnologia da Informação (ITI)** under the **ICP-Brasil** framework. This standard mandates the use of internationally recognized and security-reviewed asymmetric algorithms, including:\n\n- **RSA** (minimum key size of 2048 bits for end-entities and 4096 bits for CAs),  \n- **Elliptic Curve Cryptography (ECC)** using **brainpool** curves (e.g., *brainpoolP256r1*, *brainpoolP512r1*),  \n- **EdDSA** over **Ed25519** (Curve25519), **Ed448-Goldilocks** (Curve448), and **Ed521** (Curve E-521), defined as a high-security elliptic curve consistent with 256-bit security strength, considered for future-safe digital signatures mechanism.\n- **ECDH / ECDHE** for key agreement protocols, including **X25519** and **X448** variants.\n\nThese algorithms are officially approved through the **Instrução Normativa ITI nº 22, de 23 de março de 2022**, which consolidates and updates the cryptographic requirements under Brazilian law, ensuring strong digital security for certificates and signatures in national electronic documents and transactions.\n\n**Source:**  \n[ICP-Brasil – DOC-ICP-01.01, v5.0 (2022)](https://www.gov.br/iti/pt-br/assuntos/legislacao/documentos-principais/IN2022_22_DOC_ICP_01.01_assinado.pdf)  \nInstrução Normativa ITI nº 22/2022 – Instituto Nacional de Tecnologia da Informação\n\n---\n\n#### 🇩🇪 EC-GDSA, EC-SDSA, ECKA-EG, Brainpool — German national elliptic curve cryptographic standards  \nStandardized by the **BSI (Federal Office for Information Security)** in the technical guideline **BSI TR-03111**, these cryptographic algorithms and curve parameters are used for secure digital signatures, key exchange, and public key infrastructures in German governmental and high-security environments.\n\n- **EC-GDSA** (German Digital Signature Algorithm): A flexible variant of ECDSA with enhanced domain separation and customization capabilities, adapted for German security requirements.\n- **EC-SDSA** (Schnorr Digital Signature Algorithm): A curve-based implementation of the Schnorr signature scheme, offering provable security and better efficiency than ECDSA, defined in **ISO/IEC 14888-3:2018**.\n- **ECKA-EG** (Elliptic Curve Key Agreement – ElGamal): A key agreement scheme based on EC-ElGamal, enabling secure exchange of symmetric keys.\n- **Brainpool curves**: A family of elliptic curves (e.g., brainpoolP256r1, brainpoolP384r1, brainpoolP512r1) defined in **RFC 5639**, recommended by the BSI for use with the above algorithms. Designed to offer high security without potential concerns associated with some NIST curves.\n\nThese standards are applied in German eID systems, national PKI, military communication, and EU-coordinated cybersecurity frameworks.\n\n---\n\n#### 🇺🇸 AES, SHA-1, SHA-2, SHA-3, X25519, Ed25519, Ascon — United States NIST cryptographic standards  \n- **AES** (Advanced Encryption Standard, **FIPS 197**) for symmetric encryption;  \n- **SHA-1** and **SHA-2** (Secure Hash Standard, **FIPS 180-2**);  \n- **SHA-3** (based on Keccak, **FIPS 202**) for hashing;  \n- Elliptic curve algorithms **X25519** and **Ed25519** standardized in **NIST SP800-186**;  \n- Lightweight authenticated encryption algorithm **Ascon** standardized under **NIST SP800-232**.\n\nAll maintained and published by the **National Institute of Standards and Technology (NIST)** for U.S. federal government use and adoption.\n\n---\n\n#### 🇪🇺 Whirlpool, RIPEMD, PRESENT, BLS/BN curves — European cryptographic standards (ISO/IEC)  \nDeveloped by researchers from **Belgium**, **Germany**, and **Austria**, these algorithms have been standardized by **ISO/IEC** for international use.    \n- **Whirlpool**: A hash function designed by **Vincent Rijmen (Belgium)** and **Paulo Barreto**, standardized in **ISO/IEC 10118-3:2003**.  \n- **RIPEMD**: Developed under the **EU-funded RIPE project**, standardized in the same ISO/IEC 10118-3 family (RIPEMD-128/160/256).  \n- **PRESENT**: A lightweight block cipher co-developed by **TU Graz (Austria)** and **Ruhr-University Bochum (Germany)**, standardized in **ISO/IEC 29192-2:2019** for constrained devices.\n- **BLS (Barreto-Lynn-Scott)** and **BN (Barreto-Naehrig) curves**: Pairing-friendly elliptic curves standardized in **ISO/IEC 15946-5:2022**, widely used in identity-based and pairing-based cryptography.  \n- **Identity-Based Encryption (IBE)**: General IBE mechanisms standardized in **ISO/IEC 18033-5:2015**, including several schemes developed and formalized by researchers at **EU institutions**.\n\nThese algorithms reflect Europe's strong academic and institutional contributions to international cryptographic standards.\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003eEDGETk Architecture\u003c/summary\u003e\n    \n```mermaid\n%% EDGETk Architecture - Core on the left, Symmetric above Asymmetric\ngraph LR\n    A[EDGETk Core]\n\n    %% Subgraphs for vertical stacking\n    subgraph SymmetricModules[Symmetric]\n        direction TB\n        B[Key Derivation / Passwords]\n        C[MACs]\n        D[Hashing / Digest]\n        E[Transformations / Modes of Operation]\n\n        B --\u003e B1[HKDF, PBKDF2, Argon2, Lyra2, Scrypt, Bcrypt, Makwa]\n        C --\u003e C1[CMAC, PMAC, GMAC, VMAC, HMAC]\n        D --\u003e D1[SHA-1/2/3, RIPEMD128/160/256/320, Whirlpool, Kupyna, Streebog, CubeHash, SipHash64/128]\n        E --\u003e E1[AES, Camellia, SEED, SM4, HIGHT, Kalyna, Magma, HC-128, Rabbit, Trivium, PRESENT, CLEFIA, LEA]\n    end\n\n    subgraph AsymmetricModules[Asymmetric]\n        direction TB\n        F[Key Agreement]\n        G[Digital Signatures]\n        H[Identity-Based Encryption / Signatures]\n        I[Secure Transport / TCP Server]\n\n        F --\u003e F1[ECDH, VKO, X25519, X448, ML-KEM, EG, ECKA-EG]\n        G --\u003e G1[RSA, ECDSA, EdDSA, GOST, SLH-DSA, ML-DSA, LMS, BLS]\n        H --\u003e H1[Boneh-Franklin IBE, Barreto IBS, Bilinear Pairings]\n        I --\u003e I1[TLS 1.3, TLCP, X509 CSRs, CRLs, Certificates]\n    end\n\n    %% Connect Core to top-level Symmetric and Asymmetric\n    A --\u003e SymmetricModules\n    A --\u003e AsymmetricModules\n```\n\n\u003c/details\u003e\n\n## Command-line Integrated Security Suite\n\n### Asymmetric\n\n- **Public key algorithms:**  \n\n    |  Algorithm          | 256 | 512 |ECDH |Signature|Encryption| PKI |\n    |:--------------------|:---:|:---:|:---:|:-------:|:--------:|:---:|\n    | ECDSA               | O   | O   | O   | O       | O        | O   |\n    | EC-GDSA             | O   | O   |     | O       |          |     |\n    | EC-KCDSA            | O   | O   |     | O       |          |     |\n    | EC-SDSA             | O   | O   | O   | O       |          |     |\n    | BignV1              | O   | O   | O   | O       |          |     |\n    | BIP 340             | O   | O   | O   | O       |          |     |\n    | BLS12-381           | O   |     | O   | O       | O        | O   |\n    | BN256               | O   |     | O   | O       | O        | O   |\n    | Curve25519          | O   |     | O   | O       |          | O   |\n    | Curve448            |     |     | O   | O       |          |     |\n    | E-521               |     |     |     | O       |          |     |\n    | GOST2012            | O   | O   | O   | O       |          | O   |\n    | RSA                 |     |     |     | O       | O        | O   |\n    | SM2                 | O   |     | O   | O       | O        | O   |\n    | SM9                 | O   |     | O   | O       | O        |     |\n    | NUMS                | O   | O   | O   | O       | O        |     |\n    | ElGamal             |     |     |     | O       | O        |     |\n    | EC-ElGamal          | O   | O   |     |         | O        |     |\n    | Schnorr             |     |     |     | O       |          |     |\n    | ML-DSA/KEM          |     |     |     | O       | O        | O   |\n    | SLH-DSA             | O   |     |     | O       |          | O   |\n    | LMS                 |     |     |     | O       |          | O   |\n\n- **Subjacent Elliptic Curves:**\n\n    |  Curve                |  ECDSA  | EC-S/GDSA |  EC-KCDSA  |  ECKA-EG  |\n    |:----------------------|:-------:|:---------:|:----------:|:---------:|\n    | P-224 (secp224r1)     | O       | O         | O          | O         |\n    | P-256 (secp256r1)     | O       | O         | O          | O         |\n    | P-384 (secp384r1)     | O       | O         | O          | O         |\n    | P-521 (secp521r1)     | O       | O         | O          | O         |\n    | B-283 (sect283r1)     |         | O         | O          |           |\n    | B-409 (sect409r1)     |         | O         | O          |           |\n    | B-571 (sect571r1)     |         | O         | O          |           |\n    | K-283 (sect283k1)     |         | O         | O          |           |\n    | K-409 (sect409k1)     |         | O         | O          |           |\n    | K-571 (sect571k1)     |         | O         | O          |           |\n    | BP (brainpoolp256r1)  |         | O         |            | O         |\n    | BP (brainpoolp384r1)  |         | O         |            | O         |\n    | BP (brainpoolp512r1)  |         | O         |            | O         |\n    | BP (brainpoolp256t1)  |         | O         |            | O         |\n    | BP (brainpoolp384t1)  |         | O         |            | O         |\n    | BP (brainpoolp512t1)  |         | O         |            | O         |\n    | NUMS (numsp256d1)     | O       | O         |            | O         |\n    | NUMS (numsp384d1)     | O       | O         |            | O         |\n    | NUMS (numsp512d1)     | O       | O         |            | O         |\n    | NUMS (numsp256t1)     | O       | O         |            | O         |\n    | NUMS (numsp384t1)     | O       | O         |            | O         |\n    | NUMS (numsp512t1)     | O       | O         |            | O         |\n    | KG (kg256r1)          | O       |           |            | O         |\n    | KG (kg384r1)          | O       |           |            | O         |\n    | Tom-256 (tom256)      | O       | O         |            | O         |\n    | Tom-384 (tom384)      | O       | O         |            | O         |\n    | ANSSI (frp256v1)      | O       | O         |            | O         |\n    | Koblitz (secp256k1)   | O       | O         |            | O         |\n    | SM2 (sm2p256v1)       | O       |           |            | O         |\n\n- **Subjacent Identity-Based Schemes:**\n    | Scheme Name          | Type | Private Key Group | Public Key Group |\n    |:---------------------|:----:|:-----------------:|:----------------:|\n    | Boneh-Franklin (BF)  | IBE  | G1                | G2               |\n    | Boneh-Boyen (BB)     | IBE  | G2                | G1               |\n    | Sakai-Kasahara (SK)  | IBE  | G2                | G1               |\n    | Barreto et al. (BR)  | IBS  | G1                | G2               |\n    | Cha-Cheon (CC)       | IBS  | G1                | G2               |\n    | Galindo-Garcia (GG)  | IBS  | G1                | G1               |\n    | Hess (default)       | IBS  | G1                | G2               |\n    | ShangMi (SM)         | IBS  | G1                | G2               |\n\n- **Supported ParamSets:**\n\n    |  Algorithm          |  A  |  B  |  C  |  D  |\n    |:--------------------|:---:|:---:|:---:|:---:|\n    | GOST R 34.10-2012 256-bit | O   | O   | O   | O   |\n    | GOST R 34.10-2012 512-bit | O   | O   | O   |     |\n\n### Symmetric\n\n- **Stream ciphers:**\n\n    |      Cipher      |  Key Size  |  IV  |         Modes         |\n    |:-----------------|:----------:|:----:|:---------------------:|\n    | Ascon 1.2        | 128        |  128 | AEAD Stream Cipher  |\n    | Chacha20Poly1305 | 256        | 96/192 | AEAD Stream Cipher  |\n    | Grain128a        | 128        | 40-96  | AEAD Stream Cipher  |\n    | HC-128           | 128        |  128 | XOR Stream            |\n    | HC-256           | 256        |  256 | XOR Stream            |\n    | KCipher-2        | 128        |  128 | XOR Stream            |\n    | Rabbit           | 128        |   64 | XOR Stream            |\n    | RC4 [Obsolete]   | 40/128     |    - | XOR Stream            |\n    | Salsa20          | 256        | 64/192 | XOR Stream           |\n    | Skein512         | Any        |  Any | MAC + XOR Stream      |\n    | Sosemanuk        | 128/256    |  128 | XOR Stream            |\n    | Spritz           | Any        |  Any | XOR Stream            |\n    | Trivium          | 80         |   80 | XOR Stream            |\n    | ZUC-128 Zu Chongzhi | 128     |  128 | MAC + XOR Stream      |\n    | ZUC-256 Zu Chongzhi | 256     |  184 | MAC + XOR Stream      |\n\n- **Permutation ciphers:**\n\n    |     Cipher    |  Key |  IV  |         Mode          |\n    |:--------------|:----:|:----:|:---------------------:|\n    | Xoodyak       |  128 |  128 |Lightweight AEAD Permutation Cipher|\n\n- **256-bit\u003e block ciphers:**\n\n    |      Cipher      | Block Size |  Key Size   |          Modes          |\n    |:-----------------|:----------:|:-----------:|:-----------------------:|\n    | Kalyna256        |        256 |     256/512 | EAX, SIV, CTR, OFB, IGE |\n    | Kalyna512        |        512 |         512 | EAX, SIV, CTR, OFB, IGE |\n    | SHACAL-2         |        256 |  128 to 512 | EAX, SIV, CTR, OFB, IGE |\n    | Threefish256     |        256 |         256 | EAX, SIV, CTR, OFB, IGE |\n    | Threefish512     |        512 |         512 | EAX, SIV, CTR, OFB, IGE |\n    | Threefish1024    |       1024 |        1024 | EAX, SIV, CTR, OFB, IGE |\n  \n- **128-bit block ciphers:**\n\n    |      Cipher      | Block Size |  Key Size   |         Modes           |\n    |:-----------------|:----------:|:-----------:|:-----------------------:|\n    | AES (Rijndael)   |        128 | 128/192/256 | All modes supported     |\n    | Anubis           |        128 |  128 to 320 | All modes supported     |\n    | ARIA             |        128 | 128/192/256 | All modes supported     |\n    | Bel-T            |        128 | 128/192/256 | All modes supported     |\n    | Camellia         |        128 | 128/192/256 | All modes supported     |\n    | CAST256          |        128 | 128/192/256 | All modes supported     |\n    | CLEFIA           |        128 | 128/192/256 | All modes supported     |\n    | CRYPTON          |        128 | 128/192/256 | All modes supported     |\n    | E2               |        128 | 128/192/256 | All modes supported     |\n    | Kalyna128        |        128 |     128/256 | All modes supported     |\n    | Kuznechik        |        128 |         256 | All modes supported     |\n    | LEA              |        128 | 128/192/256 | All modes supported     |\n    | LOKI97           |        128 | 128/192/256 | All modes supported     |\n    | MAGENTA          |        128 | 128/192/256 | All modes supported     |\n    | MARS             |        128 |  128 to 448 | All modes supported     |\n    | NOEKEON          |        128 |         128 | All modes supported     |\n    | RC6              |        128 | 128/192/256 | All modes supported     |\n    | SEED             |        128 |         128 | All modes supported     |\n    | Serpent          |        128 | 128/192/256 | All modes supported     |\n    | SM4              |        128 |         128 | All modes supported     |\n    | Twofish          |        128 | 128/192/256 | All modes supported     |\n   \n- **96-bit block ciphers:**\n\n    |      Cipher    | Block Size |  Key Size    |    Modes    |\n    |:--------------|:----:|:----:|:---------------------:|\n    | Curupira      |   96 |  96/144/192 |EAX, LETTERSOUP, CTR, IGE|\n\n- **64-bit block ciphers:**\n\n    |      Cipher      | Block Size |  Key Size    |    Modes    |\n    |:-----------------|:----------:|:------------:|:-----------:|\n    | DES [Obsolete]   |          64|            64|EAX, CFB-8, CTR, OFB|\n    | 3DES [Obsolete]  |          64|           192|EAX, CFB-8, CTR, OFB|\n    | Blowfish         |          64|           128|EAX, CFB-8, CTR, OFB|\n    | CAST5            |          64|           128|EAX, CFB-8, CTR, OFB|\n    | GOST89 (TC26)    |          64|           256|EAX, MGM, CFB-8, CTR|\n    | HIGHT            |          64|           128|EAX, CFB-8, CTR, OFB|\n    | IDEA [Obsolete]  |          64|           128|EAX, CFB-8, CTR, OFB|\n    | Khazad           |          64|           128|EAX, MGM, CFB-8, CTR|\n    | Magma            |          64|           256|EAX, CFB-8, CTR, OFB|\n    | MISTY1           |          64|           128|EAX, CFB-8, CTR, OFB|\n    | PRESENT          |          64|        80/128|EAX, MGM, CFB-8, CTR|\n    | RC2 [Obsolete]   |          64|           128|EAX, CFB-8, CTR, OFB|\n    | RC5 [Obsolete]   |          64|           128|EAX, CFB-8, CTR, OFB|\n    | SAFER+           |          64|        64/128|EAX, CFB-8, CTR, OFB|\n    | TWINE            |          64|        80/128|EAX, MGM, CFB-8, CTR|\n\n- **Modes of Operation:**\n\n    |Mode |                                | Blocks     |  Keys     |\n    |:---:|:-------------------------------|:----------:|:---------:|\n    | EAX | Encrypt-Authenticate-Translate |All         |Any        |\n    | GCM | Galois/Counter Mode (AEAD)     |128         |128/192/256|\n    | OCB1| Offset Codebook v1 (AEAD)      |128         |128/192/256|\n    | OCB3| Offset Codebook v3 (AEAD)      |128         |128/192/256|\n    | MGM | Multilinear Galois Mode (AEAD) |64/128      |Any        |\n    | CCM | Counter with CBC-MAC (AEAD)    |128         |128/192/256|\n    | SIV | Synthetic IV Mode (AEAD)       |All        |Any        |\n    | CBC | Cipher-Block Chaining          |All         |Any        |\n    | CFB | Cipher Feedback Mode           |All         |Any        |\n    |CFB-8| Cipher Feedback Mode 8-bit     |All         |Any        |\n    | CTR | Counter Mode (default)         |All         |Any        |\n    | ECB | Eletronic Codebook Mode        |All         |Any        |\n    | IGE | Infinite Garble Extension      |All         |Any        |\n    | OFB | Output Feedback Mode           |All         |Any        | \n   \n- **Message Digest Algorithms:**\n\n    |    Algorithm    | 128 | 160 | 192 | 256 | 512 | MAC |\n    |:----------------|:---:|:---:|:---:|:---:|:---:|:---:|\n    | BASH            |     |     |     | O   | O   |     |\n    | Bel-T           |     |     |     | O   |     |     |\n    | BLAKE-2B        |     |     |     | O   | O   | O   |\n    | BLAKE-2S        | O   |     |     | O   |     | O   |\n    | BLAKE-3         |     |     |     | O   |     | O   |\n    | BMW             |     |     |     | O   | O   |     |\n    | Chaskey         | O   |     |     |     |     | O   |\n    | CubeHash        |     |     |     | O   | O   |     |\n    | ECHO            |     |     |     | O   | O   |     | \n    | ESCH            |     |     |     | O   |     |     | \n    | Fugue           |     |     |     | O   | O   |     |\n    | GOST94 CryptoPro      |     |     |     | O   |     |     |\n    | Grøstl          |     |     |     | O   | O   |     |\n    | Hamsi           |     |     |     | O   | O   |     |\n    | Haraka v2       |     |     |     | O   |     |     |\n    | HAS-160 [Obsolete]|     | O   |     |     |     |     |\n    | JH              |     |     |     | O   | O   |     |\n    | Kupyna          |     |     |     | O   | O   | O   |\n    | Legacy Keccak   |     |     |     | O   | O   |     |\n    | LSH             |     |     |     | O   | O   |     |\n    | Luffa           |     |     |     | O   | O   |     |\n    | MD4 [Obsolete]  | O   |     |     |     |     |     |\n    | MD5 [Obsolete]  | O   |     |     |     |     |     |\n    | MD6             |     |     |     | O   | O   |     |\n    | Poly1305        | O   |     |     |     |     | O   |\n    | Radio-Gatun     |     |     |     | O   |     |     |\n    | RIPEMD          | O   | O   |     | O   |     |     |\n    | SHA1 [Obsolete] |     | O   |     |     |     |     |\n    | SHA2 (default)  |     |     |     | O   | O   |     | \n    | SHA3            |     |     |     | O   | O   |     |\n    | SHAKE           |     |     |     | O   | O   |     |\n    | SHAvite-3       |     |     |     | O   | O   |     |\n    | SIMD            |     |     |     | O   | O   |     |\n    | SipHash         | O   |     |     |     |     | O   |\n    | Skein           |     |     |     | O   | O   | O   | \n    | SM3             |     |     |     | O   |     |     |\n    | Streebog        |     |     |     | O   | O   |     | \n    | Tiger           |     |     | O   |     |     |     | \n    | Whirlpool       |     |     |     |     | O   |     | \n    | Xoodyak         |     |     |     | O   |     | O   |\n    | ZUC-256 Zu Chongzhi|  O   |     |     |     |     | O   |\n    \n    - MAC refers to keyed hash function, like HMAC. \n\n### AEAD\n\nAuthenticated encryption (AE) and authenticated encryption with associated data (AEAD) are forms of encryption which simultaneously assure the confidentiality and authenticity of data. Provides both authenticated encryption (confidentiality and authentication) and the ability to check the integrity and authentication of additional authenticated data (AAD) that is sent in the clear.\n\n\u003cdetails\u003e\n  \u003csummary\u003eAEAD OpenSSL-PHP and libsodium compliance\u003c/summary\u003e  \n\nOpenSSL-PHP\n  ```php\n  \u003c?php\n  function encrypt($plaintext, $key, $aad = '') {\n      $nonceSize = 12; // Chacha20-Poly1305 standard nonce size\n  \n      $nonce = random_bytes($nonceSize);\n      $ciphertext = openssl_encrypt(\n          $plaintext,\n          'chacha20-poly1305',\n          $key,\n          OPENSSL_RAW_DATA,\n          $nonce,\n          $tag,\n          $aad\n      );\n      return $nonce . $ciphertext . $tag;\n  }\n  \n  function decrypt($ciphertext, $key, $aad = '') {\n      $nonceSize = 12; // Chacha20-Poly1305 standard nonce size\n      $tagSize = 16;   // Assuming a 16-byte tag\n  \n      $nonce = substr($ciphertext, 0, $nonceSize);\n      $tag = substr($ciphertext, -$tagSize);\n      $ciphertext = substr($ciphertext, $nonceSize, -$tagSize);\n  \n      return openssl_decrypt(\n          $ciphertext,\n          'chacha20-poly1305',\n          $key,\n          OPENSSL_RAW_DATA,\n          $nonce,\n          $tag,\n          $aad\n      );\n  }\n  \n  // Example usage:\n  $keyHex = ''; // Provide your key in hexadecimal format\n  $key = hex2bin($keyHex);\n  $plaintext = \"Hello, Chacha20-Poly1305!\";\n  \n  // Encrypt\n  $ciphertext = encrypt($plaintext, $key);\n  echo \"Encrypted: \" . bin2hex($ciphertext) . PHP_EOL;\n  \n  // Decrypt\n  $decrypted = decrypt($ciphertext, $key);\n  echo \"Decrypted: \" . $decrypted . PHP_EOL;\n  ?\u003e\n```\n\nlibsodium Python \n  ```python\nimport nacl.bindings\nimport binascii\n\n# Fixed key (32 bytes)\nkey_hex = \"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\"\nkey = binascii.unhexlify(key_hex)\n\n# Open the file generated by EDGETk (nonce + ciphertext + tag)\nwith open(\"ciphertext.bin\", \"rb\") as f:\n    data = f.read()\n\n# Extract the nonce (12 bytes), and ciphertext + tag (remaining bytes)\nnonce = data[:12]\nciphertext_and_tag = data[12:]\n\n# Decrypt using libsodium (via PyNaCl bindings)\ntry:\n    plaintext = nacl.bindings.crypto_aead_chacha20poly1305_ietf_decrypt(\n        ciphertext_and_tag,  # ciphertext + tag\n        aad=None,            # no AAD (Additional Authenticated Data) was used\n        nonce=nonce,\n        key=key\n    )\n    print(\"Decrypted message:\", plaintext.decode())\nexcept Exception as e:\n    print(\"Decryption failed:\", e)\n```\n\u003c/details\u003e\n\n### ANSSI \nParameters for the [ANSSI FRP256v1](https://www.alvestrand.no/objectid/1.2.250.1.223.101.256.1.html) Elliptic curve, Agence nationale de la sécurité des systèmes d'information. \"Publication d'un paramétrage de courbe elliptique visant des applications de passeport électronique et de l'administration électronique française.\" 21 November 2011.\n\n### BignV1\n\nThe Bign algorithm is a Schnorr-type signature scheme adopted as the standard in Belarus (STB 34.101.45). Below are the equations and descriptions associated with the signing and verification phases of Bign.\n\n\u003cdetails\u003e\u003csummary\u003eBignV1 Theory\u003c/summary\u003e\n\n#### Parameters\n\n- $l \\in \\{128, 192, 256\\}$ — Security level.\n- $q$ — A $2l$-bit prime number.\n- $G$ — A generator of an Abelian group $\\langle G \\rangle$ of order $q$.\n- $H$ — An external hash function: $H: \\{0, 1\\}^* \\to \\{0, 1\\}^{2l}$.\n- $OID(H)$ — An identifier uniquely identifying the hash function $H$ (an ASN.1 object identifier).\n- $h$ — An internal hash function: $h: \\{0, 1\\}^* \\to \\{0, 1\\}^l$.\n\n##### Private Key\n\n- $d$ — A secret random/pseudorandom element from $\\{1, 2, \\dots, q-1\\}$.\n\n##### Public Key\n\n- $Q = dG$ — The public key associated with the private key $d$.\n\n##### Message to be signed\n\n- $X \\in \\{0, 1\\}^*$.\n\n#### Signing\n\nThe signature $s$ of a message $X$ is generated as follows:\n\n1. Choose $k$:  \n   Select a random (or pseudorandom) value $k$ from $\\{1, 2, \\dots, q-1\\}$.\n\n2. Calculate $R$:  \n   $R = kG$ — The point $R$ is calculated by multiplying the random value $k$ by the generator $G$.\n\n3. Calculate $s_0$:  \n   $s_0 = h(OID(H) \\| R \\| H(X))$ — Here, $s_0$ is computed by the internal hash function $h$, which involves the identifier of $H$, $R$, and the hash of the message $H(X)$.\n\n4. Calculate $s_1$:  \n   $s_1 = (k - H(X) - (s_0 + 2^l) d) \\mod q$ — The value $s_1$ is computed using $k$, $H(X)$, $s_0$, and the private key $d$, with a modular operation based on the prime $q$.\n\n5. Final signature:  \n   $s = s_0 \\| s_1$ — The final signature $s$ is the concatenation of $s_0$ and $s_1$.\n\n6. Return the signature:  \n   The signature $s$ is returned.\n\n#### Verification\n\nTo verify the signature $s = s_0 \\| s_1$ of a message $X$ with public key $Q$:\n\n1. Verify the length of $s$:  \n   If $|s| \\neq 3l$, return 0 (invalid signature).\n\n2. Extract $s_0$ and $s_1$:  \n   Split $s = s_0 \\| s_1$, where $|s_0| = l$ and $|s_1| = 2l$.\n\n3. Verify $s_1$:  \n   If $s_1 \\geq q$, return 0 (invalid signature).\n\n4. Calculate $R$:  \n   Compute $R = (s_1 + H(X))G + (s_0 + 2^l)Q$.\n\n5. Verify $R$:  \n   If $R = O$ (the identity element of the group), return 0 (invalid signature).\n\n6. Verify the hash:  \n   If $h(OID(H) \\| R \\| H(X)) \\neq s_0$, return 0 (invalid signature).\n\n7. Valid signature:  \n   If all checks pass, return 1 (valid signature).\n\n#### Design Rationale\n\n1. Short signatures:  \n   The algorithm uses Schnorr's compression and reduces the length of $s_0$ from $2l$ to $l$ bits, resulting in shorter signatures and faster verification (1.5 exponentiations instead of 2).\n\n2. Pre-hashing:  \n   Instead of directly using $h(R \\| X)$, the algorithm uses pre-hashing: $s_0 = h(OID(H) \\| R \\| H(X))$. This protects against multiple-target preimage attacks and facilitates integration with existing APIs and data formats.\n\n3. \"Whitening\" the signature:  \n   The second part of the signature ($s_1$) is \"whitened\" by using $Y = H(X)$. This makes finding collisions more difficult, providing security with strength $2^l$.\n\n4. Use of $Q$ during verification:  \n   While hashing $Q$ during signature generation could help protect against certain attacks, this approach is rejected, as key distribution should already provide protection, and hashing $Q$ would duplicate the proof of possession during key distribution.\n\n5. Deterministic signature:  \n   The generation of the ephemeral public key $k$ can be made deterministic using a special key generation algorithm $genk$. This involves hashing and symmetric encryption of data such as $OID(H)$, $d$, and $H(X)$ to produce a unique $k$.\n\n\u003c/details\u003e\n\n### BN256 (Barreto-Naehrig)\n\nThe BN256 (ISO/IEC 15946-5:2022) is an elliptic curve used in cryptography, particularly for pairing-based cryptographic protocols like identity-based encryption and short signatures. It was introduced by Paulo S. L. M. Barreto and Michael Naehrig as part of their work on constructing efficient elliptic curves for pairings. \n\n\u003cdetails\u003e\u003csummary\u003eBN256 Theory\u003c/summary\u003e\n  \n#### Key Generation  \n1. Private Key (sk): Randomly selected from $r \\in \\mathbb{Z}_n$, where $n$ is the curve order. It must remain secret.  \n2. Public Key (pk): $pk = sk * G2$, where $G2$ is the generator point of the curve.\n\n#### Signing  \n1. Choose $k \\in \\mathbb{Z}_n$, keep it secret, and ensure it's never reused.\n2. Compute $\\sigma = k \\cdot H(M)$, where $H(M)$ is the hash of the message $M$.\n3. The final signature is $\\sigma = sk \\cdot H(M)$, where $sk$ is the private key and $H(M)$ is the hash of the message.\n\n#### Verification  \n1. Verify the signature: $e(σ, G2) = e(H(M), pk)$, where $e$ is the bilinear pairing.  \n2. If the pairing holds, the signature is valid; otherwise, it’s invalid.\n\n#### Verification Equation:  \n$e(sk * H(M), G2) = e(H(M), sk * G2)$, or equivalently, $e(H(M), pk) = e(H(M), pk)$. If true, the signature is valid.\n\n\u003c/details\u003e\n\n### Curupira\n\nCurupira is a 96-bit block cipher, with keys of 96, 144 or 192 bits, and variable number of rounds, an algorithm described at [SBRC 2007](http://albanese.atwebpages.com/documentation/Curupira1_SBRC_2007.pdf) by Paulo S. L. M. Barreto and Marcos A. Simplício Jr., from Escola Politécnica da Universidade de São Paulo (USP), São Paulo, Brazil.\n\n$$\n\\text{Curupira}[K] \\equiv \\sigma[\\kappa^{(R)}] \\circ \\pi \\circ \\gamma \\circ \\left( \\prod_{r=1}^{R-1} \\sigma[\\kappa^{(r)}] \\circ \\theta \\circ \\pi \\circ \\gamma \\right) \\circ \\sigma[\\kappa^{(0)}]\n$$\n\n### Digital Signature Algorithms\n\n#### ElGamal-based algorithms\n\nHere are the main differences between ECDSA, ECGDSA, and ECKCDSA:\n\n$\\text{ECDSA: Compute } r = x([k]B); \\text{ s must be a root of } H(m)s^{-1} + rs^{-1}a - k \\text{ modulo } n,$\n$\\text{ so compute } s \\equiv k^{-1} \\left( H(m) + ra \\right) \\pmod{n}.$\n\n$\\text{EC-GDSA: Compute } r = x([k]B); \\text{ s must be a root of } r^{-1}H(m) + r^{-1}sa - k \\text{ modulo } n,$\n$\\text{ so compute } s \\equiv a^{-1} \\left( kr - H(m) \\right) \\pmod{n}.$\n\n$\\text{EC-KCDSA: Compute } r = H(x([k]G));$  \n$\\text{ so compute } s \\equiv a \\cdot \\left( k - (r \\oplus H(cQ \\parallel M)) \\bmod n \\right) \\bmod n.$\n\n$\\text{GOST: Compute } r = x([k]G) \\mod q;$  \n$\\text{ so compute } s \\equiv (r \\cdot d + k \\cdot H(m)) \\mod q.$\n\n#### Schnorr-based algorithms\n\n$\\text{BignV1: Compute }  R = [k]G; s_0 \\text{ must be a root of } h(OID(H) \\parallel R \\parallel H(X)),$ \n$\\text{ so compute } s_1 \\equiv (k - H(X) - (s_0 + 2^l)d) \\mod q.$\n\n$\\text{EC-SDSA: Compute } W = k \\cdot G, r = H(W_x \\parallel W_y \\parallel m) \\mod q,$\n$\\text{ so compute } e = \\text{OS2I}(r) \\mod q, \\text{ and } s = (k + e \\cdot d) \\mod q.$\n\n$\\text{EdDSA: Compute } R = [k] G; S \\equiv k + H(R \\parallel m) \\cdot d \\mod q, \\text{where } H \\text{ is a hash function and } d \\text{ is the private key}.$\n\n#### Boneh–Lynn–Shacham Signatures\n\n$\\text{BLS: Compute } \\sigma = H(m) \\cdot x, \\text{ where } H(m) \\text{ is the message hash and } x \\text{ is the private key.}$\n\n#### Notes\n1. $H(m)$ represents the hash value of the message.\n2. $k^{-1}$ denotes the modular multiplicative inverse of $k$ modulo $(p-1)$.\n3. $\\equiv$ indicates congruence.\n4. $\\oplus$ represents the XOR operation.\n\n### ElGamal\nThe ElGamal algorithm is a public-key cryptography system that enables secure communication between two parties, involving asymmetric keypair generation and cryptographic operations. Initially, a large prime number $p$ and a generator $g$ for a finite cyclic group are generated. Each entity possesses a private key $x$, kept secret, and a public key $Y$, derived from $g^x \\mod p$. To encrypt a symmetric key, the sender uses the session key, computes two components \\(a\\) and \\(b\\), and sends $g^k \\mod p$ and $Y^k \\cdot \\text{key} \\mod p$ to the recipient. The recipient, using their private key, decrypts the symmetric key. The ElGamal algorithm is known for its security based on the difficulty of solving the discrete logarithm problem and provides confidentiality and authentication properties. It was described by Taher A. Elgamal in 1985. \n\n\u003cdetails\u003e\n  \u003csummary\u003eElGamal Theory\u003c/summary\u003e  \n\n#### Key Generation\n\n1. Generate a large prime number $p$.\n2. Select a generator $g \\in [2, p-2]$.\n3. Generate a private key $x$ randomly.\n4. Compute the public key $Y = g^x \\mod p$.\n\n#### Digital Signature\n\n1. Select a random value $k$ such that $1 \u003c k \u003c p-1$, $\\text{gcd}(k, p-1) = 1$.\n2. Compute the first signature component: $r = g^k \\mod p$.\n3. Compute the second signature component: $s \\equiv (H(m) - x \\cdot r) \\cdot k^{-1} \\mod (p-1)$.\n\n#### Digital Signature Verification\n\n1. Receive the message $m$ and the signature components $(r, s)$.\n2. Compute $w \\equiv s^{-1} \\mod (p-1)$.\n3. Compute $u_1 \\equiv H(m) \\cdot w \\mod (p-1)$.\n4. Compute $u_2 \\equiv r \\cdot w \\mod (p-1)$.\n5. Compute $v \\equiv g^{u_1} \\cdot Y^{u_2} \\mod p$.\n6. The signature is valid if $v \\equiv r \\mod p$.\n\n#### Key Agreement\n\n1. Bob generates his key pair $(x_B, Y_B)$.\n2. Bob shares his public key $Y_B$ with Alice.\n3. Alice generates a random symmetric key $K_{\\text{sym}}$.\n4. Alice encrypts $K_{\\text{sym}}$ using Bob's public key: \n   $a = g^{k_A} \\mod p, \\\\\n   b = Y_B^{k_A} \\cdot K_{\\text{sym}} \\mod p$.\n5. Alice sends the ciphertext $(a, b)$ to Bob.\n6. Bob decrypts the received ciphertext using his private key to obtain:\n   $K_{\\text{sym}} = (b \\cdot a^{-x_B}) \\mod p$.\n7. Now, both Alice and Bob have the shared symmetric key $K_{\\text{sym}}$ for further communication.\n\u003c/details\u003e\n\n### EC-ElGamal\n\nThe EC-ElGamal algorithm is a cryptographic scheme based on elliptic curves that enables the encryption of messages between two parties using a shared public key.  Is a cryptographic scheme that allows secure message transmission over an insecure channel. The algorithm relies on the mathematical properties of elliptic curves to ensure the confidentiality of messages.\n\n\u003cdetails\u003e\n  \u003csummary\u003ePure EC-ElGamal\u003c/summary\u003e\u003cbr\u003e\nEC-ElGamal encryption using elliptic curves allows secure message transmission by having Alice generate a private key $y$ and a public key $Y = y \\cdot G$, while Bob encrypts a message $M$ with a random value $r$, computing $C_1 = r \\cdot G$ and $C_2 = r \\cdot Y + M$, and Alice decrypts using $M = C_2 - y \\cdot C_1$.\n\nFirst, Alice generates a private key $y$ and a public key of:  \n\n$Y = y \\cdot G$\n\nwhere $G$ is the base point on the curve. She can share this public key $Y$ with Bob. When Bob wants to encrypt something for Alice, he generates a random value $r$ and the message value $M$, and then computes:\n\n$C_1 = r \\cdot G$\n\n$C_2 = r \\cdot Y + M$\n\nTo decrypt, Alice takes her private key $y$ and computes:\n\n$M = C_2 - y \\cdot C_1$\n\nThis works because:\n\n$M = C_2 - y \\cdot C_1 = r \\cdot y \\cdot G + M - y \\cdot r \\cdot G = M$  \n\n```mermaid\nflowchart TD\n    Start([Start]) --\u003e Setup\n    \n    subgraph Setup[System Parameters]\n        SP1[Elliptic Curve E]\n        SP2[Generator Point G]\n        SP3[Order n]\n    end\n    \n    Setup --\u003e KeyGen\n    \n    subgraph KeyGen[Key Generation - Alice]\n        KG1[Select random y]\n        KG1 --\u003e KG2[Compute Y = y * G]\n        KG2 --\u003e KG3[Public Key: Y]\n        KG1 --\u003e KG4[Private Key: y]\n    end\n    \n    KeyGen --\u003e Encrypt\n    \n    subgraph Encrypt[Encryption - Bob]\n        ENC1[Message M]\n        ENC2[Select random r]\n        ENC2 --\u003e ENC3[C1 = r * G]\n        ENC2 --\u003e ENC4[C2 = M + r * Y]\n        ENC3 --\u003e ENC5[Ciphertext C1, C2]\n        ENC4 --\u003e ENC5\n    end\n    \n    Encrypt --\u003e Decrypt\n    \n    subgraph Decrypt[Decryption - Alice]\n        DEC1[Receive C1, C2]\n        DEC1 --\u003e DEC2[Compute y * C1]\n        DEC2 --\u003e DEC3[M = C2 - y * C1]\n        DEC3 --\u003e DEC4[Recovered Message M]\n    end\n    \n    Decrypt --\u003e End([End])\n``` \n\u003c/details\u003e\n\n### GOST (GOvernment STandard of Russian Federation)\nGOST refers to a set of technical standards maintained by the Euro-Asian Council for Standardization, Metrology and Certification (EASC), a regional standards organization operating under the auspices of the Commonwealth of Independent States (CIS).\n\n### Key sizes\n- **Bit-length Equivalence**\n\n    | Symmetric Key Size  | RSA and EG Key Size   | ECC Key Size   | \n    |:-------------------:|:---------------------:|:--------------:| \n    | 80                  | 1024                  | 160            | \n    | 112                 | 2048                  | 224            | \n    | 128                 | 3072                  | 256            | \n    | 192                 | 7680                  | 384            | \n    | 256                 | 15360                 | 512            |  \n\n### IBE\nIdentity-Based Encryption (IBE) is a cryptographic scheme that enables users to encrypt and decrypt messages using easily memorable and publicly known information, such as an email address or user identity, as the public key. In IBE, the sender encrypts a message with the recipient's identity, and the recipient, possessing a private key generated by a trusted authority known as Key Generation Authority (KGA), can decrypt the message. Unlike traditional public-key cryptography, IBE eliminates the need for a centralized public key directory, as the user's identity itself serves as the public key. This convenience in key management makes IBE particularly suitable for secure communication in decentralized or large-scale systems, where distributing and managing individual public keys may be impractical.\n\n\u003cdetails\u003e\u003csummary\u003eIBE Key Management System (KMS)\u003c/summary\u003e  \n    \n**Figure 1** \n```mermaid\ngraph TD\n     subgraph IBEKeyManagementSystem[\"Key Management System\"]\n        PKG[\"Private Key Generator (PKG)\"]\n        RA[\"Registration Authority (RA)\"]\n        PPS[\"Public Parameter Server (PPS)\"]\n        User[\"User/Client\"]\n    end\n\n    PKG \u003c--\u003e|Secure Channel| RA\n    PKG --\u003e PPS\n    RA \u003c--\u003e|Secure Channel| User\n    PPS -.-\u003e|Public Parameters| User\n    \n    classDef dashed stroke-dasharray: 5 5\n    class IBEKeyManagementSystem dashed\n```\n  \nThe **IBE's Key Management System (KMS)** consists of the **Private Key Generator (PKG)**, **Registration Agency (RA)**, **Public Parameter Server (PPS)**, and **User Terminal Entity (User/Client)**. The system architecture is illustrated in **Figure 1**. The functions of each entity are described below.\n\n#### 1. **Private Key Generation Center (PKG):**\n   - **Function:** Uses the system master key and related parameters to generate private keys for users. Provides related management and query services.\n\n#### 2. **Registration Service (RA):**\n   - **Functions:**\n     - Undertakes tasks related to user key application registration, authentication, management, and business communication with PKG.\n     - Provides symmetric, asymmetric, and hash cryptographic services.\n     - Receives key data returned by PKG and writes it into the key carrier of the terminal entity.\n\n#### 3. **Public Parameter Service (PPS):**\n   - **Function:** A user-oriented information service system, providing publicly accessible addresses for secure query and distribution of public parameters and policies. Public parameters include password parameters and user ID status directories that can be shared publicly.\n\n#### 4. **User Terminal Entity (User/Client):**\n   - **Functions:**\n     - Terminal application system of the user information service system.\n     - Applies for keys directly from PKG or through a local agent.\n     - Realizes the storage and use of its own private keys.\n\n**IBE Key Management System Architecture:**\n- **Secure Channels:** The generation and distribution of user keys mainly involve entities such as PKG, RA, and User/Client. This is achieved by establishing secure channels between PKG and RA, and between RA and User/Client, ensuring secure transfer and download of keys.\n\n**Summary:**\nThe architecture of the IBE Key Management System ensures secure generation of private keys by PKG, tasks of key registration and application are carried out by RA, public parameters are provided by PPS, and users interact with the system through the User/Client terminal. Secure channels facilitate the transfer and download of keys between these entities, ensuring the overall security of the key management system.\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eThreshold IBE\u003c/summary\u003e\n\nThreshold IBE enhances the classic Boneh-Franklin scheme by introducing a distributed Private Key Generator (PKG). Instead of a single trusted entity holding the master secret key, the secret is shared across multiple servers using Shamir's Secret Sharing. To extract a private key for a given identity, at least $t$ out of $n$ servers must collaborate. Each server computes a partial key share, which is then combined via Lagrange interpolation to reconstruct the user's full private key. This model mitigates single points of failure and strengthens resilience against key compromise. \n\n```mermaid\ngraph TD\n    TA[Trusted Authority] --\u003e S1[Server 1]\n    TA --\u003e S2[Server 2]\n    TA --\u003e S3[Server 3]\n    TA --\u003e S4[Server 4]\n    TA --\u003e S5[Server 5]\n\n    S1 -.-\u003e User\n    S3 -.-\u003e User\n    S5 -.-\u003e User\n\n    User --\u003e Key[Private Key]\n\n    subgraph Formulas\n        F1[\"Setup:\n        s ∈ Z_q\n        f(x) = s + a₁x + ... + aₜ₋₁xᵗ⁻¹\n        sᵢ = f(i)\"]\n        F2[\"Partial Key Extraction:\n        Q_ID = H₁(ID)\n        dᵢ = sᵢ · Q_ID\"]\n        F3[\"Key Reconstruction:\n        λⱼ = Π (xₖ/(xₖ - xⱼ))\n        d_ID = Σ λⱼ · dᵢⱼ\"]\n    end\n\n    F1 -.-\u003e TA\n    F2 -.-\u003e S5\n    F3 -.-\u003e Key\n\n    %% Threshold indication\n    S1:::threshold\n    S3:::threshold\n    S5:::threshold\n\n    classDef threshold stroke-dasharray: 5 5\n```\n\n#### 1. Setup (master authority splits the secret)\n\n- Let $s \\in \\mathbb{Z}_q$ be the master secret (the PKG’s private key).\n- A random polynomial of degree $t - 1$ is defined as $f(x) = s + a_1 x + a_2 x^2 + \\dots + a_{t-1} x^{t-1}$.\n- Each server $i \\in \\{1, 2, \\dots, n\\}$ receives a **partial key** (a point on the polynomial): $s_i = f(i)$.\n- The public key of the system is: $P_{\\text{pub}} = s \\cdot P$.\n\n#### 2. Partial Key Extraction (by each server)\n\n- The identity is mapped to a point on the elliptic curve group: $Q_{\\text{ID}} = H_1(\\text{ID}) \\in G_1$.\n- Each server computes its partial private key: $d_i = s_i \\cdot Q_{\\text{ID}}$.\n\n#### 3. Combining Partial Keys (Lagrange Interpolation)\n\n- Given a subset of $t$ partial keys $d_{i_1}, d_{i_2}, \\dots, d_{i_t}$, compute the Lagrange coefficients:  \n  $\\lambda_j = \\prod_{\\substack{1 \\leq k \\leq t \\\\ k \\ne j}} \\frac{x_k}{x_k - x_j}$.\n- The final private key for the identity is reconstructed as:  \n  $d_{\\text{ID}} = \\sum_{j=1}^{t} \\lambda_j \\cdot d_{i_j} = s \\cdot Q_{\\text{ID}}$.\n\nThis Threshold IBE/IBS scheme supports the Cha-Cheon, Hess, and Boneh-Franklin constructions, i.e., schemes where the private key lies in $G_1$, the public key lies in $G_2$, and the private key extraction involves only linear operations (scalar multiplication), without requiring inversion or non-linear computations. This compatibility is crucial for enabling threshold key extraction via Shamir's Secret Sharing, as each server can compute a partial key share in $G_1$, which can then be linearly combined using Lagrange interpolation to reconstruct the full private key $s \\cdot Q_{\\text{ID}}$.\n\u003c/details\u003e\n\n### IKM (input key material value)\nKeying material is in general to include things like shared Diffie-Hellman secrets (which are not suitable as symmetric keys), which have more structure than normal keys.\n\n### MAC\nMAC (Message Authentication Code) is a cryptographic function used to ensure the integrity and authenticity of a message. It takes a message and a secret key as inputs and produces a fixed-size authentication tag, which is appended to the message. The receiver can then verify the authenticity of the message by recomputing the MAC using the shared secret key and comparing it to the received tag. If they match, the message is deemed authentic and unaltered.\n\n### ML-KEM, ML-DSA\nModule-lattice-based algorithms, such as KEM (Key Encapsulation Mechanism) and DSA (Digital Signature Algorithm), are promising solutions in post-quantum cryptography that provide security against attacks from quantum computers. KEM facilitates secure key exchange by encapsulating a secret key in an object, leveraging complex mathematical problems like the Shortest Vector Problem (SVP) or Learning With Errors (LWE) to ensure security and efficiency. Meanwhile, DSA generates and verifies digital signatures, ensuring the authenticity and integrity of messages while also using lattice structures for protection against quantum algorithms. Together, these approaches represent a significant advancement for information security in the future.\n\n### NUMS\n**Microsoft Nothing Up My Sleeve Elliptic curves**  \n[NUMS](http://www.ietf.org/archive/id/draft-black-numscurves-01.txt) (Nothing Up My Sleeve) curves, which are supported in the MSRElliptic Curve Cryptography Library (a.k.a. MSR ECCLib).\n\nThese curves are elliptic curves over a prime field, just like the NIST or Brainpool curves. However, the domain-parameters are choosen using a VERY TIGHT DESIGN SPACE to ensure, that the introduction of a backdoor is infeasable. For a desired size of $s$ bits the prime $p$ is choosen as $p = 2^s - c$ with the smallest $c$ where $c\u003e0$ and $p$ mod 4 = 3 and $p$ being prime.\n\n### PBKDF2\nPBKDF2 (Password-Based Key Derivation Function 2) is a widely used cryptographic function designed to derive secure cryptographic keys from weak passwords or passphrases. It applies a pseudorandom function, such as HMAC-SHA1, HMAC-SHA256, or HMAC-SHA512, multiple times in a loop, with a salt and a user-defined number of iterations, effectively increasing the computational cost of key generation. This technique enhances the resilience against brute-force attacks, making it more difficult and time-consuming for attackers to obtain the original password from the derived key.\n\n### Post-Quantum Cryptography (PQC)\nQuantum computing is in an early stage of development and faces significant challenges, including the control and correction of quantum errors. Predictions vary, but many experts agree that we are still several years, or even decades, away from having the ability to build a quantum computer large enough to threaten public key cryptography algorithms currently considered secure. Scalable, sufficiently powerful quantum computers have not yet been constructed. Therefore, post-quantum cryptography is more of a precautionary measure, as classical algorithms remain secure for most everyday applications. Understand which algorithms have been compromised with the advent of quantum algorithms like Shor and Grover:\n\n- **Security Level**\n\n    |Name           | Function      |pre-quantum    | post-quantum   |\n    |:--------------|:--------------|:-------------:|:--------------:|\n    |AES-128        | block cipher  | 128           | 64 (Grover)    |\n    |AES-256        | block cipher  | 256           | 128 (Grover)   |\n    |Salsa20        | stream cipher | 256           | 128 (Grover)   |\n    |GMAC           | MAC           | 128           | 128            |\n    |Poly1305       | MAC           | 128           | 128            |\n    |SHA-256        | hash function | 256           | 128 (Grover)   |\n    |SHA-3          | hash function | 256           | 128 (Grover)   |\n    |RSA-3072       | encryption    | 128           | broken (Shor)  |\n    |RSA-3072       | signature     | 128           | broken (Shor)  |\n    |256-bit ECDH   | key exchange  | 128           | broken (Shor)  |\n    |256-bit ECDSA  | signature     | 128           | broken (Shor)  |\n\n### Schnorr Signatures\nThe key generation process begins with generating a safe prime $p = 2q + 1$, where both $p$ and $q$ are prime numbers. Then, a generator $g$ of a subgroup of order $q$ is computed. The private key $x$ is a randomly chosen integer in $[0, q - 1]$, and the public key is $y = g^x \\mod p$. These values form the basis of the Schnorr signature system. Parameters $(p, q, g)$ are shared across users, while keys $x$ and $y$ are individual-specific. The Schnorr signature is generated by selecting a random nonce $k$, then computing a commitment $r = g^k \\mod p$. A challenge $e$ is computed by hashing $r$ concatenated with the message. The response $s$ is then calculated using the formula $s = (k + e \\cdot x) \\mod q$. The final signature is the pair $(e, s)$, which is compact and secure under the discrete logarithm assumption. To verify a Schnorr signature, the verifier recomputes a value $r'$ from the response $s$ and the challenge $e$, using the public key. A hash is then computed from $r'$ and the message to produce $e'$. If $e' = e$, the signature is valid.\n\n\u003cdetails\u003e\n  \u003csummary\u003eSchnorr Signature Scheme\u003c/summary\u003e  \n\n#### Key Generation\n\n1. Generate a prime $q$ of the desired bit length.\n2. Compute $p = 2q + 1$, and verify that $p$ is prime.\n3. Find a generator $g$ of the subgroup of order $q$ in $\\mathbb{Z}_p^*$.\n4. Choose a private key $x \\in [0, q - 1]$.\n5. Compute the public key $y = g^x \\mod p$.\n\n#### Signing\n\n1. Select a random $k \\in [0, q - 1]$.\n2. Compute $r = g^k \\mod p$.\n3. Compute the challenge $e = H(r \\parallel m) \\mod q$.\n4. Compute the response $s = (k + e \\cdot x) \\mod q$.\n5. The signature is the pair $(e, s)$.\n\n#### Verification\n\n1. Receive the message $m$, and signature $(e, s)$.\n2. Compute $g^s \\mod p$.\n3. Compute $y^e \\mod p$ and its modular inverse.\n4. Compute $r' = g^s \\cdot (y^e)^{-1} \\mod p$.\n5. Compute $e' = H(r' \\parallel m) \\mod q$.\n6. The signature is valid if $e' = e$.\n\n#### Notes\n\n1. $H(m)$ represents a cryptographic hash function (e.g., SHA-256).\n2. $k$ must be freshly generated for each signature and kept secret.\n3. $\\parallel$ denotes byte-wise concatenation.\n4. The group $\\mathbb{Z}_p^*$ must have a known subgroup of prime order $q$.\n5. The hash function must be collision-resistant and preimage-resistant.\n\n\u003c/details\u003e\n\n### ShangMi (SM) National secret SM2/SM3/SM4 algorithms\nSM2 is a public key cryptographic algorithm based on elliptic curves, used for e.g. generation and verification of digital signatures; SM3, a hashing algorithm comparable to SHA-256; and SM4, a block cipher algorithm for symmetric cryptography comparable to AES-128. These standards are becoming widely used in Chinese commercial applications such as banking and telecommunications and are sometimes made mandatory for products procured by Chinese government agencies. SM4 is part of the ARMv8.4-A expansion to the ARM architecture.\n\n### SM9 GM/T 0044-2016 Public key algorithm 256-bit\nParameters for the sm9p256v1 Elliptic curve\n\nSM9 is a Chinese National Identity Based Cryptography Standard and was originally published using a 256-bit Barreto-Naehrig Curve as its primary example. The new paper suggests that because attacks against some Barreto-Naehrig curves have improved that the SM9 standard should adopt a 384-bit Barreto-Naehrig Curve. The authors go on to suggest that this curve offers roughly 118 bits of security.\n\n### XOR\nXOR (Exclusive OR) is a logical operator that works on bits. Let’s denote it by ^. If the two bits it takes as input are the same, the result is 0, otherwise it is 1. This implements an exclusive or operation, i.e. exactly one argument has to be 1 for the final result to be 1. We can show this using a truth table:\n\n- **exclusive or**\n\n    |x    |y    | x^y |\n    |:---:|:---:|:---:|\n    |0    |0    |0    |\n    |0    |1    |1    |\n    |1    |0    |1    |\n    |1    |1    |0    |\n\n### Zero-Knowledge Proof (ZKP)\n\nThe ZKP for bilinear curves (like BLS12-381) is a non-interactive protocol (NIZK) that enables a prover (user) to demonstrate possession of a valid private key ($sk_{user}$) associated with a public key ($pk_{user}$) without revealing the private key. The proof is verifiable by any party using bilinear pairing properties ($e$). Here's the detailed description:\n\n\u003cdetails\u003e\n  \u003csummary\u003eZero-Knowledge Proof (ZKP) for Bilinear Curves\u003c/summary\u003e  \n  \n- **Zero-Knowledge Proof (ZKP)**\n  1. Commitment: $C = r \\cdot G_2$, where $r$ is a secure random number, $G_2$ is the elliptic curve base point.\n  2. Challenge: $\\chi = H(C \\parallel m)$, where $H$ is a cryptographic hash function, $m$ is the message/context. \n  3. Response: $s = r + \\chi \\cdot sk_{user}$, where $sk_{user}$ is the user's private key and $\\chi$ is the computed challenge.\n  4. Verification: Check if $e(s \\cdot G_1, G_2) = e(G_1, C + (\\chi \\cdot pk_{user}))$, where $e$ is the bilinear pairing. \n  5. Validation: If the equality holds, the proof is valid.  \n\n- **Verification relies on the properties of bilinear pairing:**  \n  1. Linearity: $e(s \\cdot G_1, G_2) = e(G_1, G_2)^{s} = e(G_1, G_2)^{r + \\chi \\cdot sk_{user}}$  \n  2. Substitution: $e(G_1, G_2)^{r + \\chi \\cdot sk_{user}} = e(G_1, C + \\chi \\cdot pk_{user})$  \n  3. Expansion: $e(G_1, C + \\chi \\cdot pk_{user}) = e(G_1, r \\cdot G_2 + \\chi \\cdot sk_{user} \\cdot G_2) = e(G_1, G_2)^{r + \\chi \\cdot sk_{user}}$  \n\u003c/details\u003e\n    \n### ZUC (Zu Chongzhi cipher)\n\n  The ZUC-256 cipher is a symmetric key encryption algorithm widely used in 5G communication technologies, providing robust and efficient security. The ZUC-256 algorithm is based on the original ZUC cipher, developed by the Chinese Academy of Sciences and adopted by the 3rd Generation Partnership Project (3GPP) standard to ensure data integrity and confidentiality in fifth-generation mobile networks. Its name pays tribute to Zu Chongzhi, a 5th-century Chinese mathematician and astronomer, renowned for his contributions to mathematics, astronomy, and hydraulic engineering. His remarkable approximation of the value of π (pi) enabled more precise calculations in various scientific fields. \n\n## Features\n* **Cryptographic Functions:**\n\n   * Asymmetric Encryption\n   * Symmetric Encryption + AEAD Modes\n   * Digital Signature\n   * Recursive Hash Digest + Check\n   * ECDH (Shared Key Agreement)\n   * CMAC (Cipher-based message authentication code)\n   * HMAC (Hash-based message authentication code)\n   * HKDF (HMAC-based key derivation function)\n   * PBKDF2 (Password-based key derivation function)\n   * PHS (Password-hashing scheme)\n   * TLS (Transport Layer Security v1.2 and 1.3)\n   * TLCP (Transport Layer Cryptography Protocol v1.1)\n   * PKCS12 (Personal Information Exchange Syntax v1.1)\n   * X.509 CSRs, CRLs and Certificates\n  \n* **Non-cryptographic Functions:**\n\n   * Hex string encoder/dump/decoder (xxd-like)\n   * Base32 encoder/decoder\n   * Base64 encoder/decoder\n   * Base85 encoder/decoder\n   * Zlib compression\n   * Privacy-Enhanced Mail (PEM format)\n   * RandomArt (OpenSSH-like)\n\n## Usage\n\u003cpre\u003eUsage of edgetk:\n  -algorithm string\n        Public key algorithm: EC, Ed25519, GOST2012, SM2. (default \"RSA\")\n  -base32 string\n        Encode binary string to Base32 format and vice-versa. [enc|dec]\n  -base64 string\n        Encode binary string to Base64 format and vice-versa. [enc|dec]\n  -base85 string\n        Encode binary string to Base85 format and vice-versa. [enc|dec]\n  -bits int\n        Key length. (for keypair generation and symmetric encryption)\n  -cacert string\n        CA Certificate path. (for TLCP Protocol)\n  -cakey string\n        CA Private key. (for TLCP Protocol)\n  -cert string\n        Certificate path.\n  -challenge string\n        Challenge for the proof. (for Zero-Knowledge Proof ZKP)\n  -change\n        Change Passphrase of a Private Key.\n  -check\n        Check hashsum file. ('-' for STDIN)\n  -cipher string\n        Symmetric algorithm: aes, blowfish, magma or sm4. (default \"aes\")\n  -commitment string\n        Commitment for the proof. (for Zero-Knowledge Proof ZKP)\n  -crl string\n        Certificate Revocation List path.\n  -crypt string\n        Bulk Encryption with Stream and Block ciphers. [enc|dec|help]\n  -curve string\n        Subjacent curve. (secp256r1, secp256k1, numsp256t1)\n  -days int\n        Defines the validity of the certificate from the date of creation.\n  -digest\n        Target file/wildcard to generate hashsum list. ('-' for STDIN)\n  -factorp string\n        Makwa private Factor P. (for Makwa Password-hashing Scheme)\n  -factorq string\n        Makwa private Factor Q. (for Makwa Password-hashing Scheme)\n  -hex string\n        Encode binary string to hex format and vice-versa. [enc|dump|dec]\n  -hid uint\n        Hierarchy Identifier. (for IBE/IBS User Private Key) (default 1)\n  -id string\n        User Identifier. (for IBE/IBS User Private Key operations)\n  -info string\n        Additional info. (for HKDF command and AEAD bulk encryption)\n  -ipport string\n        Local Port/remote's side Public IP:Port.\n  -isca\n        The requested CSR is for a Certificate Authority (CA).\n  -iter int\n        Iter. (for Password-based key derivation function) (default 1)\n  -iv string\n        Initialization Vector. (for symmetric encryption)\n  -kdf string\n        Key derivation function. [pbkdf2|hkdf|scrypt|argon2|lyra2re2]\n  -key string\n        Asymmetric key, symmetric key or HMAC key, depending on operation.\n  -keys value\n        Key to be combined. (can be passed multiple times)\n  -mac string\n        Compute Hash/Cipher-based message authentication code.\n  -master string\n        Master key path. (for sm9 setup) (default \"Master.pem\")\n  -md string\n        Hash algorithm: sha256, sha3-256 or whirlpool. (default \"sha256\")\n  -mode string\n        Mode of operation: GCM, MGM, CBC, CFB8, OCB, OFB. (default \"CTR\")\n  -modulus string\n        Makwa modulus. (Makwa hash Public Parameter)\n  -msgs value\n        Messages to be verified. (can be passed multiple times)\n  -nopad\n        No padding. (for Base64 and Base32 encoding)\n  -params string\n        ElGamal Public Parameters path.\n  -paramset string\n        Elliptic curve ParamSet: A, B, C, D. (for GOST2012) (default \"A\")\n  -pass string\n        Password/Passphrase. (for Private key PEM encryption)\n  -passout string\n        User Password. (for SM9 User Private Key PEM encryption)\n  -peerid string\n        Remote's side User Identifier. (for SM9 Key Exchange)\n  -pkey string\n        Subcommands: keygen|certgen, sign|verify|derive, text|modulus.\n  -prv string\n        Private key path. (for keypair generation) (default \"Private.pem\")\n  -pub string\n        Public key path. (for keypair generation) (default \"Public.pem\")\n  -pub2 string\n        Public key 2 path. (for keypair generation)\n  -pubs value\n        Paths to the public keys. (can be passed multiple times)\n  -rand int\n        Generate random cryptographic key with given bit length.\n  -recover\n        Recover Passphrase from Makwa hash with Private Parameters.\n  -recursive\n        Process directories recursively. (for DIGEST command only)\n  -response string\n        Response for the proof. (for Zero-Knowledge Proof ZKP)\n  -root string\n        Root CA Certificate path.\n  -salt string\n        Salt. (for HKDF and PBKDF2 commands)\n  -scheme string\n        Subjacent Scheme. (for Identity-Based Cryptography IBE/IBS)\n  -seed string\n        Seed. (for ML-KEM and ML-DSA key generation)\n  -signature string\n        Input signature. (for VERIFY command and MAC verification)\n  -subj string\n        Subject: Identity. (Example: \"/CN=/OU=/O=/ST=/L=/C=/emailAddress=\")\n  -tcp string\n        Encrypted TCP/IP Transfer Protocol. [server|ip|client]\n  -token string\n        Token containing an encrypted symmetric key.\n  -tweak string\n        Additional 128-bit parameter input. (for THREEFISH encryption)\n  -uu string\n        Encode binary files with uuencoding and vice-versa. [enc|dec]\n  -version\n        Print version info.\n  -wrap int\n        Wrap lines after N columns. (for Base64/32 encoding) (default 64)\n  -xx string\n        Encode binary files with xxencoding and vice-versa. [enc|dec]\n  -zlib string\n        Compress string with zlib algorithm and vice-versa. [enc|dec]\u003c/pre\u003e\n\n## Examples\n\n#### Post-Quantum Digital Signature with ML-DSA or SLH-DSA:\n```sh\nedgetk -pkey keygen -algorithm [ml-dsa|slh-dsa] -prv Private.pem -pub Public.pem\nedgetk -pkey sign -key Private.pem -pass \"pass\" -signature sign.txt FILE\nedgetk -pkey verify -key Public.pem -signature sign.txt FILE\n```\n#### Post-Quantum Key Encapsulation Mechanism (ML-KEM):\n```sh\nedgetk -pkey keygen -algorithm ml-kem -prv Private.pem -pub Public.pem\nedgetk -pkey wrapkey -key Public.pem -cipher cipher.txt\nedgetk -pkey unwrapkey -key Private.pem -pass \"pass\" -cipher cipher.txt\n```\n\n\u003cdetails\u003e\u003csummary\u003ePQC Public Key Infrastructure (PKI)\u003c/summary\u003e  \n\n#### Key Generation:\n```sh\nedgetk -pkey keygen -algorithm [ml-dsa|slh-dsa] -prv CAPrivate.pem -pub CAPublic.pem\n```\n#### Self-Signed Certificate Generation:\n```sh\nedgetk -pkey certgen -key CAPrivate.pem -pub CAPublic.pem -cert CACert.crt\n```\n#### Check Certificate Authenticity:\n```sh\nedgetk -pkey check -cert CACert.crt -key CAPublic.pem\necho $?\n```\n#### Certificate Signing Request (CSR):\n```sh\nedgetk -pkey req -key Private.pem -pub Public.pem -cert Cert.csr\n```\n#### Display CSR Information:\n```sh\nedgetk -pkey text -cert Cert.csr\n```\n#### X.509 Certificate Signing:\n```sh\nedgetk -pkey x509 -key CAPrivate.pem -root CACert.crt -cert Cert.csr Cert.crt\n```\n#### Display Certificate Information:\n```sh\nedgetk -pkey text -cert Cert.crt\necho $?\n```\n#### Check Certificate Authenticity:\n```sh\nedgetk -pkey check -cert Cert.crt -key CAPublic.pem\necho $?\n```\n#### Generate Certificate Revocation List (CRL):\n```sh\nedgetk -pkey crl -key CAPrivate.pem pub CAPublic.pem -cert CACert.crt serials.txt NewCRL.pem\n```\n#### Display CRL Information:\n```sh\nedgetk -pkey text -crl NewCRL.pem\n```\n#### Check CRL Authenticity:\n```sh\nedgetk -pkey check -crl NewCRL.pem -cert CACert.crt\necho $?\n```\n#### Validate Certificate Against CRL:\n```sh\nedgetk -pkey validate -cert Cert.crt -crl NewCRL.pem\necho $?\n```\n\nFor non-interactive scripts, you must use the flags -pass, -days and -subj:\n```\n-pass \"passphrase\"\n-days 365\n-subj \"/CN=Test/OU=/O=/ST=/L=/C=/emailAddress=test@test.com\"\n```\n\u003c/details\u003e\n\n#### Asymmetric EG keypair generation:\n```sh\n./edgetk -pkey setup -algorithm elgamal [-bits 4096] \u003e ElGamalParams.pem\n./edgetk -pkey keygen -algorithm elgamal -params ElGamalParams.pem [-pass \"passphrase\"] [-prv Private.pem] [-pub Public.pem]\n```\n#### EG Digital signature:\n```sh\n./edgetk -pkey sign -algorithm elgamal [-scheme dsa] -key Private.pem [-pass \"passphrase\"] \u003c file.ext \u003e sign.txt\nsign=$(cat sign.txt|awk '{print $2}')\n./edgetk -pkey verify -algorithm elgamal [-scheme dsa] -key Public.pem -signature $sign \u003c file.ext\necho $?\n```\n#### EG Encryption scheme:\n```sh\n./edgetk -pkey wrapkey -algorithm elgamal -key Public.pem \u003e cipher.txt\nciphertext=$(cat cipher.txt|grep \"Cipher\"|awk '{print $2}')\n./edgetk -pkey unwrapkey -algorithm elgamal -key Private.pem [-pass \"passphrase\"] -cipher $ciphertext\n```\n#### EG Zero-Knowledge Proof (ZKP):\n```sh\n./edgetk -pkey proof -key Private.pem file.ext \u003e proof.txt\ncommit=$(grep \"Commitment\" proof.txt | awk '{print $2}')\nchall=$(grep \"Challenge\" proof.txt | awk '{print $2}')\nresp=$(grep \"Response\" proof.txt | awk '{print $2}')\n./edgetk -pkey verify-proof -key Public.pem -commitment $commit -challenge $chall -response $resp file.ext\necho $? \n```\n#### Asymmetric RSA keypair generation:\n```sh\n./edgetk -pkey keygen -algorithm rsa -bits 4096 [-pass \"passphrase\"] [-prv Private.pem] [-pub Public.pem]\n```\n#### Parse keys info:\n```sh\n./edgetk -pkey [text|modulus] [-pass \"passphrase\"] -key Private.pem\n./edgetk -pkey [text|modulus|randomart|fingerprint] -key Public.pem\n```\n#### Digital signature:\n```sh\n./edgetk -pkey sign -algorithm rsa -md sha256 -key Private.pem [-pass \"passphrase\"] \u003c file.ext \u003e sign.txt\nsign=$(cat sign.txt|awk '{print $2}')\n./edgetk -pkey verify -algorithm rsa -md sha256 -key Public.pem -signature $sign \u003c file.ext\necho $?\n```\n#### Encryption/decryption with RSA algorithm:\n```sh\n./edgetk -pkey encrypt -key Public.pem \u003c plaintext.ext \u003e ciphertext.ext\n./edgetk -pkey decrypt -key Private.pem \u003c ciphertext.ext \u003e plaintext.ext\n```\n#### Asymmetric EC keypair generation (256-bit):\n```sh\n./edgetk -pkey keygen -bits 256 -algorithm EC [-pass \"passphrase\"] [-prv Private.pem] [-pub Public.pem]\n```\n#### EC Diffie-Hellman:\n```sh\n./edgetk -pkey derive -algorithm EC -key Private.pem -pub Peerkey.pem\n```\n#### EC-ElGamal scheme:\n```sh\n./edgetk -pkey wrapkey -algorithm EC -key Public.pem \u003e cipher.txt\nciphertext=$(cat cipher.txt|grep \"Cipher\"|awk '{print $2}')\n./edgetk -pkey unwrapkey -algorithm EC -key Private.pem [-pass \"passphrase\"] -cipher $ciphertext\n```\n#### Generate Self Signed Certificate:\n```sh\n./edgetk -pkey certgen -key Private.pem [-pass \"passphrase\"] [-cert \"output.crt\"]\n```\n#### Generate Certificate Signing Request:\n```sh\n./edgetk -pkey req -key Private.pem [-pass \"passphrase\"] [-cert Certificate.csr]\n```\n#### Sign CSR with CA Certificate:\n```sh\n./edgetk -pkey x509 -key Private.pem -root CACert.pem -cert Certificate.csr \u003e Certificate.crt\n```\n#### Parse Certificate info:\n```sh\n./edgetk -pkey [text|modulus] -cert Certificate.pem\n```\n#### Generate Certificate Revocation List:\n```sh\n./edgetk -pkey crl -cert CACert.pem -key Private.pem -crl old.crl serials.txt \u003e NewCRL.crl\n```\nFor non-interactive scripts, you must use the flags -pass, -days and -subj:\n```\n-pass \"passphrase\"\n-days 365\n-subj \"/CN=Test/OU=/O=/ST=/L=/C=/emailAddress=test@test.com\"\n```\n#### TLS Layer (TCP/IP):\n```sh\n./edgetk -tcp ip \u003e MyExternalIP.txt\n./edgetk -tcp server -cert Certificate.pem -key Private.pem [-ipport \"8081\"]\n./edgetk -tcp client -cert Certificate.pem -key Private.pem [-ipport \"127.0.0.1:8081\"]\n```\nOr IPv6\n```sh\n./edgetk -tcp server -cert Certificate.pem -key Private.pem [-ipport \"8081\"]\n./edgetk -tcp client -cert Certificate.pem -key Private.pem [-ipport \"[2001:db8::1]:8081\"]\n```\n\n#### Symmetric key generation (256-bit):\n```sh\n./edgetk -rand 256\n```\n#### Encryption/decryption with block cipher:\n```sh\n./edgetk -crypt enc -key $256bitkey \u003c plaintext.ext \u003e ciphertext.ext\n./edgetk -crypt dec -key $256bitkey \u003c ciphertext.ext \u003e plaintext.ext\n```\n#### Message digest:\n```sh\n./edgetk -digest [-recursive] \"*.*\" \u003e hash.txt\n./edgetk -check hash.txt\necho $?\nor\n./edgetk -check hash.txt|grep FAILED^|Not found!\n```\n#### Bcrypt:\n```sh\n./edgetk -digest -md bcrypt -key \"yourkey\" [-iter 10] \u003e key.bcrypt\n./edgetk -check -md bcrypt -key \"yourkey\" \u003c key.bcrypt\necho $?\n```\n#### HMAC:\n```sh\n./edgetk -mac hmac -key \"secret\" \u003c file.ext\n./edgetk -mac hmac -key \"secret\" -signature $256bitmac \u003c file.ext\necho $?\n```\n#### HKDF (HMAC-based key derivation function) (128-bit):\n```sh\n./edgetk -kdf hkdf -bits 128 -key \"IKM\" [-salt \"salt\"] [-info \"AD\"]\n```\n#### IBE (Identity-Based Encryption)\n##### Master Key Pair Generation:\n\n- Generate a master key pair for BLS12-381.\n```sh\n./edgetk -pkey setup -algorithm bls12381 -master \"Master.pem\" [-pass \"passphrase\"] -pub \"MasterPublic.pem\"\n```\n\n##### User's Private Key Generation:\n\n- Generate a private key for a user, associated with their UID and HID.\n```sh\n./edgetk -pkey keygen -algorithm bls12381 -master \"Master.pem\" [-pass \"pass\"] -prv \"Private.pem\" [-passout \"pass\"] -id \"UID\" -hid 3\n```\n\n##### Key Parsing:\n\n- Parse the master key, user private key, or master public key to view their details.\n```sh\n./edgetk -pkey text -key \"Master.pem\" [-pass \"passphrase\"]\n./edgetk -pkey text -key \"Private.pem\" [-pass \"passphrase\"]\n./edgetk -pkey text -key \"MasterPublic.pem\"\n```\n\n##### Message Encryption with User Public Key:\n\n- Encrypt a message using the master public key and the user’s UID.\n```sh\n./edgetk -pkey encrypt -algorithm bls12381 -key \"MasterPublic.pem\" -id \"UID\" -hid 3 \"plaintext.ext\" \u003e \"ciphertext.enc\"\n```\n\n##### Message Decryption with User Private Key:\n\n- Decrypt a message using the user’s private key.\n```sh\n./edgetk -pkey decrypt -algorithm bls12381 -key \"Private.pem\" [-pass \"passphrase\"] \"ciphertext.enc\"\necho $?\n```\n\n##### Digital Signature Generation:\n\n- Generate a digital signature for a file using the user's private key, and verify the signature using the master public key and the UID of the signer.\n```sh\n./edgetk -pkey sign -algorithm bls12381 -key \"Private.pem\" FILE \u003e sign.txt\nsign=$(cat sign.txt | awk '{print $2}')\n./edgetk -pkey verify -algorithm bls12381 -key \"MasterPublic.pem\" -id \"UID\" -hid 3 -signature $sign FILE\necho $?\n```\n\n##### User's Private Key Generation for Digital Signature Schems:\n\n- Generate a private key for a user, associated with their UID.\n```sh\n./edgetk -pkey keygen -algorithm bls12381sign -scheme [shangmi|barreto] -master \"Master.pem\" [-pass \"pass\"] -prv \"PrivateSign.pem\" [-passout \"pass\"] -id \"UID\" -hid 1\n```\n\n##### Digital Signature Generation:\n\n- Generate a digital signature for a file using the user's private key, and verify the signature using the master public key and the UID of the signer.\n```sh\n./edgetk -pkey sign -algorithm bls12381 -scheme [shangmi|barreto] -key \"PrivateSign.pem\" FILE \u003e sign.txt\nsign=$(cat sign.txt | awk '{print $2}')\n./edgetk -pkey verify -algorithm bls12381 -scheme [shangmi|barreto] -key \"MasterPublic.pem\" -id \"UID\" -hid 1 -signature $sign FILE\necho $?\n```\n\n#### SM9 (Chinese IBE Standard)\n##### Private Key Generation:\n\n- Generate a master key\n```sh\n./edgetk -pkey setup -algorithm \u003csm9encrypt|sm9sign\u003e [-master \"Master.pem\"] [-pub \"Public.pem\"]\n```\n- Generate a private key and a UID (User ID) and an HID (Hierarchy ID).\n```sh\n./edgetk -pkey keygen -algorithm \u003csm9encrypt|sm9sign\u003e [-master \"Master.pem\"] [-prv \"Private.pem\"] [-id \"uid\"] [-hid 1]\n```\n\n##### Message Encryption:\n\n- To encrypt a message:\n  - Use the master public key.\n  - Include the UID and HID associated with the private key.\n  - Perform the encryption process.\n```sh\n./edgetk -pkey encrypt -algorithm sm9encrypt [-key \"Public.pem\"] [-id \"uid\"] [-hid 1] \u003c FILE\n```\n##### Message Decryption:\n\n- To decrypt a message:\n  - Use the associated private key.\n  - Use the corresponding UID.\n  - Perform the decryption process.\n```sh\n./edgetk -pkey decrypt -algorithm sm9encrypt [-key \"Private.pem\"] [-id \"uid\"] \u003c FILE\n```\n##### Digital Signature:\n\n- To sign a message:\n  - Use the private key (UID and HID are associated).\n  - Perform the signature process.\n```sh\n./edgetk -pkey sign -algorithm sm9sign [-key \"Private.pem\"] \u003c FILE\n```\n##### Digital Signature Verification:\n\n- To verify the signature of a message:\n  - Use the master public key.\n  - Use the UID and HID associated with the private key that performed the signature.\n  - Perform the signature verification process.\n```sh\n./edgetk -pkey verify -algorithm sm9sign [-key \"Public.pem\"] [-id \"uid\"] [-hid 1] [signature \"sign\"] \u003c FILE\n```\n#### Hex Encoder/Decoder:\n```sh\n./edgetk -hex enc \u003c file.ext \u003e file.hex\n./edgetk -hex dec \u003c file.hex \u003e file.ext\n./edgetk -hex dump \u003c file.ext\n```\n#### Base32/64 Encoder/Decoder:\n```sh\n./edgetk -base32 enc [-wrap 0] [-nopad] \u003c file.ext \u003e file.b32\n./edgetk -base32 dec [-nopad] \u003c file.b32 \u003e file.ext\n```\n#### Try:\n```\n./edgetk -crypt help   // Describes bulk encryption usage and arguments\n./edgetk -kdf help     // Describes key derivation function usage\n./edgetk -mac help     // Describes message authentication code usage\n./edgetk -pkey help    // Describes public key cryptography usage\n./edgetk -tcp help     // Describes TLS 1.3 Protocol parameters and usage\n./edgetk -help,-h      // Full list of the flags and their defaults\n./edgetk -version      // Print version info\n```\n\n#### Config File:\n\nAdd support for a configuration file to set default algorithms, eliminating the need for the -algorithm, -cipher, and -md flags for customized use.\n\nConfig file `edgetk.ini` example (GOST Standards):\n```\n[Defaults]\nalgorithm = gost2012\ncipher = kuznechik\nmd = streebog256\nmode = mgm\ndays = 365\n```\nOr even SM2, SM3, SM4, and GCM for the Chinese Standard.\n\n\u003e **Note:** The `edgetk.ini` file is an **optional configuration** used to define default cryptographic algorithms. Specifically, it can override the defaults for:\n\u003e\n\u003e - **Asymmetric encryption algorithm** (default: `RSA`)\n\u003e - **Hash algorithm** (default: `SHA256`)\n\u003e - **Preferred bulk cipher**\n\u003e\n\u003e Please use this configuration with **caution**. Certain choices may affect the program's behavior. For example, setting the default hash to `SHA3` can interfere with RSA signatures, as RSA requires a SHA2-family hash or `RIPEMD160` to function correctly. In this case, you must pass the correct hash via flag `-md`.\n\u003e\n\u003e If anything changes unexpectedly during execution, or if you're unsure about the configuration, you can safely **delete the `edgetk.ini` file**. The code will fall back to its internal defaults, and the program will remain **intact**.\n\n### How To Use (Graphical User Interface)\n```\n=============================================\nEDGE Crypto Suite - Tcl/Tk Usage Instructions\n=============================================\n\nOPTION 1: Graphical Interface\n-----------------------------\n1. Ensure Tcl/Tk is installed:\n   - Linux: sudo apt install tcl tk\n   - macOS: brew install tcl-tk\n   - Windows: Download freeWrap from https://sourceforge.net/projects/freewrap/\n   - BSD: pkg install tcl tk\n\n2. Run the graphical interface:\n   freewrap app.tcl\n   OR\n   wish app.tcl\n\n   NOTE:\n   freeWrap supports Windows 32-bit and 64-bit, as well as Linux, and is capable\n   of packaging/compiling Tcl/Tk scripts into a single static standalone binary.\n\nOPTION 2: Command Line\n----------------------\nUse the edgetk binary directly:\n   ./edgetk [options] FILE\n\nOPTION 3: Integration\n---------------------\nThe graphical interface (app.tcl) calls the edgetk binary internally.\nBoth must be located in the same directory.\n\nOPTION 4: System-wide Installation\n----------------------------------\n1. Copy the binary to a system path:\n   sudo cp edgetk /usr/local/bin/\n   \n2. Make the Tcl/Tk script executable:\n   chmod +x app.tcl\n   \n3. Run from anywhere:\n   ./app.tcl\n   OR make a desktop shortcut\n\n   DEBUG:\n   While running the script, click the \"Debug\" button. This will display\n   the folder(s) where the edgetk binary must be located for the script\n   to recognize it correctly.\n   \nSupported Platforms:\n- Windows 10/11 (32/64-bit)\n- macOS 10.14+ (Intel \u0026 Apple Silicon)\n- Linux (x86, x86_64, ARM, ARM64)\n- BSD (FreeBSD, OpenBSD, NetBSD)\n- Android (via Termux)\n- RaspberryPi (ARMv6/v7/ARM64)\n\nMinimum Tcl/Tk version required: 8.5 or higher\n==============================================\n```\n\n## Acknowledgments\n\n- [Sergey Matveev](http://www.cypherpunks.su/) (GoGOST Library Author)\n- [RyuaNerin](http://github.com/RyuaNerin) (go-krypto Library Author)\n- [Sun Yimin](https://github.com/emmansun) (GMSM Library Author)\n- [Damian Gryski](https://github.com/dgryski) (Anubis, SipHash, Misty1 Libraries Author)\n- [Dana Booth](https://sourceforge.net/u/danabooth/profile/) (Main Contributor)\n- [Deatil](https://github.com/deatil) (go-cryptobin, go-hash Libraries Author)\n\n## Contribute\n**Use issues for everything**\n- You can help and get help by:\n  - Reporting doubts and questions\n- You can contribute by:\n  - Reporting issues\n  - Suggesting new features or enhancements\n  - Improve/fix documentation\n\n## License\n\nThis project is licensed under the ISC License.\n\n#### Copyright (c) 2020-2026 Pedro F. Albanese - ALBANESE Research Lab.  \nTodos os direitos de propriedade intelectual sobre este software pertencem ao autor, Pedro F. Albanese. Vide Lei 9.610/98, Art. 7º, inciso XII.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedroalbanese%2Fedgetk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedroalbanese%2Fedgetk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedroalbanese%2Fedgetk/lists"}