package es.uji.security.util.asn1;
import java.math.BigInteger;
public class DERObjectIdentifier
{
public static String getOIDasString(
byte[] bytes, int ini, int fin)
{
StringBuffer objId = new StringBuffer();
long value = 0;
BigInteger bigValue = null;
boolean first = true;
for (int i = ini; i != ini+fin; i++)
{
int b = bytes[i] & 0xff;
if (value < 0x80000000000000L)
{
value = value * 128 + (b & 0x7f);
if ((b & 0x80) == 0) // end of number reached
{
if (first)
{
switch ((int)value / 40)
{
case 0:
objId.append('0');
break;
case 1:
objId.append('1');
value -= 40;
break;
default:
objId.append('2');
value -= 80;
}
first = false;
}
objId.append('.');
objId.append(value);
value = 0;
}
}
else
{
if (bigValue == null)
{
bigValue = BigInteger.valueOf(value);
}
bigValue = bigValue.shiftLeft(7);
bigValue = bigValue.or(BigInteger.valueOf(b & 0x7f));
if ((b & 0x80) == 0)
{
objId.append('.');
objId.append(bigValue);
bigValue = null;
value = 0;
}
}
}
return objId.toString();
}
public static String getHashAlgorithFromOID(String oid){
if (oid.equals("1.3.14.3.2.26")){
return "SHA1";
}
else if (oid.equals("2.16.840.1.101.3.4.2.1")){
return "SHA256";
}
else if (oid.equals("2.16.840.1.101.3.4.2.2")){
return "SHA384";
}
else if (oid.equals("2.16.840.1.101.3.4.2.3")){
return "SHA512";
}
return "UNKNOWN";
}
}