Module: Urg

Defined in:
lib/urg.rb

Constant Summary collapse

DEFAULT_PUBLIC_KEY_URI =
"https://urg-public-keys.s3-us-west-2.amazonaws.com/urg-exfil.pub"

Class Method Summary collapse

Class Method Details

.exfil(object, key: DEFAULT_PUBLIC_KEY_URI) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/urg.rb', line 9

def self.exfil(object, key: DEFAULT_PUBLIC_KEY_URI)
  if key
    public_key_uri = URI.parse(key)
    public_key = OpenSSL::PKey::RSA.new(public_key_uri.read)
    str = Base64.encode64(public_key.public_encrypt(Base64.encode64(Zlib::Deflate.deflate(Marshal.dump(object))), OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING))
    key_arg = key == DEFAULT_PUBLIC_KEY_URI ? "\"#{key}\"" : "YOUR_PRIVATE_KEY_LOCATION"
  else
    str = Base64.encode64(Zlib::Deflate.deflate(Marshal.dump(object)))
    key_arg = "nil"
  end

  puts "🚀"*20
  puts "Urg.infil(\"#{str}\", key: #{key_arg})"
  puts "🚀"*20
end

.infil(str, key: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/urg.rb', line 25

def self.infil(str, key:nil)
  unless key
    return Marshal.load(Zlib::Inflate.inflate(Base64.decode64(str)))
  end

  if key == DEFAULT_PUBLIC_KEY_URI
    private_key_content = ENV["URG_EXFIL_PRIVATE_KEY"]
  else
    private_key_content = open(key)
  end

  private_key = OpenSSL::PKey::RSA.new(private_key_content)
  Marshal.load(Zlib::Inflate.inflate(Base64.decode64(private_key.private_decrypt(Base64.decode64(str), OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING))))
end