libtomcrypt
libtomcrypt copied to clipboard
How to encode [0] IMPLICIT SET OF?
Prerequisites
- [x] Checked the developer manual
- [x] Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=repo%3Alibtom%2Flibtomcrypt
- [x] Checked that your issue isn't due to the fact that you're using asymmetric cryptography and you forgot linking in and/or setting an MPI provider (usually this causes either random crashes or runtime errors like
LTC_ARGCHK 'ltc_mp.name != NULL' failure ...
). c.f. Ch. "Math Descriptors" of the developer manual. - [x] Checked that your issue isn't related to TomsFastMath's limitation that PK operations can by default only be done with max. 2048bit keys
Description
How can I construct, using libtomcrypt release 1.18.2, a struct of type ltc_asn1_list
that, when nested inside a SEQUENCE and encoded, will produce an encoded DER SET OF with an IMPLICIT CONTEXT SENSITIVE [0] tag (as in CMS SignedData certificates, for example)?
If I set list.type = LTC_ASN1_SETOF
, I get a properly encoded SET but the tag is 0x31 (UNIVERSAL SET). I can manually change the tag after encoding to 0xA0, except that the SET is nested inside layers of ASN.1 data. If I use list.type = LTC_ASN1_CUSTOM_TYPE
, I can get the tag I want, but the function der_encode_custom_type()
encodes the items like a SEQUENCE, not in sorted order like a DER SET. If I use the macro LTC_SET_ASN1_CUSTOM_CONSTRUCTED
, I can nest a SET inside a custom typed SEQUENCE, creating an EXPLICIT tag.
Am I missing something? Is there a solution in the latest developer version? It seems that I must either change the tag manually after encoding, or else pre-sort the items manually within the array list.data
. A fix would be to look during der_encode_custom_type()
for list.used=LTC_ASN1_SETOF
.
Steps to Reproduce
Version
Release 1.18.2