package com.catherine.securitysample.certificate.extensions;

import com.catherine.securitysample.certificate.extensions.interfaces.ExtendedKeyUsage;

import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.asn1.x509.KeyPurposeId;
import org.bouncycastle.x509.extension.X509ExtensionUtil;

import java.io.IOException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author Catherine
 *
 */
public class ExtendedKeyUsageImpl implements ExtendedKeyUsage{
	private List<String> keyPurposeIds;

	public ExtendedKeyUsageImpl(X509Certificate cert) throws IOException {
		keyPurposeIds = new ArrayList<>();
		byte[] extVal = cert.getExtensionValue(Extension.extendedKeyUsage.getId());
		if (extVal == null)
			return;
		org.bouncycastle.asn1.x509.ExtendedKeyUsage usage = org.bouncycastle.asn1.x509.ExtendedKeyUsage
				.getInstance(X509ExtensionUtil.fromExtensionValue(extVal));
		KeyPurposeId[] usages = usage.getUsages();
		for (int i = 0; i < usages.length; i++) {
			keyPurposeIds.add(usages[i].getId());
		}
	}

	@Override
	public List<String> getKeyPurposeIds() {
		return keyPurposeIds;
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(OIDMap.getName(Extension.extendedKeyUsage.getId()));
		sb.append(" [\n");
		for (int i = 0; i < keyPurposeIds.size(); i++) {
			sb.append("keyPurposeIds:");
			sb.append(OIDMap.getName(keyPurposeIds.get(i)));
			sb.append("\n");
		}
		sb.append("]\n");
		return sb.toString();
	}
}