Closed Bug 231881 Opened 21 years ago Closed 21 years ago

export cert functions that decode extensions

Categories

(NSS :: Libraries, enhancement, P2)

x86
Windows 2000
enhancement

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: nelson, Assigned: nelson)

References

Details

Attachments

(2 files)

The CERTCertificate structure contains a pointer to an array of unparsed
extensions.  There are function in nss to parse many (most) of the common
extensions, but most of those functions are not exported, and are declared
in private header files.  

These functions need to be exported and made public.  It is difficult for
applications to make any use of these extensions without the functions to 
parse them.  The Pretty Printing enhancements in bug 132942 will need them.

The issue/question is:  
Do we make some of the existing private header files public?
or do we move the declarations of the affected functions to public headers?

files that contain the relevant declarations include:
certdb/genname.h
certdb/xconst.h 
and perhaps others.
I think the declaration of these functions should be
moved to cert.h.
Summary: export cert functions that decode extensions → export cert functions that decode extensions
Priority: -- → P2
Target Milestone: --- → 3.10
This patch is large, bug the changes it makes are conceptually small.
It touches a lot of lines because functions were renamed for exporting.

Reviewers, please review this bug to see that it does all the following,
and only these things:

1. renames functions as follows:

    cert_get_next_general_name	       -> CERT_GetNextGeneralName
    cert_get_prev_general_name	       -> CERT_GetPrevGeneralName
    cert_get_next_name_constraint      -> CERT_GetNextNameConstraint
    cert_get_prev_name_constraint      -> CERT_GetPrevNameConstraint
    cert_DecodeAuthInfoAccessExtension -> CERT_DecodeAuthInfoAccessExtension

2. Adds declarations for the following functions to cert.h (public file)

