- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
bool ASN1Parser::ConvertOID(const ASN1Block &blk, char *oid, unsigned int bufSize) {
int a = 0;
bool first = true;
char tmp[32];
oid[0] = 0;
for (unsigned int i=0;i<blk.size;i++) {
unsigned char c = data[blk.offset+i];
if (c & 0x80) {
a = (a << 7) | (c & 0x7F);
} else {
a = (a << 7) | (c & 0x7F);
if (!first) {
sprintf(tmp,".%d",a);
} else {
sprintf(tmp,"%d.%d",a/40,a%40);
}
a=0;
first = false;
if (strlen(tmp) >= bufSize) return false;
strcat(oid, tmp);
}
}
return true;
}
И еще один говнокодец на тему ASN.1 - распаковка OID'а.
Кто найдет ошибку - получит пирожок с полочки ;)