class Net::SMTP::AuthCramMD5
Constants
- CRAM_BUFSIZE
- IMASK
- OMASK
Public Instance Methods
auth(user, secret)
click to toggle source
# File net-smtp-0.4.0/lib/net/smtp/auth_cram_md5.rb, line 12 def auth(user, secret) challenge = continue('AUTH CRAM-MD5') crammed = cram_md5_response(secret, challenge.unpack1('m')) finish(base64_encode("#{user} #{crammed}")) end
cram_md5_response(secret, challenge)
click to toggle source
CRAM-MD5: [RFC2195]
# File net-smtp-0.4.0/lib/net/smtp/auth_cram_md5.rb, line 22 def cram_md5_response(secret, challenge) tmp = digest_class::MD5.digest(cram_secret(secret, IMASK) + challenge) digest_class::MD5.hexdigest(cram_secret(secret, OMASK) + tmp) end
cram_secret(secret, mask)
click to toggle source
# File net-smtp-0.4.0/lib/net/smtp/auth_cram_md5.rb, line 29 def cram_secret(secret, mask) secret = digest_class::MD5.digest(secret) if secret.size > CRAM_BUFSIZE buf = secret.ljust(CRAM_BUFSIZE, "\0") 0.upto(buf.size - 1) do |i| buf[i] = (buf[i].ord ^ mask).chr end buf end
digest_class()
click to toggle source
# File net-smtp-0.4.0/lib/net/smtp/auth_cram_md5.rb, line 38 def digest_class @digest_class ||= if defined?(OpenSSL::Digest) OpenSSL::Digest elsif defined?(::Digest) ::Digest else raise '"openssl" or "digest" library is required' end end