ronin-support 1.0.6 → 1.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (319) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -0
  3. data/ChangeLog.md +111 -0
  4. data/README.md +5 -1
  5. data/lib/ronin/support/archive/core_ext/file.rb +1 -1
  6. data/lib/ronin/support/archive/core_ext.rb +1 -1
  7. data/lib/ronin/support/archive/mixin.rb +1 -1
  8. data/lib/ronin/support/archive/tar/reader.rb +1 -1
  9. data/lib/ronin/support/archive/tar/writer.rb +1 -1
  10. data/lib/ronin/support/archive/tar.rb +1 -1
  11. data/lib/ronin/support/archive/zip/reader/entry.rb +1 -1
  12. data/lib/ronin/support/archive/zip/reader/statistics.rb +1 -1
  13. data/lib/ronin/support/archive/zip/reader.rb +1 -1
  14. data/lib/ronin/support/archive/zip/writer.rb +1 -1
  15. data/lib/ronin/support/archive/zip.rb +1 -1
  16. data/lib/ronin/support/archive.rb +1 -1
  17. data/lib/ronin/support/binary/array.rb +1 -1
  18. data/lib/ronin/support/binary/bit_flip/core_ext/integer.rb +1 -1
  19. data/lib/ronin/support/binary/bit_flip/core_ext/string.rb +1 -1
  20. data/lib/ronin/support/binary/bit_flip/core_ext.rb +1 -1
  21. data/lib/ronin/support/binary/bit_flip.rb +1 -1
  22. data/lib/ronin/support/binary/buffer.rb +1 -1
  23. data/lib/ronin/support/binary/byte_slice.rb +1 -1
  24. data/lib/ronin/support/binary/core_ext/array.rb +1 -1
  25. data/lib/ronin/support/binary/core_ext/float.rb +3 -2
  26. data/lib/ronin/support/binary/core_ext/integer.rb +3 -2
  27. data/lib/ronin/support/binary/core_ext/io.rb +1 -1
  28. data/lib/ronin/support/binary/core_ext/string.rb +1 -1
  29. data/lib/ronin/support/binary/core_ext.rb +1 -1
  30. data/lib/ronin/support/binary/cstring.rb +1 -1
  31. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +1 -1
  32. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +1 -1
  33. data/lib/ronin/support/binary/ctypes/arch/arm.rb +1 -1
  34. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +1 -1
  35. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +1 -1
  36. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +1 -1
  37. data/lib/ronin/support/binary/ctypes/arch/mips.rb +1 -1
  38. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +1 -1
  39. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +1 -1
  40. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +1 -1
  41. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +1 -1
  42. data/lib/ronin/support/binary/ctypes/arch/x86.rb +1 -1
  43. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +1 -1
  44. data/lib/ronin/support/binary/ctypes/arch.rb +1 -1
  45. data/lib/ronin/support/binary/ctypes/array_object_type.rb +1 -1
  46. data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
  47. data/lib/ronin/support/binary/ctypes/big_endian.rb +1 -1
  48. data/lib/ronin/support/binary/ctypes/char_type.rb +1 -1
  49. data/lib/ronin/support/binary/ctypes/char_types.rb +1 -1
  50. data/lib/ronin/support/binary/ctypes/enum_type.rb +1 -1
  51. data/lib/ronin/support/binary/ctypes/float32_type.rb +1 -1
  52. data/lib/ronin/support/binary/ctypes/float64_type.rb +1 -1
  53. data/lib/ronin/support/binary/ctypes/float_type.rb +1 -1
  54. data/lib/ronin/support/binary/ctypes/int16_type.rb +1 -1
  55. data/lib/ronin/support/binary/ctypes/int32_type.rb +1 -1
  56. data/lib/ronin/support/binary/ctypes/int64_type.rb +1 -1
  57. data/lib/ronin/support/binary/ctypes/int8_type.rb +1 -1
  58. data/lib/ronin/support/binary/ctypes/int_type.rb +1 -1
  59. data/lib/ronin/support/binary/ctypes/little_endian.rb +1 -1
  60. data/lib/ronin/support/binary/ctypes/mixin.rb +11 -5
  61. data/lib/ronin/support/binary/ctypes/native.rb +1 -1
  62. data/lib/ronin/support/binary/ctypes/network.rb +1 -1
  63. data/lib/ronin/support/binary/ctypes/object_type.rb +1 -1
  64. data/lib/ronin/support/binary/ctypes/os/android.rb +39 -0
  65. data/lib/ronin/support/binary/ctypes/os/apple_ios.rb +39 -0
  66. data/lib/ronin/support/binary/ctypes/os/bsd.rb +1 -1
  67. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +1 -1
  68. data/lib/ronin/support/binary/ctypes/os/linux.rb +1 -1
  69. data/lib/ronin/support/binary/ctypes/os/macos.rb +1 -1
  70. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +1 -1
  71. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +1 -1
  72. data/lib/ronin/support/binary/ctypes/os/unix.rb +1 -1
  73. data/lib/ronin/support/binary/ctypes/os/windows.rb +1 -1
  74. data/lib/ronin/support/binary/ctypes/os.rb +8 -3
  75. data/lib/ronin/support/binary/ctypes/scalar_type.rb +1 -1
  76. data/lib/ronin/support/binary/ctypes/string_type.rb +1 -1
  77. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +1 -1
  78. data/lib/ronin/support/binary/ctypes/struct_type.rb +1 -1
  79. data/lib/ronin/support/binary/ctypes/type.rb +1 -1
  80. data/lib/ronin/support/binary/ctypes/type_resolver.rb +7 -3
  81. data/lib/ronin/support/binary/ctypes/uint16_type.rb +1 -1
  82. data/lib/ronin/support/binary/ctypes/uint32_type.rb +1 -1
  83. data/lib/ronin/support/binary/ctypes/uint64_type.rb +1 -1
  84. data/lib/ronin/support/binary/ctypes/uint8_type.rb +1 -1
  85. data/lib/ronin/support/binary/ctypes/uint_type.rb +1 -1
  86. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
  87. data/lib/ronin/support/binary/ctypes/union_object_type.rb +1 -1
  88. data/lib/ronin/support/binary/ctypes/union_type.rb +1 -1
  89. data/lib/ronin/support/binary/ctypes.rb +16 -10
  90. data/lib/ronin/support/binary/memory.rb +1 -1
  91. data/lib/ronin/support/binary/packet.rb +1 -1
  92. data/lib/ronin/support/binary/stack.rb +1 -1
  93. data/lib/ronin/support/binary/stream/methods.rb +1 -1
  94. data/lib/ronin/support/binary/stream.rb +1 -1
  95. data/lib/ronin/support/binary/struct/member.rb +1 -1
  96. data/lib/ronin/support/binary/struct.rb +3 -2
  97. data/lib/ronin/support/binary/template.rb +1 -1
  98. data/lib/ronin/support/binary/unhexdump/core_ext/file.rb +1 -1
  99. data/lib/ronin/support/binary/unhexdump/core_ext/string.rb +1 -1
  100. data/lib/ronin/support/binary/unhexdump/core_ext.rb +1 -1
  101. data/lib/ronin/support/binary/unhexdump/parser.rb +1 -1
  102. data/lib/ronin/support/binary/unhexdump.rb +1 -1
  103. data/lib/ronin/support/binary/union.rb +1 -1
  104. data/lib/ronin/support/binary.rb +1 -1
  105. data/lib/ronin/support/cli/ansi.rb +1 -1
  106. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
  107. data/lib/ronin/support/cli/io_shell/core_ext.rb +1 -1
  108. data/lib/ronin/support/cli/io_shell.rb +1 -1
  109. data/lib/ronin/support/cli/printing.rb +1 -1
  110. data/lib/ronin/support/cli.rb +1 -1
  111. data/lib/ronin/support/compression/core_ext/file.rb +1 -1
  112. data/lib/ronin/support/compression/core_ext/string.rb +1 -1
  113. data/lib/ronin/support/compression/core_ext.rb +1 -1
  114. data/lib/ronin/support/compression/gzip/reader.rb +1 -1
  115. data/lib/ronin/support/compression/gzip/writer.rb +1 -1
  116. data/lib/ronin/support/compression/gzip.rb +1 -1
  117. data/lib/ronin/support/compression/mixin.rb +1 -1
  118. data/lib/ronin/support/compression/zlib.rb +1 -1
  119. data/lib/ronin/support/compression.rb +1 -1
  120. data/lib/ronin/support/core_ext/enumerable.rb +1 -1
  121. data/lib/ronin/support/core_ext/file.rb +1 -1
  122. data/lib/ronin/support/core_ext/integer.rb +1 -1
  123. data/lib/ronin/support/core_ext/ipaddr.rb +1 -1
  124. data/lib/ronin/support/core_ext/kernel.rb +1 -1
  125. data/lib/ronin/support/core_ext/string.rb +1 -1
  126. data/lib/ronin/support/core_ext.rb +1 -1
  127. data/lib/ronin/support/crypto/cert.rb +50 -8
  128. data/lib/ronin/support/crypto/cert_chain.rb +1 -1
  129. data/lib/ronin/support/crypto/cipher/aes.rb +1 -1
  130. data/lib/ronin/support/crypto/cipher/aes128.rb +1 -1
  131. data/lib/ronin/support/crypto/cipher/aes256.rb +1 -1
  132. data/lib/ronin/support/crypto/cipher.rb +1 -1
  133. data/lib/ronin/support/crypto/core_ext/file.rb +1 -1
  134. data/lib/ronin/support/crypto/core_ext/string.rb +1 -1
  135. data/lib/ronin/support/crypto/core_ext.rb +1 -1
  136. data/lib/ronin/support/crypto/hmac.rb +1 -1
  137. data/lib/ronin/support/crypto/key/dh.rb +1 -1
  138. data/lib/ronin/support/crypto/key/dsa.rb +1 -1
  139. data/lib/ronin/support/crypto/key/ec.rb +25 -1
  140. data/lib/ronin/support/crypto/key/methods.rb +1 -1
  141. data/lib/ronin/support/crypto/key/rsa.rb +1 -1
  142. data/lib/ronin/support/crypto/key.rb +48 -4
  143. data/lib/ronin/support/crypto/mixin.rb +1 -1
  144. data/lib/ronin/support/crypto/openssl.rb +1 -1
  145. data/lib/ronin/support/crypto.rb +1 -1
  146. data/lib/ronin/support/encoding/base16/core_ext/string.rb +1 -1
  147. data/lib/ronin/support/encoding/base16/core_ext.rb +1 -1
  148. data/lib/ronin/support/encoding/base16.rb +1 -1
  149. data/lib/ronin/support/encoding/base32/core_ext/string.rb +1 -1
  150. data/lib/ronin/support/encoding/base32/core_ext.rb +1 -1
  151. data/lib/ronin/support/encoding/base32.rb +1 -1
  152. data/lib/ronin/support/encoding/base36/core_ext/integer.rb +43 -0
  153. data/lib/ronin/support/encoding/base36/core_ext/string.rb +43 -0
  154. data/lib/ronin/support/encoding/base36/core_ext.rb +20 -0
  155. data/lib/ronin/support/encoding/base36.rb +67 -0
  156. data/lib/ronin/support/encoding/base62/core_ext/integer.rb +43 -0
  157. data/lib/ronin/support/encoding/base62/core_ext/string.rb +43 -0
  158. data/lib/ronin/support/encoding/base62/core_ext.rb +20 -0
  159. data/lib/ronin/support/encoding/base62.rb +93 -0
  160. data/lib/ronin/support/encoding/base64/core_ext/string.rb +1 -1
  161. data/lib/ronin/support/encoding/base64/core_ext.rb +1 -1
  162. data/lib/ronin/support/encoding/base64.rb +1 -1
  163. data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
  164. data/lib/ronin/support/encoding/c/core_ext/string.rb +1 -1
  165. data/lib/ronin/support/encoding/c/core_ext.rb +1 -1
  166. data/lib/ronin/support/encoding/c.rb +1 -1
  167. data/lib/ronin/support/encoding/core_ext/string.rb +1 -1
  168. data/lib/ronin/support/encoding/core_ext.rb +1 -1
  169. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +1 -1
  170. data/lib/ronin/support/encoding/hex/core_ext/string.rb +1 -1
  171. data/lib/ronin/support/encoding/hex/core_ext.rb +1 -1
  172. data/lib/ronin/support/encoding/hex.rb +1 -1
  173. data/lib/ronin/support/encoding/html/core_ext/integer.rb +1 -1
  174. data/lib/ronin/support/encoding/html/core_ext/string.rb +1 -1
  175. data/lib/ronin/support/encoding/html/core_ext.rb +1 -1
  176. data/lib/ronin/support/encoding/html.rb +1 -1
  177. data/lib/ronin/support/encoding/http/core_ext/integer.rb +1 -1
  178. data/lib/ronin/support/encoding/http/core_ext/string.rb +1 -1
  179. data/lib/ronin/support/encoding/http/core_ext.rb +1 -1
  180. data/lib/ronin/support/encoding/http.rb +1 -1
  181. data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
  182. data/lib/ronin/support/encoding/js/core_ext/string.rb +1 -1
  183. data/lib/ronin/support/encoding/js/core_ext.rb +1 -1
  184. data/lib/ronin/support/encoding/js.rb +1 -1
  185. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +1 -1
  186. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +1 -1
  187. data/lib/ronin/support/encoding/powershell/core_ext.rb +1 -1
  188. data/lib/ronin/support/encoding/powershell.rb +1 -1
  189. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +1 -1
  190. data/lib/ronin/support/encoding/punycode/core_ext.rb +1 -1
  191. data/lib/ronin/support/encoding/punycode.rb +1 -1
  192. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +1 -1
  193. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +1 -1
  194. data/lib/ronin/support/encoding/quoted_printable.rb +1 -1
  195. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +1 -1
  196. data/lib/ronin/support/encoding/ruby/core_ext.rb +1 -1
  197. data/lib/ronin/support/encoding/ruby.rb +1 -1
  198. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +1 -1
  199. data/lib/ronin/support/encoding/shell/core_ext/string.rb +1 -1
  200. data/lib/ronin/support/encoding/shell/core_ext.rb +1 -1
  201. data/lib/ronin/support/encoding/shell.rb +1 -1
  202. data/lib/ronin/support/encoding/smtp.rb +1 -1
  203. data/lib/ronin/support/encoding/sql/core_ext/string.rb +1 -1
  204. data/lib/ronin/support/encoding/sql/core_ext.rb +1 -1
  205. data/lib/ronin/support/encoding/sql.rb +1 -1
  206. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +1 -1
  207. data/lib/ronin/support/encoding/uri/core_ext/string.rb +1 -1
  208. data/lib/ronin/support/encoding/uri/core_ext.rb +1 -1
  209. data/lib/ronin/support/encoding/uri.rb +1 -1
  210. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +1 -1
  211. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +1 -1
  212. data/lib/ronin/support/encoding/uuencoding.rb +1 -1
  213. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +1 -1
  214. data/lib/ronin/support/encoding/xml/core_ext/string.rb +1 -1
  215. data/lib/ronin/support/encoding/xml/core_ext.rb +1 -1
  216. data/lib/ronin/support/encoding/xml.rb +1 -1
  217. data/lib/ronin/support/encoding.rb +7 -1
  218. data/lib/ronin/support/home.rb +1 -1
  219. data/lib/ronin/support/mixin.rb +1 -1
  220. data/lib/ronin/support/network/asn/dns_record.rb +1 -1
  221. data/lib/ronin/support/network/asn/list.rb +1 -1
  222. data/lib/ronin/support/network/asn/record.rb +1 -1
  223. data/lib/ronin/support/network/asn/record_set.rb +1 -1
  224. data/lib/ronin/support/network/asn.rb +1 -1
  225. data/lib/ronin/support/network/core_ext.rb +1 -1
  226. data/lib/ronin/support/network/dns/idn.rb +1 -1
  227. data/lib/ronin/support/network/dns/mixin.rb +1 -1
  228. data/lib/ronin/support/network/dns/resolver.rb +1 -1
  229. data/lib/ronin/support/network/dns.rb +1 -1
  230. data/lib/ronin/support/network/domain.rb +1 -1
  231. data/lib/ronin/support/network/email_address.rb +1 -1
  232. data/lib/ronin/support/network/esmtp/mixin.rb +1 -1
  233. data/lib/ronin/support/network/exceptions.rb +1 -1
  234. data/lib/ronin/support/network/ftp/mixin.rb +1 -1
  235. data/lib/ronin/support/network/host.rb +1 -1
  236. data/lib/ronin/support/network/http/cookie.rb +1 -1
  237. data/lib/ronin/support/network/http/core_ext/uri/http.rb +1 -1
  238. data/lib/ronin/support/network/http/core_ext.rb +1 -1
  239. data/lib/ronin/support/network/http/mixin.rb +42 -1
  240. data/lib/ronin/support/network/http/request.rb +86 -9
  241. data/lib/ronin/support/network/http/set_cookie.rb +1 -1
  242. data/lib/ronin/support/network/http/user_agents.rb +1 -1
  243. data/lib/ronin/support/network/http.rb +138 -6
  244. data/lib/ronin/support/network/imap/mixin.rb +1 -1
  245. data/lib/ronin/support/network/ip/mixin.rb +1 -1
  246. data/lib/ronin/support/network/ip.rb +42 -1
  247. data/lib/ronin/support/network/ip_range/cidr.rb +123 -1
  248. data/lib/ronin/support/network/ip_range/glob.rb +150 -10
  249. data/lib/ronin/support/network/ip_range/range.rb +34 -2
  250. data/lib/ronin/support/network/ip_range.rb +120 -5
  251. data/lib/ronin/support/network/mixin.rb +1 -11
  252. data/lib/ronin/support/network/packet.rb +1 -1
  253. data/lib/ronin/support/network/pop3/mixin.rb +1 -1
  254. data/lib/ronin/support/network/proxy.rb +1 -1
  255. data/lib/ronin/support/network/public_suffix/list.rb +1 -1
  256. data/lib/ronin/support/network/public_suffix/suffix.rb +1 -1
  257. data/lib/ronin/support/network/public_suffix/suffix_set.rb +1 -1
  258. data/lib/ronin/support/network/public_suffix.rb +1 -1
  259. data/lib/ronin/support/network/smtp/email.rb +1 -1
  260. data/lib/ronin/support/network/smtp/mixin.rb +1 -1
  261. data/lib/ronin/support/network/smtp.rb +1 -1
  262. data/lib/ronin/support/network/ssl/local_cert.rb +1 -1
  263. data/lib/ronin/support/network/ssl/local_key.rb +1 -1
  264. data/lib/ronin/support/network/ssl/mixin.rb +169 -400
  265. data/lib/ronin/support/network/ssl/openssl.rb +1 -1
  266. data/lib/ronin/support/network/ssl/proxy.rb +1 -1
  267. data/lib/ronin/support/network/ssl.rb +592 -13
  268. data/lib/ronin/support/network/tcp/mixin.rb +1 -1
  269. data/lib/ronin/support/network/tcp/proxy.rb +1 -1
  270. data/lib/ronin/support/network/tcp.rb +1 -1
  271. data/lib/ronin/support/network/telnet/mixin.rb +1 -1
  272. data/lib/ronin/support/network/telnet.rb +1 -1
  273. data/lib/ronin/support/network/tld/list.rb +1 -1
  274. data/lib/ronin/support/network/tld.rb +1 -1
  275. data/lib/ronin/support/network/tls/mixin.rb +174 -348
  276. data/lib/ronin/support/network/tls/proxy.rb +1 -1
  277. data/lib/ronin/support/network/tls.rb +492 -6
  278. data/lib/ronin/support/network/udp/mixin.rb +1 -1
  279. data/lib/ronin/support/network/udp/proxy.rb +1 -1
  280. data/lib/ronin/support/network/udp.rb +1 -1
  281. data/lib/ronin/support/network/unix/mixin.rb +1 -1
  282. data/lib/ronin/support/network/wildcard.rb +88 -0
  283. data/lib/ronin/support/network.rb +1 -1
  284. data/lib/ronin/support/path.rb +1 -1
  285. data/lib/ronin/support/text/core_ext/regexp.rb +1 -1
  286. data/lib/ronin/support/text/core_ext/string.rb +1 -1
  287. data/lib/ronin/support/text/core_ext.rb +1 -1
  288. data/lib/ronin/support/text/entropy/core_ext/string.rb +1 -1
  289. data/lib/ronin/support/text/entropy/core_ext.rb +1 -1
  290. data/lib/ronin/support/text/entropy.rb +1 -1
  291. data/lib/ronin/support/text/erb/mixin.rb +1 -1
  292. data/lib/ronin/support/text/erb.rb +1 -1
  293. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +1 -1
  294. data/lib/ronin/support/text/homoglyph/core_ext.rb +1 -1
  295. data/lib/ronin/support/text/homoglyph/exceptions.rb +1 -1
  296. data/lib/ronin/support/text/homoglyph/table.rb +1 -1
  297. data/lib/ronin/support/text/homoglyph.rb +1 -1
  298. data/lib/ronin/support/text/mixin.rb +1 -1
  299. data/lib/ronin/support/text/patterns/credentials.rb +1 -1
  300. data/lib/ronin/support/text/patterns/crypto.rb +1 -1
  301. data/lib/ronin/support/text/patterns/file_system.rb +1 -1
  302. data/lib/ronin/support/text/patterns/language.rb +1 -1
  303. data/lib/ronin/support/text/patterns/network/public_suffix.rb +1 -1
  304. data/lib/ronin/support/text/patterns/network.rb +1 -1
  305. data/lib/ronin/support/text/patterns/numeric.rb +1 -1
  306. data/lib/ronin/support/text/patterns/pii.rb +1 -1
  307. data/lib/ronin/support/text/patterns/source_code.rb +1 -1
  308. data/lib/ronin/support/text/patterns.rb +1 -1
  309. data/lib/ronin/support/text/random/mixin.rb +1 -1
  310. data/lib/ronin/support/text/random.rb +1 -1
  311. data/lib/ronin/support/text/typo/core_ext/string.rb +1 -1
  312. data/lib/ronin/support/text/typo/core_ext.rb +1 -1
  313. data/lib/ronin/support/text/typo/exceptions.rb +1 -1
  314. data/lib/ronin/support/text/typo/generator.rb +1 -1
  315. data/lib/ronin/support/text/typo.rb +1 -1
  316. data/lib/ronin/support/text.rb +1 -1
  317. data/lib/ronin/support/version.rb +2 -2
  318. data/lib/ronin/support.rb +1 -1
  319. metadata +13 -2
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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
@@ -19,6 +19,7 @@
19
19
  require 'ronin/support/crypto/openssl'
