{"id":50091335,"url":"https://github.com/dcit/perl-cryptx","last_synced_at":"2026-05-23T00:01:36.060Z","repository":{"id":10812956,"uuid":"13087416","full_name":"DCIT/perl-CryptX","owner":"DCIT","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-20T08:55:09.000Z","size":11062,"stargazers_count":41,"open_issues_count":0,"forks_count":27,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-05-23T00:01:18.768Z","etag":null,"topics":["cryptography","perl"],"latest_commit_sha":null,"homepage":"https://metacpan.org/pod/CryptX","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DCIT.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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":"2013-09-25T07:47:12.000Z","updated_at":"2026-05-20T08:55:14.000Z","dependencies_parsed_at":"2023-10-16T08:38:02.681Z","dependency_job_id":"ca502de4-b8e8-4358-8a94-0de5785c0a4d","html_url":"https://github.com/DCIT/perl-CryptX","commit_stats":null,"previous_names":[],"tags_count":70,"template":false,"template_full_name":null,"purl":"pkg:github/DCIT/perl-CryptX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCIT%2Fperl-CryptX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCIT%2Fperl-CryptX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCIT%2Fperl-CryptX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCIT%2Fperl-CryptX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DCIT","download_url":"https://codeload.github.com/DCIT/perl-CryptX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCIT%2Fperl-CryptX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33377358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-22T21:56:13.512Z","status":"ssl_error","status_checked_at":"2026-05-22T21:56:10.769Z","response_time":265,"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":["cryptography","perl"],"created_at":"2026-05-23T00:00:38.316Z","updated_at":"2026-05-23T00:01:36.049Z","avatar_url":"https://github.com/DCIT.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NAME\n\nCryptX - Cryptographic toolkit\n\n# SYNOPSIS\n\nCryptX is the distribution entry point. In normal code, load one of the concrete modules listed below.\n\n    ## one-shot hashing\n    use Crypt::Digest qw(digest_data_hex);\n    my $sha256 = digest_data_hex('SHA256', 'hello world');\n\n    ## classic AES-CBC encryption with padding\n    use Crypt::Mode::CBC;\n    my $cbc = Crypt::Mode::CBC-\u003enew('AES');\n    my $iv = random_bytes(16); # 16-byte AES block-size IV\n    my $cbc_ciphertext = $cbc-\u003eencrypt('hello world', $key, $iv);\n\n    ## authenticated encryption (AEAD) with AES\n    use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate);\n    my $key = random_bytes(32);   # 32-byte AES-256 key\n    my $nonce = random_bytes(12); # 12-byte unique nonce\n    my ($ciphertext, $tag) = gcm_encrypt_authenticate('AES', $key, $nonce, 'header', 'hello world');\n\n    ## message authentication\n    use Crypt::Mac::HMAC qw(hmac_hex);\n    my $mac = hmac_hex('SHA256', $key, 'hello world');\n\n    ## secure random data + UUID helpers\n    use Crypt::PRNG qw(random_bytes random_string);\n    use Crypt::Misc qw(random_v4uuid random_v7uuid);\n    my $salt = random_bytes(16);\n    my $token = random_string(24);\n    my $uuid4 = random_v4uuid();\n    my $uuid7 = random_v7uuid();\n\n    ## classic password-based key derivation\n    use Crypt::KeyDerivation qw(pbkdf2);\n    my $dk = pbkdf2('password', $salt, 100_000, 'SHA256', 32);\n\n    ## bare stream cipher (authenticate separately)\n    use Crypt::Stream::ChaCha;\n    my $stream = Crypt::Stream::ChaCha-\u003enew($key, $nonce);\n    my $stream_ciphertext = $stream-\u003ecrypt('hello world');\n\n    ## modern signatures\n    use Crypt::PK::Ed25519;\n    my $signer = Crypt::PK::Ed25519-\u003enew-\u003egenerate_key;\n    my $sig = $signer-\u003esign_message('hello world');\n    my $ok = $signer-\u003everify_message($sig, 'hello world');\n\n    ## key agreement\n    use Crypt::PK::X25519;\n    my $alice = Crypt::PK::X25519-\u003enew-\u003egenerate_key;\n    my $bob = Crypt::PK::X25519-\u003enew-\u003egenerate_key;\n    my $shared_secret = $alice-\u003eshared_secret($bob);\n\n# DESCRIPTION\n\nPerl cryptographic modules built on the bundled [LibTomCrypt](https://github.com/libtom/libtomcrypt) library.\nThe distribution also includes [Math::BigInt::LTM](https://metacpan.org/pod/Math%3A%3ABigInt%3A%3ALTM), a [Math::BigInt](https://metacpan.org/pod/Math%3A%3ABigInt) backend\nbuilt on the bundled [LibTomMath](https://www.libtom.net/LibTomMath/) library\nused internally by LibTomCrypt.\n\nThis module mainly serves as the top-level distribution/documentation page. For actual work,\nuse one of the concrete modules listed below.\n\n## Algorithm Selection Guide\n\n### Authenticated Encryption (AEAD)\n\nFor new designs, prefer authenticated encryption (AEAD) over bare cipher modes:\n\n- **ChaCha20-Poly1305** ([Crypt::AuthEnc::ChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AChaCha20Poly1305)) - Fast, constant-time,\nwidely deployed (TLS 1.3, WireGuard, SSH). Use this as the default AEAD choice.\n- **XChaCha20-Poly1305** ([Crypt::AuthEnc::XChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AXChaCha20Poly1305)) - Extended 24-byte nonce\nvariant. Prefer over ChaCha20-Poly1305 when nonces are generated randomly.\n- **AES-GCM** ([Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM)) - The standard AEAD mode for AES. Hardware-accelerated\non modern CPUs. Requires unique nonces; nonce reuse breaks the security entirely.\n- **AES-SIV** ([Crypt::AuthEnc::SIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ASIV)) - Deterministic AEAD, nonce-misuse resistant.\nSlightly slower but safer when nonce uniqueness cannot be guaranteed.\n- **AES-GCM-SIV** ([Crypt::AuthEnc::GCMSIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCMSIV)) - Nonce-misuse-resistant AEAD (RFC 8452).\nFaster than AES-SIV; pick this when you need GCM-like performance with nonce-reuse safety.\n- **AES-OCB** ([Crypt::AuthEnc::OCB](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AOCB)) - Very fast single-pass AEAD. Check patent status\nfor your jurisdiction.\n- **AES-EAX** ([Crypt::AuthEnc::EAX](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AEAX)) - Two-pass AEAD based on CTR+OMAC. No patents,\nno nonce-length restrictions.\n- **AES-CCM** ([Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM)) - Used in WiFi (WPA2) and Bluetooth. Requires\nknowing the plaintext length in advance.\n\n### Cryptographically Secure Randomness and UUIDs\n\n- **Random bytes / strings** ([Crypt::PRNG](https://metacpan.org/pod/Crypt%3A%3APRNG)) - Use this for salts, keys, nonces, tokens,\nand any other secret random values. The functional helpers\n`random_bytes`, `random_bytes_hex`, `random_bytes_b64`, `random_bytes_b64u`,\n`random_string`, and `random_string_from` cover most use cases. The OO API\nand the algorithm-specific wrappers ([Crypt::PRNG::ChaCha20](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AChaCha20), [Crypt::PRNG::Fortuna](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AFortuna), etc.)\nare mainly for deterministic streams or interoperability with a specific PRNG.\n- **UUIDs** ([\"random\\_v4uuid\" in Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc#random_v4uuid), [\"random\\_v7uuid\" in Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc#random_v7uuid)) - Use `random_v4uuid`\nfor opaque random identifiers. Use `random_v7uuid` when you want roughly time-ordered identifiers\nthat sort by creation time at millisecond granularity. UUIDs are identifiers, not replacements for\nsecret random bytes.\n\n### Stream Ciphers\n\nStream ciphers encrypt data byte-by-byte without block padding. For most\napplications prefer an AEAD mode (see above) which bundles encryption with\nauthentication. Use bare stream ciphers only when you handle authentication\nseparately.\n\n- **ChaCha** ([Crypt::Stream::ChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AChaCha)) - The default stream cipher choice.\nSame core as ChaCha20-Poly1305 without the built-in MAC.\n- **XChaCha** ([Crypt::Stream::XChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXChaCha)) - Extended 24-byte nonce variant of ChaCha.\nPrefer when nonces are generated randomly.\n- **Salsa20** / **XSalsa20** ([Crypt::Stream::Salsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASalsa20), [Crypt::Stream::XSalsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXSalsa20)) -\nPredecessor of ChaCha. Prefer ChaCha for new designs; Salsa20 only for\ninteroperability (e.g. NaCl/libsodium).\n- **RC4** ([Crypt::Stream::RC4](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARC4)) - **Broken; do not use for new designs.** Provided for\nlegacy interoperability only.\n- **Rabbit**, **Sober128**, **Sosemanuk** ([Crypt::Stream::Rabbit](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARabbit), [Crypt::Stream::Sober128](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASober128), [Crypt::Stream::Sosemanuk](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASosemanuk)) -\nNiche ciphers from the eSTREAM portfolio. Use ChaCha unless a specific protocol requires one of these.\n\n### Block Cipher Modes (without authentication)\n\nUse these only when authentication is handled separately or not needed:\n\n- **CTR** ([Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR)) - Turns a block cipher into a stream cipher. Parallelizable.\n- **CBC** ([Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC)) - Classic mode, needs padding. Prefer CTR or an AEAD mode.\n- **ECB** ([Crypt::Mode::ECB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AECB)) - **Insecure for most uses.** Each block encrypted independently.\n\nThe individual [Crypt::Cipher::AES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAES), [Crypt::Cipher::Twofish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ATwofish), etc. modules implement\nraw single-block encryption and are rarely used directly. In almost all cases you should\nuse them through an AEAD mode ([Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM), [Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM)) or a block\ncipher mode ([Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC), [Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR)) instead. When choosing a cipher,\n**AES** is the default; it is hardware-accelerated on most modern CPUs.\n\n### Hash Functions\n\n- **SHA-256** / **SHA-384** / **SHA-512** ([Crypt::Digest::SHA256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA256), etc.) - The default\nchoice for general hashing. Widely supported and well analyzed.\n- **SHA3-256** / **SHA3-512** ([Crypt::Digest::SHA3\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_256), etc.) - Alternative to SHA-2\nwith a completely different construction (Keccak sponge).\n- **BLAKE2b** / **BLAKE2s** ([Crypt::Digest::BLAKE2b\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_256), etc.) - Very fast, especially\nin software. BLAKE2b for 64-bit platforms, BLAKE2s for 32-bit.\n- **SHAKE** / **TurboSHAKE** / **KangarooTwelve** - Extendable-output functions (XOFs).\nUse when you need variable-length output.\n\n### Checksums\n\nUse [Crypt::Checksum::CRC32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3ACRC32) and [Crypt::Checksum::Adler32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3AAdler32) only for\nnon-adversarial integrity checks such as accidental corruption detection.\nThey are not cryptographic integrity or authenticity mechanisms. For\ncryptographic use, prefer [Crypt::Digest](https://metacpan.org/pod/Crypt%3A%3ADigest), [Crypt::Mac](https://metacpan.org/pod/Crypt%3A%3AMac), or an AEAD mode\nfrom [Crypt::AuthEnc](https://metacpan.org/pod/Crypt%3A%3AAuthEnc).\n\n### Message Authentication Codes\n\n- **HMAC** ([Crypt::Mac::HMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AHMAC)) - The standard MAC construction. Works with any hash.\nUse HMAC-SHA256 as the default.\n- **Poly1305** ([Crypt::Mac::Poly1305](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APoly1305)) - One-time MAC, very fast. Used as part of\nChaCha20-Poly1305. Requires a unique key per message.\n- **BLAKE2b-MAC** ([Crypt::Mac::BLAKE2b](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2b)) - Keyed BLAKE2. Faster than HMAC-SHA256 in\nsoftware.\n- **CMAC/OMAC** ([Crypt::Mac::OMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AOMAC)) - Block-cipher-based MAC. Use when you already\nhave AES but not a hash function.\n\n### Public-Key Cryptography\n\n- **Ed25519** ([Crypt::PK::Ed25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd25519)) - Modern digital signatures. Fast, constant-time,\nsmall keys/signatures. The default choice for new signature schemes.\n- **Ed448** ([Crypt::PK::Ed448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd448)) - Higher security margin than Ed25519 (~224-bit vs ~128-bit).\n- **X25519** ([Crypt::PK::X25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX25519)) - Elliptic-curve Diffie-Hellman key agreement. The\ndefault choice for key exchange.\n- **X448** ([Crypt::PK::X448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX448)) - Higher security margin than X25519.\n- **ECDSA** ([Crypt::PK::ECC](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AECC)) - Widely used (TLS, Bitcoin). Prefer Ed25519 for new\ndesigns unless ECDSA is required for interoperability.\n- **RSA** ([Crypt::PK::RSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ARSA)) - Legacy but very widely used. Use 2048-bit keys minimum, 4096-bit\npreferred. Prefer OAEP for encryption and PSS for signatures.\n- **DSA** ([Crypt::PK::DSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADSA)) - Legacy. Prefer Ed25519 or ECDSA.\n- **DH** ([Crypt::PK::DH](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADH)) - Classic Diffie-Hellman. Prefer X25519 for new designs.\n\n### Key Derivation / Password hashing\n\n- **HKDF** ([\"hkdf\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#hkdf)) - Extract-then-expand KDF. Use for deriving\nkeys from shared secrets (e.g. after ECDH).\n- **Argon2** ([\"argon2\\_pbkdf\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#argon2_pbkdf)) - Memory-hard password hashing. The\nrecommended choice for password storage.\n- **Bcrypt** ([\"bcrypt\\_pbkdf\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#bcrypt_pbkdf)) - Use mainly for compatibility\nwith formats and protocols that specifically require bcrypt-based key derivation (for example\nsome OpenSSH workflows). Prefer Argon2 for new password-storage designs.\n- **Scrypt** ([\"scrypt\\_pbkdf\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#scrypt_pbkdf)) - Memory-hard KDF. Use Argon2 if available.\n- **PBKDF2** ([\"pbkdf2\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf2)) - Widely supported but CPU-only hardness.\nUse Argon2 or Scrypt when possible.\n- **PBKDF1** ([\"pbkdf1\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf1), [\"pbkdf1\\_openssl\" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf1_openssl)) - Legacy\nderivation only. Keep this for interoperability with older formats; do not use it for new designs.\n\n## Error Handling\n\nMost CryptX modules report errors by calling `croak` (from [Carp](https://metacpan.org/pod/Carp)).\nInvalid parameters, unsupported algorithms, wrong key sizes, malformed\ninput, and internal library failures usually croak with a descriptive\nmessage. Catch exceptions with `eval` or [Try::Tiny](https://metacpan.org/pod/Try%3A%3ATiny).\n\nSome validation-style helpers use a return value instead of croaking. The\nmost important examples are the `*_decrypt_verify` functions in the\nauthenticated encryption modules `Crypt::AuthEnc::*`.\nThese return `undef` when authentication fails, indicating the ciphertext was tampered with\nor the wrong key/nonce was used. Some parser/decoder helpers in other modules\nalso return `undef` or false for malformed input, so check the concrete\nmodule POD when you need exact failure semantics.\n\n## Module Map\n\n- Top-level family modules\n\n    [Crypt::Cipher](https://metacpan.org/pod/Crypt%3A%3ACipher), [Crypt::Mode](https://metacpan.org/pod/Crypt%3A%3AMode), [Crypt::AuthEnc](https://metacpan.org/pod/Crypt%3A%3AAuthEnc),\n    [Crypt::Digest](https://metacpan.org/pod/Crypt%3A%3ADigest), [Crypt::Mac](https://metacpan.org/pod/Crypt%3A%3AMac), [Crypt::Checksum](https://metacpan.org/pod/Crypt%3A%3AChecksum), [Crypt::PRNG](https://metacpan.org/pod/Crypt%3A%3APRNG),\n    [Crypt::PK](https://metacpan.org/pod/Crypt%3A%3APK), [Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation), [Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc), [Crypt::ASN1](https://metacpan.org/pod/Crypt%3A%3AASN1)\n\n- Symmetric ciphers\n\n    [Crypt::Cipher::AES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAES), [Crypt::Cipher::Anubis](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAnubis), [Crypt::Cipher::ARIA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AARIA), [Crypt::Cipher::Blowfish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ABlowfish), [Crypt::Cipher::Camellia](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ACamellia), [Crypt::Cipher::CAST5](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ACAST5), [Crypt::Cipher::DES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ADES),\n    [Crypt::Cipher::DES\\_EDE](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ADES_EDE), [Crypt::Cipher::IDEA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AIDEA), [Crypt::Cipher::KASUMI](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AKASUMI), [Crypt::Cipher::Khazad](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AKhazad), [Crypt::Cipher::MULTI2](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AMULTI2), [Crypt::Cipher::Noekeon](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ANoekeon),\n    [Crypt::Cipher::RC2](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC2), [Crypt::Cipher::RC5](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC5), [Crypt::Cipher::RC6](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC6), [Crypt::Cipher::SAFERP](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFERP), [Crypt::Cipher::SAFER\\_K128](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_K128), [Crypt::Cipher::SAFER\\_K64](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_K64),\n    [Crypt::Cipher::SAFER\\_SK128](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_SK128), [Crypt::Cipher::SAFER\\_SK64](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_SK64), [Crypt::Cipher::SEED](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASEED), [Crypt::Cipher::SM4](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASM4), [Crypt::Cipher::Serpent](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASerpent), [Crypt::Cipher::Skipjack](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASkipjack),\n    [Crypt::Cipher::Twofish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ATwofish), [Crypt::Cipher::XTEA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AXTEA)\n\n- Block cipher modes\n\n    [Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC), [Crypt::Mode::CFB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACFB), [Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR), [Crypt::Mode::ECB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AECB), [Crypt::Mode::OFB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AOFB)\n\n- Stream ciphers\n\n    [Crypt::Stream::RC4](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARC4), [Crypt::Stream::ChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AChaCha), [Crypt::Stream::XChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXChaCha), [Crypt::Stream::Salsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASalsa20), [Crypt::Stream::XSalsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXSalsa20),\n    [Crypt::Stream::Sober128](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASober128), [Crypt::Stream::Sosemanuk](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASosemanuk), [Crypt::Stream::Rabbit](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARabbit)\n\n- Authenticated encryption modes\n\n    [Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM), [Crypt::AuthEnc::EAX](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AEAX), [Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM), [Crypt::AuthEnc::GCMSIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCMSIV), [Crypt::AuthEnc::OCB](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AOCB), [Crypt::AuthEnc::ChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AChaCha20Poly1305), [Crypt::AuthEnc::XChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AXChaCha20Poly1305), [Crypt::AuthEnc::SIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ASIV)\n\n- Hash functions\n\n    [Crypt::Digest::BLAKE2b\\_160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_160), [Crypt::Digest::BLAKE2b\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_256), [Crypt::Digest::BLAKE2b\\_384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_384), [Crypt::Digest::BLAKE2b\\_512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_512),\n    [Crypt::Digest::BLAKE2s\\_128](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_128), [Crypt::Digest::BLAKE2s\\_160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_160), [Crypt::Digest::BLAKE2s\\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_224), [Crypt::Digest::BLAKE2s\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_256),\n    [Crypt::Digest::CHAES](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ACHAES), [Crypt::Digest::MD2](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD2), [Crypt::Digest::MD4](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD4), [Crypt::Digest::MD5](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD5), [Crypt::Digest::RIPEMD128](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD128), [Crypt::Digest::RIPEMD160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD160),\n    [Crypt::Digest::RIPEMD256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD256), [Crypt::Digest::RIPEMD320](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD320), [Crypt::Digest::SHA1](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA1), [Crypt::Digest::SHA224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA224), [Crypt::Digest::SHA256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA256), [Crypt::Digest::SHA384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA384),\n    [Crypt::Digest::SHA512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512), [Crypt::Digest::SHA512\\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512_224), [Crypt::Digest::SHA512\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512_256), [Crypt::Digest::Tiger192](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ATiger192), [Crypt::Digest::Whirlpool](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AWhirlpool),\n    [Crypt::Digest::Keccak224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak224), [Crypt::Digest::Keccak256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak256), [Crypt::Digest::Keccak384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak384), [Crypt::Digest::Keccak512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak512),\n    [Crypt::Digest::SHA3\\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_224), [Crypt::Digest::SHA3\\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_256), [Crypt::Digest::SHA3\\_384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_384), [Crypt::Digest::SHA3\\_512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_512), [Crypt::Digest::SHAKE](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHAKE),\n    [Crypt::Digest::TurboSHAKE](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ATurboSHAKE), [Crypt::Digest::KangarooTwelve](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKangarooTwelve), [Crypt::Digest::SM3](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASM3)\n\n- Checksums\n\n    [Crypt::Checksum::Adler32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3AAdler32), [Crypt::Checksum::CRC32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3ACRC32)\n\n- Message authentication codes\n\n    [Crypt::Mac::BLAKE2b](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2b), [Crypt::Mac::BLAKE2s](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2s), [Crypt::Mac::F9](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AF9), [Crypt::Mac::HMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AHMAC), [Crypt::Mac::KMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AKMAC),\n    [Crypt::Mac::OMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AOMAC), [Crypt::Mac::Pelican](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APelican), [Crypt::Mac::PMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APMAC), [Crypt::Mac::XCBC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AXCBC), [Crypt::Mac::Poly1305](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APoly1305)\n\n- Public-key cryptography\n\n    [Crypt::PK::RSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ARSA), [Crypt::PK::DSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADSA), [Crypt::PK::ECC](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AECC), [Crypt::PK::DH](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADH), [Crypt::PK::Ed25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd25519), [Crypt::PK::X25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX25519), [Crypt::PK::Ed448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd448), [Crypt::PK::X448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX448)\n\n- Cryptographically secure random number generators\n\n    [Crypt::PRNG::Fortuna](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AFortuna), [Crypt::PRNG::Yarrow](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AYarrow), [Crypt::PRNG::RC4](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3ARC4), [Crypt::PRNG::Sober128](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3ASober128), [Crypt::PRNG::ChaCha20](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AChaCha20)\n\n- Key derivation functions\n\n    [Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation)\n\n- ASN.1 parser\n\n    [Crypt::ASN1](https://metacpan.org/pod/Crypt%3A%3AASN1)\n\n    Use `Crypt::ASN1` only when you need custom ASN.1 / DER parsing or encoding.\n    Most common key and certificate formats are already handled by the PK modules.\n\n- Miscellaneous helpers\n\n    [Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc) (base64/base32/base58 codecs, PEM helpers, constant-time compare, UUID generation, octet increment helpers, and related utility functions)\n\n## Diagnostic Functions\n\nThese low-level functions expose details of the bundled LibTomCrypt build.\nThey are intended for troubleshooting and bug reports, not for regular use.\n\n### ltc\\_build\\_settings\n\n    my $str = CryptX::ltc_build_settings();\n\nReturns a multi-line string describing every compile-time option that was\nenabled when the bundled LibTomCrypt library was built (ciphers, hashes,\nMACs, PK algorithms, compiler flags, etc.).\n\n### ltc\\_mp\\_name\n\n    my $name = CryptX::ltc_mp_name();\n    # e.g. \"LTM\" (LibTomMath)\n\nReturns the name of the math provider back-end in use.\n\n### ltc\\_mp\\_bits\\_per\\_digit\n\n    my $bits = CryptX::ltc_mp_bits_per_digit();\n    # e.g. 60\n\nReturns the number of bits per digit used by the math provider.\n\n## Math::BigInt backend\n\nPart of CryptX is [Math::BigInt::LTM](https://metacpan.org/pod/Math%3A%3ABigInt%3A%3ALTM), a [Math::BigInt](https://metacpan.org/pod/Math%3A%3ABigInt) backend based on\nthe bundled LibTomMath library. It is separate from the cryptographic APIs\nabove, but it ships in the same distribution and uses the same big-integer\nengine that LibTomCrypt relies on.\n\n# LICENSE\n\nThis program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\n\n# COPYRIGHT\n\nCopyright (c) 2013-2026 DCIT, a.s. [https://www.dcit.cz](https://www.dcit.cz) / Karel Miko\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcit%2Fperl-cryptx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcit%2Fperl-cryptx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcit%2Fperl-cryptx/lists"}