ronin-support 0.5.1 → 1.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +7 -6
- data/.mailmap +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -2
- data/ChangeLog.md +533 -137
- data/Gemfile +20 -20
- data/README.md +137 -61
- data/Rakefile +29 -10
- data/data/text/homoglyphs/ascii.txt +8 -0
- data/data/text/homoglyphs/cyrillic.txt +33 -0
- data/data/text/homoglyphs/full_width.txt +81 -0
- data/data/text/homoglyphs/greek.txt +21 -0
- data/data/text/homoglyphs/latin_numbers.txt +14 -0
- data/data/text/homoglyphs/punctuation.txt +7 -0
- data/data/text/patterns/network/public_suffix.rb.erb +44 -0
- data/examples/ssl_proxy.rb +38 -0
- data/examples/tcp_proxy.rb +41 -0
- data/gemspec.yml +25 -15
- data/lib/ronin/support/archive/core_ext/file.rb +118 -0
- data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
- data/lib/ronin/support/archive/mixin.rb +213 -0
- data/lib/ronin/support/archive/tar/reader.rb +135 -0
- data/lib/ronin/support/archive/tar/writer.rb +197 -0
- data/lib/ronin/support/archive/tar.rb +155 -0
- data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
- data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
- data/lib/ronin/support/archive/zip/reader.rb +273 -0
- data/lib/ronin/support/archive/zip/writer.rb +175 -0
- data/lib/ronin/support/archive/zip.rb +105 -0
- data/lib/ronin/support/archive.rb +211 -0
- data/lib/ronin/support/binary/array.rb +255 -0
- data/lib/ronin/support/binary/bit_flip.rb +147 -0
- data/lib/ronin/support/binary/buffer.rb +2027 -0
- data/lib/ronin/support/binary/byte_slice.rb +324 -0
- data/lib/ronin/support/binary/core_ext/array.rb +75 -0
- data/lib/ronin/support/binary/core_ext/float.rb +80 -0
- data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
- data/lib/ronin/support/binary/core_ext/io.rb +38 -0
- data/lib/ronin/support/binary/core_ext/string.rb +115 -0
- data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
- data/lib/ronin/support/binary/cstring.rb +259 -0
- data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
- data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
- data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
- data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
- data/lib/ronin/support/binary/ctypes/native.rb +205 -0
- data/lib/ronin/support/binary/ctypes/network.rb +29 -0
- data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
- data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
- data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
- data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
- data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
- data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
- data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
- data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
- data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
- data/lib/ronin/support/binary/ctypes/os.rb +125 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
- data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
- data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
- data/lib/ronin/support/binary/ctypes/type.rb +193 -0
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
- data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
- data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
- data/lib/ronin/support/binary/ctypes.rb +462 -0
- data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
- data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
- data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
- data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
- data/lib/ronin/support/binary/hexdump.rb +20 -0
- data/lib/ronin/support/binary/memory.rb +268 -0
- data/lib/ronin/support/binary/packet.rb +33 -0
- data/lib/ronin/support/binary/stack.rb +256 -0
- data/lib/ronin/support/binary/stream/methods.rb +1755 -0
- data/lib/ronin/support/binary/stream.rb +151 -0
- data/lib/ronin/support/binary/struct/member.rb +86 -0
- data/lib/ronin/support/binary/struct.rb +830 -0
- data/lib/ronin/support/binary/template.rb +284 -0
- data/lib/ronin/support/binary/union.rb +162 -0
- data/lib/ronin/support/binary.rb +26 -0
- data/lib/ronin/support/cli/ansi.rb +330 -0
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
- data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
- data/lib/ronin/support/cli/io_shell.rb +161 -0
- data/lib/ronin/support/cli/printing.rb +216 -0
- data/lib/ronin/support/cli.rb +20 -0
- data/lib/ronin/support/compression/core_ext/file.rb +70 -0
- data/lib/ronin/support/compression/core_ext/string.rb +101 -0
- data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
- data/lib/ronin/support/compression/gzip/reader.rb +70 -0
- data/lib/ronin/support/compression/gzip/writer.rb +74 -0
- data/lib/ronin/support/compression/gzip.rb +105 -0
- data/lib/ronin/support/compression/mixin.rb +180 -0
- data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
- data/lib/ronin/support/compression.rb +174 -0
- data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
- data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
- data/lib/ronin/support/core_ext/integer.rb +37 -0
- data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
- data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
- data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
- data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
- data/lib/ronin/support/core_ext.rb +33 -0
- data/lib/ronin/support/crypto/cert.rb +522 -0
- data/lib/ronin/support/crypto/cert_chain.rb +204 -0
- data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
- data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
- data/lib/ronin/support/crypto/cipher.rb +194 -0
- data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
- data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
- data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
- data/lib/ronin/support/crypto/hmac.rb +48 -0
- data/lib/ronin/support/crypto/key/dh.rb +122 -0
- data/lib/ronin/support/crypto/key/dsa.rb +103 -0
- data/lib/ronin/support/crypto/key/ec.rb +99 -0
- data/lib/ronin/support/crypto/key/methods.rb +163 -0
- data/lib/ronin/support/crypto/key/rsa.rb +169 -0
- data/lib/ronin/support/crypto/key.rb +105 -0
- data/lib/ronin/support/crypto/mixin.rb +620 -0
- data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
- data/lib/ronin/support/crypto.rb +779 -0
- data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base16.rb +82 -0
- data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base32.rb +164 -0
- data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
- data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base64.rb +78 -0
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/c.rb +277 -0
- data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
- data/lib/ronin/support/encoding/core_ext.rb +33 -0
- data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
- data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
- data/lib/ronin/support/encoding/hex.rb +248 -0
- data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
- data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
- data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/html.rb +233 -0
- data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
- data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
- data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/http.rb +241 -0
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
- data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/js.rb +279 -0
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
- data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
- data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/powershell.rb +297 -0
- data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/punycode.rb +76 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
- data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
- data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/ruby.rb +235 -0
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
- data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
- data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/shell.rb +293 -0
- data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
- data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
- data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/sql.rb +124 -0
- data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
- data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
- data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/uri.rb +424 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/uuencoding.rb +70 -0
- data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
- data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
- data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/xml.rb +328 -0
- data/lib/ronin/support/encoding.rb +46 -0
- data/lib/ronin/support/home.rb +88 -0
- data/lib/ronin/support/mixin.rb +42 -0
- data/lib/ronin/support/network/asn/dns_record.rb +112 -0
- data/lib/ronin/support/network/asn/list.rb +269 -0
- data/lib/ronin/support/network/asn/record.rb +164 -0
- data/lib/ronin/support/network/asn/record_set.rb +226 -0
- data/lib/ronin/support/network/asn.rb +88 -0
- data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
- data/lib/ronin/support/network/dns/idn.rb +38 -0
- data/lib/ronin/support/network/dns/mixin.rb +941 -0
- data/lib/ronin/support/network/dns/resolver.rb +707 -0
- data/lib/ronin/support/network/dns.rb +1109 -0
- data/lib/ronin/support/network/domain.rb +70 -0
- data/lib/ronin/support/network/email_address.rb +574 -0
- data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
- data/lib/ronin/support/network/exceptions.rb +43 -0
- data/lib/ronin/support/network/ftp/mixin.rb +106 -0
- data/lib/ronin/support/network/host.rb +1473 -0
- data/lib/ronin/support/network/http/cookie.rb +245 -0
- data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
- data/lib/ronin/support/network/http/core_ext.rb +19 -0
- data/lib/ronin/support/network/http/mixin.rb +890 -0
- data/lib/ronin/support/network/http/request.rb +215 -0
- data/lib/ronin/support/network/http/set_cookie.rb +210 -0
- data/lib/ronin/support/network/http/user_agents.rb +115 -0
- data/lib/ronin/support/network/http.rb +2582 -0
- data/lib/ronin/support/network/imap/mixin.rb +133 -0
- data/lib/ronin/support/network/ip/mixin.rb +114 -0
- data/lib/ronin/support/network/ip.rb +540 -0
- data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
- data/lib/ronin/support/network/ip_range/glob.rb +309 -0
- data/lib/ronin/support/network/ip_range/range.rb +249 -0
- data/lib/ronin/support/network/ip_range.rb +284 -0
- data/lib/ronin/support/network/mixin.rb +58 -0
- data/lib/ronin/support/network/packet.rb +27 -0
- data/lib/ronin/support/network/pop3/mixin.rb +113 -0
- data/lib/ronin/support/network/proxy.rb +602 -0
- data/lib/ronin/support/network/public_suffix/list.rb +339 -0
- data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
- data/lib/ronin/support/network/public_suffix.rb +41 -0
- data/lib/ronin/support/network/smtp/email.rb +190 -0
- data/lib/ronin/support/network/smtp/mixin.rb +290 -0
- data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
- data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
- data/lib/ronin/support/network/ssl/local_key.rb +84 -0
- data/lib/ronin/support/network/ssl/mixin.rb +740 -0
- data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
- data/lib/ronin/support/network/ssl/proxy.rb +296 -0
- data/lib/ronin/support/network/ssl.rb +173 -0
- data/lib/ronin/support/network/tcp/mixin.rb +400 -0
- data/lib/ronin/support/network/tcp/proxy.rb +435 -0
- data/lib/ronin/support/network/tcp.rb +443 -0
- data/lib/ronin/support/network/telnet/mixin.rb +150 -0
- data/lib/ronin/support/network/telnet.rb +90 -0
- data/lib/ronin/support/network/tld/list.rb +266 -0
- data/lib/ronin/support/network/tld.rb +41 -0
- data/lib/ronin/support/network/tls/mixin.rb +670 -0
- data/lib/ronin/support/network/tls/proxy.rb +135 -0
- data/lib/ronin/support/network/tls.rb +53 -0
- data/lib/ronin/support/network/udp/mixin.rb +389 -0
- data/lib/ronin/support/network/udp/proxy.rb +192 -0
- data/lib/ronin/support/network/udp.rb +435 -0
- data/lib/ronin/support/network/unix/mixin.rb +273 -0
- data/lib/ronin/support/network.rb +37 -0
- data/lib/ronin/support/path.rb +136 -0
- data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
- data/lib/ronin/support/text/core_ext/string.rb +46 -0
- data/lib/ronin/support/text/core_ext.rb +23 -0
- data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
- data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
- data/lib/ronin/support/text/entropy.rb +66 -0
- data/lib/ronin/support/text/erb/mixin.rb +44 -0
- data/lib/ronin/support/text/erb.rb +19 -0
- data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
- data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
- data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
- data/lib/ronin/support/text/homoglyph/table.rb +228 -0
- data/lib/ronin/support/text/homoglyph.rb +142 -0
- data/lib/ronin/support/text/mixin.rb +31 -0
- data/lib/ronin/support/text/patterns/credentials.rb +75 -0
- data/lib/ronin/support/text/patterns/crypto.rb +67 -0
- data/lib/ronin/support/text/patterns/file_system.rb +93 -0
- data/lib/ronin/support/text/patterns/language.rb +37 -0
- data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
- data/lib/ronin/support/text/patterns/network.rb +140 -0
- data/lib/ronin/support/text/patterns/numeric.rb +52 -0
- data/lib/ronin/support/text/patterns/pii.rb +105 -0
- data/lib/ronin/support/text/patterns/source_code.rb +148 -0
- data/lib/ronin/support/text/patterns.rb +25 -0
- data/lib/ronin/support/text/random/mixin.rb +437 -0
- data/lib/ronin/support/text/random.rb +419 -0
- data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
- data/lib/ronin/support/text/typo/core_ext.rb +19 -0
- data/lib/ronin/support/text/typo/exceptions.rb +28 -0
- data/lib/ronin/support/text/typo/generator.rb +161 -0
- data/lib/ronin/support/text/typo.rb +260 -0
- data/lib/ronin/support/text.rb +26 -0
- data/lib/ronin/support/version.rb +6 -7
- data/lib/ronin/support.rb +20 -15
- data/ronin-support.gemspec +3 -1
- metadata +462 -369
- data/.gemtest +0 -0
- data/lib/ronin/binary/hexdump/parser.rb +0 -403
- data/lib/ronin/binary/struct.rb +0 -567
- data/lib/ronin/binary/template.rb +0 -454
- data/lib/ronin/extensions/ip_addr.rb +0 -217
- data/lib/ronin/extensions/meta/object.rb +0 -24
- data/lib/ronin/extensions/regexp.rb +0 -157
- data/lib/ronin/extensions.rb +0 -29
- data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
- data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
- data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
- data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
- data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
- data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
- data/lib/ronin/formatting/extensions/binary.rb +0 -26
- data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
- data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
- data/lib/ronin/formatting/extensions/digest.rb +0 -21
- data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
- data/lib/ronin/formatting/extensions/html/string.rb +0 -194
- data/lib/ronin/formatting/extensions/html.rb +0 -21
- data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
- data/lib/ronin/formatting/extensions/http/string.rb +0 -110
- data/lib/ronin/formatting/extensions/http.rb +0 -21
- data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
- data/lib/ronin/formatting/extensions/sql.rb +0 -20
- data/lib/ronin/formatting/extensions/text/array.rb +0 -137
- data/lib/ronin/formatting/extensions/text/string.rb +0 -297
- data/lib/ronin/formatting/extensions.rb +0 -24
- data/lib/ronin/formatting/text.rb +0 -20
- data/lib/ronin/formatting.rb +0 -25
- data/lib/ronin/fuzzing/extensions/string.rb +0 -209
- data/lib/ronin/fuzzing/fuzzer.rb +0 -110
- data/lib/ronin/fuzzing/fuzzing.rb +0 -360
- data/lib/ronin/fuzzing/mutator.rb +0 -161
- data/lib/ronin/fuzzing/repeater.rb +0 -81
- data/lib/ronin/fuzzing/template.rb +0 -133
- data/lib/ronin/fuzzing.rb +0 -21
- data/lib/ronin/mixin.rb +0 -89
- data/lib/ronin/network/dns.rb +0 -201
- data/lib/ronin/network/esmtp.rb +0 -113
- data/lib/ronin/network/extensions/dns.rb +0 -20
- data/lib/ronin/network/extensions/esmtp.rb +0 -20
- data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
- data/lib/ronin/network/extensions/http.rb +0 -21
- data/lib/ronin/network/extensions/imap.rb +0 -20
- data/lib/ronin/network/extensions/pop3/net.rb +0 -24
- data/lib/ronin/network/extensions/pop3.rb +0 -20
- data/lib/ronin/network/extensions/smtp/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl.rb +0 -20
- data/lib/ronin/network/extensions/tcp/net.rb +0 -24
- data/lib/ronin/network/extensions/tcp.rb +0 -20
- data/lib/ronin/network/extensions/telnet/net.rb +0 -24
- data/lib/ronin/network/extensions/telnet.rb +0 -20
- data/lib/ronin/network/extensions/udp/net.rb +0 -24
- data/lib/ronin/network/extensions/udp.rb +0 -20
- data/lib/ronin/network/extensions.rb +0 -29
- data/lib/ronin/network/ftp.rb +0 -149
- data/lib/ronin/network/http/exceptions.rb +0 -20
- data/lib/ronin/network/http/http.rb +0 -1127
- data/lib/ronin/network/http/proxy.rb +0 -330
- data/lib/ronin/network/http.rb +0 -22
- data/lib/ronin/network/imap.rb +0 -158
- data/lib/ronin/network/mixins/dns.rb +0 -55
- data/lib/ronin/network/mixins/esmtp.rb +0 -164
- data/lib/ronin/network/mixins/ftp.rb +0 -155
- data/lib/ronin/network/mixins/http.rb +0 -227
- data/lib/ronin/network/mixins/imap.rb +0 -156
- data/lib/ronin/network/mixins/mixin.rb +0 -58
- data/lib/ronin/network/mixins/pop3.rb +0 -149
- data/lib/ronin/network/mixins/smtp.rb +0 -159
- data/lib/ronin/network/mixins/ssl.rb +0 -148
- data/lib/ronin/network/mixins/tcp.rb +0 -368
- data/lib/ronin/network/mixins/telnet.rb +0 -208
- data/lib/ronin/network/mixins/udp.rb +0 -381
- data/lib/ronin/network/mixins/unix.rb +0 -279
- data/lib/ronin/network/mixins.rb +0 -29
- data/lib/ronin/network/network.rb +0 -45
- data/lib/ronin/network/pop3.rb +0 -124
- data/lib/ronin/network/proxy.rb +0 -578
- data/lib/ronin/network/smtp/email.rb +0 -174
- data/lib/ronin/network/smtp/smtp.rb +0 -230
- data/lib/ronin/network/smtp.rb +0 -22
- data/lib/ronin/network/ssl.rb +0 -186
- data/lib/ronin/network/tcp/proxy.rb +0 -417
- data/lib/ronin/network/tcp/tcp.rb +0 -443
- data/lib/ronin/network/tcp.rb +0 -21
- data/lib/ronin/network/telnet.rb +0 -264
- data/lib/ronin/network/udp/proxy.rb +0 -191
- data/lib/ronin/network/udp/udp.rb +0 -450
- data/lib/ronin/network/udp.rb +0 -21
- data/lib/ronin/network/unix.rb +0 -286
- data/lib/ronin/network.rb +0 -31
- data/lib/ronin/path.rb +0 -137
- data/lib/ronin/spec/ui/output.rb +0 -22
- data/lib/ronin/support/inflector.rb +0 -92
- data/lib/ronin/support/support.rb +0 -42
- data/lib/ronin/templates/erb.rb +0 -78
- data/lib/ronin/templates/template.rb +0 -169
- data/lib/ronin/templates.rb +0 -21
- data/lib/ronin/ui/output/helpers.rb +0 -296
- data/lib/ronin/ui/output/output.rb +0 -146
- data/lib/ronin/ui/output/terminal/color.rb +0 -124
- data/lib/ronin/ui/output/terminal/raw.rb +0 -103
- data/lib/ronin/ui/output/terminal.rb +0 -21
- data/lib/ronin/ui/output.rb +0 -21
- data/lib/ronin/ui/shell.rb +0 -286
- data/lib/ronin/wordlist.rb +0 -287
- data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
- data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
- data/spec/binary/hexdump/parser_spec.rb +0 -302
- data/spec/binary/struct_spec.rb +0 -496
- data/spec/binary/template_spec.rb +0 -414
- data/spec/extensions/enumerable_spec.rb +0 -24
- data/spec/extensions/file_spec.rb +0 -63
- data/spec/extensions/ip_addr_spec.rb +0 -203
- data/spec/extensions/kernel_spec.rb +0 -30
- data/spec/extensions/regexp_spec.rb +0 -482
- data/spec/extensions/resolv_spec.rb +0 -18
- data/spec/extensions/string_spec.rb +0 -179
- data/spec/formatting/binary/array_spec.rb +0 -26
- data/spec/formatting/binary/base64_spec.rb +0 -50
- data/spec/formatting/binary/float_spec.rb +0 -34
- data/spec/formatting/binary/integer_spec.rb +0 -166
- data/spec/formatting/binary/string_spec.rb +0 -197
- data/spec/formatting/digest/string_spec.rb +0 -82
- data/spec/formatting/html/integer_spec.rb +0 -66
- data/spec/formatting/html/string_spec.rb +0 -103
- data/spec/formatting/http/integer_spec.rb +0 -42
- data/spec/formatting/http/string_spec.rb +0 -76
- data/spec/formatting/sql/string_spec.rb +0 -75
- data/spec/formatting/text/array_spec.rb +0 -105
- data/spec/formatting/text/string_spec.rb +0 -162
- data/spec/fuzzing/extensions/string_spec.rb +0 -87
- data/spec/fuzzing/fuzzer_spec.rb +0 -109
- data/spec/fuzzing/fuzzing_spec.rb +0 -24
- data/spec/fuzzing/mutator_spec.rb +0 -112
- data/spec/fuzzing/repeater_spec.rb +0 -57
- data/spec/fuzzing/template_spec.rb +0 -54
- data/spec/mixin_spec.rb +0 -53
- data/spec/network/dns_spec.rb +0 -201
- data/spec/network/ftp_spec.rb +0 -81
- data/spec/network/http/http_spec.rb +0 -466
- data/spec/network/http/proxy_spec.rb +0 -148
- data/spec/network/network_spec.rb +0 -8
- data/spec/network/proxy_spec.rb +0 -121
- data/spec/network/shared/unix_server.rb +0 -31
- data/spec/network/smtp/email_spec.rb +0 -100
- data/spec/network/ssl_spec.rb +0 -70
- data/spec/network/tcp/proxy_spec.rb +0 -116
- data/spec/network/tcp/tcp_spec.rb +0 -273
- data/spec/network/telnet_spec.rb +0 -67
- data/spec/network/udp/udp_spec.rb +0 -271
- data/spec/network/unix_spec.rb +0 -183
- data/spec/path_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -9
- data/spec/support/inflector_spec.rb +0 -22
- data/spec/support_spec.rb +0 -8
- data/spec/templates/classes/example_erb.rb +0 -11
- data/spec/templates/classes/example_template.rb +0 -35
- data/spec/templates/erb_spec.rb +0 -21
- data/spec/templates/helpers/data/includes/_relative.erb +0 -1
- data/spec/templates/helpers/data/templates/example.erb +0 -1
- data/spec/templates/helpers/data.rb +0 -9
- data/spec/templates/template_spec.rb +0 -54
- data/spec/ui/classes/test_shell.rb +0 -22
- data/spec/ui/output_spec.rb +0 -32
- data/spec/ui/shell_spec.rb +0 -83
- data/spec/wordlist_spec.rb +0 -151
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# Ronin Support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# Ronin Support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/encoding/xml'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# XML escapes the String.
|
|
25
|
+
#
|
|
26
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
27
|
+
# Additional keyword arguments.
|
|
28
|
+
#
|
|
29
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
30
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
31
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
# The XML escaped String.
|
|
35
|
+
#
|
|
36
|
+
# @example
|
|
37
|
+
# "one & two".xml_escape
|
|
38
|
+
# # => "one & two"
|
|
39
|
+
#
|
|
40
|
+
# @example Uppercase escaped characters:
|
|
41
|
+
# "one & two".xml_escape(case: :upper)
|
|
42
|
+
# # => "one & two"
|
|
43
|
+
#
|
|
44
|
+
# @see http://rubydoc.info/stdlib/cgi/CGI.escapeHTML
|
|
45
|
+
# @see Ronin::Support::Encoding::XML.escape
|
|
46
|
+
#
|
|
47
|
+
# @since 0.2.0
|
|
48
|
+
#
|
|
49
|
+
# @api public
|
|
50
|
+
#
|
|
51
|
+
def xml_escape(**kwargs)
|
|
52
|
+
Ronin::Support::Encoding::XML.escape(self,**kwargs)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Unescapes the XML encoded String.
|
|
57
|
+
#
|
|
58
|
+
# @return [String]
|
|
59
|
+
# The unescaped String.
|
|
60
|
+
#
|
|
61
|
+
# @example
|
|
62
|
+
# "<p>one <span>two</span></p>".xml_unescape
|
|
63
|
+
# # => "<p>one <span>two</span></p>"
|
|
64
|
+
#
|
|
65
|
+
# @see http://rubydoc.info/stdlib/cgi/CGI.unescapeHash
|
|
66
|
+
# @see Ronin::Support::Encoding::XML.unescape
|
|
67
|
+
#
|
|
68
|
+
# @since 0.2.0
|
|
69
|
+
#
|
|
70
|
+
# @api public
|
|
71
|
+
#
|
|
72
|
+
def xml_unescape
|
|
73
|
+
Ronin::Support::Encoding::XML.unescape(self)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# Encodes each character in the String as an XML character.
|
|
78
|
+
#
|
|
79
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
80
|
+
# Additional keyword arguments.
|
|
81
|
+
#
|
|
82
|
+
# @option kwargs [:decimal, :hex] :format (:decimal)
|
|
83
|
+
# The numeric format for the escaped characters.
|
|
84
|
+
#
|
|
85
|
+
# @option kwargs [Boolean] :zero_pad
|
|
86
|
+
# Controls whether the escaped characters will be left-padded with
|
|
87
|
+
# up to seven `0` characters.
|
|
88
|
+
#
|
|
89
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
90
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
91
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
92
|
+
#
|
|
93
|
+
# @return [String]
|
|
94
|
+
# The XML encoded String.
|
|
95
|
+
#
|
|
96
|
+
# @example
|
|
97
|
+
# "abc".xml_encode
|
|
98
|
+
# # => "abc"
|
|
99
|
+
#
|
|
100
|
+
# @example Zero-padding:
|
|
101
|
+
# "abc".xml_encode(zero_pad: true)
|
|
102
|
+
# # => "abc"
|
|
103
|
+
#
|
|
104
|
+
# @example Hexadecimal encoded characters:
|
|
105
|
+
# "abc".xml_encode(format: :hex)
|
|
106
|
+
# # => "abc"
|
|
107
|
+
#
|
|
108
|
+
# @example Uppercase hexadecimal encoded characters:
|
|
109
|
+
# "abc\xff".xml_encode(format: :hex, case: :upper)
|
|
110
|
+
# # => "abcÿ"
|
|
111
|
+
#
|
|
112
|
+
# @see Ronin::Support::Encoding::XML.encode
|
|
113
|
+
#
|
|
114
|
+
# @since 1.0.0
|
|
115
|
+
#
|
|
116
|
+
# @api public
|
|
117
|
+
#
|
|
118
|
+
def xml_encode(**kwargs)
|
|
119
|
+
Ronin::Support::Encoding::XML.encode(self,**kwargs)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
alias xml_decode xml_unescape
|
|
123
|
+
|
|
124
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/encoding/xml/core_ext/integer'
|
|
20
|
+
require 'ronin/support/encoding/xml/core_ext/string'
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
class Encoding < ::Encoding
|
|
22
|
+
#
|
|
23
|
+
# Contains methods for encoding/decoding escaping/unescaping XML data.
|
|
24
|
+
#
|
|
25
|
+
# ## Features
|
|
26
|
+
#
|
|
27
|
+
# * Supports lowercase (ex: `&`) and uppercase (ex: `&`) encoding.
|
|
28
|
+
# * Supports decimal (ex: `A`) and hexadecimal (ex: `A`)
|
|
29
|
+
# character encoding.
|
|
30
|
+
# * Supports zero-padding (ex: `A`).
|
|
31
|
+
#
|
|
32
|
+
# @api public
|
|
33
|
+
#
|
|
34
|
+
module XML
|
|
35
|
+
# Special bytes and their escaped XML characters.
|
|
36
|
+
ESCAPE_BYTES = {
|
|
37
|
+
39 => ''',
|
|
38
|
+
38 => '&',
|
|
39
|
+
34 => '"',
|
|
40
|
+
60 => '<',
|
|
41
|
+
62 => '>'
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Special bytes and their escaped XML characters, but in uppercase.
|
|
45
|
+
ESCAPE_BYTES_UPPERCASE = {
|
|
46
|
+
39 => ''',
|
|
47
|
+
38 => '&',
|
|
48
|
+
34 => '"',
|
|
49
|
+
60 => '<',
|
|
50
|
+
62 => '>'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Escapes the byte as a XML decimal character.
|
|
55
|
+
#
|
|
56
|
+
# @param [Integer] byte
|
|
57
|
+
# The byte to XML escape.
|
|
58
|
+
#
|
|
59
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
60
|
+
# Additional keyword arguments.
|
|
61
|
+
#
|
|
62
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
63
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
64
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
65
|
+
#
|
|
66
|
+
# @return [String]
|
|
67
|
+
# The XML decimal character.
|
|
68
|
+
#
|
|
69
|
+
# @raise [ArgumentError]
|
|
70
|
+
# The `case:` keyword argument is invalid.
|
|
71
|
+
#
|
|
72
|
+
# @example
|
|
73
|
+
# Encoding::XML.escape_byte(0x41)
|
|
74
|
+
# # => "A"
|
|
75
|
+
# Encoding::XML.escape_byte(0x26)
|
|
76
|
+
# # => "&"
|
|
77
|
+
#
|
|
78
|
+
# @example Uppercase encoding:
|
|
79
|
+
# Encoding::XML.escape_byte(0x26, case: :upper)
|
|
80
|
+
# # => "&"
|
|
81
|
+
#
|
|
82
|
+
def self.escape_byte(byte,**kwargs)
|
|
83
|
+
table = case kwargs[:case]
|
|
84
|
+
when :upper then ESCAPE_BYTES_UPPERCASE
|
|
85
|
+
when :lower, nil then ESCAPE_BYTES
|
|
86
|
+
else
|
|
87
|
+
raise(ArgumentError,"case (#{kwargs[:case].inspect}) keyword argument must be either :lower, :upper, or nil")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
table.fetch(byte) do
|
|
91
|
+
if (byte >= 0 && byte <= 0xff)
|
|
92
|
+
byte.chr(Encoding::ASCII_8BIT)
|
|
93
|
+
else
|
|
94
|
+
byte.chr(Encoding::UTF_8)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# Encodes the byte as a XML decimal character.
|
|
101
|
+
#
|
|
102
|
+
# @param [Integer] byte
|
|
103
|
+
# The byte to XML encode.
|
|
104
|
+
#
|
|
105
|
+
# @param [:decimal, :hex] format
|
|
106
|
+
# The numeric format for the escaped characters.
|
|
107
|
+
#
|
|
108
|
+
# @param [Boolean] zero_pad
|
|
109
|
+
# Controls whether the escaped characters will be left-padded with
|
|
110
|
+
# up to seven `0` characters.
|
|
111
|
+
#
|
|
112
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
113
|
+
# Additional keyword arguments.
|
|
114
|
+
#
|
|
115
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
116
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
117
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
118
|
+
#
|
|
119
|
+
# @return [String]
|
|
120
|
+
# The XML decimal character.
|
|
121
|
+
#
|
|
122
|
+
# @raise [ArgumentError]
|
|
123
|
+
# The `format:` or `case:` keyword argument is invalid.
|
|
124
|
+
#
|
|
125
|
+
# @example
|
|
126
|
+
# Encoding::XML.encode_byte(0x41)
|
|
127
|
+
# # => "A"
|
|
128
|
+
#
|
|
129
|
+
# @example Zero-padding:
|
|
130
|
+
# Encoding::XML.encode_byte(0x41, zero_pad: true)
|
|
131
|
+
# # => "A"
|
|
132
|
+
#
|
|
133
|
+
# @example Hexadecimal escaped characters:
|
|
134
|
+
# Encoding::XML.encode_byte(0x41, format: :hex)
|
|
135
|
+
# # => "A"
|
|
136
|
+
#
|
|
137
|
+
# @example Uppercase hexadecimal escaped characters:
|
|
138
|
+
# Encoding::XML.encode_byte(0xff, format: :hex, case: :upper)
|
|
139
|
+
# # => "ÿ"
|
|
140
|
+
#
|
|
141
|
+
def self.encode_byte(byte, format: :decimal, zero_pad: false, **kwargs)
|
|
142
|
+
case format
|
|
143
|
+
when :decimal
|
|
144
|
+
if zero_pad then "&#%.7d;" % byte
|
|
145
|
+
else "&#%d;" % byte
|
|
146
|
+
end
|
|
147
|
+
when :hex
|
|
148
|
+
case kwargs[:case]
|
|
149
|
+
when :upper
|
|
150
|
+
if zero_pad then "&#X%.7X;" % byte
|
|
151
|
+
else "&#X%.2X;" % byte
|
|
152
|
+
end
|
|
153
|
+
when :lower, nil
|
|
154
|
+
if zero_pad then "&#x%.7x;" % byte
|
|
155
|
+
else "&#x%.2x;" % byte
|
|
156
|
+
end
|
|
157
|
+
when
|
|
158
|
+
raise(ArgumentError,"case (#{kwargs[:case].inspect}) keyword argument must be either :lower, :upper, or nil")
|
|
159
|
+
end
|
|
160
|
+
else
|
|
161
|
+
raise(ArgumentError,"format (#{format.inspect}) must be :decimal or :hex")
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
#
|
|
166
|
+
# Encodes each character in the given data as an XML character.
|
|
167
|
+
#
|
|
168
|
+
# @param [String] data
|
|
169
|
+
# The data to XML encode.
|
|
170
|
+
#
|
|
171
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
172
|
+
# Additional keyword arguments.
|
|
173
|
+
#
|
|
174
|
+
# @option kwargs [:decimal, :hex] :format (:decimal)
|
|
175
|
+
# The numeric format for the escaped characters.
|
|
176
|
+
#
|
|
177
|
+
# @option kwargs [Boolean] :zero_pad (false)
|
|
178
|
+
# Controls whether the escaped characters will be left-padded with
|
|
179
|
+
# up to seven `0` characters.
|
|
180
|
+
#
|
|
181
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
182
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
183
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
184
|
+
#
|
|
185
|
+
# @return [String]
|
|
186
|
+
# The XML encoded String.
|
|
187
|
+
#
|
|
188
|
+
# @raise [ArgumentError]
|
|
189
|
+
# The `format:` or `case:` keyword argument is invalid.
|
|
190
|
+
#
|
|
191
|
+
# @example
|
|
192
|
+
# Encoding::XML.encode("abc")
|
|
193
|
+
# # => "abc"
|
|
194
|
+
#
|
|
195
|
+
# @example Zero-padding:
|
|
196
|
+
# Encoding::XML.encode("abc", zero_pad: true)
|
|
197
|
+
# # => "abc"
|
|
198
|
+
#
|
|
199
|
+
# @example Hexadecimal encoded characters:
|
|
200
|
+
# Encoding::XML.encode("abc", format: :hex)
|
|
201
|
+
# # => "abc"
|
|
202
|
+
#
|
|
203
|
+
# @example Uppercase hexadecimal encoded characters:
|
|
204
|
+
# Encoding::XML.encode("abc\xff", format: :hex, case: :upper)
|
|
205
|
+
# # => "abcÿ"
|
|
206
|
+
#
|
|
207
|
+
def self.encode(data,**kwargs)
|
|
208
|
+
encoded = String.new
|
|
209
|
+
|
|
210
|
+
if data.valid_encoding?
|
|
211
|
+
data.each_codepoint do |codepoint|
|
|
212
|
+
encoded << encode_byte(codepoint,**kwargs)
|
|
213
|
+
end
|
|
214
|
+
else
|
|
215
|
+
data.each_byte do |byte|
|
|
216
|
+
encoded << encode_byte(byte,**kwargs)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
return encoded
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
#
|
|
224
|
+
# Alias for {unescape}.
|
|
225
|
+
#
|
|
226
|
+
# @param [String] data
|
|
227
|
+
# The data to XML unescape.
|
|
228
|
+
#
|
|
229
|
+
# @return [String]
|
|
230
|
+
# The unescaped String.
|
|
231
|
+
#
|
|
232
|
+
# @see unescape
|
|
233
|
+
#
|
|
234
|
+
def self.decode(data)
|
|
235
|
+
unescape(data)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
#
|
|
239
|
+
# XML escapes the data.
|
|
240
|
+
#
|
|
241
|
+
# @param [String] data
|
|
242
|
+
# The data to XML escape.
|
|
243
|
+
#
|
|
244
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
245
|
+
# Additional keyword arguments.
|
|
246
|
+
#
|
|
247
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
248
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
249
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
250
|
+
#
|
|
251
|
+
# @return [String]
|
|
252
|
+
# The XML escaped String.
|
|
253
|
+
#
|
|
254
|
+
# @raise [ArgumentError]
|
|
255
|
+
# The `case:` keyword argument is invalid.
|
|
256
|
+
#
|
|
257
|
+
# @example
|
|
258
|
+
# Encoding::XML.escape("one & two")
|
|
259
|
+
# # => "one & two"
|
|
260
|
+
#
|
|
261
|
+
# @example Uppercase escaped characters:
|
|
262
|
+
# Encoding::XML.encode("one & two", case: :upper)
|
|
263
|
+
# # => "one & two"
|
|
264
|
+
#
|
|
265
|
+
def self.escape(data,**kwargs)
|
|
266
|
+
escaped = String.new
|
|
267
|
+
|
|
268
|
+
if data.valid_encoding?
|
|
269
|
+
data.each_codepoint do |codepoint|
|
|
270
|
+
escaped << escape_byte(codepoint,**kwargs)
|
|
271
|
+
end
|
|
272
|
+
else
|
|
273
|
+
data.each_byte do |byte|
|
|
274
|
+
escaped << escape_byte(byte,**kwargs)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
return escaped
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# XML escaped characters and their unescaped forms.
|
|
282
|
+
ESCAPED_CHARS = {
|
|
283
|
+
''' => "'",
|
|
284
|
+
'&' => '&',
|
|
285
|
+
'"' => '"',
|
|
286
|
+
'<' => '<',
|
|
287
|
+
'>' => '>'
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
#
|
|
291
|
+
# Unescapes the XML encoded data.
|
|
292
|
+
#
|
|
293
|
+
# @param [String] data
|
|
294
|
+
# The data to XML unescape.
|
|
295
|
+
#
|
|
296
|
+
# @return [String]
|
|
297
|
+
# The unescaped String.
|
|
298
|
+
#
|
|
299
|
+
# @example
|
|
300
|
+
# Encoding::XML.unescape("<p>one <span>two</span></p>")
|
|
301
|
+
# # => "<p>one <span>two</span></p>"
|
|
302
|
+
#
|
|
303
|
+
# @see http://rubydoc.info/stdlib/cgi/CGI.unescapeHash
|
|
304
|
+
#
|
|
305
|
+
def self.unescape(data)
|
|
306
|
+
unescaped = String.new
|
|
307
|
+
scanner = StringScanner.new(data)
|
|
308
|
+
|
|
309
|
+
until scanner.eos?
|
|
310
|
+
unescaped << if (named_char = scanner.scan(/&(?:apos|amp|quot|lt|gt);/i))
|
|
311
|
+
ESCAPED_CHARS.fetch(named_char.downcase)
|
|
312
|
+
elsif (decimal_char = scanner.scan(/&#\d+;/))
|
|
313
|
+
decimal_char[2..-2].to_i.chr(Encoding::UTF_8)
|
|
314
|
+
elsif (hex_char = scanner.scan(/&#x[a-f0-9]+;/i))
|
|
315
|
+
hex_char[3..-2].to_i(16).chr(Encoding::UTF_8)
|
|
316
|
+
else
|
|
317
|
+
scanner.getch
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
return unescaped
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
require 'ronin/support/encoding/xml/core_ext'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/encoding/base16'
|
|
20
|
+
require 'ronin/support/encoding/base32'
|
|
21
|
+
require 'ronin/support/encoding/base64'
|
|
22
|
+
require 'ronin/support/encoding/hex'
|
|
23
|
+
require 'ronin/support/encoding/c'
|
|
24
|
+
require 'ronin/support/encoding/shell'
|
|
25
|
+
require 'ronin/support/encoding/powershell'
|
|
26
|
+
require 'ronin/support/encoding/http'
|
|
27
|
+
require 'ronin/support/encoding/xml'
|
|
28
|
+
require 'ronin/support/encoding/html'
|
|
29
|
+
require 'ronin/support/encoding/js'
|
|
30
|
+
require 'ronin/support/encoding/sql'
|
|
31
|
+
require 'ronin/support/encoding/quoted_printable'
|
|
32
|
+
require 'ronin/support/encoding/ruby'
|
|
33
|
+
require 'ronin/support/encoding/uri'
|
|
34
|
+
require 'ronin/support/encoding/punycode'
|
|
35
|
+
|
|
36
|
+
module Ronin
|
|
37
|
+
module Support
|
|
38
|
+
#
|
|
39
|
+
# Contains additional encoding/decoding modules.
|
|
40
|
+
#
|
|
41
|
+
# @since 1.0.0
|
|
42
|
+
#
|
|
43
|
+
class Encoding < ::Encoding
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
#
|
|
22
|
+
# Represents the user's home directory.
|
|
23
|
+
#
|
|
24
|
+
# @api public
|
|
25
|
+
#
|
|
26
|
+
# @since 1.0.0
|
|
27
|
+
#
|
|
28
|
+
module Home
|
|
29
|
+
# Path to the user's home directory.
|
|
30
|
+
DIR = Gem.user_home
|
|
31
|
+
|
|
32
|
+
# Path to the user's `~/.cache/` directory.
|
|
33
|
+
CACHE_DIR = ENV.fetch('XDG_CACHE_HOME') do
|
|
34
|
+
File.join(DIR,'.cache')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Returns the path to the sub-directory within the `~/.cache/` directory.
|
|
39
|
+
#
|
|
40
|
+
# @param [String] subdir
|
|
41
|
+
# The sub-directory.
|
|
42
|
+
#
|
|
43
|
+
# @return [String]
|
|
44
|
+
# The path to the `~/.cache/<subdir>` directory.
|
|
45
|
+
#
|
|
46
|
+
def self.cache_dir(subdir)
|
|
47
|
+
File.join(CACHE_DIR,subdir)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Path to the user's `~/.config/` directory.
|
|
51
|
+
CONFIG_DIR = ENV.fetch('XDG_CONFIG_HOME') do
|
|
52
|
+
File.join(DIR,'.config')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Returns the path to the sub-directory within the `~/.config/` directory.
|
|
57
|
+
#
|
|
58
|
+
# @param [String] subdir
|
|
59
|
+
# The sub-directory.
|
|
60
|
+
#
|
|
61
|
+
# @return [String]
|
|
62
|
+
# The path to the `~/.config/<subdir>` directory.
|
|
63
|
+
#
|
|
64
|
+
def self.config_dir(subdir)
|
|
65
|
+
File.join(CONFIG_DIR,subdir)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Path to the user's `~/.local/share` directory.
|
|
69
|
+
LOCAL_SHARE_DIR = ENV.fetch('XDG_DATA_HOME') do
|
|
70
|
+
File.join(DIR,'.local','share')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# Returns the path to the sub-directory within the `~/.local/share/`
|
|
75
|
+
# directory.
|
|
76
|
+
#
|
|
77
|
+
# @param [String] subdir
|
|
78
|
+
# The sub-directory.
|
|
79
|
+
#
|
|
80
|
+
# @return [String]
|
|
81
|
+
# The path to the `~/.local/share/<subdir>` directory.
|
|
82
|
+
#
|
|
83
|
+
def self.local_share_dir(subdir)
|
|
84
|
+
File.join(LOCAL_SHARE_DIR,subdir)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/text/mixin'
|
|
20
|
+
require 'ronin/support/compression/mixin'
|
|
21
|
+
require 'ronin/support/crypto/mixin'
|
|
22
|
+
require 'ronin/support/network/mixin'
|
|
23
|
+
require 'ronin/support/cli/printing'
|
|
24
|
+
|
|
25
|
+
module Ronin
|
|
26
|
+
module Support
|
|
27
|
+
#
|
|
28
|
+
# Provides helper methods.
|
|
29
|
+
#
|
|
30
|
+
# @api public
|
|
31
|
+
#
|
|
32
|
+
# @since 1.0.0
|
|
33
|
+
#
|
|
34
|
+
module Mixin
|
|
35
|
+
include Text::Mixin
|
|
36
|
+
include Compression::Mixin
|
|
37
|
+
include Crypto::Mixin
|
|
38
|
+
include Network::Mixin
|
|
39
|
+
include CLI::Printing
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|