20
20
  require 'ronin/support/crypto/key/rsa'
21
21
  require 'ronin/support/crypto/key/ec'
22
+ require 'ronin/support/network/ip'
22
23
 
23
24
  module Ronin
24
25
  module Support
@@ -45,6 +46,9 @@ module Ronin
45
46
  # @param [String, nil] common_name
46
47
  # The "common name" for the cert (ex: `github.com`).
47
48
  #
49
+ # @param [String, nil] email_address
50
+ # The email address for the cert (ex: `admin@github.com`).
51
+ #
48
52
  # @param [String, nil] organizational_unit
49
53
  # The organizational unit for the cert.
50
54
  #
@@ -66,14 +70,15 @@ module Ronin
66
70
  # @return [Name]
67
71
  # The populated name.
68
72
  #
69
- def self.build(common_name: nil, organizational_unit: nil, organization: nil, locality: nil, state: nil, province: nil, country: nil)
73
+ def self.build(common_name: nil, email_address: nil, organizational_unit: nil, organization: nil, locality: nil, state: nil, province: nil, country: nil)
70
74
  name = new
71
- name.add_entry("CN",common_name) if common_name
72
- name.add_entry("OU",organizational_unit) if organizational_unit
73
- name.add_entry("O",organization) if organization
74
- name.add_entry("L",locality) if locality
75
- name.add_entry("ST",state || province) if (state || province)
76
- name.add_entry("C",country) if country
75
+ name.add_entry("CN",common_name) if common_name
76
+ name.add_entry('emailAddress',email_address) if email_address
77
+ name.add_entry("OU",organizational_unit) if organizational_unit
78
+ name.add_entry("O",organization) if organization
79
+ name.add_entry("L",locality) if locality
80
+ name.add_entry("ST",state || province) if (state || province)
81
+ name.add_entry("C",country) if country
77
82
 
