我有 ASN.1 八位字节、位串、UTC 时间类型和除 ASN.1 整数转换之外的所有 ASN.1 类型的 DER 编码。
我在下面粘贴了示例代码
-(void)appendBITSTRING:(NSData *)data into:(NSMutableData *)into
{
char strtype = 0x04; //OCTET String
[into appendBytes:&strtype length:1];
[self appendDERLength:[data length] into:into];
[into appendData:data];
NSString *myString = [[NSString alloc] initWithData:into
encoding:NSUTF8StringEncoding];
}
// UTC TIME
-(void)appendUTCSTRING:(NSData *)data into:(NSMutableData *)into
{
char strtype = 0x17; //UTC String
[into appendBytes:&strtype length:1];
[self appendDERLength:[data length] into:into];
[into appendData:data];
NSString *myString = [[NSString alloc] initWithData:into
encoding:NSUTF8StringEncoding];
NSLog(@"myString :: %@", myString);
}
-(void)appendDERLength:(size_t)length into:(NSMutableData *)into
{
assert(length < 0x8000);
if (length < 128)
{
uint8_t d = length;
[into appendBytes:&d length:1];
}
else if (length < 0x100)
{
uint8_t d[2] = {0x81, length & 0xFF};
[into appendBytes:&d length:2];
}
else if (length < 0x8000)
{
uint8_t d[3] = {0x82, (length & 0xFF00) >> 8, length & 0xFF};
[into appendBytes:&d length:3];
}
}
到目前为止,我们正在维护硬编码数组来表示 ASN.1 整数,例如: uint8_t version[3] = {0x02, 0x01, 0x01}; uint8_t serailnumber = {0x02, 0x05, 0x00, 0xCB, 0xE8, 0x39, 0xAF} 所以无论如何在代码中形成如上所述的八位位组/utc 以形成 Asn1 整数。
谢谢!!