Не удается получить bouncycastle, чтобы правильно пометить построенную строку октета в кодировке der - PullRequest
1 голос
/ 03 августа 2011

У меня есть следующие требования. У меня есть тип asn1, который должен быть инкапсулирован в созданную строку октетов (строка октетов, помеченная как 0x24). Затем эта структура подписывается в блоке со знаком CMS, и весь блок CMS должен быть закодирован с помощью DER.

Моя проблема заключается в том, что каждый раз, когда я DER кодирую блок CMS, созданная строка октетов становится (неконструктированной?) Строкой октетов. Я имею в виду его тег переключается с 0x24 (что мне нужно) на 0x04.

Это ошибка Bouncycastle или я делаю то, что не должен? Игнорируя блок CMS, кажется, что всякий раз, когда я пытаюсь закодировать 'BerConstructedOctetString', он больше не является составной строкой октетов:

BERConstructedOctetString constructed = new BERConstructedOctetString(new DERInteger(3));
ASN1Object nonConstructed= new DEROctetString(new DERInteger(3));

System.out.println(Util.toHex(constructed.getDEREncoded()));
System.out.println(Util.toHex(nonConstructed.getDEREncoded()));
System.out.println(Util.toHex(constructed.getEncoded()));
System.out.println(Util.toHex(nonConstructed.getEncoded()));

Со следующим выводом:

04:03:02:01:03
04:03:02:01:03
24:80:04:03:02:01:03:00:00
04:03:02:01:03

Редактировать: это вообще возможно? Есть ли причина, по которой bouncycastle и not-commons-ssl содержат ' Ber ConstructedOctetString', которые кодируют и маркируют как 0x04 при кодировании в DER? Мои два требования несовместимы?

1 Ответ

1 голос
/ 04 августа 2011

Я всегда хожу по этой ссылке от старых Лабораторий RSA, чтобы ответить на вопросы о кодировании BER / DER.В этом случае посмотрите на правило № 3 в разделе 4 (Правила кодирования DER):

3. For simple string types and implicitly tagged types derived from
simple string types, the primitive, definite-length method must be
employed.

Если я правильно прочитал это, это приведет к принудительному кодированию при 0x04, если вы запросите кодирование DER.

...