Module: OpenSSL::X509::Name::RFC2253DN

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

### Methods

expand_hexstring expand_pair expand_value scan

### 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

expand_hexstring(str)

[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

expand_pair(str)

[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

expand_value(str1, str2, str3)

[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

scan(dn)

[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]