Sha256: 181452d4ef2954e64aba09c6bbdb47924dfd25619a45d614ae5f6afaab26563c

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

require 'base64'
require 'openssl'

module Ipizza
  class Util
    
    class << self
      
      def verify_signature(certificate_path, signature, data)
        certificate = OpenSSL::X509::Certificate.new(File.read(certificate_path).gsub(/  /, '')).public_key
        @valid = certificate.verify(OpenSSL::Digest::SHA1.new, Base64.decode64(signature), data)
      end
      
      def sign(privkey_path, privkey_secret, data)
        privkey = File.open(privkey_path, 'r') { |f| f.read }
        privkey = OpenSSL::PKey::RSA.new(privkey.gsub(/  /, ''), privkey_secret)

        signature = privkey.sign(OpenSSL::Digest::SHA1.new, data)
        signature = Base64.encode64(signature).gsub(/\n/, '')
      end

      # Calculates and adds control number using 7-3-1 algoritm for Estonian banking account and reference numbers.
      def sign_731(ref_num)
        arr = ref_num.to_s.reverse.split('')
        m = 0
        r = 0

        arr.each do |e|
          m = case m
          when 7
            3
          when 3
            1
          else
            7
          end
          r = r + (e.to_i * m)
        end
        c = ((r + 9) / 10).to_f.truncate * 10 - r
        arr.reverse! << c
        arr.join
      end

      # Produces string to be signed out of service message parameters.
      #
      #   p(x1)||x1||p(x2)||x2||...||p(xn)||xn
      #
      # Where || is string concatenation, p(x) is length of the field x represented by three digits.
      #
      # Parameters val1, val2, value3 would be turned into "003val1003val2006value3".
      def mac_data_string(params, sign_param_order)
        sign_param_order.inject('') do |memo, param|
          val = params[param].to_s
          memo << func_p(val) << val
          memo
        end
      end

      private

      # p(x) is length of the field x represented by three digits
      def func_p(val)
        if RUBY_VERSION < '1.9'
          sprintf("%03i", val.size)
        else 
          sprintf("%03i", val.bytesize)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ipizza-1.0.0 lib/ipizza/util.rb