78
83
  return name
79
84
  end
@@ -111,6 +116,17 @@ module Ronin
111
116
  self['CN']
112
117
  end
113
118
 
119
+ #
120
+ # The email address (`emailAddress`) entry.
121
+ #
122
+ # @return [String, nil]
123
+ #
124
+ # @since 1.1.0
125
+ #
126
+ def email_address
127
+ self['emailAddress']
128
+ end
129
+
114
130
  #
115
131
  # The organization (`O`) entry.
116
132
  #
@@ -261,6 +277,12 @@ module Ronin
261
277
  # The optional Certificate Authority (CA) certificate to attach to the
262
278
  # new certificate.
263
279
  #
280
+ # @param [Boolean] ca
281
+ # Indicates whether to add the basicConstraints extension.
282
+ #
283
+ # @param [Array<String>, nil] subject_alt_names
284
+ # List of subject alt names to add into subjectAltName extension.
285
+ #
264
286
  # @param [Symbol] signing_hash
265
287
  # The hashing algorithm to use to sign the new certificate.
266
288
  #
@@ -337,6 +359,8 @@ module Ronin
337
359
  key: ,
338
360
  ca_cert: nil,
339
361
  ca_key: nil,
362
+ ca: false,
363
+ subject_alt_names: nil,
340
364
  signing_hash: :sha256)
