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,670 @@
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/network/ssl/mixin'
20
+
21
+ module Ronin
22
+ module Support
23
+ module Network
24
+ module TLS
25
+ #
26
+ # Provides helper methods for communicating with TLS-enabled services.
27
+ #
28
+ module Mixin
29
+ include SSL::Mixin
30
+
31
+ #
32
+ # Creates a new TLS Context.
33
+ #
34
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
35
+ # The TLS version to use.
36
+ #
37
+ # @param [Hash{Symbol => Object}] kwargs
38
+ # Additional keyword arguments for {SSL.context}.
39
+ #
40
+ # @option kwargs [Symbol, Boolean] :verify
41
+ # Specifies whether to verify the SSL certificate.
42
+ # May be one of the following:
43
+ #
44
+ # * `:none`
45
+ # * `:peer`
46
+ # * `:fail_if_no_peer_cert`
47
+ # * `:client_once`
48
+ #
49
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
50
+ # The RSA key to use for the SSL context.
51
+ #
52
+ # @option kwargs [String] :key_file
53
+ # The path to the SSL `.key` file.
54
+ #
55
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
56
+ # The X509 certificate to use for the SSL context.
57
+ #
58
+ # @option kwargs [String] :cert_file
59
+ # The path to the SSL `.crt` file.
60
+ #
61
+ # @option kwargs [String] :ca_bundle
62
+ # Path to the CA certificate file or directory.
63
+ #
64
+ # @return [OpenSSL::SSL::SSLContext]
65
+ # The newly created SSL Context.
66
+ #
67
+ # @api semipublic
68
+ #
69
+ def tls_context(version: 1.2, **kwargs)
70
+ ssl_context(version: version, **kwargs)
71
+ end
72
+
73
+ #
74
+ # Initiates an SSL session with an existing TCP socket.
75
+ #
76
+ # @param [TCPSocket] socket
77
+ # The existing TCP socket.
78
+ #
79
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
80
+ # The TLS version to use.
81
+ #
82
+ # @param [Hash{Symbol => Object}] kwargs
83
+ # Additional keyword arguments for {#ssl_context}.
84
+ #
85
+ # @option kwargs [Symbol, Boolean] :verify
86
+ # Specifies whether to verify the SSL certificate.
87
+ # May be one of the following:
88
+ #
89
+ # * `:none`
90
+ # * `:peer`
91
+ # * `:fail_if_no_peer_cert`
92
+ # * `:client_once`
93
+ #
94
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
95
+ # The RSA key to use for the SSL context.
96
+ #
97
+ # @option kwargs [String] :key_file
98
+ # The path to the SSL `.key` file.
99
+ #
100
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
101
+ # The X509 certificate to use for the SSL context.
102
+ #
103
+ # @option kwargs [String] :cert_file
104
+ # The path to the SSL `.crt` file.
105
+ #
106
+ # @option kwargs [String] :ca_bundle
107
+ # Path to the CA certificate file or directory.
108
+ #
109
+ # @return [OpenSSL::SSL::SSLSocket]
110
+ # the new SSL Socket.
111
+ #
112
+ # @api public
113
+ #
114
+ def tls_socket(socket, version: 1.2, **kwargs)
115
+ ssl_socket(socket,version: version, **kwargs)
116
+ end
117
+
118
+ #
119
+ # Tests whether a remote SSLed TCP port is open.
120
+ #
121
+ # @param [String] host
122
+ # The host to connect to.
123
+ #
124
+ # @param [Integer] port
125
+ # The port to connect to.
126
+ #
127
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
128
+ # The TLS version to use.
129
+ #
130
+ # @param [Hash{Symbol => Object}] kwargs
131
+ # Additional keyword arguments for {#ssl_connect}.
132
+ #
133
+ # @option kwargs [String] :bind_host
134
+ # The local host to bind to.
135
+ #
136
+ # @option kwargs [Integer] :bind_port
137
+ # The local port to bind to.
138
+ #
139
+ # @option kwargs [Integer] :timeout (5)
140
+ # The maximum time to attempt connecting.
141
+ #
142
+ # @option options [Symbol, Boolean] :verify
143
+ # Specifies whether to verify the SSL certificate.
144
+ # May be one of the following:
145
+ #
146
+ # * `:none`
147
+ # * `:peer`
148
+ # * `:fail_if_no_peer_cert`
149
+ # * `:client_once`
150
+ #
151
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
152
+ # The RSA key to use for the SSL context.
153
+ #
154
+ # @option kwargs [String] :key_file
155
+ # The path to the SSL `.key` file.
156
+ #
157
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
158
+ # The X509 certificate to use for the SSL context.
159
+ #
160
+ # @option kwargs [String] :cert_file
161
+ # The path to the SSL `.crt` file.
162
+ #
163
+ # @option kwargs [String] :ca_bundle
164
+ # Path to the CA certificate file or directory.
165
+ #
166
+ # @return [Boolean, nil]
167
+ # Specifies whether the remote SSLed TCP port is open.
168
+ # If the connection was not accepted, `nil` will be returned.
169
+ #
170
+ # @example
171
+ # tls_open?('www.bankofamerica.com',443)
172
+ #
173
+ # @example Using a timeout:
174
+ # tls_open?('example.com',80, timeout: 5)
175
+ # # => nil
176
+ #
177
+ # @api public
178
+ #
179
+ def tls_open?(host,port, version: 1.2, **kwargs)
180
+ ssl_open?(host,port, version: version, **kwargs)
181
+ end
182
+
183
+ #
184
+ # Establishes a SSL connection.
185
+ #
186
+ # @param [String] host
187
+ # The host to connect to.
188
+ #
189
+ # @param [Integer] port
190
+ # The port to connect to.
191
+ #
192
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
193
+ # The TLS version to use.
194
+ #
195
+ # @param [Hash{Symbol => Object}] kwargs
196
+ # Additional keyword arguments for {#tls_socket}.
197
+ #
198
+ # @option kwargs [String] :bind_host
199
+ # The local host to bind to.
200
+ #
201
+ # @option kwargs [Integer] :bind_port
202
+ # The local port to bind to.
203
+ #
204
+ # @option kwargs [Symbol, Boolean] :verify
205
+ # Specifies whether to verify the SSL certificate.
206
+ # May be one of the following:
207
+ #
208
+ # * `:none`
209
+ # * `:peer`
210
+ # * `:fail_if_no_peer_cert`
211
+ # * `:client_once`
212
+ #
213
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
214
+ # The RSA key to use for the SSL context.
215
+ #
216
+ # @option kwargs [String] :key_file
217
+ # The path to the SSL `.key` file.
218
+ #
219
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
220
+ # The X509 certificate to use for the SSL context.
221
+ #
222
+ # @option kwargs [String] :cert_file
223
+ # The path to the SSL `.crt` file.
224
+ #
225
+ # @option kwargs [String] :ca_bundle
226
+ # Path to the CA certificate file or directory.
227
+ #
228
+ # @yield [tls_socket]
229
+ # The given block will be passed the new SSL socket. Once the block
230
+ # returns the SSL socket will be closed.
231
+ #
232
+ # @yieldparam [OpenSSL::SSL::SSLSocket] tls_socket
233
+ # The new SSL Socket.
234
+ #
235
+ # @return [OpenSSL::SSL::SSLSocket, nil]
236
+ # the new SSL Socket. If a block is given, then `nil` will be
237
+ # returned.
238
+ #
239
+ # @example
240
+ # socket = tls_connect('twitter.com',443)
241
+ #
242
+ # @example
243
+ # tls_connect('twitter.com',443) do |sock|
244
+ # sock.write("GET / HTTP/1.1\n\r\n\r")
245
+ #
246
+ # sock.each_line { |line| puts line }
247
+ # end
248
+ #
249
+ # @see http://rubydoc.info/stdlib/openssl/OpenSSL/SSL/SSLSocket
250
+ #
251
+ # @api public
252
+ #
253
+ def tls_connect(host,port, version: 1.2, **kwargs, &block)
254
+ ssl_connect(host,port, version: version, **kwargs, &block)
255
+ end
256
+
257
+ #
258
+ # Creates a new SSL connection and sends the given data.
259
+ #
260
+ # @param [String] data
261
+ # The data to send through the connection.
262
+ #
263
+ # @param [String] host
264
+ # The host to connect to.
265
+ #
266
+ # @param [Integer] port
267
+ # The port to connect to.
268
+ #
269
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
270
+ # The TLS version to use.
271
+ #
272
+ # @param [Hash{Symbol => Object}] kwargs
273
+ # Additional keyword arguments for {#tls_connect}.
274
+ #
275
+ # @option kwargs [String] :bind_host
276
+ # The local host to bind to.
277
+ #
278
+ # @option kwargs [Integer] :bind_port
279
+ # The local port to bind to.
280
+ #
281
+ # @option kwargs [Symbol, Boolean] :verify
282
+ # Specifies whether to verify the SSL certificate.
283
+ # May be one of the following:
284
+ #
285
+ # * `:none`
286
+ # * `:peer`
287
+ # * `:fail_if_no_peer_cert`
288
+ # * `:client_once`
289
+ #
290
+ # @yield [tls_socket]
291
+ # The given block will be passed the newly created SSL Socket.
292
+ #
293
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
294
+ # The RSA key to use for the SSL context.
295
+ #
296
+ # @option kwargs [String] :key_file
297
+ # The path to the SSL `.key` file.
298
+ #
299
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
300
+ # The X509 certificate to use for the SSL context.
301
+ #
302
+ # @option kwargs [String] :cert_file
303
+ # The path to the SSL `.crt` file.
304
+ #
305
+ # @option kwargs [String] :ca_bundle
306
+ # Path to the CA certificate file or directory.
307
+ #
308
+ # @yieldparam [OpenSSL::SSL::SSLSocket] tls_socket
309
+ # The newly created SSL Socket.
310
+ #
311
+ # @api public
312
+ #
313
+ def tls_connect_and_send(data,host,port, version: 1.2, **kwargs, &block)
314
+ ssl_connect_and_send(data,host,port, version: version, **kwargs, &block)
315
+ end
316
+
317
+ #
318
+ # Connects to the host and port and returns the server's certificate.
319
+ #
320
+ # @param [String] host
321
+ # The host to connect to.
322
+ #
323
+ # @param [Integer] port
324
+ # The port to connect to.
325
+ #
326
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
327
+ # The TLS version to use.
328
+ #
329
+ # @param [Hash{Symbol => Object}] kwargs
330
+ # Additional keyword arguments for {#tls_connect}.
331
+ #
332
+ # @option kwargs [String] :bind_host
333
+ # The local host to bind to.
334
+ #
335
+ # @option kwargs [Integer] :bind_port
336
+ # The local port to bind to.
337
+ #
338
+ # @option kwargs [Symbol, Boolean] :verify
339
+ # Specifies whether to verify the SSL certificate.
340
+ # May be one of the following:
341
+ #
342
+ # * `:none`
343
+ # * `:peer`
344
+ # * `:fail_if_no_peer_cert`
345
+ # * `:client_once`
346
+ #
347
+ # @yield [tls_socket]
348
+ # The given block will be passed the newly created SSL Socket.
349
+ #
350
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
351
+ # The RSA key to use for the SSL context.
352
+ #
353
+ # @option kwargs [String] :key_file
354
+ # The path to the SSL `.key` file.
355
+ #
356
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
357
+ # The X509 certificate to use for the SSL context.
358
+ #
359
+ # @option kwargs [String] :cert_file
360
+ # The path to the SSL `.crt` file.
361
+ #
362
+ # @option kwargs [String] :ca_bundle
363
+ # Path to the CA certificate file or directory.
364
+ #
365
+ # @return [OpenSSL::X509::Certificate]
366
+ # The server's certificate.
367
+ #
368
+ def tls_cert(host,port, version: 1.2, **kwargs)
369
+ ssl_cert(host,port, version: version, **kwargs)
370
+ end
371
+
372
+ #
373
+ # Reads the banner from the service running on the given host and
374
+ # port.
375
+ #
376
+ # @param [String] host
377
+ # The host to connect to.
378
+ #
379
+ # @param [Integer] port
380
+ # The port to connect to.
381
+ #
382
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
383
+ # The TLS version to use.
384
+ #
385
+ # @param [Hash{Symbol => Object}] kwargs
386
+ # Additional keyword arguments for {#tls_connect}.
387
+ #
388
+ # @option kwargs [String] :bind_host
389
+ # The local host to bind to.
390
+ #
391
+ # @option kwargs [Integer] :bind_port
392
+ # The local port to bind to.
393
+ #
394
+ # @option kwargs [Symbol, Boolean] :verify
395
+ # Specifies whether to verify the SSL certificate.
396
+ # May be one of the following:
397
+ #
398
+ # * `:none`
399
+ # * `:peer`
400
+ # * `:fail_if_no_peer_cert`
401
+ # * `:client_once`
402
+ #
403
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
404
+ # The RSA key to use for the SSL context.
405
+ #
406
+ # @option kwargs [String] :key_file
407
+ # The path to the SSL `.key` file.
408
+ #
409
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
410
+ # The X509 certificate to use for the SSL context.
411
+ #
412
+ # @option kwargs [String] :cert_file
413
+ # The path to the SSL `.crt` file.
414
+ #
415
+ # @option kwargs [String] :ca_bundle
416
+ # Path to the CA certificate file or directory.
417
+ #
418
+ # @yield [banner]
419
+ # If a block is given, it will be passed the grabbed banner.
420
+ #
421
+ # @yieldparam [String] banner
422
+ # The grabbed banner.
423
+ #
424
+ # @return [String]
425
+ # The grabbed banner.
426
+ #
427
+ # @example
428
+ # tls_banner('smtp.gmail.com',465)
429
+ # # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
430
+ #
431
+ # @api public
432
+ #
433
+ def tls_banner(host,port, version: 1.2, **kwargs, &block)
434
+ ssl_banner(host,port, version: version, **kwargs, &block)
435
+ end
436
+
437
+ #
438
+ # Connects to a specified host and port, sends the given data and then
439
+ # closes the connection.
440
+ #
441
+ # @param [String] data
442
+ # The data to send through the connection.
443
+ #
444
+ # @param [String] host
445
+ # The host to connect to.
446
+ #
447
+ # @param [Integer] port
448
+ # The port to connect to.
449
+ #
450
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
451
+ # The TLS version to use.
452
+ #
453
+ # @param [Hash{Symbol => Object}] kwargs
454
+ # Additional keyword arguments for {#tls_connect}.
455
+ #
456
+ # @option kwargs [String] :bind_host
457
+ # The local host to bind to.
458
+ #
459
+ # @option kwargs [Integer] :bind_port
460
+ # The local port to bind to.
461
+ #
462
+ # @option kwargs [Symbol, Boolean] :verify
463
+ # Specifies whether to verify the SSL certificate.
464
+ # May be one of the following:
465
+ #
466
+ # * `:none`
467
+ # * `:peer`
468
+ # * `:fail_if_no_peer_cert`
469
+ # * `:client_once`
470
+ #
471
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
472
+ # The RSA key to use for the SSL context.
473
+ #
474
+ # @option kwargs [String] :key_file
475
+ # The path to the SSL `.key` file.
476
+ #
477
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
478
+ # The X509 certificate to use for the SSL context.
479
+ #
480
+ # @option kwargs [String] :cert_file
481
+ # The path to the SSL `.crt` file.
482
+ #
483
+ # @option kwargs [String] :ca_bundle
484
+ # Path to the CA certificate file or directory.
485
+ #
486
+ # @return [true]
487
+ # The data was successfully sent.
488
+ #
489
+ # @example
490
+ # buffer = "GET /#{'A' * 4096}\n\r"
491
+ # tls_send(buffer,'victim.com',443)
492
+ # # => true
493
+ #
494
+ # @api public
495
+ #
496
+ def tls_send(data,host,port, version: 1.2, **kwargs)
497
+ ssl_send(data,host,port, version: version, **kwargs)
498
+ end
499
+
500
+ #
501
+ # Accepts an SSL session from an existing TCP socket.
502
+ #
503
+ # @param [TCPSocket] socket
504
+ # The existing TCP socket.
505
+ #
506
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
507
+ # The TLS version to use.
508
+ #
509
+ # @param [Hash{Symbol => Object}] kwargs
510
+ # Additional keyword arguments for {#tls_socket}.
511
+ #
512
+ # @option kwargs [Symbol, Boolean] :verify
513
+ # Specifies whether to verify the SSL certificate.
514
+ # May be one of the following:
515
+ #
516
+ # * `:none`
517
+ # * `:peer`
518
+ # * `:fail_if_no_peer_cert`
519
+ # * `:client_once`
520
+ #
521
+ # @return [OpenSSL::SSL::SSLSocket]
522
+ # the new SSL Socket.
523
+ #
524
+ # @api public
525
+ #
526
+ def tls_server_socket(socket, version: 1.2, **kwargs)
527
+ ssl_server_socket(socket, version: version, **kwargs)
528
+ end
529
+
530
+ #
531
+ # Creates a new SSL socket listening on a given host and port,
532
+ # accepting clients in a loop.
533
+ #
534
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
535
+ # The TLS version to use.
536
+ #
537
+ # @param [Hash{Symbol => Object}] kwargs
538
+ # Additional keyword arguments for {#tls_server_socket}.
539
+ #
540
+ # @option kwargs [Integer] :port
541
+ # The local port to listen on.
542
+ #
543
+ # @option kwargs [String] :host
544
+ # The host to bind to.
545
+ #
546
+ # @option kwargs [Integer] :backlog (5)
547
+ # The maximum backlog of pending connections.
548
+ #
549
+ # @option kwargs [Symbol, Boolean] :verify
550
+ # Specifies whether to verify the SSL certificate.
551
+ # May be one of the following:
552
+ #
553
+ # * `:none`
554
+ # * `:peer`
555
+ # * `:fail_if_no_peer_cert`
556
+ # * `:client_once`
557
+ #
558
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
559
+ # The RSA key to use for the SSL context.
560
+ #
561
+ # @option kwargs [String] :key_file
562
+ # The path to the SSL `.key` file.
563
+ #
564
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
565
+ # The X509 certificate to use for the SSL context.
566
+ #
567
+ # @option kwargs [String] :cert_file
568
+ # The path to the SSL `.crt` file.
569
+ #
570
+ # @option kwargs [String] :ca_bundle
571
+ # Path to the CA certificate file or directory.
572
+ #
573
+ # @yield [client]
574
+ # The given block will be passed the newly connected client.
575
+ # After the block has finished, the client will be closed.
576
+ #
577
+ # @yieldparam [OpenSSL::SSL::SSLSocket] client
578
+ # A newly connected client.
579
+ #
580
+ # @return [nil]
581
+ #
582
+ # @example
583
+ # # $ openssl genrsa -out ssl.key 1024
584
+ # # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
585
+ # # $ cat ssl.key ssl.crt > ssl.pem
586
+ # # $ chmod 600 ssl.key ssl.pem
587
+ # tls_server_loop(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |sock|
588
+ # sock.puts 'lol'
589
+ # end
590
+ #
591
+ # @api public
592
+ #
593
+ def tls_server_loop(version: 1.2, **kwargs, &block)
594
+ ssl_server_loop(version: 1.2, **kwargs, &block)
595
+ end
596
+
597
+ #
598
+ # Creates a new SSL socket listening on a given host and port,
599
+ # accepts only one client and then stops listening.
600
+ #
601
+ # @param [1, 1.1, 1.2, String, Symbol, nil] version
602
+ # The TLS version to use.
603
+ #
604
+ # @param [Hash{Symbol => Object}] kwargs
605
+ # Additional keyword arguments for {#tls_server_socket}.
606
+ #
607
+ # @option kwargs [Integer] :port
608
+ # The local port to listen on.
609
+ #
610
+ # @option kwargs [String] :host
611
+ # The host to bind to.
612
+ #
613
+ # @option kwargs [Symbol, Boolean] :verify
614
+ # Specifies whether to verify the SSL certificate.
615
+ # May be one of the following:
616
+ #
617
+ # * `:none`
618
+ # * `:peer`
619
+ # * `:fail_if_no_peer_cert`
620
+ # * `:client_once`
621
+ #
622
+ # @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
623
+ # The RSA key to use for the SSL context.
624
+ #
625
+ # @option kwargs [String] :key_file
626
+ # The path to the SSL `.key` file.
627
+ #
628
+ # @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
629
+ # The X509 certificate to use for the SSL context.
630
+ #
631
+ # @option kwargs [String] :cert_file
632
+ # The path to the SSL `.crt` file.
633
+ #
634
+ # @option kwargs [String] :ca_bundle
635
+ # Path to the CA certificate file or directory.
636
+ #
637
+ # @example
638
+ # tls_accept(1337) do |client|
639
+ # client.puts 'lol'
640
+ # end
641
+ #
642
+ # @yield [client]
643
+ # The given block will be passed the newly connected client.
644
+ # After the block has finished, both the client and the server will
645
+ # be closed.
646
+ #
647
+ # @yieldparam [OpenSSL::SSL::SSLSocket] client
648
+ # The newly connected client.
649
+ #
650
+ # @return [nil]
651
+ #
652
+ # @example
653
+ # # $ openssl genrsa -out ssl.key 1024
654
+ # # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
655
+ # # $ cat ssl.key ssl.crt > ssl.pem
656
+ # # $ chmod 600 ssl.key ssl.pem
657
+ # tls_accept(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |client|
658
+ # client.puts 'lol'
659
+ # end
660
+ #
661
+ # @api public
662
+ #
663
+ def tls_accept(version: 1.2, **kwargs, &block)
664
+ ssl_accept(version: version, **kwargs, &block)
665
+ end
666
+ end
667
+ end
668
+ end
669
+ end
670
+ end