OID.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package org.openspcoop2.utils.certificate;

import org.bouncycastle.asn1.x500.style.BCStyle;

/**
 * OID
 *
 * @author Poli Andrea (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public enum OID {

	CN(BCStyle.CN), // [2.5.4.3] common name
	C(BCStyle.C), // [2.5.4.6] country code 
	OU(BCStyle.OU), // [2.5.4.11] organizational unit name
	O(BCStyle.O), // [2.5.4.10] organization name
	L(BCStyle.L), // [2.5.4.7] locality name
	ST(BCStyle.ST), // [2.5.4.8] state, or province name
	
	ORGANIZATION_IDENTIFIER(BCStyle.ORGANIZATION_IDENTIFIER), // [2.5.4.97]
	
	T(BCStyle.T),  // [2.5.4.12]
	SERIALNUMBER(BCStyle.SERIALNUMBER), // [2.5.4.5] device serial number name
	NAME(BCStyle.NAME), //  [2.5.4.41]
	SURNAME(BCStyle.SURNAME), // [2.5.4.4] Naming attributes of type X520name
	GIVENNAME(BCStyle.GIVENNAME), // [2.5.4.42] 
	STREET(BCStyle.STREET), // [2.5.4.9]
	POSTAL_CODE(BCStyle.POSTAL_CODE), // [2.5.4.17]
	POSTAL_ADDRESS(BCStyle.POSTAL_ADDRESS), // [2.5.4.16] RFC 3039 PostalAddress
	TELEPHONE_NUMBER(BCStyle.TELEPHONE_NUMBER), // [2.5.4.20]
	INITIALS(BCStyle.INITIALS), // [2.5.4.43] 
	GENERATION(BCStyle.GENERATION), // [2.5.4.44]
	UNIQUE_IDENTIFIER(BCStyle.UNIQUE_IDENTIFIER), // [2.5.4.45]
	DESCRIPTION(BCStyle.DESCRIPTION), // [2.5.4.13] 
	BUSINESS_CATEGORY(BCStyle.BUSINESS_CATEGORY), // [2.5.4.15] 
	DN_QUALIFIER(BCStyle.DN_QUALIFIER), // [2.5.4.46]
	PSEUDONYM(BCStyle.PSEUDONYM), // [2.5.4.65] RFC 3039 Pseudonym
	ROLE(BCStyle.ROLE), // [2.5.4.72]
	DMD_NAME(BCStyle.DMD_NAME), // [2.5.4.54] RFC 2256 dmdName
	/**@SuppressWarnings("deprecation")
	@Deprecated
	SN(BCStyle.SN), // [2.5.4.5] use SERIALNUMBER or SURNAME */
	
	UID(BCStyle.UID), // [0.9.2342.19200300.100.1.1]
	DC(BCStyle.DC), // [0.9.2342.19200300.100.1.25]
	
	EMAIL_ADDRESS(BCStyle.EmailAddress), // [1.2.840.113549.1.9.1]
	E(BCStyle.E), // [1.2.840.113549.1.9.1] email address in Verisign certificates
	UNSTRUCTURED_NAME(BCStyle.UnstructuredName), // [1.2.840.113549.1.9.2]
	UNSTRUCTURED_ADDRESS(BCStyle.UnstructuredAddress), // [1.2.840.113549.1.9.8]
	
	NAME_AT_BIRTH(BCStyle.NAME_AT_BIRTH),  // [1.3.36.8.3.14] ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64)
	DATE_OF_BIRTH(BCStyle.DATE_OF_BIRTH), // [1.3.6.1.5.5.7.9.1] RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z
	PLACE_OF_BIRTH(BCStyle.PLACE_OF_BIRTH), // [1.3.6.1.5.5.7.9.2] RFC 3039 PlaceOfBirth
	GENDER(BCStyle.GENDER), // [1.3.6.1.5.5.7.9.3]
	COUNTRY_OF_CITIZENSHIP(BCStyle.COUNTRY_OF_CITIZENSHIP), // [1.3.6.1.5.5.7.9.4] RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 codes only
	COUNTRY_OF_RESIDENCE(BCStyle.COUNTRY_OF_RESIDENCE); // [1.3.6.1.5.5.7.9.5] RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166 codes only
		

	
	
	private String oidValue;
	private org.bouncycastle.asn1.ASN1ObjectIdentifier oidBC;
	
	OID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid) {
		this.oidValue = oid.getId();
		this.oidBC = oid;
	}
	
	public String getID() {
		return this.oidValue;
	}
	public org.bouncycastle.asn1.ASN1ObjectIdentifier getOID() {
		if(this.oidBC!=null) {
			return this.oidBC;
		}
		else {
			return new org.bouncycastle.asn1.ASN1ObjectIdentifier(this.oidValue);
		}
	}
	
	@Override
	public String toString() {
		return toString(false);
	}
	public String toString(boolean printOID) {
		if(printOID) {
			return this.name()+" ("+this.oidValue+")";
		}
		else {
			return this.name();
		}
	}
	
	public static OID toOID(String id) {
		OID [] v = OID.values();
		for (OID oid : v) {
			if(oid.oidValue.equals(id)) {
				return oid;
			}
		}
		return null;
	}
	public static OID toOID(org.bouncycastle.asn1.ASN1ObjectIdentifier idBC) {
		OID [] v = OID.values();
		for (OID oid : v) {
			if(oid.oidBC.equals(idBC)) {
				return oid;
			}
		}
		return null;
	}
}