341
365
  cert = new
342
366
 
@@ -356,6 +380,24 @@ module Ronin
356
380
  else cert.subject
357
381
  end
358
382
 
383
+ if subject_alt_names
384
+ subject_alt_name = subject_alt_names.map { |alt_name|
385
+ if alt_name.match?(Network::IP::REGEX)
386
+ "IP:#{alt_name}"
387
+ else
388
+ "DNS:#{alt_name}"
389
+ end
390
+ }.join(', ')
391
+
392
+ extensions ||= {}
393
+ extensions = extensions.merge('subjectAltName' => subject_alt_name)
394
+ end
395
+
396
+ if ca
397
+ extensions ||= {}
398
+ extensions = extensions.merge('basicConstraints' => ['CA:TRUE', true])
399
+ end
400
+
359
401
  if extensions
360
402
  extension_factory = OpenSSL::X509::ExtensionFactory.new
361
403
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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
@@ -92,6 +92,30 @@ module Ronin
92
92
  super(*args)
93
93
  end
94
94
 
95
+ #
96
+ # The Elliptical Curve name.
97
+ #
98
+ # @return [String]
99
+ #
100
+ # @since 1.1.0
101
+ #
102
+ def curve
103
+ group.curve_name
104
+ end
105
+
106
+ #
107
+ # The size of the EC key in bits.
108
+ #
109
+ # @return [Integer, nil]
110
+ #
111
+ # @since 1.1.0
112
+ #
113
+ def size
114
+ if (match = to_text.match(/\((\d+) bit\)/))
115
+ match[1].to_i
116
+ end
117
+ end
118
+
95
119
  end