CERT_DecodeAltNameExtension(
CERT_DecodeNameConstraintsExtension(
CERT_DecodeAuthInfoAccessExtension(
CERT_DecodePrivKeyUsagePeriodExtension(
CERT_GetNextGeneralName(
CERT_GetPrevGeneralName(
CERT_GetNextNameConstraint(
CERT_GetPrevNameConstraint(

3. Renames struct PKUPEncodedContext to CERTPrivKeyUsagePeriod.
   and moves the declaration to cert.h, and a typedef for it.
   and sorts the struct typedefs into alphabetical order.  

   Also renamed struct AltNameEncodedContext to CERTAltNameEncodedContext

4. removes declarations of the followingt functions from private header
genname.h:

cert_get_next_general_name
cert_get_prev_general_name

5. Renames CERT_EncodePublicKeyUsagePeriod to 
	   CERT_EncodePrivateKeyUsagePeriod.
   The function has always encoded Private Key Usage Periods, and was 
   simply misnamed.  

   Adds new function CERT_DecodePrivKeyUsagePeriodExtension to xconst.c.
   This function complements CERT_EncodePrivateKeyUsagePeriod() and uses 
   the same signature as the other CERT_Decode functions.

6. makes xconst.h idempotent, and compilable by C++.

7. exports the following functions:

CERT_DecodeAltNameExtension;
CERT_DecodeAuthInfoAccessExtension;
CERT_DecodeAuthKeyID;
CERT_DecodeCRLDistributionPoints;
CERT_DecodeNameConstraintsExtension;
CERT_DecodePrivKeyUsagePeriodExtension;
CERT_GetNextGeneralName;
CERT_GetNextNameConstraint;
CERT_GetPrevGeneralName;
CERT_GetPrevNameConstraint;

8. Breaks some lines that were longer than 80 columns.
Comment on attachment 139952 [details] [diff] [review]
patch v1 - see comment 2

Please review.
Attachment #139952 - Flags: review?(wchang0222)
Comment on attachment 139952 [details] [diff] [review]
patch v1 - see comment 2

The patch looks good. My only comment is I would prefer the changes to certt.h
not get checked in.

The only changes in certt.h is to reorder several typedefs. The current
typedefs are orded alphabetically according the newly defined types, the new
order is orded alphabetically according to the base structures of these types.
I believe the original order is more "correct" or "useful" since when humans
look at the file, the are usually know they defined type and what to know what
data structure defines it.

Example:
Original order...
 typedef struct CERTCertificateStr		  CERTCertificate;
 typedef struct CERTCertificateListStr		  CERTCertificateList;
 typedef struct CERTCertificateRequestStr	  CERTCertificateRequest;

New order:
 typedef struct CERTCertificateListStr		  CERTCertificateList;
 typedef struct CERTCertificateRequestStr	  CERTCertificateRequest;
 typedef struct CERTCertificateStr		  CERTCertificate;

r+ because the rest of the patch can go in as is.
Attachment #139952 - Flags: superreview+
Comment on attachment 139952 [details] [diff] [review]
patch v1 - see comment 2

r=wtc.

>+CERTPrivKeyUsagePeriod *
>+CERT_DecodePrivKeyUsagePeriodExtension(PLArenaPool *arena, SECItem *extnValue)
>+{
...
>+    /* decode the policy info */
>+    rv = SEC_QuickDERDecodeItem(arena, pPeriod, 
>+                                CERTPrivateKeyUsagePeriodTemplate,
>+			        &newExtnValue);

The comment is wrong.
Attachment #139952 - Flags: review?(wchang0222) → review+
Comment on attachment 139952 [details] [diff] [review]
patch v1 - see comment 2

Another comment: I think the 'arena' field in the
CERTPrivKeyUsagePeriod structure is useless because
the structure doesn't own that arena and won't need
to allocate memory from that arena after the structure
has been constructed:

>+/* Private Key Usage Period extension struct. */
>+struct CERTPrivKeyUsagePeriodStr {
>+    SECItem notBefore;
>+    SECItem notAfter;
>+    PRArenaPool *arena;
>+};
Blocks: 124923
Bob write:  

> The only changes in certt.h is to reorder several typedefs.

No, there is a new struct in certt.h, and a new typedef for it.
I metnioned that in item 3 of my summary (I said cert.h, but it was 
actually in certt.h).

I'm willing to sort the names by the typedef'ed name, rather than 
the structure name.  
I resorted the typedefs by the typedef name.  This patch is the result.
Comment on attachment 140039 [details] [diff] [review]
Revised patch for certt.h

bob, pls review.
Attachment #140039 - Flags: review?(rrelyea0264)
Comment on attachment 140039 [details] [diff] [review]
Revised patch for certt.h

Looks good.

r=relyea
Attachment #140039 - Flags: review?(rrelyea0264) → review+
No longer blocks: 124923
/cvsroot/mozilla/security/nss/lib/certdb/alg1485.c,v  <--  alg1485.c
new revision: 1.20; previous revision: 1.19

/cvsroot/mozilla/security/nss/lib/certdb/cert.h,v  <--  cert.h
new revision: 1.45; previous revision: 1.44

/cvsroot/mozilla/security/nss/lib/certdb/certdb.c,v  <--  certdb.c
new revision: 1.62; previous revision: 1.61

/cvsroot/mozilla/security/nss/lib/certdb/certt.h,v  <--  certt.h
new revision: 1.25; previous revision: 1.24

/cvsroot/mozilla/security/nss/lib/certdb/genname.c,v  <--  genname.c
new revision: 1.26; previous revision: 1.25

/cvsroot/mozilla/security/nss/lib/certdb/genname.h,v  <--  genname.h
new revision: 1.7; previous revision: 1.6

/cvsroot/mozilla/security/nss/lib/certdb/xconst.c,v  <--  xconst.c
new revision: 1.6; previous revision: 1.5

/cvsroot/mozilla/security/nss/lib/certdb/xconst.h,v  <--  xconst.h
new revision: 1.3; previous revision: 1.2

/cvsroot/mozilla/security/nss/lib/certhigh/ocsp.c,v  <--  ocsp.c
new revision: 1.18; previous revision: 1.17

/cvsroot/mozilla/security/nss/lib/nss/nss.def,v  <--  nss.def
new revision: 1.129; previous revision: 1.128

/cvsroot/mozilla/security/nss/cmd/certcgi/certcgi.c,v  <--  certcgi.c
new revision: 1.15; previous revision: 1.14
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: