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,660 @@
|
|
|
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/crypto'
|
|
20
|
+
|
|
21
|
+
require 'digest'
|
|
22
|
+
|
|
23
|
+
class File
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Calculates the MD5 checksum of a file.
|
|
27
|
+
#
|
|
28
|
+
# @param [String] path
|
|
29
|
+
# The path to the file.
|
|
30
|
+
#
|
|
31
|
+
# @return [String]
|
|
32
|
+
# The MD5 checksum of the file.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# File.md5('data.txt')
|
|
36
|
+
# # => "5d41402abc4b2a76b9719d911017c592"
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
#
|
|
40
|
+
def self.md5(path)
|
|
41
|
+
Digest::MD5.file(path).hexdigest
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# Calculates the SHA1 checksum of a file.
|
|
46
|
+
#
|
|
47
|
+
# @param [String] path
|
|
48
|
+
# The path to the file.
|
|
49
|
+
#
|
|
50
|
+
# @return [String]
|
|
51
|
+
# The SHA1 checksum of the file.
|
|
52
|
+
#
|
|
53
|
+
# @example
|
|
54
|
+
# File.sha1('data.txt')
|
|
55
|
+
# # => "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d"
|
|
56
|
+
#
|
|
57
|
+
# @api public
|
|
58
|
+
#
|
|
59
|
+
def self.sha1(path)
|
|
60
|
+
Digest::SHA1.file(path).hexdigest
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
# @see File.sha1
|
|
65
|
+
#
|
|
66
|
+
# @api public
|
|
67
|
+
#
|
|
68
|
+
def self.sha128(path)
|
|
69
|
+
File.sha1(path)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# Calculates the SHA256 checksum of a file.
|
|
74
|
+
#
|
|
75
|
+
# @param [String] path
|
|
76
|
+
# The path to the file.
|
|
77
|
+
#
|
|
78
|
+
# @return [String]
|
|
79
|
+
# The SHA256 checksum of the file.
|
|
80
|
+
#
|
|
81
|
+
# @example
|
|
82
|
+
# File.sha256('data.txt')
|
|
83
|
+
# # => "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
|
|
84
|
+
#
|
|
85
|
+
# @api public
|
|
86
|
+
#
|
|
87
|
+
def self.sha256(path)
|
|
88
|
+
Digest::SHA256.file(path).hexdigest
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#
|
|
92
|
+
# @see File.sha256
|
|
93
|
+
#
|
|
94
|
+
# @api public
|
|
95
|
+
#
|
|
96
|
+
def self.sha2(path)
|
|
97
|
+
File.sha256(path)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
#
|
|
101
|
+
# Calculates the SHA512 checksum of a file.
|
|
102
|
+
#
|
|
103
|
+
# @param [String] path
|
|
104
|
+
# The path to the file.
|
|
105
|
+
#
|
|
106
|
+
# @return [String]
|
|
107
|
+
# The SHA512 checksum of the file.
|
|
108
|
+
#
|
|
109
|
+
# @example
|
|
110
|
+
# File.sha512('data.txt')
|
|
111
|
+
# # => "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
|
|
112
|
+
#
|
|
113
|
+
# @api public
|
|
114
|
+
#
|
|
115
|
+
def self.sha512(path)
|
|
116
|
+
Digest::SHA512.file(path).hexdigest
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#
|
|
120
|
+
# @see File.sha512
|
|
121
|
+
#
|
|
122
|
+
# @api public
|
|
123
|
+
#
|
|
124
|
+
def self.sha5(path)
|
|
125
|
+
File.sha512(path)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
#
|
|
129
|
+
# Calculates the RMD160 checksum for the File.
|
|
130
|
+
#
|
|
131
|
+
# @param [String] path
|
|
132
|
+
# The path to the file.
|
|
133
|
+
#
|
|
134
|
+
# @return [String]
|
|
135
|
+
# The RMD160 checksum of the File.
|
|
136
|
+
#
|
|
137
|
+
# @example
|
|
138
|
+
# File.rmd160('data.txt')
|
|
139
|
+
# # => "108f07b8382412612c048d07d13f814118445acd"
|
|
140
|
+
#
|
|
141
|
+
# @api public
|
|
142
|
+
#
|
|
143
|
+
# @since 0.6.0
|
|
144
|
+
#
|
|
145
|
+
# @note JRuby and TruffleRuby do not yet support RMD160.
|
|
146
|
+
#
|
|
147
|
+
def self.rmd160(path)
|
|
148
|
+
Digest::RMD160.file(path).hexdigest
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
#
|
|
152
|
+
# Calculates the HMAC for a file.
|
|
153
|
+
#
|
|
154
|
+
# @param [String] path
|
|
155
|
+
# The path to the file.
|
|
156
|
+
#
|
|
157
|
+
# @param [String] key
|
|
158
|
+
# The secret key for the HMAC.
|
|
159
|
+
#
|
|
160
|
+
# @param [Symbol] digest
|
|
161
|
+
# The digest algorithm for the HMAC.
|
|
162
|
+
#
|
|
163
|
+
# @return [String]
|
|
164
|
+
# The hex-encoded HMAC for the String.
|
|
165
|
+
#
|
|
166
|
+
# @see Ronin::Support::Crypt.hmac
|
|
167
|
+
#
|
|
168
|
+
# @since 0.6.0
|
|
169
|
+
#
|
|
170
|
+
# @api public
|
|
171
|
+
#
|
|
172
|
+
def self.hmac(path, key: , digest: :sha1)
|
|
173
|
+
hmac = Ronin::Support::Crypto.hmac(key: key, digest: digest)
|
|
174
|
+
|
|
175
|
+
open(path,'rb') do |file|
|
|
176
|
+
until file.eof?
|
|
177
|
+
hmac.update(file.read(16384))
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
return hmac.hexdigest
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
#
|
|
185
|
+
# Encrypts the file.
|
|
186
|
+
#
|
|
187
|
+
# @param [String] path
|
|
188
|
+
# The path to the file.
|
|
189
|
+
#
|
|
190
|
+
# @param [String] cipher
|
|
191
|
+
# The cipher to use.
|
|
192
|
+
#
|
|
193
|
+
# @param [Integer] block_size
|
|
194
|
+
# Reads data from the file in chunks of the given block size.
|
|
195
|
+
#
|
|
196
|
+
# @param [String, #<<, nil] output
|
|
197
|
+
# The optional output buffer to append the encrypted data to.
|
|
198
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
199
|
+
#
|
|
200
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
201
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.cipher}.
|
|
202
|
+
#
|
|
203
|
+
# @option kwargs [Symbol] :hash (:sha1)
|
|
204
|
+
# The algorithm to hash the `:password`.
|
|
205
|
+
#
|
|
206
|
+
# @option kwargs [String] :key
|
|
207
|
+
# The secret key to use.
|
|
208
|
+
#
|
|
209
|
+
# @option kwargs [String] :password
|
|
210
|
+
# The password for the cipher.
|
|
211
|
+
#
|
|
212
|
+
# @option kwargs [String] :iv
|
|
213
|
+
# The optional Initial Vector (IV).
|
|
214
|
+
#
|
|
215
|
+
# @option kwargs [Integer] :padding
|
|
216
|
+
# Sets the padding for the cipher.
|
|
217
|
+
#
|
|
218
|
+
# @yield [block]
|
|
219
|
+
# If a block is given, each encrypted block will be passed to it.
|
|
220
|
+
#
|
|
221
|
+
# @yieldparam [String] block
|
|
222
|
+
# An encrypted block from the file.
|
|
223
|
+
#
|
|
224
|
+
# @return [String]
|
|
225
|
+
# The encrypted data.
|
|
226
|
+
#
|
|
227
|
+
# @see http://rubydoc.info/stdlib/openssl/OpenSSL/Cipher
|
|
228
|
+
#
|
|
229
|
+
# @since 0.6.0
|
|
230
|
+
#
|
|
231
|
+
# @api public
|
|
232
|
+
#
|
|
233
|
+
def self.encrypt(path,cipher, block_size: 16384, output: nil, **kwargs,&block)
|
|
234
|
+
cipher = Ronin::Support::Crypto.cipher(cipher, direction: :encrypt,
|
|
235
|
+
**kwargs)
|
|
236
|
+
file = File.open(path,'rb')
|
|
237
|
+
|
|
238
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
#
|
|
242
|
+
# Decrypts the file.
|
|
243
|
+
#
|
|
244
|
+
# @param [String] path
|
|
245
|
+
# The path to the file.
|
|
246
|
+
#
|
|
247
|
+
# @param [String] cipher
|
|
248
|
+
# The cipher to use.
|
|
249
|
+
#
|
|
250
|
+
# @param [Integer] block_size
|
|
251
|
+
# Reads data from the file in chunks of the given block size.
|
|
252
|
+
#
|
|
253
|
+
# @param [String, #<<, nil] output
|
|
254
|
+
# The optional output buffer to append the decrypted data to.
|
|
255
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
256
|
+
#
|
|
257
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
258
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.cipher}.
|
|
259
|
+
#
|
|
260
|
+
# @option kwargs [Symbol] :hash (:sha1)
|
|
261
|
+
# The algorithm to hash the `:password`.
|
|
262
|
+
#
|
|
263
|
+
# @option kwargs [String] :key
|
|
264
|
+
# The secret key to use.
|
|
265
|
+
#
|
|
266
|
+
# @option kwargs [String] :password
|
|
267
|
+
# The password for the cipher.
|
|
268
|
+
#
|
|
269
|
+
# @option kwargs [String] :iv
|
|
270
|
+
# The optional Initial Vector (IV).
|
|
271
|
+
#
|
|
272
|
+
# @option kwargs [Integer] :padding
|
|
273
|
+
# Sets the padding for the cipher.
|
|
274
|
+
#
|
|
275
|
+
# @yield [block]
|
|
276
|
+
# If a block is given, each encrypted block will be passed to it.
|
|
277
|
+
#
|
|
278
|
+
# @yieldparam [String] block
|
|
279
|
+
# An encrypted block from the file.
|
|
280
|
+
#
|
|
281
|
+
# @return [String]
|
|
282
|
+
# The decrypted data.
|
|
283
|
+
#
|
|
284
|
+
# @see http://rubydoc.info/stdlib/openssl/OpenSSL/Cipher
|
|
285
|
+
#
|
|
286
|
+
# @since 0.6.0
|
|
287
|
+
#
|
|
288
|
+
# @api public
|
|
289
|
+
#
|
|
290
|
+
def self.decrypt(path,cipher, block_size: 16384, output: nil, **kwargs,&block)
|
|
291
|
+
cipher = Ronin::Support::Crypto.cipher(cipher, direction: :decrypt,
|
|
292
|
+
**kwargs)
|
|
293
|
+
file = File.open(path,'rb')
|
|
294
|
+
|
|
295
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
#
|
|
299
|
+
# Encrypts the file using AES.
|
|
300
|
+
#
|
|
301
|
+
# @param [String] path
|
|
302
|
+
# The path to the file.
|
|
303
|
+
#
|
|
304
|
+
# @param [Integer] block_size
|
|
305
|
+
# Reads data from the file in chunks of the given block size.
|
|
306
|
+
#
|
|
307
|
+
# @param [String, #<<, nil] output
|
|
308
|
+
# The optional output buffer to append the AES encrypted data to.
|
|
309
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
310
|
+
#
|
|
311
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
312
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes_cipher}.
|
|
313
|
+
#
|
|
314
|
+
# @option kwargs [Integer] :key_size
|
|
315
|
+
# The desired key size in bits.
|
|
316
|
+
#
|
|
317
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
318
|
+
# The desired AES cipher mode.
|
|
319
|
+
#
|
|
320
|
+
# @option kwargs [Symbol] :hash (:sha256)
|
|
321
|
+
# The algorithm to hash the `:password`.
|
|
322
|
+
#
|
|
323
|
+
# @option kwargs [String] :key
|
|
324
|
+
# The secret key to use.
|
|
325
|
+
#
|
|
326
|
+
# @option kwargs [String] :password
|
|
327
|
+
# The password for the cipher.
|
|
328
|
+
#
|
|
329
|
+
# @option kwargs [String] :iv
|
|
330
|
+
# The optional Initial Vector (IV).
|
|
331
|
+
#
|
|
332
|
+
# @option kwargs [Integer] :padding
|
|
333
|
+
# Sets the padding for the cipher.
|
|
334
|
+
#
|
|
335
|
+
# @return [String]
|
|
336
|
+
# The encrypted data.
|
|
337
|
+
#
|
|
338
|
+
# @raise [ArgumentError]
|
|
339
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
340
|
+
#
|
|
341
|
+
# @since 1.0.0
|
|
342
|
+
#
|
|
343
|
+
def self.aes_encrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
344
|
+
cipher = Ronin::Support::Crypto.aes_cipher(direction: :encrypt, **kwargs)
|
|
345
|
+
file = File.open(path,'rb')
|
|
346
|
+
|
|
347
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
#
|
|
351
|
+
# Decrypts the file using AES.
|
|
352
|
+
#
|
|
353
|
+
# @param [String] path
|
|
354
|
+
# The path to the file.
|
|
355
|
+
#
|
|
356
|
+
# @param [Integer] block_size
|
|
357
|
+
# Reads data from the file in chunks of the given block size.
|
|
358
|
+
#
|
|
359
|
+
# @param [String, #<<, nil] output
|
|
360
|
+
# The optional output buffer to append the AES decrypted data to.
|
|
361
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
362
|
+
#
|
|
363
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
364
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes_cipher}.
|
|
365
|
+
#
|
|
366
|
+
# @option kwargs [Integer] :key_size
|
|
367
|
+
# The desired key size in bits.
|
|
368
|
+
#
|
|
369
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
370
|
+
# The desired AES cipher mode.
|
|
371
|
+
#
|
|
372
|
+
# @option kwargs [Symbol] :hash (:sha256)
|
|
373
|
+
# The algorithm to hash the `:password`.
|
|
374
|
+
#
|
|
375
|
+
# @option kwargs [String] :key
|
|
376
|
+
# The secret key to use.
|
|
377
|
+
#
|
|
378
|
+
# @option kwargs [String] :password
|
|
379
|
+
# The password for the cipher.
|
|
380
|
+
#
|
|
381
|
+
# @option kwargs [String] :iv
|
|
382
|
+
# The optional Initial Vector (IV).
|
|
383
|
+
#
|
|
384
|
+
# @option kwargs [Integer] :padding
|
|
385
|
+
# Sets the padding for the cipher.
|
|
386
|
+
#
|
|
387
|
+
# @return [String]
|
|
388
|
+
# The encrypted data.
|
|
389
|
+
#
|
|
390
|
+
# @raise [ArgumentError]
|
|
391
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
392
|
+
#
|
|
393
|
+
# @since 1.0.0
|
|
394
|
+
#
|
|
395
|
+
def self.aes_decrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
396
|
+
cipher = Ronin::Support::Crypto.aes_cipher(direction: :decrypt, **kwargs)
|
|
397
|
+
file = File.open(path,'rb')
|
|
398
|
+
|
|
399
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
#
|
|
403
|
+
# Encrypts the file using AES-128.
|
|
404
|
+
#
|
|
405
|
+
# @param [String] path
|
|
406
|
+
# The path to the file.
|
|
407
|
+
#
|
|
408
|
+
# @param [Integer] block_size
|
|
409
|
+
# Reads data from the file in chunks of the given block size.
|
|
410
|
+
#
|
|
411
|
+
# @param [String, #<<, nil] output
|
|
412
|
+
# The optional output buffer to append the AES encrypted data to.
|
|
413
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
414
|
+
#
|
|
415
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
416
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes128_cipher}.
|
|
417
|
+
#
|
|
418
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
419
|
+
# The desired AES cipher mode.
|
|
420
|
+
#
|
|
421
|
+
# @option kwargs [Symbol] :hash (:md5)
|
|
422
|
+
# The algorithm to hash the `:password`.
|
|
423
|
+
#
|
|
424
|
+
# @option kwargs [String] :key
|
|
425
|
+
# The secret key to use.
|
|
426
|
+
#
|
|
427
|
+
# @option kwargs [String] :password
|
|
428
|
+
# The password for the cipher.
|
|
429
|
+
#
|
|
430
|
+
# @option kwargs [String] :iv
|
|
431
|
+
# The optional Initial Vector (IV).
|
|
432
|
+
#
|
|
433
|
+
# @option kwargs [Integer] :padding
|
|
434
|
+
# Sets the padding for the cipher.
|
|
435
|
+
#
|
|
436
|
+
# @return [String]
|
|
437
|
+
# The encrypted data.
|
|
438
|
+
#
|
|
439
|
+
# @raise [ArgumentError]
|
|
440
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
441
|
+
#
|
|
442
|
+
# @since 1.0.0
|
|
443
|
+
#
|
|
444
|
+
def self.aes128_encrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
445
|
+
cipher = Ronin::Support::Crypto.aes128_cipher(direction: :encrypt, **kwargs)
|
|
446
|
+
file = File.open(path,'rb')
|
|
447
|
+
|
|
448
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
#
|
|
452
|
+
# Decrypts the file using AES-128.
|
|
453
|
+
#
|
|
454
|
+
# @param [String] path
|
|
455
|
+
# The path to the file.
|
|
456
|
+
#
|
|
457
|
+
# @param [Integer] block_size
|
|
458
|
+
# Reads data from the file in chunks of the given block size.
|
|
459
|
+
#
|
|
460
|
+
# @param [String, #<<, nil] output
|
|
461
|
+
# The optional output buffer to append the AES decrypted data to.
|
|
462
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
463
|
+
#
|
|
464
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
465
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes128_cipher}.
|
|
466
|
+
#
|
|
467
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
468
|
+
# The desired AES cipher mode.
|
|
469
|
+
#
|
|
470
|
+
# @option kwargs [Symbol] :hash (:md5)
|
|
471
|
+
# The algorithm to hash the `:password`.
|
|
472
|
+
#
|
|
473
|
+
# @option kwargs [String] :key
|
|
474
|
+
# The secret key to use.
|
|
475
|
+
#
|
|
476
|
+
# @option kwargs [String] :password
|
|
477
|
+
# The password for the cipher.
|
|
478
|
+
#
|
|
479
|
+
# @option kwargs [String] :iv
|
|
480
|
+
# The optional Initial Vector (IV).
|
|
481
|
+
#
|
|
482
|
+
# @option kwargs [Integer] :padding
|
|
483
|
+
# Sets the padding for the cipher.
|
|
484
|
+
#
|
|
485
|
+
# @return [String]
|
|
486
|
+
# The encrypted data.
|
|
487
|
+
#
|
|
488
|
+
# @raise [ArgumentError]
|
|
489
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
490
|
+
#
|
|
491
|
+
# @since 1.0.0
|
|
492
|
+
#
|
|
493
|
+
def self.aes128_decrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
494
|
+
cipher = Ronin::Support::Crypto.aes128_cipher(direction: :decrypt, **kwargs)
|
|
495
|
+
file = File.open(path,'rb')
|
|
496
|
+
|
|
497
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
#
|
|
501
|
+
# Encrypts the file using AES-256.
|
|
502
|
+
#
|
|
503
|
+
# @param [String] path
|
|
504
|
+
# The path to the file.
|
|
505
|
+
#
|
|
506
|
+
# @param [Integer] block_size
|
|
507
|
+
# Reads data from the file in chunks of the given block size.
|
|
508
|
+
#
|
|
509
|
+
# @param [String, #<<, nil] output
|
|
510
|
+
# The optional output buffer to append the AES encrypted data to.
|
|
511
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
512
|
+
#
|
|
513
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
514
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes256_cipher}.
|
|
515
|
+
#
|
|
516
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
517
|
+
# The desired AES cipher mode.
|
|
518
|
+
#
|
|
519
|
+
# @option kwargs [Symbol] :hash (:sha256)
|
|
520
|
+
# The algorithm to hash the `:password`.
|
|
521
|
+
#
|
|
522
|
+
# @option kwargs [String] :key
|
|
523
|
+
# The secret key to use.
|
|
524
|
+
#
|
|
525
|
+
# @option kwargs [String] :password
|
|
526
|
+
# The password for the cipher.
|
|
527
|
+
#
|
|
528
|
+
# @option kwargs [String] :iv
|
|
529
|
+
# The optional Initial Vector (IV).
|
|
530
|
+
#
|
|
531
|
+
# @option kwargs [Integer] :padding
|
|
532
|
+
# Sets the padding for the cipher.
|
|
533
|
+
#
|
|
534
|
+
# @return [String]
|
|
535
|
+
# The encrypted data.
|
|
536
|
+
#
|
|
537
|
+
# @raise [ArgumentError]
|
|
538
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
539
|
+
#
|
|
540
|
+
# @since 1.0.0
|
|
541
|
+
#
|
|
542
|
+
def self.aes256_encrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
543
|
+
cipher = Ronin::Support::Crypto.aes256_cipher(direction: :encrypt, **kwargs)
|
|
544
|
+
file = File.open(path,'rb')
|
|
545
|
+
|
|
546
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
#
|
|
550
|
+
# Decrypts the file using AES-256.
|
|
551
|
+
#
|
|
552
|
+
# @param [String] path
|
|
553
|
+
# The path to the file.
|
|
554
|
+
#
|
|
555
|
+
# @param [Integer] block_size
|
|
556
|
+
# Reads data from the file in chunks of the given block size.
|
|
557
|
+
#
|
|
558
|
+
# @param [String, #<<, nil] output
|
|
559
|
+
# The optional output buffer to append the AES decrypted data to.
|
|
560
|
+
# Defaults to an empty ASCII 8bit encoded String.
|
|
561
|
+
#
|
|
562
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
563
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.aes256_cipher}.
|
|
564
|
+
#
|
|
565
|
+
# @option kwargs [:cbc, :cfb, :ofb, :ctr, Symbol] mode (:cbc)
|
|
566
|
+
# The desired AES cipher mode.
|
|
567
|
+
#
|
|
568
|
+
# @option kwargs [Symbol] :hash (:sha256)
|
|
569
|
+
# The algorithm to hash the `:password`.
|
|
570
|
+
#
|
|
571
|
+
# @option kwargs [String] :key
|
|
572
|
+
# The secret key to use.
|
|
573
|
+
#
|
|
574
|
+
# @option kwargs [String] :password
|
|
575
|
+
# The password for the cipher.
|
|
576
|
+
#
|
|
577
|
+
# @option kwargs [String] :iv
|
|
578
|
+
# The optional Initial Vector (IV).
|
|
579
|
+
#
|
|
580
|
+
# @option kwargs [Integer] :padding
|
|
581
|
+
# Sets the padding for the cipher.
|
|
582
|
+
#
|
|
583
|
+
# @return [String]
|
|
584
|
+
# The encrypted data.
|
|
585
|
+
#
|
|
586
|
+
# @raise [ArgumentError]
|
|
587
|
+
# Either the the `key:` or `password:` keyword argument must be given.
|
|
588
|
+
#
|
|
589
|
+
# @since 1.0.0
|
|
590
|
+
#
|
|
591
|
+
def self.aes256_decrypt(path, block_size: 16384, output: nil, **kwargs,&block)
|
|
592
|
+
cipher = Ronin::Support::Crypto.aes256_cipher(direction: :decrypt, **kwargs)
|
|
593
|
+
file = File.open(path,'rb')
|
|
594
|
+
|
|
595
|
+
return cipher.stream(file, block_size: block_size, output: output,&block)
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
#
|
|
599
|
+
# Encrypts the file using the given RSA key.
|
|
600
|
+
#
|
|
601
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
602
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.rsa_encrypt}.
|
|
603
|
+
#
|
|
604
|
+
# @option kwargs [String, nil] :key
|
|
605
|
+
# The PEM or DER encoded RSA key string.
|
|
606
|
+
#
|
|
607
|
+
# @option kwargs [String, nil] :key_file
|
|
608
|
+
# The path to the PEM or DER encoded RSA key file.
|
|
609
|
+
#
|
|
610
|
+
# @option kwargs [String, nil] :key_password
|
|
611
|
+
# The optional password to decrypt the encrypted RSA key.
|
|
612
|
+
#
|
|
613
|
+
# @option kwargs [:pkcs1_oaep, :pkcs1, :sslv23,
|
|
614
|
+
# nil, false] :padding (:pkcs1)
|
|
615
|
+
# Optional padding mode. `nil` and `false` will disable padding.
|
|
616
|
+
#
|
|
617
|
+
# @return [String]
|
|
618
|
+
# The encrypted data.
|
|
619
|
+
#
|
|
620
|
+
# @raise [ArgumentError]
|
|
621
|
+
# Either the `key:` or `key_file:` keyword argument must be given.
|
|
622
|
+
#
|
|
623
|
+
# @since 1.0.0
|
|
624
|
+
#
|
|
625
|
+
def self.rsa_encrypt(path,**kwargs)
|
|
626
|
+
Ronin::Support::Crypto.rsa_encrypt(File.binread(path),**kwargs)
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
#
|
|
630
|
+
# Decrypts the file using the given RSA key.
|
|
631
|
+
#
|
|
632
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
633
|
+
# Additional keyword arguments for {Ronin::Support::Crypto.rsa_decrypt}.
|
|
634
|
+
#
|
|
635
|
+
# @option kwargs [String, nil] :key
|
|
636
|
+
# The PEM or DER encoded RSA key string.
|
|
637
|
+
#
|
|
638
|
+
# @option kwargs [String, nil] :key_file
|
|
639
|
+
# The path to the PEM or DER encoded RSA key file.
|
|
640
|
+
#
|
|
641
|
+
# @option kwargs [String, nil] :key_password
|
|
642
|
+
# The optional password to decrypt the encrypted RSA key.
|
|
643
|
+
#
|
|
644
|
+
# @option kwargs [:pkcs1_oaep, :pkcs1, :sslv23,
|
|
645
|
+
# nil, false] :padding (:pkcs1)
|
|
646
|
+
# Optional padding mode. `nil` and `false` will disable padding.
|
|
647
|
+
#
|
|
648
|
+
# @return [String]
|
|
649
|
+
# The decrypted data.
|
|
650
|
+
#
|
|
651
|
+
# @raise [ArgumentError]
|
|
652
|
+
# Either the `key:` or `key_file:` keyword argument must be given.
|
|
653
|
+
#
|
|
654
|
+
# @since 1.0.0
|
|
655
|
+
#
|
|
656
|
+
def self.rsa_decrypt(path,**kwargs)
|
|
657
|
+
Ronin::Support::Crypto.rsa_decrypt(File.binread(path),**kwargs)
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
end
|