mirror of
https://github.com/square/certigo.git
synced 2024-04-21 12:32:40 +00:00
44 lines
1.8 KiB
Go
44 lines
1.8 KiB
Go
package lib
|
|
|
|
import "encoding/asn1"
|
|
|
|
// OidDescription returns a human-readable name, a short acronym from RFC1485, a snake_case slug suitable as a json key,
|
|
// and a boolean describing whether multiple copies can appear on an X509 cert.
|
|
type OidDescription struct {
|
|
Name string
|
|
Short string
|
|
Slug string
|
|
Multiple bool
|
|
}
|
|
|
|
func describeOid(oid asn1.ObjectIdentifier) OidDescription {
|
|
raw := oid.String()
|
|
// Multiple should be true for any types that are []string in x509.pkix.Name. When in doubt, set it to true.
|
|
names := map[string]OidDescription{
|
|
"2.5.4.3": {"CommonName", "CN", "common_name", false},
|
|
"2.5.4.5": {"EV Incorporation Registration Number", "", "ev_registration_number", false},
|
|
"2.5.4.6": {"Country", "C", "country", true},
|
|
"2.5.4.7": {"Locality", "L", "locality", true},
|
|
"2.5.4.8": {"Province", "ST", "province", true},
|
|
"2.5.4.10": {"Organization", "O", "organization", true},
|
|
"2.5.4.11": {"Organizational Unit", "OU", "organizational_unit", true},
|
|
"2.5.4.15": {"Business Category", "", "business_category", true},
|
|
"1.2.840.113549.1.9.1": {"Email Address", "", "email_address", true},
|
|
"1.3.6.1.4.1.311.60.2.1.1": {"EV Incorporation Locality", "", "ev_locality", true},
|
|
"1.3.6.1.4.1.311.60.2.1.2": {"EV Incorporation Province", "", "ev_province", true},
|
|
"1.3.6.1.4.1.311.60.2.1.3": {"EV Incorporation Country", "", "ev_country", true},
|
|
}
|
|
if description, ok := names[raw]; ok {
|
|
return description
|
|
}
|
|
return OidDescription{raw, "", raw, true}
|
|
}
|
|
|
|
func oidShort(oid asn1.ObjectIdentifier) string {
|
|
return describeOid(oid).Short
|
|
}
|
|
|
|
func oidName(oid asn1.ObjectIdentifier) string {
|
|
return describeOid(oid).Name
|
|
}
|