Support for the Ruby 2.4 series has ended. See here for reference.
The TrustDir manages the trusted certificates for gem signature verification.
Default permissions for the trust directory and its contents
Creates a new TrustDir using dir where the directory and file permissions will be checked according to permissions
 
               # File rubygems/security/trust_dir.rb, line 25
def initialize dir, permissions = DEFAULT_PERMISSIONS
  @dir = dir
  @permissions = permissions
  @digester = Gem::Security::DIGEST_ALGORITHM
end
             
            Returns the path to the trusted certificate
 
               # File rubygems/security/trust_dir.rb, line 35
def cert_path certificate
  name_path certificate.subject
end
             
            Enumerates trusted certificates.
 
               # File rubygems/security/trust_dir.rb, line 42
def each_certificate
  return enum_for __method__ unless block_given?
  glob = File.join @dir, '*.pem'
  Dir[glob].each do |certificate_file|
    begin
      certificate = load_certificate certificate_file
      yield certificate, certificate_file
    rescue OpenSSL::X509::CertificateError
      next # HACK warn
    end
  end
end
             
            Returns the issuer certificate of the given certificate if it exists in the trust directory.
 
               # File rubygems/security/trust_dir.rb, line 62
def issuer_of certificate
  path = name_path certificate.issuer
  return unless File.exist? path
  load_certificate path
end
             
            Loads the given certificate_file
 
               # File rubygems/security/trust_dir.rb, line 82
def load_certificate certificate_file
  pem = File.read certificate_file
  OpenSSL::X509::Certificate.new pem
end
             
            Returns the path to the trusted certificate with the given ASN.1 name
 
               # File rubygems/security/trust_dir.rb, line 73
def name_path name
  digest = @digester.hexdigest name.to_s
  File.join @dir, "cert-#{digest}.pem"
end
             
            Add a certificate to trusted certificate list.
 
               # File rubygems/security/trust_dir.rb, line 91
def trust_cert certificate
  verify
  destination = cert_path certificate
  open destination, 'wb', @permissions[:trusted_cert] do |io|
    io.write certificate.to_pem
  end
end
             
            Make sure the trust directory exists. If it does exist, make sure it's actually a directory. If not, then create it with the appropriate permissions.
 
               # File rubygems/security/trust_dir.rb, line 106
def verify
  if File.exist? @dir then
    raise Gem::Security::Exception,
      "trust directory #{@dir} is not a directory" unless
        File.directory? @dir
    FileUtils.chmod 0700, @dir
  else
    FileUtils.mkdir_p @dir, :mode => @permissions[:trust_dir]
  end
end