All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fitbur.bouncycastle.asn1.x509.X509NameEntryConverter Maven / Gradle / Ivy

There is a newer version: 1.0.0
Show newest version
package com.fitbur.bouncycastle.asn1.x509;

import java.io.IOException;

import com.fitbur.bouncycastle.asn1.ASN1InputStream;
import com.fitbur.bouncycastle.asn1.ASN1ObjectIdentifier;
import com.fitbur.bouncycastle.asn1.ASN1Primitive;
import com.fitbur.bouncycastle.asn1.DERPrintableString;
import com.fitbur.bouncycastle.util.Strings;

/**
 * It turns out that the number of standard ways the fields in a DN should be 
 * encoded into their ASN.1 counterparts is rapidly approaching the
 * number of machines on the internet. By com.fitburfault the X509Name class 
 * will produce UTF8Strings in line with the current recommendations (RFC 3280).
 * 

* An example of an encoder look like below: *

 * public class X509DirEntryConverter
 *     extends X509NameEntryConverter
 * {
 *     public ASN1Primitive getConvertedValue(
 *         ASN1ObjectIdentifier  oid,
 *         String               value)
 *     {
 *         if (str.length() != 0 && str.charAt(0) == '#')
 *         {
 *             return convertHexEncoded(str, 1);
 *         }
 *         if (oid.equals(EmailAddress))
 *         {
 *             return new DERIA5String(str);
 *         }
 *         else if (canBePrintable(str))
 *         {
 *             return new DERPrintableString(str);
 *         }
 *         else if (canBeUTF8(str))
 *         {
 *             return new DERUTF8String(str);
 *         }
 *         else
 *         {
 *             return new DERBMPString(str);
 *         }
 *     }
 * }
 * 
*/ public abstract class X509NameEntryConverter { /** * Convert an inline encoded hex string rendition of an ASN.1 * object back into its corresponding ASN.1 object. * * @param str the hex encoded object * @param off the index at which the encoding starts * @return the com.fitburcoded object */ protected ASN1Primitive convertHexEncoded( String str, int off) throws IOException { str = Strings.toLowerCase(str); byte[] data = new byte[(str.length() - off) / 2]; for (int index = 0; index != data.length; index++) { char left = str.charAt((index * 2) + off); char right = str.charAt((index * 2) + off + 1); if (left < 'a') { data[index] = (byte)((left - '0') << 4); } else { data[index] = (byte)((left - 'a' + 10) << 4); } if (right < 'a') { data[index] |= (byte)(right - '0'); } else { data[index] |= (byte)(right - 'a' + 10); } } ASN1InputStream aIn = new ASN1InputStream(data); return aIn.readObject(); } /** * return true if the passed in String can be represented without * loss as a PrintableString, false otherwise. */ protected boolean canBePrintable( String str) { return DERPrintableString.isPrintableString(str); } /** * Convert the passed in String value into the appropriate ASN.1 * encoded object. * * @param oid the oid associated with the value in the DN. * @param value the value of the particular DN com.fitburponent. * @return the ASN.1 equivalent for the value. */ public abstract ASN1Primitive getConvertedValue(ASN1ObjectIdentifier oid, String value); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy