{"id":13878555,"url":"https://github.com/ronin-rb/ronin-support","last_synced_at":"2025-07-16T14:32:24.810Z","repository":{"id":37245551,"uuid":"501865","full_name":"ronin-rb/ronin-support","owner":"ronin-rb","description":"A support library for Ronin. Like activesupport, but for hacking!","archived":false,"fork":false,"pushed_at":"2025-05-08T04:23:23.000Z","size":5118,"stargazers_count":28,"open_issues_count":47,"forks_count":10,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-07-07T11:37:20.337Z","etag":null,"topics":["binary","cidr","core-ext","ctf-tool","ctf-tools","dns","encoding","encoding-convertors","encoding-decoding","fuzzing","hacking-library","hacktoberfest","http","infosec","library","networking","ronin-rb","ruby","ssl","wordlist"],"latest_commit_sha":null,"homepage":"https://ronin-rb.dev","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ronin-rb.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"ronin-rb","patreon":"roninrb"}},"created_at":"2010-02-04T07:26:36.000Z","updated_at":"2025-05-08T04:23:28.000Z","dependencies_parsed_at":"2023-02-17T10:15:58.102Z","dependency_job_id":"ae24fa8a-39de-4051-bfe5-b01216703c5c","html_url":"https://github.com/ronin-rb/ronin-support","commit_stats":{"total_commits":3328,"total_committers":6,"mean_commits":554.6666666666666,"dds":"0.0036057692307692735","last_synced_commit":"61ac5ce011c53ee573ffbb6f2db2e845e75b18be"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/ronin-rb/ronin-support","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-support","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-support/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-support/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-support/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ronin-rb","download_url":"https://codeload.github.com/ronin-rb/ronin-support/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-support/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264909966,"owners_count":23682096,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["binary","cidr","core-ext","ctf-tool","ctf-tools","dns","encoding","encoding-convertors","encoding-decoding","fuzzing","hacking-library","hacktoberfest","http","infosec","library","networking","ronin-rb","ruby","ssl","wordlist"],"created_at":"2024-08-06T08:01:53.007Z","updated_at":"2025-07-16T14:32:24.786Z","avatar_url":"https://github.com/ronin-rb.png","language":"Ruby","funding_links":["https://opencollective.com/ronin-rb","https://patreon.com/roninrb"],"categories":["Ruby"],"sub_categories":[],"readme":"# ronin-support\n\n[![CI](https://github.com/ronin-rb/ronin-support/actions/workflows/ruby.yml/badge.svg)](https://github.com/ronin-rb/ronin-support/actions/workflows/ruby.yml)\n[![Code Climate](https://codeclimate.com/github/ronin-rb/ronin-support.svg)](https://codeclimate.com/github/ronin-rb/ronin-support)\n[![Gem Version](https://badge.fury.io/rb/ronin-support.svg)](https://badge.fury.io/rb/ronin-support)\n\n* [Source](https://github.com/ronin-rb/ronin-support)\n* [Issues](https://github.com/ronin-rb/ronin-support/issues)\n* [Documentation](https://ronin-rb.dev/docs/ronin-support/frames)\n* [Discord](https://discord.gg/6WAb3PsVX9) |\n  [Mastodon](https://infosec.exchange/@ronin_rb)\n\n## Description\n\nronin-support is a support library for [Ronin][ronin-rb]. ronin-support provides\nmany Core Extensions to Ruby's built-in classes as well as its own\nClasses/Modules. ronin-support can be used by other Ruby libraries, tools, or\n[scripts](#examples).\n\n**tl;dr** It's like [pwntools] combined with [activesupport].\n\nronin-support is part of the [ronin-rb] project, a [Ruby] toolkit for security\nresearch and development.\n\n## Features\n\n* Provides user-friendly APIs for:\n  * [Bit-flipping][docs-binary-bit_flip]\n  * [Hexdump][hexdump] / [unhexdump][docs-unhexdump] data.\n  * Packing/unpacking binary data:\n    * [C types][docs-binary-ctypes]\n    * [Buffers][docs-binary-buffer]\n    * [IO streams][docs-binary-stream]\n    * [Stacks][docs-binary-stack]\n    * [Strings][docs-binary-cstring]\n    * [Arrays][docs-binary-array]\n    * [Structs][docs-binary-struct]\n    * [Unions][docs-binary-union]\n  * Encoding data:\n    * [Base16][docs-encoding-base16]\n    * [Base32][docs-encoding-base32]\n    * [Base36][docs-encoding-base36]\n    * [Base62][docs-encoding-base62]\n    * [Base64][docs-encoding-base64]\n    * [C strings][docs-encoding-c]\n    * [Hex][docs-encoding-hex]\n    * [HTML][docs-encoding-html]\n    * [HTTP][docs-encoding-http]\n    * [JavaScript][docs-encoding-js]\n    * [PowerShell][docs-encoding-powershell]\n    * [Punycode][docs-encoding-punycode]\n    * [Quoted-printable][docs-encoding-quoted-printable]\n    * [Ruby strings][docs-encoding-ruby]\n    * [Shell][docs-encoding-shell]\n    * [SQL][docs-encoding-sql]\n    * [URI][docs-encoding-uri]\n    * [UUencoding][docs-encoding-uuencoding]\n    * [XML][docs-encoding-xml]\n  * [Reading/writing compressed data][docs-compression]:\n    * [Zlib][docs-compression-zlib]\n    * [Gzip][docs-compression-gzip]\n  * [Reading/writing archive files][docs-archive]:\n    * [Tar][docs-archive-tar]\n    * [Zip][docs-archive-zip]\n  * [Cryptography][docs-crypto]:\n    * [RSA][docs-crypto-key-rsa]\n    * [DSA][docs-crypto-key-dsa]\n    * [DH][docs-crypto-key-dh]\n    * [EC][docs-crypto-key-ec]\n    * [HMAC][docs-crypto-hmac]\n    * [Ciphers][docs-crypto-cipher]\n    * [X509 certificates][docs-crypto-cert]\n  * Networking:\n    * [DNS][docs-network-dns]\n    * [UNIX][docs-network-unix-mixin]\n    * [TCP][docs-network-tcp-mixin]\n    * [UDP][docs-network-udp-mixin]\n    * [SSL][docs-network-ssl-mixin] / [TLS][docs-network-tls-mixin]\n    * [FTP][docs-network-ftp-mixin]\n    * [SMTP][docs-network-smtp-mixin] / [ESMTP][docs-network-esmtp-mixin]\n    * [POP3][docs-network-pop3-mixin]\n    * [IMAP][docs-network-imap-mixin]\n    * [Telnet][docs-network-telnet-mixin]\n    * [HTTP / HTTPS][docs-network-http]\n    * [Raw packets][docs-network-packet]\n    * [ASNs][docs-network-asn]\n    * [IP addresses][docs-network-ip]\n    * [IP ranges][docs-network-ip_range]\n    * [TLDs][docs-network-tld]\n    * [Public Suffix List][docs-network-public_suffix]\n    * [Host names][docs-network-host]\n    * [Domain names][docs-network-domain]\n  * Working with text:\n    * [Generating typos][docs-text-typo].\n    * [Generating homoglyphs][docs-text-homoglyp].\n    * [Regexs for matching/extracting common types of data][docs-text-patterns].\n* Adds additional methods to many of [Ruby's core classes][docs-core-exts].\n* Small memory footprint (~46Kb).\n* Has 96% documentation coverage.\n* Has 93% test coverage.\n\n## Synopsis\n\n```shell\n$ irb -r ronin/support\nirb(main):001:0\u003e \"hello world\".base64_encode\n=\u003e \"aGVsbG8gd29ybGQ=\\n\"\nirb(main):002:0\u003e \"aGVsbG8gd29ybGQ=\\n\".base64_decode\n=\u003e \"hello world\"\n```\n\n## Examples\n\n```ruby\nrequire 'ronin/support'\ninclude Ronin::Support\n\nstring = \"hello world\"\nputs string.base64_encode\n\ndata = \"aGVsbG8gd29ybGQ=\\n\"\nputs data.base64_decode\n```\n\nFor more examples of the convenience methods provided by ronin-support,\nplease see the [API documentation](https://ronin-rb.dev/docs/ronin-support).\n\n## Requirements\n\n* [Ruby] \u003e= 3.0.0\n* [base64] ~\u003e 0.1\n* [chars] ~\u003e 0.3, \u003e= 0.3.2\n* [hexdump] ~\u003e 1.0\n* [combinatorics] ~\u003e 0.4\n* [addressable] ~\u003e 2.0\n* [uri-query_params] ~\u003e 0.8\n\n## Install\n\n```shell\n$ gem install ronin-support\n```\n\n### Gemfile\n\n```ruby\ngem 'ronin-support', '~\u003e 0.5'\n```\n\n## Development\n\n1. [Fork It!](https://github.com/ronin-rb/ronin-support/fork)\n2. Clone It!\n3. `cd ronin-support`\n4. `bundle install`\n5. `git checkout -b my_feature`\n6. Code It!\n7. `bundle exec rake spec`\n8. `git push origin my_feature`\n\n## License\n\nCopyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)\n\nronin-support is free software: you can redistribute it and/or modify\nit under the terms of the GNU Lesser General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nronin-support is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Lesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public License\nalong with ronin-support.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n\n[ronin-rb]: https://ronin-rb.dev\n[Ruby]: https://www.ruby-lang.org/\n\n[pwntools]: https://github.com/Gallopsled/pwntools#readme\n[activesupport]: https://guides.rubyonrails.org/active_support_core_extensions.html\n\n[base64]: https://github.com/ruby/base64#readme\n[chars]: https://github.com/postmodern/chars#readme\n[hexdump]: https://github.com/postmodern/hexdump#readme\n[combinatorics]: https://github.com/postmodern/combinatorics#readme\n[addressable]: https://github.com/sporkmonger/addressable#readme\n[uri-query_params]: https://github.com/postmodern/uri-query_params#readme\n\n[docs-binary-bit_flip]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/BitFlip.html\n[docs-unhexdump]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Unhexdump.html\n[docs-binary-ctypes]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/CTypes.html\n[docs-binary-buffer]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Buffer.html\n[docs-binary-stream]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Stream.html\n[docs-binary-stack]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Stack.html\n[docs-binary-cstring]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/CString.html\n[docs-binary-array]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Array.html\n[docs-binary-struct]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Struct.html\n[docs-binary-union]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Union.html\n[docs-encoding-base16]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Base16.html\n[docs-encoding-base32]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Base32.html\n[docs-encoding-base36]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Base36.html\n[docs-encoding-base62]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Base62.html\n[docs-encoding-base64]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Base64.html\n[docs-encoding-c]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/C.html\n[docs-encoding-hex]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Hex.html\n[docs-encoding-html]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/HTML.html\n[docs-encoding-http]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/HTTP.html\n[docs-encoding-js]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/JS.html\n[docs-encoding-powershell]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/PowerShell.html\n[docs-encoding-punycode]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Punycode.html\n[docs-encoding-quoted-printable]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/QuotedPrintable.html\n[docs-encoding-ruby]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Ruby.html\n[docs-encoding-shell]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/Shell.html\n[docs-encoding-sql]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/SQL.html\n[docs-encoding-uri]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/URI.html\n[docs-encoding-uuencoding]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/UUEncoding.html\n[docs-encoding-xml]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Encoding/XML.html\n[docs-compression]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Compression.html\n[docs-compression-zlib]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Compression/Zlib.html\n[docs-compression-gzip]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Compression/Gzip.html\n[docs-archive]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Archive.html\n[docs-archive-tar]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Archive/Tar.html\n[docs-archive-zip]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Archive/Zip.html\n[docs-crypto]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto.html\n[docs-crypto-key-rsa]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Key/RSA.html\n[docs-crypto-key-dsa]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Key/DSA.html\n[docs-crypto-key-dh]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Key/DH.html\n[docs-crypto-key-ec]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Key/EC.html\n[docs-crypto-hmac]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Key/EC.html\n[docs-crypto-cipher]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Cipher.html\n[docs-crypto-cert]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Crypto/Cert.html\n[docs-network-dns]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/DNS.html\n[docs-network-unix-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/UNIX/Mixin.html\n[docs-network-tcp-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/TCP/Mixin.html\n[docs-network-udp-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/UDP/Mixin.html\n[docs-network-ssl-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/SSL/Mixin.html\n[docs-network-tls-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/TLS/Mixin.html\n[docs-network-ftp-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/FTP/Mixin.html\n[docs-network-smtp-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/SMTP/Mixin.html\n[docs-network-esmtp-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/ESMTP/Mixin.html\n[docs-network-pop3-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/POP3/Mixin.html\n[docs-network-imap-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/IMAP/Mixin.html\n[docs-network-telnet-mixin]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/Telnet/Mixin.html\n[docs-network-http]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/HTTP.html\n[docs-network-packet]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Binary/Packet.html\n[docs-network-asn]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/ASN.html\n[docs-network-ip]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/IP.html\n[docs-network-ip_range]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/IPRange.html\n[docs-network-tld]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/TLD.html\n[docs-network-public_suffix]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/PublicSuffix.html\n[docs-network-host]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/Host.html\n[docs-network-domain]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Network/Domain.html\n[docs-text-typo]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Text/Typo.html\n[docs-text-homoglyp]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Text/Homoglyph.html\n[docs-text-patterns]: https://ronin-rb.dev/docs/ronin-support/Ronin/Support/Text/Patterns.html\n[docs-core-exts]: https://ronin-rb.dev/docs/ronin-support/top-level-namespace.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronin-rb%2Fronin-support","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fronin-rb%2Fronin-support","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronin-rb%2Fronin-support/lists"}