ronin-support 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (321) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -0
  3. data/.rubocop.yml +1 -2
  4. data/ChangeLog.md +23 -0
  5. data/README.md +3 -1
  6. data/gemspec.yml +4 -3
  7. data/lib/ronin/support/archive/core_ext/file.rb +1 -1
  8. data/lib/ronin/support/archive/core_ext.rb +1 -1
  9. data/lib/ronin/support/archive/mixin.rb +1 -1
  10. data/lib/ronin/support/archive/tar/reader.rb +1 -1
  11. data/lib/ronin/support/archive/tar/writer.rb +1 -1
  12. data/lib/ronin/support/archive/tar.rb +1 -1
  13. data/lib/ronin/support/archive/zip/reader/entry.rb +1 -1
  14. data/lib/ronin/support/archive/zip/reader/statistics.rb +1 -1
  15. data/lib/ronin/support/archive/zip/reader.rb +1 -1
  16. data/lib/ronin/support/archive/zip/writer.rb +1 -1
  17. data/lib/ronin/support/archive/zip.rb +1 -1
  18. data/lib/ronin/support/archive.rb +1 -1
  19. data/lib/ronin/support/binary/array.rb +1 -1
  20. data/lib/ronin/support/binary/bit_flip/core_ext/integer.rb +1 -1
  21. data/lib/ronin/support/binary/bit_flip/core_ext/string.rb +1 -1
  22. data/lib/ronin/support/binary/bit_flip/core_ext.rb +1 -1
  23. data/lib/ronin/support/binary/bit_flip.rb +1 -1
  24. data/lib/ronin/support/binary/buffer.rb +1 -1
  25. data/lib/ronin/support/binary/byte_slice.rb +2 -2
  26. data/lib/ronin/support/binary/core_ext/array.rb +1 -1
  27. data/lib/ronin/support/binary/core_ext/float.rb +1 -1
  28. data/lib/ronin/support/binary/core_ext/integer.rb +1 -1
  29. data/lib/ronin/support/binary/core_ext/io.rb +1 -1
  30. data/lib/ronin/support/binary/core_ext/string.rb +1 -1
  31. data/lib/ronin/support/binary/core_ext.rb +1 -1
  32. data/lib/ronin/support/binary/cstring.rb +1 -1
  33. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +1 -1
  34. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +1 -1
  35. data/lib/ronin/support/binary/ctypes/arch/arm.rb +1 -1
  36. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +1 -1
  37. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +1 -1
  38. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +1 -1
  39. data/lib/ronin/support/binary/ctypes/arch/mips.rb +1 -1
  40. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +1 -1
  41. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +1 -1
  42. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +1 -1
  43. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +1 -1
  44. data/lib/ronin/support/binary/ctypes/arch/x86.rb +1 -1
  45. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +1 -1
  46. data/lib/ronin/support/binary/ctypes/arch.rb +1 -1
  47. data/lib/ronin/support/binary/ctypes/array_object_type.rb +1 -1
  48. data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
  49. data/lib/ronin/support/binary/ctypes/big_endian.rb +1 -1
  50. data/lib/ronin/support/binary/ctypes/char_type.rb +1 -1
  51. data/lib/ronin/support/binary/ctypes/char_types.rb +1 -1
  52. data/lib/ronin/support/binary/ctypes/enum_type.rb +1 -1
  53. data/lib/ronin/support/binary/ctypes/float32_type.rb +1 -1
  54. data/lib/ronin/support/binary/ctypes/float64_type.rb +1 -1
  55. data/lib/ronin/support/binary/ctypes/float_type.rb +1 -1
  56. data/lib/ronin/support/binary/ctypes/int16_type.rb +1 -1
  57. data/lib/ronin/support/binary/ctypes/int32_type.rb +1 -1
  58. data/lib/ronin/support/binary/ctypes/int64_type.rb +1 -1
  59. data/lib/ronin/support/binary/ctypes/int8_type.rb +1 -1
  60. data/lib/ronin/support/binary/ctypes/int_type.rb +1 -1
  61. data/lib/ronin/support/binary/ctypes/little_endian.rb +1 -1
  62. data/lib/ronin/support/binary/ctypes/mixin.rb +1 -1
  63. data/lib/ronin/support/binary/ctypes/native.rb +1 -1
  64. data/lib/ronin/support/binary/ctypes/network.rb +1 -1
  65. data/lib/ronin/support/binary/ctypes/object_type.rb +1 -1
  66. data/lib/ronin/support/binary/ctypes/os/android.rb +1 -1
  67. data/lib/ronin/support/binary/ctypes/os/apple_ios.rb +1 -1
  68. data/lib/ronin/support/binary/ctypes/os/bsd.rb +1 -1
  69. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +1 -1
  70. data/lib/ronin/support/binary/ctypes/os/linux.rb +1 -1
  71. data/lib/ronin/support/binary/ctypes/os/macos.rb +1 -1
  72. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +1 -1
  73. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +1 -1
  74. data/lib/ronin/support/binary/ctypes/os/unix.rb +1 -1
  75. data/lib/ronin/support/binary/ctypes/os/windows.rb +1 -1
  76. data/lib/ronin/support/binary/ctypes/os.rb +1 -1
  77. data/lib/ronin/support/binary/ctypes/scalar_type.rb +1 -1
  78. data/lib/ronin/support/binary/ctypes/string_type.rb +1 -1
  79. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +1 -1
  80. data/lib/ronin/support/binary/ctypes/struct_type.rb +1 -1
  81. data/lib/ronin/support/binary/ctypes/type.rb +1 -1
  82. data/lib/ronin/support/binary/ctypes/type_resolver.rb +1 -1
  83. data/lib/ronin/support/binary/ctypes/uint16_type.rb +1 -1
  84. data/lib/ronin/support/binary/ctypes/uint32_type.rb +1 -1
  85. data/lib/ronin/support/binary/ctypes/uint64_type.rb +1 -1
  86. data/lib/ronin/support/binary/ctypes/uint8_type.rb +1 -1
  87. data/lib/ronin/support/binary/ctypes/uint_type.rb +1 -1
  88. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
  89. data/lib/ronin/support/binary/ctypes/union_object_type.rb +1 -1
  90. data/lib/ronin/support/binary/ctypes/union_type.rb +1 -1
  91. data/lib/ronin/support/binary/ctypes.rb +1 -1
  92. data/lib/ronin/support/binary/memory.rb +1 -1
  93. data/lib/ronin/support/binary/packet.rb +1 -1
  94. data/lib/ronin/support/binary/stack.rb +1 -1
  95. data/lib/ronin/support/binary/stream/methods.rb +1 -1
  96. data/lib/ronin/support/binary/stream.rb +1 -1
  97. data/lib/ronin/support/binary/struct/member.rb +1 -1
  98. data/lib/ronin/support/binary/struct.rb +1 -1
  99. data/lib/ronin/support/binary/template.rb +1 -1
  100. data/lib/ronin/support/binary/unhexdump/core_ext/file.rb +1 -1
  101. data/lib/ronin/support/binary/unhexdump/core_ext/string.rb +1 -1
  102. data/lib/ronin/support/binary/unhexdump/core_ext.rb +1 -1
  103. data/lib/ronin/support/binary/unhexdump/parser.rb +1 -1
  104. data/lib/ronin/support/binary/unhexdump.rb +1 -1
  105. data/lib/ronin/support/binary/union.rb +1 -1
  106. data/lib/ronin/support/binary.rb +1 -1
  107. data/lib/ronin/support/cli/ansi.rb +1 -1
  108. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
  109. data/lib/ronin/support/cli/io_shell/core_ext.rb +1 -1
  110. data/lib/ronin/support/cli/io_shell.rb +1 -1
  111. data/lib/ronin/support/cli/printing.rb +1 -1
  112. data/lib/ronin/support/cli.rb +1 -1
  113. data/lib/ronin/support/compression/core_ext/file.rb +1 -1
  114. data/lib/ronin/support/compression/core_ext/string.rb +1 -1
  115. data/lib/ronin/support/compression/core_ext.rb +1 -1
  116. data/lib/ronin/support/compression/gzip/reader.rb +1 -1
  117. data/lib/ronin/support/compression/gzip/writer.rb +1 -1
  118. data/lib/ronin/support/compression/gzip.rb +1 -1
  119. data/lib/ronin/support/compression/mixin.rb +1 -1
  120. data/lib/ronin/support/compression/zlib.rb +1 -1
  121. data/lib/ronin/support/compression.rb +1 -1
  122. data/lib/ronin/support/core_ext/enumerable.rb +1 -1
  123. data/lib/ronin/support/core_ext/file.rb +1 -1
  124. data/lib/ronin/support/core_ext/integer.rb +1 -1
  125. data/lib/ronin/support/core_ext/ipaddr.rb +1 -1
  126. data/lib/ronin/support/core_ext/kernel.rb +1 -1
  127. data/lib/ronin/support/core_ext/string.rb +1 -1
  128. data/lib/ronin/support/core_ext.rb +1 -1
  129. data/lib/ronin/support/crypto/cert.rb +1 -1
  130. data/lib/ronin/support/crypto/cert_chain.rb +1 -1
  131. data/lib/ronin/support/crypto/cipher/aes.rb +1 -1
  132. data/lib/ronin/support/crypto/cipher/aes128.rb +1 -1
  133. data/lib/ronin/support/crypto/cipher/aes256.rb +1 -1
  134. data/lib/ronin/support/crypto/cipher.rb +2 -2
  135. data/lib/ronin/support/crypto/core_ext/file.rb +15 -9
  136. data/lib/ronin/support/crypto/core_ext/string.rb +17 -9
  137. data/lib/ronin/support/crypto/core_ext.rb +1 -1
  138. data/lib/ronin/support/crypto/hmac.rb +1 -1
  139. data/lib/ronin/support/crypto/key/dh.rb +1 -1
  140. data/lib/ronin/support/crypto/key/dsa.rb +1 -1
  141. data/lib/ronin/support/crypto/key/ec.rb +1 -1
  142. data/lib/ronin/support/crypto/key/methods.rb +1 -1
  143. data/lib/ronin/support/crypto/key/rsa.rb +1 -1
  144. data/lib/ronin/support/crypto/key.rb +1 -1
  145. data/lib/ronin/support/crypto/mixin.rb +40 -10
  146. data/lib/ronin/support/crypto/openssl.rb +1 -1
  147. data/lib/ronin/support/crypto.rb +10 -10
  148. data/lib/ronin/support/encoding/base16/core_ext/string.rb +1 -1
  149. data/lib/ronin/support/encoding/base16/core_ext.rb +1 -1
  150. data/lib/ronin/support/encoding/base16.rb +1 -1
  151. data/lib/ronin/support/encoding/base32/core_ext/string.rb +7 -7
  152. data/lib/ronin/support/encoding/base32/core_ext.rb +1 -1
  153. data/lib/ronin/support/encoding/base32.rb +4 -4
  154. data/lib/ronin/support/encoding/base36/core_ext/integer.rb +4 -4
  155. data/lib/ronin/support/encoding/base36/core_ext/string.rb +4 -4
  156. data/lib/ronin/support/encoding/base36/core_ext.rb +1 -1
  157. data/lib/ronin/support/encoding/base36.rb +4 -4
  158. data/lib/ronin/support/encoding/base62/core_ext/integer.rb +4 -4
  159. data/lib/ronin/support/encoding/base62/core_ext/string.rb +4 -4
  160. data/lib/ronin/support/encoding/base62/core_ext.rb +1 -1
  161. data/lib/ronin/support/encoding/base62.rb +4 -4
  162. data/lib/ronin/support/encoding/base64/core_ext/string.rb +7 -7
  163. data/lib/ronin/support/encoding/base64/core_ext.rb +1 -1
  164. data/lib/ronin/support/encoding/base64.rb +4 -4
  165. data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
  166. data/lib/ronin/support/encoding/c/core_ext/string.rb +1 -1
  167. data/lib/ronin/support/encoding/c/core_ext.rb +1 -1
  168. data/lib/ronin/support/encoding/c.rb +33 -34
  169. data/lib/ronin/support/encoding/core_ext/string.rb +1 -1
  170. data/lib/ronin/support/encoding/core_ext.rb +1 -1
  171. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +1 -1
  172. data/lib/ronin/support/encoding/hex/core_ext/string.rb +1 -1
  173. data/lib/ronin/support/encoding/hex/core_ext.rb +1 -1
  174. data/lib/ronin/support/encoding/hex.rb +21 -22
  175. data/lib/ronin/support/encoding/html/core_ext/integer.rb +1 -1
  176. data/lib/ronin/support/encoding/html/core_ext/string.rb +1 -1
  177. data/lib/ronin/support/encoding/html/core_ext.rb +1 -1
  178. data/lib/ronin/support/encoding/html.rb +1 -1
  179. data/lib/ronin/support/encoding/http/core_ext/integer.rb +1 -1
  180. data/lib/ronin/support/encoding/http/core_ext/string.rb +1 -1
  181. data/lib/ronin/support/encoding/http/core_ext.rb +1 -1
  182. data/lib/ronin/support/encoding/http.rb +1 -1
  183. data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
  184. data/lib/ronin/support/encoding/js/core_ext/string.rb +1 -1
  185. data/lib/ronin/support/encoding/js/core_ext.rb +1 -1
  186. data/lib/ronin/support/encoding/js.rb +39 -39
  187. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +3 -1
  188. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +7 -11
  189. data/lib/ronin/support/encoding/powershell/core_ext.rb +1 -1
  190. data/lib/ronin/support/encoding/powershell.rb +26 -20
  191. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +7 -7
  192. data/lib/ronin/support/encoding/punycode/core_ext.rb +1 -1
  193. data/lib/ronin/support/encoding/punycode.rb +10 -10
  194. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +5 -7
  195. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +1 -1
  196. data/lib/ronin/support/encoding/quoted_printable.rb +10 -10
  197. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +2 -2
  198. data/lib/ronin/support/encoding/ruby/core_ext.rb +1 -1
  199. data/lib/ronin/support/encoding/ruby.rb +13 -10
  200. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +4 -4
  201. data/lib/ronin/support/encoding/shell/core_ext/string.rb +1 -1
  202. data/lib/ronin/support/encoding/shell/core_ext.rb +1 -1
  203. data/lib/ronin/support/encoding/shell.rb +33 -28
  204. data/lib/ronin/support/encoding/smtp.rb +1 -1
  205. data/lib/ronin/support/encoding/sql/core_ext/string.rb +1 -1
  206. data/lib/ronin/support/encoding/sql/core_ext.rb +1 -1
  207. data/lib/ronin/support/encoding/sql.rb +1 -1
  208. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +1 -1
  209. data/lib/ronin/support/encoding/uri/core_ext/string.rb +1 -1
  210. data/lib/ronin/support/encoding/uri/core_ext.rb +1 -1
  211. data/lib/ronin/support/encoding/uri.rb +1 -1
  212. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +5 -7
  213. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +1 -1
  214. data/lib/ronin/support/encoding/uuencoding.rb +10 -10
  215. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +1 -1
  216. data/lib/ronin/support/encoding/xml/core_ext/string.rb +1 -1
  217. data/lib/ronin/support/encoding/xml/core_ext.rb +1 -1
  218. data/lib/ronin/support/encoding/xml.rb +1 -1
  219. data/lib/ronin/support/encoding.rb +1 -1
  220. data/lib/ronin/support/home.rb +1 -1
  221. data/lib/ronin/support/mixin.rb +1 -1
  222. data/lib/ronin/support/network/asn/dns_record.rb +1 -1
  223. data/lib/ronin/support/network/asn/list.rb +1 -1
  224. data/lib/ronin/support/network/asn/record.rb +1 -1
  225. data/lib/ronin/support/network/asn/record_set.rb +1 -1
  226. data/lib/ronin/support/network/asn.rb +1 -1
  227. data/lib/ronin/support/network/core_ext.rb +1 -1
  228. data/lib/ronin/support/network/dns/idn.rb +1 -1
  229. data/lib/ronin/support/network/dns/mixin.rb +1 -1
  230. data/lib/ronin/support/network/dns/resolver.rb +4 -2
  231. data/lib/ronin/support/network/dns.rb +1 -1
  232. data/lib/ronin/support/network/domain.rb +1 -1
  233. data/lib/ronin/support/network/email_address.rb +1 -1
  234. data/lib/ronin/support/network/esmtp/mixin.rb +1 -1
  235. data/lib/ronin/support/network/exceptions.rb +1 -1
  236. data/lib/ronin/support/network/ftp/mixin.rb +1 -1
  237. data/lib/ronin/support/network/host.rb +2 -2
  238. data/lib/ronin/support/network/http/cookie.rb +1 -1
  239. data/lib/ronin/support/network/http/core_ext/uri/http.rb +3 -3
  240. data/lib/ronin/support/network/http/core_ext.rb +1 -1
  241. data/lib/ronin/support/network/http/mixin.rb +1 -1
  242. data/lib/ronin/support/network/http/request.rb +1 -1
  243. data/lib/ronin/support/network/http/set_cookie.rb +1 -1
  244. data/lib/ronin/support/network/http/user_agents.rb +1 -1
  245. data/lib/ronin/support/network/http.rb +1 -1
  246. data/lib/ronin/support/network/imap/mixin.rb +1 -1
  247. data/lib/ronin/support/network/ip/mixin.rb +1 -1
  248. data/lib/ronin/support/network/ip.rb +1 -1
  249. data/lib/ronin/support/network/ip_range/cidr.rb +1 -1
  250. data/lib/ronin/support/network/ip_range/glob.rb +1 -1
  251. data/lib/ronin/support/network/ip_range/range.rb +1 -1
  252. data/lib/ronin/support/network/ip_range.rb +1 -1
  253. data/lib/ronin/support/network/mixin.rb +1 -1
  254. data/lib/ronin/support/network/packet.rb +1 -1
  255. data/lib/ronin/support/network/pop3/mixin.rb +1 -1
  256. data/lib/ronin/support/network/proxy.rb +1 -1
  257. data/lib/ronin/support/network/public_suffix/list.rb +1 -1
  258. data/lib/ronin/support/network/public_suffix/suffix.rb +1 -1
  259. data/lib/ronin/support/network/public_suffix/suffix_set.rb +1 -1
  260. data/lib/ronin/support/network/public_suffix.rb +1 -1
  261. data/lib/ronin/support/network/smtp/email.rb +1 -1
  262. data/lib/ronin/support/network/smtp/mixin.rb +1 -1
  263. data/lib/ronin/support/network/smtp.rb +1 -1
  264. data/lib/ronin/support/network/ssl/local_cert.rb +1 -1
  265. data/lib/ronin/support/network/ssl/local_key.rb +1 -1
  266. data/lib/ronin/support/network/ssl/mixin.rb +1 -1
  267. data/lib/ronin/support/network/ssl/openssl.rb +1 -1
  268. data/lib/ronin/support/network/ssl/proxy.rb +1 -1
  269. data/lib/ronin/support/network/ssl.rb +1 -1
  270. data/lib/ronin/support/network/tcp/mixin.rb +1 -1
  271. data/lib/ronin/support/network/tcp/proxy.rb +1 -1
  272. data/lib/ronin/support/network/tcp.rb +1 -1
  273. data/lib/ronin/support/network/telnet/mixin.rb +1 -1
  274. data/lib/ronin/support/network/telnet.rb +1 -1
  275. data/lib/ronin/support/network/tld/list.rb +1 -1
  276. data/lib/ronin/support/network/tld.rb +1 -1
  277. data/lib/ronin/support/network/tls/mixin.rb +1 -1
  278. data/lib/ronin/support/network/tls/proxy.rb +1 -1
  279. data/lib/ronin/support/network/tls.rb +1 -1
  280. data/lib/ronin/support/network/udp/mixin.rb +1 -1
  281. data/lib/ronin/support/network/udp/proxy.rb +1 -1
  282. data/lib/ronin/support/network/udp.rb +1 -1
  283. data/lib/ronin/support/network/unix/mixin.rb +1 -1
  284. data/lib/ronin/support/network/wildcard.rb +1 -1
  285. data/lib/ronin/support/network.rb +1 -1
  286. data/lib/ronin/support/path.rb +1 -1
  287. data/lib/ronin/support/text/core_ext/regexp.rb +1 -1
  288. data/lib/ronin/support/text/core_ext/string.rb +1 -1
  289. data/lib/ronin/support/text/core_ext.rb +1 -1
  290. data/lib/ronin/support/text/entropy/core_ext/string.rb +1 -1
  291. data/lib/ronin/support/text/entropy/core_ext.rb +1 -1
  292. data/lib/ronin/support/text/entropy.rb +1 -1
  293. data/lib/ronin/support/text/erb/mixin.rb +1 -1
  294. data/lib/ronin/support/text/erb.rb +1 -1
  295. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +1 -1
  296. data/lib/ronin/support/text/homoglyph/core_ext.rb +1 -1
  297. data/lib/ronin/support/text/homoglyph/exceptions.rb +1 -1
  298. data/lib/ronin/support/text/homoglyph/table.rb +1 -1
  299. data/lib/ronin/support/text/homoglyph.rb +1 -1
  300. data/lib/ronin/support/text/mixin.rb +1 -1
  301. data/lib/ronin/support/text/patterns/credentials.rb +1 -1
  302. data/lib/ronin/support/text/patterns/crypto.rb +1 -1
  303. data/lib/ronin/support/text/patterns/file_system.rb +1 -1
  304. data/lib/ronin/support/text/patterns/language.rb +1 -1
  305. data/lib/ronin/support/text/patterns/network/public_suffix.rb +1 -1
  306. data/lib/ronin/support/text/patterns/network.rb +1 -1
  307. data/lib/ronin/support/text/patterns/numeric.rb +2 -2
  308. data/lib/ronin/support/text/patterns/pii.rb +1 -1
  309. data/lib/ronin/support/text/patterns/source_code.rb +1 -1
  310. data/lib/ronin/support/text/patterns.rb +1 -1
  311. data/lib/ronin/support/text/random/mixin.rb +1 -1
  312. data/lib/ronin/support/text/random.rb +1 -1
  313. data/lib/ronin/support/text/typo/core_ext/string.rb +1 -1
  314. data/lib/ronin/support/text/typo/core_ext.rb +1 -1
  315. data/lib/ronin/support/text/typo/exceptions.rb +1 -1
  316. data/lib/ronin/support/text/typo/generator.rb +1 -1
  317. data/lib/ronin/support/text/typo.rb +1 -1
  318. data/lib/ronin/support/text.rb +1 -1
  319. data/lib/ronin/support/version.rb +2 -2
  320. data/lib/ronin/support.rb +1 -1
  321. metadata +18 -4
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -41,40 +41,40 @@ module Ronin
41
41
  module JS
