0

我有 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 整数。

谢谢!!

4

0 回答 0