Module OpenSSL::X509::Name::RFC2253DN
In: openssl/lib/openssl/x509.rb

Methods

Constants

Special = ',=+<>#;'
HexChar = /[0-9a-fA-F]/
HexPair = /#{HexChar}#{HexChar}/
HexString = /#{HexPair}+/
Pair = /\\(?:[#{Special}]|\\|"|#{HexPair})/
StringChar = /[^#{Special}\\"]/
QuoteChar = /[^\\"]/
AttributeType = /[a-zA-Z][0-9a-zA-Z]*|[0-9]+(?:\.[0-9]+)*/
AttributeValue = / (?!["#])((?:#{StringChar}|#{Pair})*)| \#(#{HexString})| "((?:#{QuoteChar}|#{Pair})*)" /x
TypeAndValue = /\A(#{AttributeType})=#{AttributeValue}/

Public Instance methods

[Source]

# File openssl/lib/openssl/x509.rb, line 94
        def expand_hexstring(str)
          return nil unless str
          der = str.gsub(HexPair){|hex| Integer("0x#{hex}").chr }
          a1 = OpenSSL::ASN1.decode(der)
          return a1.value, a1.tag
        end

[Source]

# File openssl/lib/openssl/x509.rb, line 83
        def expand_pair(str)
          return nil unless str
          return str.gsub(Pair){|pair|
            case pair.size
            when 2 then pair[1,1]
            when 3 then Integer("0x#{pair[1,2]}").chr
            else raise OpenSSL::X509::NameError, "invalid pair: #{str}"
            end
          }
        end

[Source]

# File openssl/lib/openssl/x509.rb, line 101
        def expand_value(str1, str2, str3)
          value = expand_pair(str1)
          value, tag = expand_hexstring(str2) unless value
          value = expand_pair(str3) unless value
          return value, tag
        end

[Source]

# File openssl/lib/openssl/x509.rb, line 108
        def scan(dn)
          str = dn
          ary = []
          while true
            if md = TypeAndValue.match(str)
              matched = md.to_s
              remain = md.post_match
              type = md[1]
              value, tag = expand_value(md[2], md[3], md[4]) rescue nil
              if value
                type_and_value = [type, value]
                type_and_value.push(tag) if tag
                ary.unshift(type_and_value)
                if remain.length > 2 && remain[0] == ?,
                  str = remain[1..-1]
                  next
                elsif remain.length > 2 && remain[0] == ?+
                  raise OpenSSL::X509::NameError,
                    "multi-valued RDN is not supported: #{dn}"
                elsif remain.empty?
                  break
                end
              end
            end
            msg_dn = dn[0, dn.length - str.length] + " =>" + str
            raise OpenSSL::X509::NameError, "malformed RDN: #{msg_dn}"
          end
          return ary
        end

[Validate]