42
42
  # Special JavaScript bytes and their escaped Strings.
43
43
  ESCAPE_BYTES = {
44
- 0x00 => '\u0000',
45
- 0x01 => '\u0001',
46
- 0x02 => '\u0002',
47
- 0x03 => '\u0003',
48
- 0x04 => '\u0004',
49
- 0x05 => '\u0005',
50
- 0x06 => '\u0006',
51
- 0x07 => '\u0007',
52
- 0x08 => '\b',
53
- 0x09 => '\t',
54
- 0x0a => '\n',
55
- 0x0b => '\u000b',
56
- 0x0c => '\f',
57
- 0x0d => '\r',
58
- 0x0e => '\u000e',
59
- 0x0f => '\u000f',
60
- 0x10 => '\u0010',
61
- 0x11 => '\u0011',
62
- 0x12 => '\u0012',
63
- 0x13 => '\u0013',
64
- 0x14 => '\u0014',
65
- 0x15 => '\u0015',
66
- 0x16 => '\u0016',
67
- 0x17 => '\u0017',
68
- 0x18 => '\u0018',
69
- 0x19 => '\u0019',
70
- 0x1a => '\u001a',
71
- 0x1b => '\u001b',
72
- 0x1c => '\u001c',
73
- 0x1d => '\u001d',
74
- 0x1e => '\u001e',
75
- 0x1f => '\u001f',
76
- 0x22 => '\"',
77
- 0x5c => '\\\\'
44
+ 0x00 => "\\u0000",
45
+ 0x01 => "\\u0001",
46
+ 0x02 => "\\u0002",
47
+ 0x03 => "\\u0003",
48
+ 0x04 => "\\u0004",
49
+ 0x05 => "\\u0005",
50
+ 0x06 => "\\u0006",
51
+ 0x07 => "\\u0007",
52
+ 0x08 => "\\b",
53
+ 0x09 => "\\t",
54
+ 0x0a => "\\n",
55
+ 0x0b => "\\u000b",
56
+ 0x0c => "\\f",
57
+ 0x0d => "\\r",
58
+ 0x0e => "\\u000e",
59
+ 0x0f => "\\u000f",
60
+ 0x10 => "\\u0010",
61
+ 0x11 => "\\u0011",
62
+ 0x12 => "\\u0012",
63
+ 0x13 => "\\u0013",
64
+ 0x14 => "\\u0014",
65
+ 0x15 => "\\u0015",
66
+ 0x16 => "\\u0016",
67
+ 0x17 => "\\u0017",
68
+ 0x18 => "\\u0018",
69
+ 0x19 => "\\u0019",
70
+ 0x1a => "\\u001a",
71
+ 0x1b => "\\u001b",
72
+ 0x1c => "\\u001c",
73
+ 0x1d => "\\u001d",
74
+ 0x1e => "\\u001e",
75
+ 0x1f => "\\u001f",
76
+ 0x22 => "\\\"", # \"
77
+ 0x5c => "\\\\" # \\
78
78
  }