96
120
  end
97
121
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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,7 +40,7 @@ module Ronin
40
40
  # @return [OpenSSL::PKey]
41
41
  # The parsed key.
42
42
  #
43
- # @return [DSA, EC, RSA]
43
+ # @return [DH, DSA, EC, RSA]
44
44
  # The parsed key.
45
45
  #
46
46
  # @raise [ArgumentError]
@@ -53,6 +53,8 @@ module Ronin
53
53
  RSA
54
54
  elsif key.start_with?('-----BEGIN DSA PRIVATE KEY-----')
55
55
  DSA
56
+ elsif key.start_with?('-----BEGIN DH PARAMETERS-----')
57
+ DH
56
58
  elsif key.start_with?('-----BEGIN EC PRIVATE KEY-----')
57
59
  EC
58
60
  else
@@ -74,7 +76,7 @@ module Ronin
74
76
  # @option kwargs [String, nil] :password
75
77
  # Optional password to decrypt the key.
76
78
  #
77
- # @return [DSA, EC, RSA]
79
+ # @return [DH, DSA, EC, RSA]
78
80
  # The parsed key.
79
81
  #
80
82
  # @see parse
@@ -91,7 +93,7 @@ module Ronin
91
93
  # @param [String] path
92
94
  # The path to the key file.
