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.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.gitignore +7 -6
  5. data/.mailmap +1 -0
  6. data/.ruby-version +1 -0
  7. data/.yardopts +1 -2
  8. data/ChangeLog.md +533 -137
  9. data/Gemfile +20 -20
  10. data/README.md +137 -61
  11. data/Rakefile +29 -10
  12. data/data/text/homoglyphs/ascii.txt +8 -0
  13. data/data/text/homoglyphs/cyrillic.txt +33 -0
  14. data/data/text/homoglyphs/full_width.txt +81 -0
  15. data/data/text/homoglyphs/greek.txt +21 -0
  16. data/data/text/homoglyphs/latin_numbers.txt +14 -0
  17. data/data/text/homoglyphs/punctuation.txt +7 -0
  18. data/data/text/patterns/network/public_suffix.rb.erb +44 -0
  19. data/examples/ssl_proxy.rb +38 -0
  20. data/examples/tcp_proxy.rb +41 -0
  21. data/gemspec.yml +25 -15
  22. data/lib/ronin/support/archive/core_ext/file.rb +118 -0
  23. data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
  24. data/lib/ronin/support/archive/mixin.rb +213 -0
  25. data/lib/ronin/support/archive/tar/reader.rb +135 -0
  26. data/lib/ronin/support/archive/tar/writer.rb +197 -0
  27. data/lib/ronin/support/archive/tar.rb +155 -0
  28. data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
  29. data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
  30. data/lib/ronin/support/archive/zip/reader.rb +273 -0
  31. data/lib/ronin/support/archive/zip/writer.rb +175 -0
  32. data/lib/ronin/support/archive/zip.rb +105 -0
  33. data/lib/ronin/support/archive.rb +211 -0
  34. data/lib/ronin/support/binary/array.rb +255 -0
  35. data/lib/ronin/support/binary/bit_flip.rb +147 -0
  36. data/lib/ronin/support/binary/buffer.rb +2027 -0
  37. data/lib/ronin/support/binary/byte_slice.rb +324 -0
  38. data/lib/ronin/support/binary/core_ext/array.rb +75 -0
  39. data/lib/ronin/support/binary/core_ext/float.rb +80 -0
  40. data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
  41. data/lib/ronin/support/binary/core_ext/io.rb +38 -0
  42. data/lib/ronin/support/binary/core_ext/string.rb +115 -0
  43. data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
  44. data/lib/ronin/support/binary/cstring.rb +259 -0
  45. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
  46. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
  47. data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
  48. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
  49. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
  50. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
  51. data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
  52. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
  53. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
  54. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
  55. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
  56. data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
  57. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
  58. data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
  59. data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
  60. data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
  61. data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
  62. data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
  63. data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
  64. data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
  65. data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
  66. data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
  67. data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
  68. data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
  69. data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
  70. data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
  71. data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
  72. data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
  73. data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
  74. data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
  75. data/lib/ronin/support/binary/ctypes/native.rb +205 -0
  76. data/lib/ronin/support/binary/ctypes/network.rb +29 -0
  77. data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
  78. data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
  79. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
  80. data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
  81. data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
  82. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
  83. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
  84. data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
  85. data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
  86. data/lib/ronin/support/binary/ctypes/os.rb +125 -0
  87. data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
  88. data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
  89. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
  90. data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
  91. data/lib/ronin/support/binary/ctypes/type.rb +193 -0
  92. data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
  93. data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
  94. data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
  95. data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
  96. data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
  97. data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
  98. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
  99. data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
  100. data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
  101. data/lib/ronin/support/binary/ctypes.rb +462 -0
  102. data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
  103. data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
  104. data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
  105. data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
  106. data/lib/ronin/support/binary/hexdump.rb +20 -0
  107. data/lib/ronin/support/binary/memory.rb +268 -0
  108. data/lib/ronin/support/binary/packet.rb +33 -0
  109. data/lib/ronin/support/binary/stack.rb +256 -0
  110. data/lib/ronin/support/binary/stream/methods.rb +1755 -0
  111. data/lib/ronin/support/binary/stream.rb +151 -0
  112. data/lib/ronin/support/binary/struct/member.rb +86 -0
  113. data/lib/ronin/support/binary/struct.rb +830 -0
  114. data/lib/ronin/support/binary/template.rb +284 -0
  115. data/lib/ronin/support/binary/union.rb +162 -0
  116. data/lib/ronin/support/binary.rb +26 -0
  117. data/lib/ronin/support/cli/ansi.rb +330 -0
  118. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
  119. data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
  120. data/lib/ronin/support/cli/io_shell.rb +161 -0
  121. data/lib/ronin/support/cli/printing.rb +216 -0
  122. data/lib/ronin/support/cli.rb +20 -0
  123. data/lib/ronin/support/compression/core_ext/file.rb +70 -0
  124. data/lib/ronin/support/compression/core_ext/string.rb +101 -0
  125. data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
  126. data/lib/ronin/support/compression/gzip/reader.rb +70 -0
  127. data/lib/ronin/support/compression/gzip/writer.rb +74 -0
  128. data/lib/ronin/support/compression/gzip.rb +105 -0
  129. data/lib/ronin/support/compression/mixin.rb +180 -0
  130. data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
  131. data/lib/ronin/support/compression.rb +174 -0
  132. data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
  133. data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
  134. data/lib/ronin/support/core_ext/integer.rb +37 -0
  135. data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
  136. data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
  137. data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
  138. data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
  139. data/lib/ronin/support/core_ext.rb +33 -0
  140. data/lib/ronin/support/crypto/cert.rb +522 -0
  141. data/lib/ronin/support/crypto/cert_chain.rb +204 -0
  142. data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
  143. data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
  144. data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
  145. data/lib/ronin/support/crypto/cipher.rb +194 -0
  146. data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
  147. data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
  148. data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
  149. data/lib/ronin/support/crypto/hmac.rb +48 -0
  150. data/lib/ronin/support/crypto/key/dh.rb +122 -0
  151. data/lib/ronin/support/crypto/key/dsa.rb +103 -0
  152. data/lib/ronin/support/crypto/key/ec.rb +99 -0
  153. data/lib/ronin/support/crypto/key/methods.rb +163 -0
  154. data/lib/ronin/support/crypto/key/rsa.rb +169 -0
  155. data/lib/ronin/support/crypto/key.rb +105 -0
  156. data/lib/ronin/support/crypto/mixin.rb +620 -0
  157. data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
  158. data/lib/ronin/support/crypto.rb +779 -0
  159. data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
  160. data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
  161. data/lib/ronin/support/encoding/base16.rb +82 -0
  162. data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
  163. data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
  164. data/lib/ronin/support/encoding/base32.rb +164 -0
  165. data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
  166. data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
  167. data/lib/ronin/support/encoding/base64.rb +78 -0
  168. data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
  169. data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
  170. data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
  171. data/lib/ronin/support/encoding/c.rb +277 -0
  172. data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
  173. data/lib/ronin/support/encoding/core_ext.rb +33 -0
  174. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
  175. data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
  176. data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
  177. data/lib/ronin/support/encoding/hex.rb +248 -0
  178. data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
  179. data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
  180. data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
  181. data/lib/ronin/support/encoding/html.rb +233 -0
  182. data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
  183. data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
  184. data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
  185. data/lib/ronin/support/encoding/http.rb +241 -0
  186. data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
  187. data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
  188. data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
  189. data/lib/ronin/support/encoding/js.rb +279 -0
  190. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
  191. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
  192. data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
  193. data/lib/ronin/support/encoding/powershell.rb +297 -0
  194. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
  195. data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
  196. data/lib/ronin/support/encoding/punycode.rb +76 -0
  197. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
  198. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
  199. data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
  200. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
  201. data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
  202. data/lib/ronin/support/encoding/ruby.rb +235 -0
  203. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
  204. data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
  205. data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
  206. data/lib/ronin/support/encoding/shell.rb +293 -0
  207. data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
  208. data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
  209. data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
  210. data/lib/ronin/support/encoding/sql.rb +124 -0
  211. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
  212. data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
  213. data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
  214. data/lib/ronin/support/encoding/uri.rb +424 -0
  215. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
  216. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
  217. data/lib/ronin/support/encoding/uuencoding.rb +70 -0
  218. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
  219. data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
  220. data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
  221. data/lib/ronin/support/encoding/xml.rb +328 -0
  222. data/lib/ronin/support/encoding.rb +46 -0
  223. data/lib/ronin/support/home.rb +88 -0
  224. data/lib/ronin/support/mixin.rb +42 -0
  225. data/lib/ronin/support/network/asn/dns_record.rb +112 -0
  226. data/lib/ronin/support/network/asn/list.rb +269 -0
  227. data/lib/ronin/support/network/asn/record.rb +164 -0
  228. data/lib/ronin/support/network/asn/record_set.rb +226 -0
  229. data/lib/ronin/support/network/asn.rb +88 -0
  230. data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
  231. data/lib/ronin/support/network/dns/idn.rb +38 -0
  232. data/lib/ronin/support/network/dns/mixin.rb +941 -0
  233. data/lib/ronin/support/network/dns/resolver.rb +707 -0
  234. data/lib/ronin/support/network/dns.rb +1109 -0
  235. data/lib/ronin/support/network/domain.rb +70 -0
  236. data/lib/ronin/support/network/email_address.rb +574 -0
  237. data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
  238. data/lib/ronin/support/network/exceptions.rb +43 -0
  239. data/lib/ronin/support/network/ftp/mixin.rb +106 -0
  240. data/lib/ronin/support/network/host.rb +1473 -0
  241. data/lib/ronin/support/network/http/cookie.rb +245 -0
  242. data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
  243. data/lib/ronin/support/network/http/core_ext.rb +19 -0
  244. data/lib/ronin/support/network/http/mixin.rb +890 -0
  245. data/lib/ronin/support/network/http/request.rb +215 -0
  246. data/lib/ronin/support/network/http/set_cookie.rb +210 -0
  247. data/lib/ronin/support/network/http/user_agents.rb +115 -0
  248. data/lib/ronin/support/network/http.rb +2582 -0
  249. data/lib/ronin/support/network/imap/mixin.rb +133 -0
  250. data/lib/ronin/support/network/ip/mixin.rb +114 -0
  251. data/lib/ronin/support/network/ip.rb +540 -0
  252. data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
  253. data/lib/ronin/support/network/ip_range/glob.rb +309 -0
  254. data/lib/ronin/support/network/ip_range/range.rb +249 -0
  255. data/lib/ronin/support/network/ip_range.rb +284 -0
  256. data/lib/ronin/support/network/mixin.rb +58 -0
  257. data/lib/ronin/support/network/packet.rb +27 -0
  258. data/lib/ronin/support/network/pop3/mixin.rb +113 -0
  259. data/lib/ronin/support/network/proxy.rb +602 -0
  260. data/lib/ronin/support/network/public_suffix/list.rb +339 -0
  261. data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
  262. data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
  263. data/lib/ronin/support/network/public_suffix.rb +41 -0
  264. data/lib/ronin/support/network/smtp/email.rb +190 -0
  265. data/lib/ronin/support/network/smtp/mixin.rb +290 -0
  266. data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
  267. data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
  268. data/lib/ronin/support/network/ssl/local_key.rb +84 -0
  269. data/lib/ronin/support/network/ssl/mixin.rb +740 -0
  270. data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
  271. data/lib/ronin/support/network/ssl/proxy.rb +296 -0
  272. data/lib/ronin/support/network/ssl.rb +173 -0
  273. data/lib/ronin/support/network/tcp/mixin.rb +400 -0
  274. data/lib/ronin/support/network/tcp/proxy.rb +435 -0
  275. data/lib/ronin/support/network/tcp.rb +443 -0
  276. data/lib/ronin/support/network/telnet/mixin.rb +150 -0
  277. data/lib/ronin/support/network/telnet.rb +90 -0
  278. data/lib/ronin/support/network/tld/list.rb +266 -0
  279. data/lib/ronin/support/network/tld.rb +41 -0
  280. data/lib/ronin/support/network/tls/mixin.rb +670 -0
  281. data/lib/ronin/support/network/tls/proxy.rb +135 -0
  282. data/lib/ronin/support/network/tls.rb +53 -0
  283. data/lib/ronin/support/network/udp/mixin.rb +389 -0
  284. data/lib/ronin/support/network/udp/proxy.rb +192 -0
  285. data/lib/ronin/support/network/udp.rb +435 -0
  286. data/lib/ronin/support/network/unix/mixin.rb +273 -0
  287. data/lib/ronin/support/network.rb +37 -0
  288. data/lib/ronin/support/path.rb +136 -0
  289. data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
  290. data/lib/ronin/support/text/core_ext/string.rb +46 -0
  291. data/lib/ronin/support/text/core_ext.rb +23 -0
  292. data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
  293. data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
  294. data/lib/ronin/support/text/entropy.rb +66 -0
  295. data/lib/ronin/support/text/erb/mixin.rb +44 -0
  296. data/lib/ronin/support/text/erb.rb +19 -0
  297. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
  298. data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
  299. data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
  300. data/lib/ronin/support/text/homoglyph/table.rb +228 -0
  301. data/lib/ronin/support/text/homoglyph.rb +142 -0
  302. data/lib/ronin/support/text/mixin.rb +31 -0
  303. data/lib/ronin/support/text/patterns/credentials.rb +75 -0
  304. data/lib/ronin/support/text/patterns/crypto.rb +67 -0
  305. data/lib/ronin/support/text/patterns/file_system.rb +93 -0
  306. data/lib/ronin/support/text/patterns/language.rb +37 -0
  307. data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
  308. data/lib/ronin/support/text/patterns/network.rb +140 -0
  309. data/lib/ronin/support/text/patterns/numeric.rb +52 -0
  310. data/lib/ronin/support/text/patterns/pii.rb +105 -0
  311. data/lib/ronin/support/text/patterns/source_code.rb +148 -0
  312. data/lib/ronin/support/text/patterns.rb +25 -0
  313. data/lib/ronin/support/text/random/mixin.rb +437 -0
  314. data/lib/ronin/support/text/random.rb +419 -0
  315. data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
  316. data/lib/ronin/support/text/typo/core_ext.rb +19 -0
  317. data/lib/ronin/support/text/typo/exceptions.rb +28 -0
  318. data/lib/ronin/support/text/typo/generator.rb +161 -0
  319. data/lib/ronin/support/text/typo.rb +260 -0
  320. data/lib/ronin/support/text.rb +26 -0
  321. data/lib/ronin/support/version.rb +6 -7
  322. data/lib/ronin/support.rb +20 -15
  323. data/ronin-support.gemspec +3 -1
  324. metadata +462 -369
  325. data/.gemtest +0 -0
  326. data/lib/ronin/binary/hexdump/parser.rb +0 -403
  327. data/lib/ronin/binary/struct.rb +0 -567
  328. data/lib/ronin/binary/template.rb +0 -454
  329. data/lib/ronin/extensions/ip_addr.rb +0 -217
  330. data/lib/ronin/extensions/meta/object.rb +0 -24
  331. data/lib/ronin/extensions/regexp.rb +0 -157
  332. data/lib/ronin/extensions.rb +0 -29
  333. data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
  334. data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
  335. data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
  336. data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
  337. data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
  338. data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
  339. data/lib/ronin/formatting/extensions/binary.rb +0 -26
  340. data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
  341. data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
  342. data/lib/ronin/formatting/extensions/digest.rb +0 -21
  343. data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
  344. data/lib/ronin/formatting/extensions/html/string.rb +0 -194
  345. data/lib/ronin/formatting/extensions/html.rb +0 -21
  346. data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
  347. data/lib/ronin/formatting/extensions/http/string.rb +0 -110
  348. data/lib/ronin/formatting/extensions/http.rb +0 -21
  349. data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
  350. data/lib/ronin/formatting/extensions/sql.rb +0 -20
  351. data/lib/ronin/formatting/extensions/text/array.rb +0 -137
  352. data/lib/ronin/formatting/extensions/text/string.rb +0 -297
  353. data/lib/ronin/formatting/extensions.rb +0 -24
  354. data/lib/ronin/formatting/text.rb +0 -20
  355. data/lib/ronin/formatting.rb +0 -25
  356. data/lib/ronin/fuzzing/extensions/string.rb +0 -209
  357. data/lib/ronin/fuzzing/fuzzer.rb +0 -110
  358. data/lib/ronin/fuzzing/fuzzing.rb +0 -360
  359. data/lib/ronin/fuzzing/mutator.rb +0 -161
  360. data/lib/ronin/fuzzing/repeater.rb +0 -81
  361. data/lib/ronin/fuzzing/template.rb +0 -133
  362. data/lib/ronin/fuzzing.rb +0 -21
  363. data/lib/ronin/mixin.rb +0 -89
  364. data/lib/ronin/network/dns.rb +0 -201
  365. data/lib/ronin/network/esmtp.rb +0 -113
  366. data/lib/ronin/network/extensions/dns.rb +0 -20
  367. data/lib/ronin/network/extensions/esmtp.rb +0 -20
  368. data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
  369. data/lib/ronin/network/extensions/http.rb +0 -21
  370. data/lib/ronin/network/extensions/imap.rb +0 -20
  371. data/lib/ronin/network/extensions/pop3/net.rb +0 -24
  372. data/lib/ronin/network/extensions/pop3.rb +0 -20
  373. data/lib/ronin/network/extensions/smtp/net.rb +0 -24
  374. data/lib/ronin/network/extensions/ssl/net.rb +0 -24
  375. data/lib/ronin/network/extensions/ssl.rb +0 -20
  376. data/lib/ronin/network/extensions/tcp/net.rb +0 -24
  377. data/lib/ronin/network/extensions/tcp.rb +0 -20
  378. data/lib/ronin/network/extensions/telnet/net.rb +0 -24
  379. data/lib/ronin/network/extensions/telnet.rb +0 -20
  380. data/lib/ronin/network/extensions/udp/net.rb +0 -24
  381. data/lib/ronin/network/extensions/udp.rb +0 -20
  382. data/lib/ronin/network/extensions.rb +0 -29
  383. data/lib/ronin/network/ftp.rb +0 -149
  384. data/lib/ronin/network/http/exceptions.rb +0 -20
  385. data/lib/ronin/network/http/http.rb +0 -1127
  386. data/lib/ronin/network/http/proxy.rb +0 -330
  387. data/lib/ronin/network/http.rb +0 -22
  388. data/lib/ronin/network/imap.rb +0 -158
  389. data/lib/ronin/network/mixins/dns.rb +0 -55
  390. data/lib/ronin/network/mixins/esmtp.rb +0 -164
  391. data/lib/ronin/network/mixins/ftp.rb +0 -155
  392. data/lib/ronin/network/mixins/http.rb +0 -227
  393. data/lib/ronin/network/mixins/imap.rb +0 -156
  394. data/lib/ronin/network/mixins/mixin.rb +0 -58
  395. data/lib/ronin/network/mixins/pop3.rb +0 -149
  396. data/lib/ronin/network/mixins/smtp.rb +0 -159
  397. data/lib/ronin/network/mixins/ssl.rb +0 -148
  398. data/lib/ronin/network/mixins/tcp.rb +0 -368
  399. data/lib/ronin/network/mixins/telnet.rb +0 -208
  400. data/lib/ronin/network/mixins/udp.rb +0 -381
  401. data/lib/ronin/network/mixins/unix.rb +0 -279
  402. data/lib/ronin/network/mixins.rb +0 -29
  403. data/lib/ronin/network/network.rb +0 -45
  404. data/lib/ronin/network/pop3.rb +0 -124
  405. data/lib/ronin/network/proxy.rb +0 -578
  406. data/lib/ronin/network/smtp/email.rb +0 -174
  407. data/lib/ronin/network/smtp/smtp.rb +0 -230
  408. data/lib/ronin/network/smtp.rb +0 -22
  409. data/lib/ronin/network/ssl.rb +0 -186
  410. data/lib/ronin/network/tcp/proxy.rb +0 -417
  411. data/lib/ronin/network/tcp/tcp.rb +0 -443
  412. data/lib/ronin/network/tcp.rb +0 -21
  413. data/lib/ronin/network/telnet.rb +0 -264
  414. data/lib/ronin/network/udp/proxy.rb +0 -191
  415. data/lib/ronin/network/udp/udp.rb +0 -450
  416. data/lib/ronin/network/udp.rb +0 -21
  417. data/lib/ronin/network/unix.rb +0 -286
  418. data/lib/ronin/network.rb +0 -31
  419. data/lib/ronin/path.rb +0 -137
  420. data/lib/ronin/spec/ui/output.rb +0 -22
  421. data/lib/ronin/support/inflector.rb +0 -92
  422. data/lib/ronin/support/support.rb +0 -42
  423. data/lib/ronin/templates/erb.rb +0 -78
  424. data/lib/ronin/templates/template.rb +0 -169
  425. data/lib/ronin/templates.rb +0 -21
  426. data/lib/ronin/ui/output/helpers.rb +0 -296
  427. data/lib/ronin/ui/output/output.rb +0 -146
  428. data/lib/ronin/ui/output/terminal/color.rb +0 -124
  429. data/lib/ronin/ui/output/terminal/raw.rb +0 -103
  430. data/lib/ronin/ui/output/terminal.rb +0 -21
  431. data/lib/ronin/ui/output.rb +0 -21
  432. data/lib/ronin/ui/shell.rb +0 -286
  433. data/lib/ronin/wordlist.rb +0 -287
  434. data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
  435. data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
  436. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
  437. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
  438. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
  439. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
  440. data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
  441. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
  442. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
  443. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
  444. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
  445. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
  446. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
  447. data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
  448. data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
  449. data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
  450. data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
  451. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
  452. data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
  453. data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
  454. data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
  455. data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
  456. data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
  457. data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
  458. data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
  459. data/spec/binary/hexdump/parser_spec.rb +0 -302
  460. data/spec/binary/struct_spec.rb +0 -496
  461. data/spec/binary/template_spec.rb +0 -414
  462. data/spec/extensions/enumerable_spec.rb +0 -24
  463. data/spec/extensions/file_spec.rb +0 -63
  464. data/spec/extensions/ip_addr_spec.rb +0 -203
  465. data/spec/extensions/kernel_spec.rb +0 -30
  466. data/spec/extensions/regexp_spec.rb +0 -482
  467. data/spec/extensions/resolv_spec.rb +0 -18
  468. data/spec/extensions/string_spec.rb +0 -179
  469. data/spec/formatting/binary/array_spec.rb +0 -26
  470. data/spec/formatting/binary/base64_spec.rb +0 -50
  471. data/spec/formatting/binary/float_spec.rb +0 -34
  472. data/spec/formatting/binary/integer_spec.rb +0 -166
  473. data/spec/formatting/binary/string_spec.rb +0 -197
  474. data/spec/formatting/digest/string_spec.rb +0 -82
  475. data/spec/formatting/html/integer_spec.rb +0 -66
  476. data/spec/formatting/html/string_spec.rb +0 -103
  477. data/spec/formatting/http/integer_spec.rb +0 -42
  478. data/spec/formatting/http/string_spec.rb +0 -76
  479. data/spec/formatting/sql/string_spec.rb +0 -75
  480. data/spec/formatting/text/array_spec.rb +0 -105
  481. data/spec/formatting/text/string_spec.rb +0 -162
  482. data/spec/fuzzing/extensions/string_spec.rb +0 -87
  483. data/spec/fuzzing/fuzzer_spec.rb +0 -109
  484. data/spec/fuzzing/fuzzing_spec.rb +0 -24
  485. data/spec/fuzzing/mutator_spec.rb +0 -112
  486. data/spec/fuzzing/repeater_spec.rb +0 -57
  487. data/spec/fuzzing/template_spec.rb +0 -54
  488. data/spec/mixin_spec.rb +0 -53
  489. data/spec/network/dns_spec.rb +0 -201
  490. data/spec/network/ftp_spec.rb +0 -81
  491. data/spec/network/http/http_spec.rb +0 -466
  492. data/spec/network/http/proxy_spec.rb +0 -148
  493. data/spec/network/network_spec.rb +0 -8
  494. data/spec/network/proxy_spec.rb +0 -121
  495. data/spec/network/shared/unix_server.rb +0 -31
  496. data/spec/network/smtp/email_spec.rb +0 -100
  497. data/spec/network/ssl_spec.rb +0 -70
  498. data/spec/network/tcp/proxy_spec.rb +0 -116
  499. data/spec/network/tcp/tcp_spec.rb +0 -273
  500. data/spec/network/telnet_spec.rb +0 -67
  501. data/spec/network/udp/udp_spec.rb +0 -271
  502. data/spec/network/unix_spec.rb +0 -183
  503. data/spec/path_spec.rb +0 -86
  504. data/spec/spec_helper.rb +0 -9
  505. data/spec/support/inflector_spec.rb +0 -22
  506. data/spec/support_spec.rb +0 -8
  507. data/spec/templates/classes/example_erb.rb +0 -11
  508. data/spec/templates/classes/example_template.rb +0 -35
  509. data/spec/templates/erb_spec.rb +0 -21
  510. data/spec/templates/helpers/data/includes/_relative.erb +0 -1
  511. data/spec/templates/helpers/data/templates/example.erb +0 -1
  512. data/spec/templates/helpers/data.rb +0 -9
  513. data/spec/templates/template_spec.rb +0 -54
  514. data/spec/ui/classes/test_shell.rb +0 -22
  515. data/spec/ui/output_spec.rb +0 -32
  516. data/spec/ui/shell_spec.rb +0 -83
  517. 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