79
79
 
80
80
  #
@@ -134,7 +134,7 @@ module Ronin
134
134
  "\\n" => "\n",
135
135
  "\\f" => "\f",
136
136
  "\\r" => "\r",
137
- "\\\"" => "\"",
137
+ "\\\"" => '"',
138
138
  "\\'" => "'",
139
139
  "\\\\" => "\\"
140
140
  }
@@ -187,7 +187,7 @@ module Ronin
187
187
 
188
188
  until scanner.eos?
189
189
  unescaped << if (backslash_escape = scanner.scan(/\\[btnfr'"\\]/))
190
- BACKSLASHED_CHARS[backslash_escape]
190
+ BACKSLASHED_CHARS.fetch(backslash_escape)
191
191
  elsif (surrogate_pair = scanner.scan(/\\u[dD][890abAB][0-9a-fA-F]{2}\\u[dD][cdefCDEF][0-9a-fA-F]{2}/))
192
192
  hi = surrogate_pair[2..6].to_i(16)
193
193
  lo = surrogate_pair[8..12].to_i(16)
@@ -281,8 +281,8 @@ module Ronin
281
281
  # # => "hello\nworld"
282
282
  #
283
283
  def self.unquote(data)
284
- if ((data[0] == '"' && data[-1] == '"') ||
285
- (data[0] == "'" && data[-1] == "'"))
284
+ if ((data.start_with?('"') && data.end_with?('"')) ||
285
+ (data.start_with?("'") && data.end_with?("'")))
286
286
  unescape(data[1..-2])
287
287
  else
288
288
  data
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -40,6 +40,7 @@ class Integer
40
40
  # # => "`u{1001}"
41
41
  #
42
42
  # @see Ronin::Support::Encoding::PowerShell.encode_byte
43
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
43
44
  #
44
45
  # @since 1.0.0
45
46
  #
@@ -73,6 +74,7 @@ class Integer
73
74
  # # => "`u{1001}"
74
75
  #
75
76
  # @see Ronin::Support::Encoding::PowerShell.escape_byte
77
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
76
78
  #
77
79
  # @since 1.0.0
78
80
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/powershell'
21
21
  class String
22
22
 
23
23
  #
24
- # [PowerShell escapes][1] the characters in the String.
25
- #
26
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
24
+ # PowerShell escapes the characters in the String.
27
25
  #
28
26
  # @return [String]
29
27
  # The PowerShell escaped string.
@@ -33,6 +31,7 @@ class String
33
31
  # # => "hello`nworld"
34
32
  #
35
33
  # @see Ronin::Support::Encoding::PowerShell.escape
34
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
36
35
  #
37
36
  # @api public
38
37
  #
@@ -45,9 +44,7 @@ class String
45
44
  alias psh_escape powershell_escape
46
45
 
47
46
  #
48
- # [PowerShell unescapes][1] the characters in the String.
49
- #
50
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
47
+ # PowerShell unescapes the characters in the String.
51
48
  #
52
49
  # @return [String]
53
50
  # The PowerShell unescaped string.
@@ -57,6 +54,7 @@ class String
57
54
  # # => "hello\nworld"
58
55
  #
59
56
  # @see Ronin::Support::Encoding::PowerShell.unescape
57
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
60
58
  #
61
59
  # @api public
62
60
  #
@@ -69,9 +67,7 @@ class String
69
67
  alias psh_unescape powershell_unescape
70
68
 
71
69
  #
72
- # [PowerShell encodes][1] every character in the String.
73
- #
74
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
70
+ # PowerShell encodes every character in the String.
75
71
  #
76
72
  # @return [String]
77
73
  # The PowerShell encoded String.
@@ -81,7 +77,7 @@ class String
81
77
  # # => "$([char]0x68)$([char]0x65)$([char]0x6c)$([char]0x6c)$([char]0x6f)$([char]0x20)$([char]0x77)$([char]0x6f)$([char]0x72)$([char]0x6c)$([char]0x64)"
82
78
  #
83
79
  # @see Ronin::Support::Encoding::PowerShell.encode
84
- #
80
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
85
81
  # @api public
86
82
  #
87
83
  # @since 1.0.0
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -40,6 +40,8 @@ module Ronin
40
40
  #
41
41
  module PowerShell
42
42
  # Special PowerShell bytes and their escaped Strings.
43
+ #
44
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
43
45
  ESCAPE_BYTES = {
44
46
  0x00 => "`0",
45
47
  0x07 => "`a",
@@ -78,6 +80,8 @@ module Ronin
78
80
  # Encoding::PowerShell.encode_byte(1001)
79
81
  # # => "`u{1001}"
80
82
  #
83
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
84
+ #
81
85
  def self.encode_byte(byte)
82
86
  if byte >= 0x00 && byte <= 0xff
83
87
  "$([char]0x%.2x)" % byte
@@ -112,6 +116,8 @@ module Ronin
112
116
  # Encoding::PowerShell.escape_byte(1001)
113
117
  # # => "`u{1001}"
114
118
  #
119
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
120
+ #
115
121
  def self.escape_byte(byte)
116
122
  if byte >= 0x00 && byte <= 0xff
117
123
  ESCAPE_BYTES.fetch(byte) do
@@ -145,9 +151,7 @@ module Ronin
145
151
  }
146
152
 
147
153
  #
148
- # [PowerShell escapes][1] the special characters in the data.
149
- #
150
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
154
+ # PowerShell escapes the special characters in the data.
151
155
  #
152
156
  # @param [String] data
153
157
  # The data to PowerShell escape.
@@ -159,6 +163,8 @@ module Ronin
159
163
  # Encoding::PowerShell.escape("hello\nworld")
160
164
  # # => "hello`nworld"
161
165
  #
166
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
167
+ #
162
168
  def self.escape(data)
163
169
  escaped = String.new
164
170
 
@@ -176,9 +182,7 @@ module Ronin
176
182
  end
177
183
 
178
184
  #
179
- # [PowerShell unescapes][1] the characters in the data.
180
- #
181
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
185
+ # PowerShell unescapes the characters in the data.
182
186
  #
183
187
  # @param [String] data
184
188
  # The PowerShell encoded data to unescape.
@@ -190,19 +194,21 @@ module Ronin
190
194
  # Encoding::PowerShell.unescape("hello`nworld")
191
195
  # # => "hello\nworld"
192
196
  #
197
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
198
+ #
193
199
  def self.unescape(data)
194
200
  unescaped = String.new(encoding: Encoding::UTF_8)
195
201
  scanner = StringScanner.new(data)
196
202
 
197
203
  until scanner.eos?
198
- unescaped << if (backslash_char = scanner.scan(/`[0abetnvfr]/)) # `c
199
- BACKSLASHED_CHARS[backslash_char[1,1]]
200
- elsif (hex_char = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{1,2}\)/)) # [char]0xXX
201
- hex_char[10..-2].to_i(16).chr
202
- elsif (hex_char = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{3,}\)/)) # [char]0xXX
203
- hex_char[10..-2].to_i(16).chr(Encoding::UTF_8)
204
- elsif (unicode_char = scanner.scan(/`u\{[0-9a-fA-F]+\}/)) # `u{XXXX}'
205
- unicode_char[3..-2].to_i(16).chr(Encoding::UTF_8)
204
+ unescaped << if (grave_escape = scanner.scan(/`[0abetnvfr]/)) # `c
205
+ BACKSLASHED_CHARS.fetch(grave_escape[1,1])
206
+ elsif (hex_escape = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{1,2}\)/)) # [char]0xXX
207
+ hex_escape[10..-2].to_i(16).chr
208
+ elsif (hex_escape = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{3,}\)/)) # [char]0xXX
209
+ hex_escape[10..-2].to_i(16).chr(Encoding::UTF_8)
210
+ elsif (unicode_escape = scanner.scan(/`u\{[0-9a-fA-F]+\}/)) # `u{XXXX}'
211
+ unicode_escape[3..-2].to_i(16).chr(Encoding::UTF_8)
206
212
  else
207
213
  scanner.getch
208
214
  end
@@ -212,9 +218,7 @@ module Ronin
212
218
  end
213
219
 
214
220
  #
215
- # [PowerShell encodes][1] every character in the data.
216
- #
217
- # [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
221
+ # PowerShell encodes every character in the data.
218
222
  #
219
223
  # @param [String] data
220
224
  # The data to encode.
@@ -226,6 +230,8 @@ module Ronin
226
230
  # Encoding::PowerShell.encode("hello world")
227
231
  # # => "$([char]0x68)$([char]0x65)$([char]0x6c)$([char]0x6c)$([char]0x6f)$([char]0x20)$([char]0x77)$([char]0x6f)$([char]0x72)$([char]0x6c)$([char]0x64)"
228
232
  #
233
+ # @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
234
+ #
229
235
  def self.encode(data)
230
236
  encoded = String.new
231
237
 
@@ -291,9 +297,9 @@ module Ronin
291
297
  # # => "hello'world"
292
298
  #
293
299
  def self.unquote(data)
294
- if (data[0] == '"' && data[-1] == '"')
300
+ if (data.start_with?('"') && data.end_with?('"'))
295
301
  unescape(data[1..-2])
296
- elsif (data[0] == "'" && data[-1] == "'")
302
+ elsif (data.start_with?("'") && data.end_with?("'"))
297
303
  data[1..-2].gsub("''","'")
298
304
  else
299
305
  data
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/punycode'
21
21
  class String
22
22
 
23
23
  #
24
- # Encodes a unicode String into [punycode].
25
- #
26
- # [punycode]: https://en.wikipedia.org/wiki/Punycode
24
+ # Encodes a unicode String into Punycode.
27
25
  #
28
26
  # @return [String]
29
27
  # The punycode String.
@@ -32,6 +30,8 @@ class String
32
30
  # "詹姆斯".punycode_encode
33
31
  # # => "xn--8ws00zhy3a"
34
32
  #
33
+ # @see https://en.wikipedia.org/wiki/Punycode
34
+ #
35
35
  # @api public
36
36
  #
37
37
  # @since 1.0.0
@@ -41,9 +41,7 @@ class String
41
41
  end
42
42
 
43
43
  #
44
- # Decodes a [punycode] String back into unicode.
45
- #
46
- # [punycode]: https://en.wikipedia.org/wiki/Punycode
44
+ # Decodes a Punycode String back into unicode.
47
45
  #
48
46
  # @return [String]
49
47
  # The decoded unicode String.
@@ -52,6 +50,8 @@ class String
52
50
  # "xn--8ws00zhy3a".punycode_decode
53
51
  # # => "詹姆斯"
54
52
  #
53
+ # @see https://en.wikipedia.org/wiki/Punycode
54
+ #
55
55
  # @api public
56
56
  #
57
57
  # @since 1.0.0
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -22,24 +22,22 @@ module Ronin
22
22
  module Support
23
23
  class Encoding < ::Encoding
24
24
  #
25
- # Contains methods for encoding/decoding [punycode] encoded Strings.
26
- #
27
- # [punycode]: https://en.wikipedia.org/wiki/Punycode
25
+ # Contains methods for encoding/decoding Punycode encoded Strings.
28
26
  #
29
27
  # ## Core-Ext Methods
30
28
  #
31
29
  # * {String#punycode_encode}
32
30
  # * {String#punycode_decode}
33
31
  #
32
+ # @see https://en.wikipedia.org/wiki/Punycode
33
+ #
34
34
  # @api public
35
35
  #
36
36
  # @since 1.0.0
37
37
  #
38
38
  module Punycode
39
39
  #
40
- # Encodes a unicode String into [punycode].
41
- #
42
- # [punycode]: https://en.wikipedia.org/wiki/Punycode
40
+ # Encodes a unicode String into Punycode.
43
41
  #
44
42
  # @param [String] data
45
43
  # The unicode String to encode.
@@ -51,14 +49,14 @@ module Ronin
51
49
  # Encoding::Punycode.encode("詹姆斯")
52
50
  # # => "xn--8ws00zhy3a"
53
51
  #
52
+ # @see https://en.wikipedia.org/wiki/Punycode
53
+ #
54
54
  def self.encode(data)
55
55
  Addressable::IDNA.to_ascii(data)
56
56
  end
57
57
 
58
58
  #
59
- # Decodes a [punycode] String back into unicode.
60
- #
61
- # [punycode]: https://en.wikipedia.org/wiki/Punycode
59
+ # Decodes a Punycode String back into unicode.
62
60
  #
63
61
  # @param [String] data
64
62
  # The punycode String to decode.
@@ -70,6 +68,8 @@ module Ronin
70
68
  # Encoding::Punycode.decode("xn--8ws00zhy3a")
71
69
  # # => "詹姆斯"
72
70
  #
71
+ # @see https://en.wikipedia.org/wiki/Punycode
72
+ #
73
73
  def self.decode(data)
74
74
  Addressable::IDNA.to_unicode(data)
75
75
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/quoted_printable'
21
21
  class String
22
22
 
23
23
  #
24
- # Escapes the String as [Quoted-Printable].
25
- #
26
- # [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
24
+ # Escapes the String as Quoted Printable.
27
25
  #
28
26
  # @return [String]
29
27
  # The quoted-printable escaped String.
@@ -33,6 +31,7 @@ class String
33
31
  # # => "<a href=3D\"https://example.com/\">link</a>=\n"
34
32
  #
35
33
  # @see Ronin::Support::Encoding::QuotedPrintable.escape
34
+ # @see https://en.wikipedia.org/wiki/Quoted-printable
36
35
  #
37
36
  # @api public
38
37
  #
@@ -47,9 +46,7 @@ class String
47
46
  alias qp_encode quoted_printable_escape
48
47
 
49
48
  #
50
- # Unescapes a [Quoted-Printable] encoded String.
51
- #
52
- # [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
49
+ # Unescapes a Quoted Printable encoded String.
53
50
  #
54
51
  # @return [String]
55
52
  # The unescaped String.
@@ -59,6 +56,7 @@ class String
59
56
  # # => "<a href=\"https://example.com/\">link</a>"
60
57
  #
61
58
  # @see Ronin::Support::Encoding::QuotedPrintable.unescape
59
+ # @see https://en.wikipedia.org/wiki/Quoted-printable
62
60
  #
63
61
  # @api public
64
62
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -22,22 +22,20 @@ module Ronin
22
22
  module Support
23
23
  class Encoding < ::Encoding
24
24
  #
25
- # Contains methods for encoding/decoding [Quoted Printable] data.
26
- #
27
- # [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
25
+ # Contains methods for encoding/decoding Quoted Printable data.
28
26
  #
29
27
  # ## Core-Ext Methods
30
28
  #
31
29
  # * {String#quoted_printable_escape}
32
30
  # * {String#quoted_printable_unescape}
33
31
  #
32
+ # @see https://en.wikipedia.org/wiki/Quoted-printable
33
+ #
34
34
  # @api public
35
35
  #
36
36
  module QuotedPrintable
37
37
  #
38
- # Escapes the data as [Quoted-Printable].
39
- #
40
- # [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
38
+ # Escapes the data as Quoted Printable.
41
39
  #
42
40
  # @param [String] data
43
41
  # The data to escape.
@@ -49,6 +47,8 @@ module Ronin
49
47
  # Encoding::QuotedPrintable.escape('<a href="https://example.com/">link</a>')
50
48
  # # => "<a href=3D\"https://example.com/\">link</a>=\n"
51
49
  #
50
+ # @see https://en.wikipedia.org/wiki/Quoted-printable
51
+ #
52
52
  def self.escape(data)
53
53
  [data].pack('M')
54
54
  end
@@ -69,9 +69,7 @@ module Ronin
69
69
  end
70
70
 
71
71
  #
72
- # Unescapes a [Quoted-Printable] encoded String.
73
- #
74
- # [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
72
+ # Unescapes a Quoted Printable encoded String.
75
73
  #
76
74
  # @param [String] data
77
75
  # The Quoted-Printable String to unescape.
@@ -83,6 +81,8 @@ module Ronin
83
81
  # Encoding::QuotedPrintable.unescape("<a href=3D\"https://example.com/\">link</a>=\n")
84
82
  # # => "<a href=\"https://example.com/\">link</a>"
85
83
  #
84
+ # @see https://en.wikipedia.org/wiki/Quoted-printable
85
+ #
86
86
  def self.unescape(data)
87
87
  data.unpack1('M')
88
88
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # Ronin Support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -87,7 +87,7 @@ class String
87
87
  alias ruby_decode ruby_unescape
88
88
 
89
89
  #
90
- # Rubyonverts the String into a Ruby string.
90
+ # Converts the String into a Ruby string.
91
91
  #
92
92
  # @return [String]
93
93
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
4
4
  #
5
5
  # ronin-support is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Lesser General Public License as published
@@ -178,14 +178,17 @@ module Ronin
178
178
  scanner = StringScanner.new(data)
179
179
 
180
180
  until scanner.eos?
181
- unescaped << if (unicode_escape = scanner.scan(/\\(?:[0-7]{1,3}|[0-7])/))
182
- unicode_escape[1,3].to_i(8).chr
183
- elsif (hex_escape = scanner.scan(/\\u[0-9a-fA-F]{4,8}/))
184
- hex_escape[2..].to_i(16).chr(Encoding::UTF_8)
185
- elsif (hex_escape = scanner.scan(/\\x[0-9a-fA-F]{1,2}/))
181
+ unescaped << if (unicode_escape = scanner.scan(/\\u[0-9a-fA-F]{4}/))
182
+ unicode_escape[2..].to_i(16).chr(Encoding::UTF_8)
183
+ elsif (unicode_escape = scanner.scan(/\\u\{[0-9a-fA-F]{1,6}\}/))
184
+ unicode_escape[3..-2].to_i(16).chr(Encoding::UTF_8)
185
+ elsif (hex_escape = scanner.scan(/\\x[0-9a-fA-F]{1,2}/))
186
186
  hex_escape[2..].to_i(16).chr
187
- elsif (escape = scanner.scan(/\\./))
188
- UNESCAPE_CHARS[escape]
187
+ elsif (octal_escape = scanner.scan(/\\[0-7]{1,3}/))
188
+ octal_escape[1,3].to_i(8).chr
189
+
190
+ elsif (backslash_escape = scanner.scan(/\\./))
191
+ UNESCAPE_CHARS[backslash_escape]
189
192
  else
190
193
  scanner.getch
191
194
  end
@@ -228,9 +231,9 @@ module Ronin
228
231
  # # => "hello'world"
229
232
  #
230
233
  def self.unquote(data)
231
- if (data[0] == '"' && data[-1] == '"')
234
+ if (data.start_with?('"') && data.end_with?('"'))
232
235
  unescape(data[1..-2])
233
- elsif (data[0] == "'" && data[-1] == "'")
236
+ elsif (data.start_with?("'") && data.end_with?("'"))
234
237
  data[1..-2].gsub(/\\(['\\])/,'\1')
235
238
  else
236
239
  data