Sha256: 4c0424a98b702fbba29e37f2b94cca9d80818e7f2138a6ff848e56dc76117e9e

Contents?: true

Size: 786 Bytes

Versions: 1

Compression:

Stored size: 786 Bytes

Contents

# stdlib
require "ipaddr"
require "openssl"

# modules
require_relative "ip_anonymizer/hash_ip"
require_relative "ip_anonymizer/mask_ip"
require_relative "ip_anonymizer/version"

module IpAnonymizer
  def self.mask_ip(ip)
    addr = IPAddr.new(ip.to_s)
    if addr.ipv4?
      # set last octet to 0
      addr.mask(24).to_s
    else
      # set last 80 bits to zeros
      addr.mask(48).to_s
    end
  end

  def self.hash_ip(ip, key:, iterations: 1)
    addr = IPAddr.new(ip.to_s)
    key_len = addr.ipv4? ? 4 : 16
    family = addr.ipv4? ? Socket::AF_INET : Socket::AF_INET6

    keyed_hash = OpenSSL::KDF.pbkdf2_hmac(addr.to_s, salt: key, iterations: iterations, length: key_len, hash: "sha256")
    IPAddr.new(keyed_hash.bytes.inject { |a, b| (a << 8) + b }, family).to_s
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ip_anonymizer-0.3.0 lib/ip_anonymizer.rb