module Poke::API::Signature

Public Class Methods

add_optional_information(name, client_info) click to toggle source
# File lib/poke-api/signature.rb, line 76
def self.add_optional_information(name, client_info)
  info_class = POGOProtos::Networking::Envelopes::Signature.const_get(name)
  info_class.new(client_info)
end
add_optional_signature_information(sig, api_client) click to toggle source
# File lib/poke-api/signature.rb, line 65
def self.add_optional_signature_information(sig, api_client)
  %i(android_gps_info sensor_info device_info activity_status location_fix).each do |i|
    name = Helpers.camel_case_lower(i)

    if api_client.send(i)
      message = add_optional_information(name, api_client.send(i))
      i == :location_fix ? (sig.send(i) << message) : sig.send("#{i.to_s}=", message)
    end
  end
end
create_signature(req, req_client, api_client) click to toggle source
# File lib/poke-api/signature.rb, line 33
def self.create_signature(req, req_client, api_client)
  signature = POGOProtos::Networking::Envelopes::Signature.new(
    location_hash1: Helpers.generate_location_one(req.auth_ticket.to_proto, req_client.position),
    location_hash2: Helpers.generate_location_two(req_client.position),
    unknown25: -8537042734809897855,
    timestamp: Helpers.fetch_time,
    timestamp_since_start: Helpers.fetch_time - req_client.start_time
  )

  add_requests(req, signature)
  add_optional_signature_information(signature, api_client)

  logger.debug "[+] Generated Signature \r\n#{signature.inspect}"
  logger.debug "[+] Generated Protobuf Signature \r\n#{signature.to_proto.inspect}"
  add_unknown6(req, signature)
end
generate_signature(signature) click to toggle source
# File lib/poke-api/signature.rb, line 19
def self.generate_signature(signature)
  output_size = Fiddle::Pointer.malloc(1)

  iv = SecureRandom.random_bytes(32)
  encrypt(signature, signature.length, iv, 32, nil, output_size)

  output = Fiddle::Pointer.malloc(288)
  encrypt(signature, signature.length, iv, 32, output, output_size)

  logger.debug "[+] Generated Encrypted Signature \r\n#{output.to_str.inspect}"

  output.to_str
end
load_signature(client) click to toggle source
# File lib/poke-api/signature.rb, line 10
def self.load_signature(client)
  dlload client.sig_path
  extern "int encrypt(const unsigned char *input, size_t input_size," \
         " const unsigned char* iv, size_t iv_size, unsigned char* " \
         "output, size_t * output_size)"
  logger.info '[+] Loaded Signature module'
  client.sig_loaded = true
end

Private Class Methods

add_requests(req, signature) click to toggle source
# File lib/poke-api/signature.rb, line 50
def self.add_requests(req, signature)
  req.requests.each do |r|
    signature.request_hash << Helpers.generate_request(req.auth_ticket.to_proto, r.to_proto)
  end
end
add_unknown6(req, signature) click to toggle source
# File lib/poke-api/signature.rb, line 56
def self.add_unknown6(req, signature)
  req.unknown6 = POGOProtos::Networking::Envelopes::Unknown6.new(
    request_type: 6,
    unknown2: POGOProtos::Networking::Envelopes::Unknown6::Unknown2.new(
      encrypted_signature: generate_signature(signature.to_proto)
    )
  )
end