93
95
  #
94
- # @return [DSA, EC, RSA]
96
+ # @return [DH, DSA, EC, RSA]
95
97
  # The loaded key.
96
98
  #
97
99
  # @raise [ArgumentError]
@@ -103,6 +105,48 @@ module Ronin
103
105
  parse(File.read(path))
104
106
  end
105
107
  end
108
+
109
+ #
110
+ # Coerces a value into a {Key} object.
111
+ #
112
+ # @param [String, OpenSSL::PKey::RSA, OpenSSL::PKey::DSA, OpenSSL::PKey::DH , OpenSSL::PKey::EC] key
113
+ # The key String or `OpenSSL::PKey::PKey` value.
114
+ #
115
+ # @return [RSA, DSA, DH, EC]
116
+ # The coerced certificate.
117
+ #
118
+ # @raise [ArgumentError]
119
+ # The key value was not a String or a `OpenSSL::PKey::PKey` object.
120
+ #
121
+ # @raise [NotImplementedError]
122
+ # A new `OpenSSL::PKey::PKey` value that was not `OpenSSL::PKey::RSA`,
123
+ # `OpenSSL::PKey::DSA`, `OpenSSL::PKey::DH`, or `OpenSSL::PKey::EC`
124
+ # was given.
125
+ #
126
+ # @api semipublic
127
+ #
128
+ # @since 1.1.0
129
+ #
130
+ def self.Key(key)
131
+ case key
132
+ when String then Key.parse(key)
133
+ when OpenSSL::PKey::PKey
134
+ key_class = case key
135
+ when OpenSSL::PKey::RSA then Key::RSA
136
+ when OpenSSL::PKey::DSA then Key::DSA
137
+ when OpenSSL::PKey::DH then Key::DH
138
+ when OpenSSL::PKey::EC then Key::EC
139
+ else
140
+ raise(NotImplementedError,"#{key.inspect} is not supported")
141
+ end
142
+
143
+ new_key = key_class.allocate
144
+ new_key.send(:initialize_copy,key)
145
+ new_key
146
+ else
147
+ raise(ArgumentError,"value must be either a String or a OpenSSL::PKey::PKey object: #{key.inspect}")
148
+ end
149
+ end
106
150
  end
107
151
  end
108
152
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ # Copyright (c) 2006-2024 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