dc9194f78b
It's not possible to encode an OID with only one component, so some of the NIDs do not have encodings. The logic to actually encode OIDs checks for this (before calling der_it), but not the logic to compute the sorted OID list. Without this, OBJ_obj2nid, when given an empty OID, returns something arbitrary based on the binary search implementation instead of NID_undef. Change-Id: Ib68bae349f66eff3d193616eb26491b6668d4b0a Reviewed-on: https://boringssl-review.googlesource.com/7752 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com> |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
obj_dat.h | ||
obj_dat.pl | ||
obj_mac.num | ||
obj_test.cc | ||
obj_xref.c | ||
obj_xref.h | ||
obj_xref.pl | ||
obj_xref.txt | ||
obj.c | ||
objects.pl | ||
objects.txt | ||
README |
OID information is generated via a series of perl scripts. In order, the full list of commands to run are: perl objects.pl objects.txt obj_mac.num ../../include/openssl/nid.h perl obj_dat.pl ../../include/openssl/nid.h obj_dat.h perl obj_xref.pl obj_mac.num obj_xref.txt > obj_xref.h objects.txt contains the list of all built-in OIDs. It is processed by objects.pl to output obj_mac.num and nid.h. obj_mac.num is the list of NID values for each OID. This is an input/output parameter so NID values are stable across regenerations. nid.h is the header which defines macros for all the built-in OIDs in C. nid.h is read by obj_dat.pl to generate obj_dat.h. obj_dat.h contains the ASN1_OBJECTs corresponding to built-in OIDs themselves along with lookup tables for search by short name, OID, etc. obj_mac.num and obj_xref.txt are read by obj_xref.pl to generate obj_xref.h. obj_xref.txt links signature OIDs to corresponding public key algorithms and digests. obj_xref.h contains lookup tables for querying this information in both directions. Dependency graph: objects.txt | V [objects.pl] <--+ / \ | V V | nid.h obj_mac.num obj_xref.txt | \ / V V V [obj_dat.pl] [obj_xref.pl] | | V V obj_dat.h obj_xref.h