paiementcic/lib/paiement_cic.rb

49 lines
1.2 KiB
Ruby
Raw Normal View History

require 'paiement_cic/tpe'
require 'paiement_cic/railtie' if defined?(Rails)
2009-08-17 10:37:35 +02:00
require 'digest/sha1'
class String
def ^(other)
raise ArgumentError, "Can't bitwise-XOR a String with a non-String" \
unless other.kind_of? String
raise ArgumentError, "Can't bitwise-XOR strings of different length" \
unless self.length == other.length
result = (0..self.length-1).collect { |i| self[i].ord ^ other[i].ord }
2009-08-17 10:37:35 +02:00
result.pack("C*")
end
end
module PaiementCic
API_VERSION = "3.0"
DATE_FORMAT = "%d/%m/%Y:%H:%M:%S"
2013-06-05 10:28:56 +02:00
class << self
attr_accessor :hmac_key, :tpe, :societe, :env
attr_writer :target_url
2009-12-21 11:24:45 +01:00
def configure(&block)
yield(self) if block_given?
2013-06-05 10:28:56 +02:00
end
2009-12-21 11:24:45 +01:00
def target_url
@target_url ||= (env == 'production' ? '' : "https://paiement.creditmutuel.fr/test/paiement.cgi") # "https://ssl.paiement.cic-banques.fr/paiement.cgi"
end
2009-12-21 11:24:45 +01:00
def hmac_sha1(key, data)
length = 64
2009-12-21 11:24:45 +01:00
if (key.length > length)
key = [Digest::SHA1.hexdigest(key)].pack("H*")
end
2009-12-21 11:24:45 +01:00
key = key.ljust(length, 0.chr)
2009-12-21 11:24:45 +01:00
k_ipad = key ^ ''.ljust(length, 54.chr)
k_opad = key ^ ''.ljust(length, 92.chr)
2009-12-21 11:24:45 +01:00
Digest::SHA1.hexdigest(k_opad + [Digest::SHA1.hexdigest(k_ipad + data)].pack("H*"))
2013-06-05 10:28:56 +02:00
end
end
2009-12-21 11:24:45 +01:00
end