nsspki1.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:80k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* 
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. #ifndef NSSPKI1_H
  34. #define NSSPKI1_H
  35. #ifdef DEBUG
  36. static const char NSSPKI1_CVS_ID[] = "@(#) $RCSfile: nsspki1.h,v $ $Revision: 1.1 $ $Date: 2000/03/31 19:16:20 $ $Name: NSS_3_1_1_RTM $";
  37. #endif /* DEBUG */
  38. /*
  39.  * nsspki1.h
  40.  *
  41.  * This file contains the prototypes of the public NSS routines 
  42.  * dealing with the PKIX part-1 definitions.
  43.  */
  44. #ifndef NSSBASET_H
  45. #include "nssbaset.h"
  46. #endif /* NSSBASET_H */
  47. #ifndef NSSPKI1T_H
  48. #include "nsspki1t.h"
  49. #endif /* NSSPKI1T_H */
  50. #ifndef OIDDATA_H
  51. #include "oiddata.h"
  52. #endif /* OIDDATA_H */
  53. PR_BEGIN_EXTERN_C
  54. /*
  55.  * NSSOID
  56.  *
  57.  * The public "methods" regarding this "object" are:
  58.  *
  59.  *  NSSOID_CreateFromBER   -- constructor
  60.  *  NSSOID_CreateFromUTF8  -- constructor
  61.  *  (there is no explicit destructor)
  62.  * 
  63.  *  NSSOID_GetDEREncoding
  64.  *  NSSOID_GetUTF8Encoding
  65.  */
  66. extern const NSSOID *NSS_OID_UNKNOWN;
  67. /*
  68.  * NSSOID_CreateFromBER
  69.  *
  70.  * This routine creates an NSSOID by decoding a BER- or DER-encoded
  71.  * OID.  It may return NSS_OID_UNKNOWN upon error, in which case it 
  72.  * will have created an error stack.
  73.  *
  74.  * The error may be one of the following values:
  75.  *  NSS_ERROR_INVALID_BER
  76.  *  NSS_ERROR_NO_MEMORY
  77.  *
  78.  * Return value:
  79.  *  NSS_OID_UNKNOWN upon error
  80.  *  An NSSOID upon success
  81.  */
  82. NSS_EXTERN NSSOID *
  83. NSSOID_CreateFromBER
  84. (
  85.   NSSBER *berOid
  86. );
  87. extern const NSSError NSS_ERROR_INVALID_BER;
  88. extern const NSSError NSS_ERROR_NO_MEMORY;
  89. /*
  90.  * NSSOID_CreateFromUTF8
  91.  *
  92.  * This routine creates an NSSOID by decoding a UTF8 string 
  93.  * representation of an OID in dotted-number format.  The string may 
  94.  * optionally begin with an octothorpe.  It may return NSS_OID_UNKNOWN
  95.  * upon error, in which case it will have created an error stack.
  96.  *
  97.  * The error may be one of the following values:
  98.  *  NSS_ERROR_INVALID_STRING
  99.  *  NSS_ERROR_NO_MEMORY
  100.  *
  101.  * Return value:
  102.  *  NSS_OID_UNKNOWN upon error
  103.  *  An NSSOID upon success
  104.  */
  105. NSS_EXTERN NSSOID *
  106. NSSOID_CreateFromUTF8
  107. (
  108.   NSSUTF8 *stringOid
  109. );
  110. extern const NSSError NSS_ERROR_INVALID_STRING;
  111. extern const NSSError NSS_ERROR_NO_MEMORY;
  112. /*
  113.  * NSSOID_GetDEREncoding
  114.  *
  115.  * This routine returns the DER encoding of the specified NSSOID.
  116.  * If the optional arena argument is non-null, the memory used will
  117.  * be obtained from that arena; otherwise, the memory will be obtained
  118.  * from the heap.  This routine may return return null upon error, in 
  119.  * which case it will have created an error stack.
  120.  *
  121.  * The error may be one of the following values:
  122.  *  NSS_ERROR_INVALID_NSSOID
  123.  *  NSS_ERROR_NO_MEMORY
  124.  *
  125.  * Return value:
  126.  *  NULL upon error
  127.  *  The DER encoding of this NSSOID
  128.  */
  129. NSS_EXTERN NSSDER *
  130. NSSOID_GetDEREncoding
  131. (
  132.   const NSSOID *oid,
  133.   NSSDER *rvOpt,
  134.   NSSArena *arenaOpt
  135. );
  136. extern const NSSError NSS_ERROR_INVALID_NSSOID;
  137. extern const NSSError NSS_ERROR_NO_MEMORY;
  138. /*
  139.  * NSSOID_GetUTF8Encoding
  140.  *
  141.  * This routine returns a UTF8 string containing the dotted-number 
  142.  * encoding of the specified NSSOID.  If the optional arena argument 
  143.  * is non-null, the memory used will be obtained from that arena; 
  144.  * otherwise, the memory will be obtained from the heap.  This routine
  145.  * may return null upon error, in which case it will have created an
  146.  * error stack.
  147.  *
  148.  * The error may be one of the following values:
  149.  *  NSS_ERROR_INVALID_NSSOID
  150.  *  NSS_ERROR_NO_MEMORY
  151.  *
  152.  * Return value:
  153.  *  NULL upon error
  154.  *  A pointer to a UTF8 string containing the dotted-digit encoding of 
  155.  *      this NSSOID
  156.  */
  157. NSS_EXTERN NSSUTF8 *
  158. NSSOID_GetUTF8Encoding
  159. (
  160.   const NSSOID *oid,
  161.   NSSArena *arenaOpt
  162. );
  163. extern const NSSError NSS_ERROR_INVALID_NSSOID;
  164. extern const NSSError NSS_ERROR_NO_MEMORY;
  165. /*
  166.  * NSSATAV
  167.  *
  168.  * The public "methods" regarding this "object" are:
  169.  *
  170.  *  NSSATAV_CreateFromBER   -- constructor
  171.  *  NSSATAV_CreateFromUTF8  -- constructor
  172.  *  NSSATAV_Create          -- constructor
  173.  *
  174.  *  NSSATAV_Destroy
  175.  *  NSSATAV_GetDEREncoding
  176.  *  NSSATAV_GetUTF8Encoding
  177.  *  NSSATAV_GetType
  178.  *  NSSATAV_GetValue
  179.  *  NSSATAV_Compare
  180.  *  NSSATAV_Duplicate
  181.  */
  182. /*
  183.  * NSSATAV_CreateFromBER
  184.  * 
  185.  * This routine creates an NSSATAV by decoding a BER- or DER-encoded
  186.  * ATAV.  If the optional arena argument is non-null, the memory used 
  187.  * will be obtained from that arena; otherwise, the memory will be 
  188.  * obtained from the heap.  This routine may return NULL upon error, 
  189.  * in which case it will have created an error stack.
  190.  *
  191.  * The error may be one of the following values:
  192.  *  NSS_ERROR_INVALID_BER
  193.  *  NSS_ERROR_NO_MEMORY
  194.  *
  195.  * Return value:
  196.  *  NULL upon error
  197.  *  A pointer to an NSSATAV upon success
  198.  */
  199. NSS_EXTERN NSSATAV *
  200. NSSATAV_CreateFromBER
  201. (
  202.   NSSArena *arenaOpt,
  203.   NSSBER *derATAV
  204. );
  205. extern const NSSError NSS_ERROR_INVALID_BER;
  206. extern const NSSError NSS_ERROR_NO_MEMORY;
  207. /*
  208.  * NSSATAV_CreateFromUTF8
  209.  *
  210.  * This routine creates an NSSATAV by decoding a UTF8 string in the
  211.  * "equals" format, e.g., "c=US."  If the optional arena argument is 
  212.  * non-null, the memory used will be obtained from that arena; 
  213.  * otherwise, the memory will be obtained from the heap.  This routine
  214.  * may return NULL upon error, in which case it will have created an
  215.  * error stack.
  216.  *
  217.  * The error may be one of the following values:
  218.  *  NSS_ERROR_UNKNOWN_ATTRIBUTE
  219.  *  NSS_ERROR_INVALID_STRING
  220.  *  NSS_ERROR_NO_MEMORY
  221.  *
  222.  * Return value:
  223.  *  NULL upon error
  224.  *  A pointer to an NSSATAV upon success
  225.  */
  226. NSS_EXTERN NSSATAV *
  227. NSSATAV_CreateFromUTF8
  228. (
  229.   NSSArena *arenaOpt,
  230.   NSSUTF8 *stringATAV
  231. );
  232. extern const NSSError NSS_ERROR_UNKNOWN_ATTRIBUTE;
  233. extern const NSSError NSS_ERROR_INVALID_STRING;
  234. extern const NSSError NSS_ERROR_NO_MEMORY;
  235. /*
  236.  * NSSATAV_Create
  237.  *
  238.  * This routine creates an NSSATAV from the specified NSSOID and the
  239.  * specified data. If the optional arena argument is non-null, the 
  240.  * memory used will be obtained from that arena; otherwise, the memory
  241.  * will be obtained from the heap.If the specified data length is zero, 
  242.  * the data is assumed to be terminated by first zero byte; this allows 
  243.  * UTF8 strings to be easily specified.  This routine may return NULL 
  244.  * upon error, in which case it will have created an error stack.
  245.  *
  246.  * The error may be one of the following values:
  247.  *  NSS_ERROR_INVALID_ARENA
  248.  *  NSS_ERROR_INVALID_NSSOID
  249.  *  NSS_ERROR_INVALID_POINTER
  250.  *  NSS_ERROR_NO_MEMORY
  251.  *
  252.  * Return value:
  253.  *  NULL upon error
  254.  *  A pointer to an NSSATAV upon success
  255.  */
  256. NSS_EXTERN NSSATAV *
  257. NSSATAV_Create
  258. (
  259.   NSSArena *arenaOpt,
  260.   const NSSOID *oid,
  261.   const void *data,
  262.   PRUint32 length
  263. );
  264. extern const NSSError NSS_ERROR_INVALID_ARENA;
  265. extern const NSSError NSS_ERROR_INVALID_NSSOID;
  266. extern const NSSError NSS_ERROR_INVALID_POINTER;
  267. extern const NSSError NSS_ERROR_NO_MEMORY;
  268. /*
  269.  * NSSATAV_Destroy
  270.  *
  271.  * This routine will destroy an ATAV object.  It should eventually be
  272.  * called on all ATAVs created without an arena.  While it is not 
  273.  * necessary to call it on ATAVs created within an arena, it is not an
  274.  * error to do so.  This routine returns a PRStatus value; if
  275.  * successful, it will return PR_SUCCESS.  If unsuccessful, it will
  276.  * create an error stack and return PR_FAILURE.
  277.  *
  278.  * The error may be one of the following values:
  279.  *  NSS_ERROR_INVALID_ATAV
  280.  *  
  281.  * Return value:
  282.  *  PR_FAILURE upon error
  283.  *  PR_SUCCESS upon success
  284.  */
  285. NSS_EXTERN PRStatus
  286. NSSATAV_Destroy
  287. (
  288.   NSSATAV *atav
  289. );
  290. extern const NSSError NSS_ERROR_INVALID_ATAV;
  291. /*
  292.  * NSSATAV_GetDEREncoding
  293.  *
  294.  * This routine will DER-encode an ATAV object. If the optional arena
  295.  * argument is non-null, the memory used will be obtained from that
  296.  * arena; otherwise, the memory will be obtained from the heap.  This
  297.  * routine may return null upon error, in which case it will have 
  298.  * created an error stack.
  299.  *
  300.  * The error may be one of the following values:
  301.  *  NSS_ERROR_INVALID_ATAV
  302.  *  NSS_ERROR_NO_MEMORY
  303.  *
  304.  * Return value:
  305.  *  NULL upon error
  306.  *  The DER encoding of this NSSATAV
  307.  */
  308. NSS_EXTERN NSSDER *
  309. NSSATAV_GetDEREncoding
  310. (
  311.   NSSATAV *atav,
  312.   NSSArena *arenaOpt
  313. );
  314. extern const NSSError NSS_ERROR_INVALID_ATAV;
  315. extern const NSSError NSS_ERROR_NO_MEMORY;
  316. /*
  317.  * NSSATAV_GetUTF8Encoding
  318.  *
  319.  * This routine returns a UTF8 string containing a string 
  320.  * representation of the ATAV in "equals" notation (e.g., "o=Acme").  
  321.  * If the optional arena argument is non-null, the memory used will be
  322.  * obtained from that arena; otherwise, the memory will be obtained 
  323.  * from the heap.  This routine may return null upon error, in which 
  324.  * case it will have created an error stack.
  325.  *
  326.  * The error may be one of the following values:
  327.  *  NSS_ERROR_INVALID_ATAV
  328.  *  NSS_ERROR_NO_MEMORY
  329.  *
  330.  * Return value:
  331.  *  NULL upon error
  332.  *  A pointer to a UTF8 string containing the "equals" encoding of the 
  333.  *      ATAV
  334.  */
  335. NSS_EXTERN NSSUTF8 *
  336. NSSATAV_GetUTF8Encoding
  337. (
  338.   NSSATAV *atav,
  339.   NSSArena *arenaOpt
  340. );
  341. extern const NSSError NSS_ERROR_INVALID_ATAV;
  342. extern const NSSError NSS_ERROR_NO_MEMORY;
  343. /*
  344.  * NSSATAV_GetType
  345.  *
  346.  * This routine returns the NSSOID corresponding to the attribute type
  347.  * in the specified ATAV.  This routine may return NSS_OID_UNKNOWN 
  348.  * upon error, in which case it will have created an error stack.
  349.  *
  350.  * The error may be one of the following values:
  351.  *  NSS_ERROR_INVALID_ATAV
  352.  *
  353.  * Return value:
  354.  *  NSS_OID_UNKNOWN upon error
  355.  *  An element of enum NSSOIDenum upon success
  356.  */
  357. NSS_EXTERN const NSSOID *
  358. NSSATAV_GetType
  359. (
  360.   NSSATAV *atav
  361. );
  362. extern const NSSError NSS_ERROR_INVALID_ATAV;
  363. /*
  364.  * NSSATAV_GetValue
  365.  *
  366.  * This routine returns an NSSItem containing the attribute value
  367.  * in the specified ATAV.  If the optional arena argument is non-null,
  368.  * the memory used will be obtained from that arena; otherwise, the
  369.  * memory will be obtained from the heap.  This routine may return
  370.  * NULL upon error, in which case it will have created an error stack.
  371.  *
  372.  * The error may be one of the following values:
  373.  *  NSS_ERROR_INVALID_ATAV
  374.  *  NSS_ERROR_NO_MEMORY
  375.  *
  376.  * Return value:
  377.  *  NULL upon error
  378.  *  A pointer to an NSSItem containing the attribute value.
  379.  */
  380. NSS_EXTERN NSSUTF8 *
  381. NSSATAV_GetValue
  382. (
  383.   NSSATAV *atav,
  384.   NSSArena *arenaOpt
  385. );
  386. extern const NSSError NSS_ERROR_INVALID_ATAV;
  387. extern const NSSError NSS_ERROR_NO_MEMORY;
  388. /*
  389.  * NSSATAV_Compare
  390.  *
  391.  * This routine compares two ATAVs for equality.  For two ATAVs to be
  392.  * equal, the attribute types must be the same, and the attribute 
  393.  * values must have equal length and contents.  The result of the 
  394.  * comparison will be stored at the location pointed to by the "equalp"
  395.  * variable, which must point to a valid PRBool.  This routine may 
  396.  * return PR_FAILURE upon error, in which case it will have created an
  397.  * error stack.
  398.  *
  399.  * The error may be one of the following values:
  400.  *  NSS_ERROR_INVALID_ATAV
  401.  *  NSS_ERROR_INVALID_ARGUMENT
  402.  *
  403.  * Return value:
  404.  *  PR_FAILURE on error
  405.  *  PR_SUCCESS upon a successful comparison (equal or not)
  406.  */
  407. NSS_EXTERN PRStatus
  408. NSSATAV_Compare
  409. (
  410.   NSSATAV *atav1,
  411.   NSSATAV *atav2,
  412.   PRBool *equalp
  413. );
  414. extern const NSSError NSS_ERROR_INVALID_ATAV;
  415. extern const NSSError NSS_ERROR_INVALID_ARGUMENT;
  416. /*
  417.  * NSSATAV_Duplicate
  418.  *
  419.  * This routine duplicates the specified ATAV.  If the optional arena 
  420.  * argument is non-null, the memory required will be obtained from
  421.  * that arena; otherwise, the memory will be obtained from the heap.  
  422.  * This routine may return NULL upon error, in which case it will have 
  423.  * created an error stack.
  424.  *
  425.  * The error may be one of the following values:
  426.  *  NSS_ERROR_INVALID_ATAV
  427.  *  NSS_ERROR_NO_MEMORY
  428.  *
  429.  * Return value:
  430.  *  NULL on error
  431.  *  A pointer to a new ATAV
  432.  */
  433. NSS_EXTERN NSSATAV *
  434. NSSATAV_Duplicate
  435. (
  436.   NSSATAV *atav,
  437.   NSSArena *arenaOpt
  438. );
  439. extern const NSSError NSS_ERROR_INVALID_ATAV;
  440. extern const NSSError NSS_ERROR_NO_MEMORY;
  441. /*
  442.  * NSSRDN
  443.  *
  444.  * The public "methods" regarding this "object" are:
  445.  *
  446.  *  NSSRDN_CreateFromBER   -- constructor
  447.  *  NSSRDN_CreateFromUTF8  -- constructor
  448.  *  NSSRDN_Create          -- constructor
  449.  *  NSSRDN_CreateSimple    -- constructor
  450.  *
  451.  *  NSSRDN_Destroy
  452.  *  NSSRDN_GetDEREncoding
  453.  *  NSSRDN_GetUTF8Encoding
  454.  *  NSSRDN_AddATAV
  455.  *  NSSRDN_GetATAVCount
  456.  *  NSSRDN_GetATAV
  457.  *  NSSRDN_GetSimpleATAV
  458.  *  NSSRDN_Compare
  459.  *  NSSRDN_Duplicate
  460.  */
  461. /*
  462.  * NSSRDN_CreateFromBER
  463.  *
  464.  * This routine creates an NSSRDN by decoding a BER- or DER-encoded 
  465.  * RDN.  If the optional arena argument is non-null, the memory used 
  466.  * will be obtained from that arena; otherwise, the memory will be 
  467.  * obtained from the heap.  This routine may return NULL upon error, 
  468.  * in which case it will have created an error stack.
  469.  *
  470.  * The error may be one of the following values:
  471.  *  NSS_ERROR_INVALID_BER
  472.  *  NSS_ERROR_NO_MEMORY
  473.  *
  474.  * Return value:
  475.  *  NULL upon error
  476.  *  A pointer to an NSSRDN upon success
  477.  */
  478. NSS_EXTERN NSSRDN *
  479. NSSRDN_CreateFromBER
  480. (
  481.   NSSArena *arenaOpt,
  482.   NSSBER *berRDN
  483. );
  484. /*
  485.  * NSSRDN_CreateFromUTF8
  486.  *
  487.  * This routine creates an NSSRDN by decoding an UTF8 string 
  488.  * consisting of either a single ATAV in the "equals" format, e.g., 
  489.  * "uid=smith," or one or more such ATAVs in parentheses, e.g., 
  490.  * "(sn=Smith,ou=Sales)."  If the optional arena argument is non-null,
  491.  * the memory used will be obtained from that arena; otherwise, the
  492.  * memory will be obtained from the heap.  This routine may return
  493.  * NULL upon error, in which case it will have created an error stack.
  494.  *
  495.  * The error may be one of the following values:
  496.  *  NSS_ERROR_UNKNOWN_ATTRIBUTE
  497.  *  NSS_ERROR_INVALID_STRING
  498.  *  NSS_ERROR_NO_MEMORY
  499.  *
  500.  * Return value:
  501.  *  NULL upon error
  502.  *  A pointer to an NSSRDN upon success
  503.  */
  504. NSS_EXTERN NSSRDN *
  505. NSSRDN_CreateFromUTF8
  506. (
  507.   NSSArena *arenaOpt,
  508.   NSSUTF8 *stringRDN
  509. );
  510. /*
  511.  * NSSRDN_Create
  512.  *
  513.  * This routine creates an NSSRDN from one or more NSSATAVs.  The
  514.  * final argument to this routine must be NULL.  If the optional arena
  515.  * argument is non-null, the memory used will be obtained from that
  516.  * arena; otherwise, the memory will be obtained from the heap.  This
  517.  * routine may return NULL upon error, in which case it will have 
  518.  * created an error stack.
  519.  *
  520.  * The error may be one of the following values:
  521.  *  NSS_ERROR_NO_MEMORY
  522.  *  NSS_ERROR_INVALID_ATAV
  523.  *
  524.  * Return value:
  525.  *  NULL upon error
  526.  *  A pointer to an NSSRDN upon success
  527.  */
  528. NSS_EXTERN NSSRDN *
  529. NSSRDN_Create
  530. (
  531.   NSSArena *arenaOpt,
  532.   NSSATAV *atav1,
  533.   ...
  534. );
  535. /*
  536.  * NSSRDN_CreateSimple
  537.  *
  538.  * This routine creates a simple NSSRDN from a single NSSATAV.  If the
  539.  * optional arena argument is non-null, the memory used will be 
  540.  * obtained from that arena; otherwise, the memory will be obtained
  541.  * from the heap.  This routine may return NULL upon error, in which
  542.  * case it will have created an error stack.
  543.  *
  544.  * The error may be one of the following values:
  545.  *  NSS_ERROR_NO_MEMORY
  546.  *  NSS_ERROR_INVALID_ATAV
  547.  *
  548.  * Return value:
  549.  *  NULL upon error
  550.  *  A pointer to an NSSRDN upon success
  551.  */
  552. NSS_EXTERN NSSRDN *
  553. NSSRDN_CreateSimple
  554. (
  555.   NSSArena *arenaOpt,
  556.   NSSATAV *atav
  557. );
  558. /*
  559.  * NSSRDN_Destroy
  560.  *
  561.  * This routine will destroy an RDN object.  It should eventually be
  562.  * called on all RDNs created without an arena.  While it is not 
  563.  * necessary to call it on RDNs created within an arena, it is not an
  564.  * error to do so.  This routine returns a PRStatus value; if
  565.  * successful, it will return PR_SUCCESS.  If unsuccessful, it will 
  566.  * create an error stack and return PR_FAILURE.
  567.  *
  568.  * The error may be one of the following values:
  569.  *  NSS_ERROR_INVALID_RDN
  570.  *
  571.  * Return value:
  572.  *  PR_FAILURE upon failure
  573.  *  PR_SUCCESS upon success
  574.  */
  575. NSS_EXTERN PRStatus
  576. NSSRDN_Destroy
  577. (
  578.   NSSRDN *rdn
  579. );
  580. /*
  581.  * NSSRDN_GetDEREncoding
  582.  *
  583.  * This routine will DER-encode an RDN object.  If the optional arena
  584.  * argument is non-null, the memory used will be obtained from that
  585.  * arena; otherwise, the memory will be obtained from the heap.  This
  586.  * routine may return null upon error, in which case it will have 
  587.  * created an error stack.
  588.  *
  589.  * The error may be one of the following values:
  590.  *  NSS_ERROR_INVALID_RDN
  591.  *  NSS_ERROR_NO_MEMORY
  592.  *
  593.  * Return value:
  594.  *  NULL upon error
  595.  *  The DER encoding of this NSSRDN
  596.  */
  597. NSS_EXTERN NSSDER *
  598. NSSRDN_GetDEREncoding
  599. (
  600.   NSSRDN *rdn,
  601.   NSSArena *arenaOpt
  602. );
  603. /*
  604.  * NSSRDN_GetUTF8Encoding
  605.  *
  606.  * This routine returns a UTF8 string containing a string 
  607.  * representation of the RDN.  A simple (one-ATAV) RDN will be simply
  608.  * the string representation of that ATAV; a non-simple RDN will be in
  609.  * parenthesised form.  If the optional arena argument is non-null, 
  610.  * the memory used will be obtained from that arena; otherwise, the 
  611.  * memory will be obtained from the heap.  This routine may return 
  612.  * null upon error, in which case it will have created an error stack.
  613.  *
  614.  * The error may be one of the following values:
  615.  *  NSS_ERROR_INVALID_RDN
  616.  *  NSS_ERROR_NO_MEMORY
  617.  *
  618.  * Return value:
  619.  *  NULL upon error
  620.  *  A pointer to a UTF8 string
  621.  */
  622. NSS_EXTERN NSSUTF8 *
  623. NSSRDN_GetUTF8Encoding
  624. (
  625.   NSSRDN *rdn,
  626.   NSSArena *arenaOpt
  627. );
  628. /*
  629.  * NSSRDN_AddATAV
  630.  *
  631.  * This routine adds an ATAV to the set of ATAVs in the specified RDN.
  632.  * Remember that RDNs consist of an unordered set of ATAVs.  If the
  633.  * RDN was created with a non-null arena argument, that same arena
  634.  * will be used for any additional required memory.  If the RDN was 
  635.  * created with a NULL arena argument, any additional memory will
  636.  * be obtained from the heap.  This routine returns a PRStatus value;
  637.  * it will return PR_SUCCESS upon success, and upon failure it will
  638.  * create an error stack and return PR_FAILURE.
  639.  *
  640.  * The error may be one of the following values:
  641.  *  NSS_ERROR_INVALID_RDN
  642.  *  NSS_ERROR_INVALID_ATAV
  643.  *  NSS_ERROR_NO_MEMORY
  644.  *
  645.  * Return value:
  646.  *  PR_SUCCESS upon success
  647.  *  PR_FAILURE upon failure
  648.  */
  649. NSS_EXTERN PRStatus
  650. NSSRDN_AddATAV
  651. (
  652.   NSSRDN *rdn,
  653.   NSSATAV *atav
  654. );
  655. /*
  656.  * NSSRDN_GetATAVCount
  657.  *
  658.  * This routine returns the cardinality of the set of ATAVs within
  659.  * the specified RDN.  This routine may return 0 upon error, in which 
  660.  * case it will have created an error stack.
  661.  *
  662.  * The error may be one of the following values:
  663.  *  NSS_ERROR_INVALID_RDN
  664.  *
  665.  * Return value:
  666.  *  0 upon error
  667.  *  A positive number upon success
  668.  */
  669. NSS_EXTERN PRUint32
  670. NSSRDN_GetATAVCount
  671. (
  672.   NSSRDN *rdn
  673. );
  674. /*
  675.  * NSSRDN_GetATAV
  676.  *
  677.  * This routine returns a pointer to an ATAV that is a member of
  678.  * the set of ATAVs within the specified RDN.  While the set of
  679.  * ATAVs within an RDN is unordered, this routine will return
  680.  * distinct values for distinct values of 'i' as long as the RDN
  681.  * is not changed in any way.  The RDN may be changed by calling
  682.  * NSSRDN_AddATAV.  The value of the variable 'i' is on the range
  683.  * [0,c) where c is the cardinality returned from NSSRDN_GetATAVCount.
  684.  * The caller owns the ATAV the pointer to which is returned.  If the
  685.  * optional arena argument is non-null, the memory used will be 
  686.  * obtained from that arena; otherwise, the memory will be obtained
  687.  * from the heap.  This routine may return NULL upon error, in which 
  688.  * case it will have created an error stack.
  689.  *
  690.  * The error may be one of the following values:
  691.  *  NSS_ERROR_INVALID_RDN
  692.  *  NSS_ERROR_VALUE_OUT_OF_RANGE
  693.  *  NSS_ERROR_NO_MEMORY
  694.  *
  695.  * Return value:
  696.  *  NULL upon error
  697.  *  A caller-owned pointer to an NSSATAV
  698.  */
  699. NSS_EXTERN NSSATAV *
  700. NSSRDN_GetATAV
  701. (
  702.   NSSRDN *rdn,
  703.   NSSArena *arenaOpt,
  704.   PRUint32 i
  705. );
  706. /*
  707.  * NSSRDN_GetSimpleATAV
  708.  *
  709.  * Most RDNs are actually very simple, with a single ATAV.  This 
  710.  * routine will return the single ATAV from such an RDN.  The caller
  711.  * owns the ATAV the pointer to which is returned.  If the optional
  712.  * arena argument is non-null, the memory used will be obtained from
  713.  * that arena; otherwise, the memory will be obtained from the heap.
  714.  * This routine may return NULL upon error, including the case where
  715.  * the set of ATAVs in the RDN is nonsingular.  Upon error, this
  716.  * routine will have created an error stack.
  717.  *
  718.  * The error may be one of the following values:
  719.  *  NSS_ERROR_INVALID_RDN
  720.  *  NSS_ERROR_RDN_NOT_SIMPLE
  721.  *  NSS_ERROR_NO_MEMORY
  722.  *
  723.  * Return value:
  724.  *  NULL upon error
  725.  *  A caller-owned pointer to an NSSATAV
  726.  */
  727. NSS_EXTERN NSSATAV *
  728. NSSRDN_GetSimpleATAV
  729. (
  730.   NSSRDN *rdn,
  731.   NSSArena *arenaOpt
  732. );
  733. /*
  734.  * NSSRDN_Compare
  735.  *
  736.  * This routine compares two RDNs for equality.  For two RDNs to be
  737.  * equal, they must have the same number of ATAVs, and every ATAV in
  738.  * one must be equal to an ATAV in the other.  (Note that the sets
  739.  * of ATAVs are unordered.)  The result of the comparison will be
  740.  * stored at the location pointed to by the "equalp" variable, which
  741.  * must point to a valid PRBool.  This routine may return PR_FAILURE
  742.  * upon error, in which case it will have created an error stack.
  743.  *
  744.  * The error may be one of the following values:
  745.  *  NSS_ERROR_INVALID_RDN
  746.  *  NSS_ERROR_INVALID_ARGUMENT
  747.  *
  748.  * Return value:
  749.  *  PR_FAILURE on error
  750.  *  PR_SUCCESS upon a successful comparison (equal or not)
  751.  */
  752. NSS_EXTERN PRStatus
  753. NSSRDN_Compare
  754. (
  755.   NSSRDN *rdn1,
  756.   NSSRDN *rdn2,
  757.   PRBool *equalp
  758. );
  759. /*
  760.  * NSSRDN_Duplicate
  761.  *
  762.  * This routine duplicates the specified RDN.  If the optional arena
  763.  * argument is non-null, the memory required will be obtained from
  764.  * that arena; otherwise, the memory will be obtained from the heap.
  765.  * This routine may return NULL upon error, in which case it will have
  766.  * created an error stack.
  767.  *
  768.  * The error may be one of the following values:
  769.  *  NSS_ERROR_INVALID_RDN
  770.  *  NSS_ERROR_NO_MEMORY
  771.  *
  772.  * Return value:
  773.  *  NULL on error
  774.  *  A pointer to a new RDN
  775.  */
  776. NSS_EXTERN NSSRDN *
  777. NSSRDN_Duplicate
  778. (
  779.   NSSRDN *rdn,
  780.   NSSArena *arenaOpt
  781. );
  782. /*
  783.  * NSSRDNSeq
  784.  *
  785.  * The public "methods" regarding this "object" are:
  786.  *
  787.  *  NSSRDNSeq_CreateFromBER   -- constructor
  788.  *  NSSRDNSeq_CreateFromUTF8  -- constructor
  789.  *  NSSRDNSeq_Create          -- constructor
  790.  *
  791.  *  NSSRDNSeq_Destroy
  792.  *  NSSRDNSeq_GetDEREncoding
  793.  *  NSSRDNSeq_GetUTF8Encoding
  794.  *  NSSRDNSeq_AppendRDN
  795.  *  NSSRDNSeq_GetRDNCount
  796.  *  NSSRDNSeq_GetRDN
  797.  *  NSSRDNSeq_Compare
  798.  *  NSSRDNSeq_Duplicate
  799.  */
  800. /*
  801.  * NSSRDNSeq_CreateFromBER
  802.  *
  803.  * This routine creates an NSSRDNSeq by decoding a BER- or DER-encoded 
  804.  * sequence of RDNs.  If the optional arena argument is non-null,
  805.  * the memory used will be obtained from that arena; otherwise, the
  806.  * memory will be obtained from the heap.  This routine may return 
  807.  * NULL upon error, in which case it will have created an error stack.
  808.  *
  809.  * The error may be one of the following values:
  810.  *  NSS_ERROR_INVALID_BER
  811.  *  NSS_ERROR_NO_MEMORY
  812.  *
  813.  * Return value:
  814.  *  NULL upon error
  815.  *  A pointer to an NSSRDNSeq upon success
  816.  */
  817. NSS_EXTERN NSSRDNSeq *
  818. NSSRDNSeq_CreateFromBER
  819. (
  820.   NSSArena *arenaOpt,
  821.   NSSBER *berRDNSeq
  822. );
  823. /*
  824.  * NSSRDNSeq_CreateFromUTF8
  825.  *
  826.  * This routine creates an NSSRDNSeq by decoding a UTF8 string
  827.  * consisting of a comma-separated sequence of RDNs, such as
  828.  * "(sn=Smith,ou=Sales),o=Acme,c=US."  If the optional arena argument
  829.  * is non-null, the memory used will be obtained from that arena; 
  830.  * otherwise, the memory will be obtained from the heap.  This routine
  831.  * may return NULL upon error, in which case it will have created an
  832.  * error stack.
  833.  *
  834.  * The error may be one of the following values:
  835.  *  NSS_ERROR_UNKNOWN_ATTRIBUTE
  836.  *  NSS_ERROR_INVALID_STRING
  837.  *  NSS_ERROR_NO_MEMORY
  838.  *
  839.  * Return value:
  840.  *  NULL upon error
  841.  *  A pointer to an NSSRDNSeq upon success
  842.  */
  843. NSS_EXTERN NSSRDNSeq *
  844. NSSRDNSeq_CreateFromUTF8
  845. (
  846.   NSSArena *arenaOpt,
  847.   NSSUTF8 *stringRDNSeq
  848. );
  849. /*
  850.  * NSSRDNSeq_Create
  851.  *
  852.  * This routine creates an NSSRDNSeq from one or more NSSRDNs.  The
  853.  * final argument to this routine must be NULL.  If the optional arena
  854.  * argument is non-null, the memory used will be obtained from that
  855.  * arena; otherwise, the memory will be obtained from the heap.  This
  856.  * routine may return NULL upon error, in which case it will have
  857.  * created an error stack.
  858.  *
  859.  * The error may be one of the following values:
  860.  *  NSS_ERROR_NO_MEMORY
  861.  *  NSS_ERROR_INVALID_RDN
  862.  *
  863.  * Return value:
  864.  *  NULL upon error
  865.  *  A pointero to an NSSRDNSeq upon success
  866.  */
  867. NSS_EXTERN NSSRDNSeq *
  868. NSSRDNSeq_Create
  869. (
  870.   NSSArena *arenaOpt,
  871.   NSSRDN *rdn1,
  872.   ...
  873. );
  874. /*
  875.  * NSSRDNSeq_Destroy
  876.  *
  877.  * This routine will destroy an RDNSeq object.  It should eventually 
  878.  * be called on all RDNSeqs created without an arena.  While it is not
  879.  * necessary to call it on RDNSeqs created within an arena, it is not
  880.  * an error to do so.  This routine returns a PRStatus value; if
  881.  * successful, it will return PR_SUCCESS.  If unsuccessful, it will
  882.  * create an error stack and return PR_FAILURE.
  883.  *
  884.  * The error may be one of the following values:
  885.  *  NSS_ERROR_INVALID_RDNSEQ
  886.  *
  887.  * Return value:
  888.  *  PR_FAILURE upon error
  889.  *  PR_SUCCESS upon success
  890.  */
  891. NSS_EXTERN PRStatus
  892. NSSRDNSeq_Destroy
  893. (
  894.   NSSRDNSeq *rdnseq
  895. );
  896. /*
  897.  * NSSRDNSeq_GetDEREncoding
  898.  *
  899.  * This routine will DER-encode an RDNSeq object.  If the optional 
  900.  * arena argument is non-null, the memory used will be obtained from
  901.  * that arena; otherwise, the memory will be obtained from the heap.
  902.  * This routine may return null upon error, in which case it will have
  903.  * created an error stack.
  904.  *
  905.  * The error may be one of the following values:
  906.  *  NSS_ERROR_INVALID_RDNSEQ
  907.  *  NSS_ERROR_NO_MEMORY
  908.  *
  909.  * Return value:
  910.  *  NULL upon error
  911.  *  The DER encoding of this NSSRDNSeq
  912.  */
  913. NSS_EXTERN NSSDER *
  914. NSSRDNSeq_GetDEREncoding
  915. (
  916.   NSSRDNSeq *rdnseq,
  917.   NSSArena *arenaOpt
  918. );
  919. /*
  920.  * NSSRDNSeq_GetUTF8Encoding
  921.  *
  922.  * This routine returns a UTF8 string containing a string 
  923.  * representation of the RDNSeq as a comma-separated sequence of RDNs.  
  924.  * If the optional arena argument is non-null, the memory used will be
  925.  * obtained from that arena; otherwise, the memory will be obtained 
  926.  * from the heap.  This routine may return null upon error, in which 
  927.  * case it will have created an error stack.
  928.  *
  929.  * The error may be one of the following values:
  930.  *  NSS_ERROR_INVALID_RDNSEQ
  931.  *  NSS_ERROR_NO_MEMORY
  932.  *
  933.  * Return value:
  934.  *  NULL upon error
  935.  *  A pointer to the UTF8 string
  936.  */
  937. NSS_EXTERN NSSUTF8 *
  938. NSSRDNSeq_GetUTF8Encoding
  939. (
  940.   NSSRDNSeq *rdnseq,
  941.   NSSArena *arenaOpt
  942. );
  943. /*
  944.  * NSSRDNSeq_AppendRDN
  945.  *
  946.  * This routine appends an RDN to the end of the existing RDN 
  947.  * sequence.  If the RDNSeq was created with a non-null arena 
  948.  * argument, that same arena will be used for any additional required
  949.  * memory.  If the RDNSeq was created with a NULL arena argument, any
  950.  * additional memory will be obtained from the heap.  This routine
  951.  * returns a PRStatus value; it will return PR_SUCCESS upon success,
  952.  * and upon failure it will create an error stack and return PR_FAILURE.
  953.  *
  954.  * The error may be one of the following values:
  955.  *  NSS_ERROR_INVALID_RDNSEQ
  956.  *  NSS_ERROR_INVALID_RDN
  957.  *  NSS_ERROR_NO_MEMORY
  958.  *
  959.  * Return value:
  960.  *  PR_SUCCESS upon success
  961.  *  PR_FAILURE upon failure
  962.  */
  963. NSS_EXTERN PRStatus
  964. NSSRDNSeq_AppendRDN
  965. (
  966.   NSSRDNSeq *rdnseq,
  967.   NSSRDN *rdn
  968. );
  969. /*
  970.  * NSSRDNSeq_GetRDNCount
  971.  *
  972.  * This routine returns the cardinality of the sequence of RDNs within
  973.  * the specified RDNSeq.  This routine may return 0 upon error, in 
  974.  * which case it will have created an error stack.
  975.  *
  976.  * The error may be one of the following values:
  977.  *  NSS_ERROR_INVALID_RDNSEQ
  978.  *
  979.  * Return value:
  980.  *  0 upon error
  981.  *  A positive number upon success
  982.  */
  983. NSS_EXTERN PRUint32
  984. NSSRDNSeq_GetRDNCount
  985. (
  986.   NSSRDNSeq *rdnseq
  987. );
  988. /*
  989.  * NSSRDNSeq_GetRDN
  990.  *
  991.  * This routine returns a pointer to the i'th RDN in the sequence of
  992.  * RDNs that make up the specified RDNSeq.  The sequence begins with
  993.  * the top-level (e.g., "c=US") RDN.  The value of the variable 'i'
  994.  * is on the range [0,c) where c is the cardinality returned from
  995.  * NSSRDNSeq_GetRDNCount.  The caller owns the RDN the pointer to which
  996.  * is returned.  If the optional arena argument is non-null, the memory
  997.  * used will be obtained from that areana; otherwise, the memory will 
  998.  * be obtained from the heap.  This routine may return NULL upon error,
  999.  * in which case it will have created an error stack.  Note that the 
  1000.  * usual string representation of RDN Sequences is from last to first.
  1001.  *
  1002.  * The error may be one of the following values:
  1003.  *  NSS_ERROR_INVALID_RDNSEQ
  1004.  *  NSS_ERROR_VALUE_OUT_OF_RANGE
  1005.  *  NSS_ERROR_NO_MEMORY
  1006.  *
  1007.  * Return value:
  1008.  *  NULL upon error
  1009.  *  A caller-owned pointer to an NSSRDN
  1010.  */
  1011. NSS_EXTERN NSSRDN *
  1012. NSSRDNSeq_GetRDN
  1013. (
  1014.   NSSRDNSeq *rdnseq,
  1015.   NSSArena *arenaOpt,
  1016.   PRUint32 i
  1017. );
  1018. /*
  1019.  * NSSRDNSeq_Compare
  1020.  *
  1021.  * This routine compares two RDNSeqs for equality.  For two RDNSeqs to 
  1022.  * be equal, they must have the same number of RDNs, and each RDN in
  1023.  * one sequence must be equal to the corresponding RDN in the other
  1024.  * sequence.  The result of the comparison will be stored at the
  1025.  * location pointed to by the "equalp" variable, which must point to a
  1026.  * valid PRBool.  This routine may return PR_FAILURE upon error, in
  1027.  * which case it will have created an error stack.
  1028.  *
  1029.  * The error may be one of the following values:
  1030.  *  NSS_ERROR_INVALID_RDNSEQ
  1031.  *  NSS_ERROR_INVALID_ARGUMENT
  1032.  *
  1033.  * Return value:
  1034.  *  PR_FAILURE on error
  1035.  *  PR_SUCCESS upon a successful comparison (equal or not)
  1036.  */
  1037. NSS_EXTERN PRStatus
  1038. NSSRDNSeq_Compare
  1039. (
  1040.   NSSRDNSeq *rdnseq1,
  1041.   NSSRDNSeq *rdnseq2,
  1042.   PRBool *equalp
  1043. );
  1044. /*
  1045.  * NSSRDNSeq_Duplicate
  1046.  *
  1047.  * This routine duplicates the specified RDNSeq.  If the optional arena
  1048.  * argument is non-null, the memory required will be obtained from that
  1049.  * arena; otherwise, the memory will be obtained from the heap.  This 
  1050.  * routine may return NULL upon error, in which case it will have 
  1051.  * created an error stack.
  1052.  *
  1053.  * The error may be one of the following values:
  1054.  *  NSS_ERROR_INVALID_RDNSEQ
  1055.  *  NSS_ERROR_NO_MEMORY
  1056.  *
  1057.  * Return value:
  1058.  *  NULL upon error
  1059.  *  A pointer to a new RDNSeq
  1060.  */
  1061. NSS_EXTERN NSSRDNSeq *
  1062. NSSRDNSeq_Duplicate
  1063. (
  1064.   NSSRDNSeq *rdnseq,
  1065.   NSSArena *arenaOpt
  1066. );
  1067. /*
  1068.  * NSSName
  1069.  *
  1070.  * The public "methods" regarding this "object" are:
  1071.  *
  1072.  * NSSName_CreateFromBER   -- constructor
  1073.  * NSSName_CreateFromUTF8  -- constructor
  1074.  * NSSName_Create          -- constructor
  1075.  *
  1076.  * NSSName_Destroy
  1077.  * NSSName_GetDEREncoding
  1078.  * NSSName_GetUTF8Encoding
  1079.  * NSSName_GetChoice
  1080.  * NSSName_GetRDNSequence
  1081.  * NSSName_GetSpecifiedChoice
  1082.  * NSSName_Compare
  1083.  * NSSName_Duplicate
  1084.  *
  1085.  * NSSName_GetUID
  1086.  * NSSName_GetEmail
  1087.  * NSSName_GetCommonName
  1088.  * NSSName_GetOrganization
  1089.  * NSSName_GetOrganizationalUnits
  1090.  * NSSName_GetStateOrProvince
  1091.  * NSSName_GetLocality
  1092.  * NSSName_GetCountry
  1093.  * NSSName_GetAttribute
  1094.  */
  1095. /*
  1096.  * NSSName_CreateFromBER
  1097.  *
  1098.  * This routine creates an NSSName by decoding a BER- or DER-encoded 
  1099.  * (directory) Name.  If the optional arena argument is non-null,
  1100.  * the memory used will be obtained from that arena; otherwise, 
  1101.  * the memory will be obtained from the heap.  This routine may
  1102.  * return NULL upon error, in which case it will have created an error
  1103.  * stack.
  1104.  *
  1105.  * The error may be one of the following values:
  1106.  *  NSS_ERROR_INVALID_BER
  1107.  *  NSS_ERROR_NO_MEMORY
  1108.  *
  1109.  * Return value:
  1110.  *  NULL upon error
  1111.  *  A pointer to an NSSName upon success
  1112.  */
  1113. NSS_EXTERN NSSName *
  1114. NSSName_CreateFromBER
  1115. (
  1116.   NSSArena *arenaOpt,
  1117.   NSSBER *berName
  1118. );
  1119. /*
  1120.  * NSSName_CreateFromUTF8
  1121.  *
  1122.  * This routine creates an NSSName by decoding a UTF8 string 
  1123.  * consisting of the string representation of one of the choices of 
  1124.  * (directory) names.  Currently the only choice is an RDNSeq.  If the
  1125.  * optional arena argument is non-null, the memory used will be 
  1126.  * obtained from that arena; otherwise, the memory will be obtained 
  1127.  * from the heap.  The routine may return NULL upon error, in which
  1128.  * case it will have created an error stack.
  1129.  *
  1130.  * The error may be one of the following values:
  1131.  *  NSS_ERROR_INVALID_STRING
  1132.  *  NSS_ERROR_NO_MEMORY
  1133.  *
  1134.  * Return value:
  1135.  *  NULL upon error
  1136.  *  A pointer to an NSSName upon success
  1137.  */
  1138. NSS_EXTERN NSSName *
  1139. NSSName_CreateFromUTF8
  1140. (
  1141.   NSSArena *arenaOpt,
  1142.   NSSUTF8 *stringName
  1143. );
  1144. /*
  1145.  * NSSName_Create
  1146.  *
  1147.  * This routine creates an NSSName with the specified choice of
  1148.  * underlying name types.  The value of the choice variable must be
  1149.  * one of the values of the NSSNameChoice enumeration, and the type
  1150.  * of the arg variable must be as specified in the following table:
  1151.  *
  1152.  *   Choice                     Type
  1153.  *   ========================   ===========
  1154.  *   NSSNameChoiceRdnSequence   NSSRDNSeq *
  1155.  *
  1156.  * If the optional arena argument is non-null, the memory used will
  1157.  * be obtained from that arena; otherwise, the memory will be 
  1158.  * obtained from the heap.  This routine may return NULL upon error,
  1159.  * in which case it will have created an error stack.
  1160.  *
  1161.  * The error may be one of the following values:
  1162.  *  NSS_ERROR_INVALID_CHOICE
  1163.  *  NSS_ERROR_INVALID_ARGUMENT
  1164.  *  NSS_ERROR_NO_MEMORY
  1165.  *
  1166.  * Return value:
  1167.  *  NULL upon error
  1168.  *  A pointer to an NSSName upon success
  1169.  */
  1170. NSS_EXTERN NSSName *
  1171. NSSName_Create
  1172. (
  1173.   NSSArena *arenaOpt,
  1174.   NSSNameChoice choice,
  1175.   void *arg
  1176. );
  1177. /*
  1178.  * NSSName_Destroy
  1179.  *
  1180.  * This routine will destroy a Name object.  It should eventually be
  1181.  * called on all Names created without an arena.  While it is not
  1182.  * necessary to call it on Names created within an arena, it is not
  1183.  * an error to do so.  This routine returns a PRStatus value; if
  1184.  * successful, it will return PR_SUCCESS.  If unsuccessful, it will
  1185.  * create an error stack and return PR_FAILURE.
  1186.  *
  1187.  * The error may be one of the following values:
  1188.  *  NSS_ERROR_INVALID_NAME
  1189.  *
  1190.  * Return value:
  1191.  *  PR_FAILURE upon error
  1192.  *  PR_SUCCESS upon success
  1193.  */
  1194. NSS_EXTERN PRStatus
  1195. NSSName_Destroy
  1196. (
  1197.   NSSName *name
  1198. );
  1199. /*
  1200.  * NSSName_GetDEREncoding
  1201.  *
  1202.  * This routine will DER-encode a name object.  If the optional arena
  1203.  * argument is non-null, the memory used will be obtained from that
  1204.  * arena; otherwise, the memory will be obtained from the heap.  This
  1205.  * routine may return null upon error, in which case it will have 
  1206.  * created an error stack.
  1207.  *
  1208.  * The error may be one of the following values:
  1209.  *  NSS_ERROR_INVALID_NAME
  1210.  *  NSS_ERROR_NO_MEMORY
  1211.  *
  1212.  * Return value:
  1213.  *  NULL upon error
  1214.  *  The DER encoding of this NSSName
  1215.  */
  1216. NSS_EXTERN NSSDER *
  1217. NSSName_GetDEREncoding
  1218. (
  1219.   NSSName *name,
  1220.   NSSArena *arenaOpt
  1221. );
  1222. /*
  1223.  * NSSName_GetUTF8Encoding
  1224.  *
  1225.  * This routine returns a UTF8 string containing a string 
  1226.  * representation of the Name in the format specified by the 
  1227.  * underlying name choice.  If the optional arena argument is non-null,
  1228.  * the memory used will be obtained from that arena; otherwise, the 
  1229.  * memory will be obtained from the heap.  This routine may return
  1230.  * NULL upon error, in which case it will have created an error stack.
  1231.  *
  1232.  * The error may be one of the following values:
  1233.  *  NSS_ERROR_INVALID_NAME
  1234.  *  NSS_ERROR_NO_MEMORY
  1235.  *
  1236.  * Return value:
  1237.  *  NULL upon error
  1238.  *  A pointer to the UTF8 string
  1239.  */
  1240. NSS_EXTERN NSSUTF8 *
  1241. NSSName_GetUTF8Encoding
  1242. (
  1243.   NSSName *name,
  1244.   NSSArena *arenaOpt
  1245. );
  1246. /*
  1247.  * NSSName_GetChoice
  1248.  *
  1249.  * This routine returns the type of the choice underlying the specified
  1250.  * name.  The return value will be a member of the NSSNameChoice 
  1251.  * enumeration.  This routine may return NSSNameChoiceInvalid upon 
  1252.  * error, in which case it will have created an error stack.
  1253.  *
  1254.  * The error may be one of the following values:
  1255.  *  NSS_ERROR_INVALID_NAME
  1256.  *
  1257.  * Return value:
  1258.  *  NSSNameChoiceInvalid upon error
  1259.  *  An other member of the NSSNameChoice enumeration upon success
  1260.  */
  1261. NSS_EXTERN NSSNameChoice
  1262. NSSName_GetChoice
  1263. (
  1264.   NSSName *name
  1265. );
  1266. /*
  1267.  * NSSName_GetRDNSequence
  1268.  *
  1269.  * If the choice underlying the specified NSSName is that of an 
  1270.  * RDNSequence, this routine will return a pointer to that RDN
  1271.  * sequence.  Otherwise, this routine will place an error on the
  1272.  * error stack, and return NULL.  If the optional arena argument is
  1273.  * non-null, the memory required will be obtained from that arena;
  1274.  * otherwise, the memory will be obtained from the heap.  The
  1275.  * caller owns the returned pointer.  This routine may return NULL
  1276.  * upon error, in which case it will have created an error stack.
  1277.  *
  1278.  * The error may be one of the following values:
  1279.  *  NSS_ERROR_INVALID_NAME
  1280.  *  NSS_ERROR_WRONG_CHOICE
  1281.  *  NSS_ERROR_NO_MEMORY
  1282.  *
  1283.  * Return value:
  1284.  *  NULL upon error
  1285.  *  A caller-owned pointer to an NSSRDNSeq
  1286.  */
  1287. NSS_EXTERN NSSRDNSeq *
  1288. NSSName_GetRDNSequence
  1289. (
  1290.   NSSName *name,
  1291.   NSSArena *arenaOpt
  1292. );
  1293. /*
  1294.  * NSSName_GetSpecifiedChoice
  1295.  *
  1296.  * If the choice underlying the specified NSSName matches the specified
  1297.  * choice, a caller-owned pointer to that underlying object will be
  1298.  * returned.  Otherwise, an error will be placed on the error stack and
  1299.  * NULL will be returned.  If the optional arena argument is non-null, 
  1300.  * the memory required will be obtained from that arena; otherwise, the
  1301.  * memory will be obtained from the heap.  The caller owns the returned
  1302.  * pointer.  This routine may return NULL upon error, in which case it
  1303.  * will have created an error stack.
  1304.  *
  1305.  * The error may be one of the following values:
  1306.  *  NSS_ERROR_INVALID_NAME
  1307.  *  NSS_ERROR_WRONG_CHOICE
  1308.  *  NSS_ERROR_NO_MEMORY
  1309.  *
  1310.  * Return value:
  1311.  *  NULL upon error
  1312.  *  A caller-owned pointer, which must be typecast
  1313.  */
  1314. NSS_EXTERN void *
  1315. NSSName_GetSpecifiedChoice
  1316. (
  1317.   NSSName *name,
  1318.   NSSNameChoice choice,
  1319.   NSSArena *arenaOpt
  1320. );
  1321. /*
  1322.  * NSSName_Compare
  1323.  *
  1324.  * This routine compares two Names for equality.  For two Names to be
  1325.  * equal, they must have the same choice of underlying types, and the
  1326.  * underlying values must be equal.  The result of the comparison will
  1327.  * be stored at the location pointed to by the "equalp" variable, which
  1328.  * must point to a valid PRBool. This routine may return PR_FAILURE
  1329.  * upon error, in which case it will have created an error stack.
  1330.  *
  1331.  * The error may be one of the following values:
  1332.  *  NSS_ERROR_INVALID_NAME
  1333.  *  NSS_ERROR_INVALID_ARGUMENT
  1334.  *
  1335.  * Return value:
  1336.  *  PR_FAILURE on error
  1337.  *  PR_SUCCESS upon a successful comparison (equal or not)
  1338.  */
  1339. NSS_EXTERN PRStatus
  1340. NSSName_Compare
  1341. (
  1342.   NSSName *name1,
  1343.   NSSName *name2,
  1344.   PRBool *equalp
  1345. );
  1346. /*
  1347.  * NSSName_Duplicate
  1348.  *
  1349.  * This routine duplicates the specified nssname.  If the optional
  1350.  * arena argument is non-null, the memory required will be obtained
  1351.  * from that arena; otherwise, the memory will be obtained from the
  1352.  * heap.  This routine may return NULL upon error, in which case it
  1353.  * will have created an error stack.
  1354.  *
  1355.  * The error may be one of the following values:
  1356.  *  NSS_ERROR_INVALID_NAME
  1357.  *  NSS_ERROR_NO_MEMORY
  1358.  *
  1359.  * Return value:
  1360.  *  NULL upon error
  1361.  *  A pointer to a new NSSName
  1362.  */
  1363. NSS_EXTERN NSSName *
  1364. NSSName_Duplicate
  1365. (
  1366.   NSSName *name,
  1367.   NSSArena *arenaOpt
  1368. );
  1369. /*
  1370.  * NSSName_GetUID
  1371.  *
  1372.  * This routine will attempt to derive a user identifier from the
  1373.  * specified name, if the choices and content of the name permit.
  1374.  * If the Name consists of a Sequence of Relative Distinguished 
  1375.  * Names containing a UID attribute, the UID will be the value of 
  1376.  * that attribute.  Note that no UID attribute is defined in either 
  1377.  * PKIX or PKCS#9; rather, this seems to derive from RFC 1274, which 
  1378.  * defines the type as a caseIgnoreString.  We'll return a Directory 
  1379.  * String.  If the optional arena argument is non-null, the memory 
  1380.  * used will be obtained from that arena; otherwise, the memory will 
  1381.  * be obtained from the heap.  This routine may return NULL upon error,
  1382.  * in which case it will have created an error stack.
  1383.  *
  1384.  * The error may be one of the following values:
  1385.  *  NSS_ERROR_INVALID_NAME
  1386.  *  NSS_ERROR_NO_UID
  1387.  *  NSS_ERROR_NO_MEMORY
  1388.  *
  1389.  * Return value:
  1390.  *  NULL upon error
  1391.  *  A pointer to a UTF8 String.
  1392.  */
  1393. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1394. NSSName_GetUID
  1395. (
  1396.   NSSName *name,
  1397.   NSSArena *arenaOpt
  1398. );
  1399. /*
  1400.  * NSSName_GetEmail
  1401.  *
  1402.  * This routine will attempt to derive an email address from the
  1403.  * specified name, if the choices and content of the name permit.  
  1404.  * If the Name consists of a Sequence of Relative Distinguished 
  1405.  * Names containing either a PKIX email address or a PKCS#9 email
  1406.  * address, the result will be the value of that attribute.  If the
  1407.  * optional arena argument is non-null, the memory used will be
  1408.  * obtained from that arena; otherwise, the memory will be obtained
  1409.  * from the heap.  This routine may return NULL upon error, in which
  1410.  * case it will have created an error stack.
  1411.  *
  1412.  * The error may be one of the following values:
  1413.  *  NSS_ERROR_INVALID_NAME
  1414.  *  NSS_ERROR_NO_EMAIL
  1415.  *  NSS_ERROR_NO_MEMORY
  1416.  *
  1417.  * Return value:
  1418.  *  NULL upon error
  1419.  *  A pointer to a UTF8 String
  1420.  */
  1421. NSS_EXTERN NSSUTF8 * /* XXX fgmr IA5 String */
  1422. NSSName_GetEmail
  1423. (
  1424.   NSSName *name,
  1425.   NSSArena *arenaOpt
  1426. );
  1427. /*
  1428.  * NSSName_GetCommonName
  1429.  *
  1430.  * This routine will attempt to derive a common name from the
  1431.  * specified name, if the choices and content of the name permit.  
  1432.  * If the Name consists of a Sequence of Relative Distinguished Names
  1433.  * containing a PKIX Common Name, the result will be that name.  If 
  1434.  * the optional arena argument is non-null, the memory used will be 
  1435.  * obtained from that arena; otherwise, the memory will be obtained 
  1436.  * from the heap.  This routine may return NULL upon error, in which 
  1437.  * case it will have created an error stack.
  1438.  *
  1439.  * The error may be one of the following values:
  1440.  *  NSS_ERROR_INVALID_NAME
  1441.  *  NSS_ERROR_NO_COMMON_NAME
  1442.  *  NSS_ERROR_NO_MEMORY
  1443.  *
  1444.  * Return value:
  1445.  *  NULL upon error
  1446.  *  A pointer to a UTF8 String
  1447.  */
  1448. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1449. NSSName_GetCommonName
  1450. (
  1451.   NSSName *name,
  1452.   NSSArena *arenaOpt
  1453. );
  1454. /*
  1455.  * NSSName_GetOrganization
  1456.  *
  1457.  * This routine will attempt to derive an organisation name from the
  1458.  * specified name, if the choices and content of the name permit.  
  1459.  * If Name consists of a Sequence of Relative Distinguished names 
  1460.  * containing a PKIX Organization, the result will be the value of 
  1461.  * that attribute.  If the optional arena argument is non-null, the 
  1462.  * memory used will be obtained from that arena; otherwise, the memory 
  1463.  * will be obtained from the heap.  This routine may return NULL upon 
  1464.  * error, in which case it will have created an error stack.
  1465.  *
  1466.  * The error may be one of the following values:
  1467.  *  NSS_ERROR_INVALID_NAME
  1468.  *  NSS_ERROR_NO_ORGANIZATION
  1469.  *  NSS_ERROR_NO_MEMORY
  1470.  *
  1471.  * Return value:
  1472.  *  NULL upon error
  1473.  *  A pointer to a UTF8 String
  1474.  */
  1475. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1476. NSSName_GetOrganization
  1477. (
  1478.   NSSName *name,
  1479.   NSSArena *arenaOpt
  1480. );
  1481. /*
  1482.  * NSSName_GetOrganizationalUnits
  1483.  *
  1484.  * This routine will attempt to derive a sequence of organisational 
  1485.  * unit names from the specified name, if the choices and content of 
  1486.  * the name permit.  If the Name consists of a Sequence of Relative 
  1487.  * Distinguished Names containing one or more organisational units,
  1488.  * the result will be the values of those attributes.  If the optional 
  1489.  * arena argument is non-null, the memory used will be obtained from 
  1490.  * that arena; otherwise, the memory will be obtained from the heap.  
  1491.  * This routine may return NULL upon error, in which case it will have 
  1492.  * created an error stack.
  1493.  *
  1494.  * The error may be one of the following values:
  1495.  *  NSS_ERROR_INVALID_NAME
  1496.  *  NSS_ERROR_NO_ORGANIZATIONAL_UNITS
  1497.  *  NSS_ERROR_NO_MEMORY
  1498.  *
  1499.  * Return value:
  1500.  *  NULL upon error
  1501.  *  A pointer to a null-terminated array of UTF8 Strings
  1502.  */
  1503. NSS_EXTERN NSSUTF8 ** /* XXX fgmr DirectoryString */
  1504. NSSName_GetOrganizationalUnits
  1505. (
  1506.   NSSName *name,
  1507.   NSSArena *arenaOpt
  1508. );
  1509. /*
  1510.  * NSSName_GetStateOrProvince
  1511.  *
  1512.  * This routine will attempt to derive a state or province name from 
  1513.  * the specified name, if the choices and content of the name permit.
  1514.  * If the Name consists of a Sequence of Relative Distinguished Names
  1515.  * containing a state or province, the result will be the value of 
  1516.  * that attribute.  If the optional arena argument is non-null, the 
  1517.  * memory used will be obtained from that arena; otherwise, the memory 
  1518.  * will be obtained from the heap.  This routine may return NULL upon 
  1519.  * error, in which case it will have created an error stack.
  1520.  *
  1521.  * The error may be one of the following values:
  1522.  *  NSS_ERROR_INVALID_NAME
  1523.  *  NSS_ERROR_NO_STATE_OR_PROVINCE
  1524.  *  NSS_ERROR_NO_MEMORY
  1525.  *
  1526.  * Return value:
  1527.  *  NULL upon error
  1528.  *  A pointer to a UTF8 String
  1529.  */
  1530. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1531. NSSName_GetStateOrProvince
  1532. (
  1533.   NSSName *name,
  1534.   NSSArena *arenaOpt
  1535. );
  1536. /*
  1537.  * NSSName_GetLocality
  1538.  *
  1539.  * This routine will attempt to derive a locality name from the 
  1540.  * specified name, if the choices and content of the name permit.  If
  1541.  * the Name consists of a Sequence of Relative Distinguished names
  1542.  * containing a Locality, the result will be the value of that 
  1543.  * attribute.  If the optional arena argument is non-null, the memory 
  1544.  * used will be obtained from that arena; otherwise, the memory will 
  1545.  * be obtained from the heap.  This routine may return NULL upon error,
  1546.  * in which case it will have created an error stack.
  1547.  *
  1548.  * The error may be one of the following values:
  1549.  *  NSS_ERROR_INVALID_NAME
  1550.  *  NSS_ERROR_NO_LOCALITY
  1551.  *  NSS_ERROR_NO_MEMORY
  1552.  *
  1553.  * Return value:
  1554.  *  NULL upon error
  1555.  *  A pointer to a UTF8 String
  1556.  */
  1557. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1558. NSSName_GetLocality
  1559. (
  1560.   NSSName *name,
  1561.   NSSArena *arenaOpt
  1562. );
  1563. /*
  1564.  * NSSName_GetCountry
  1565.  *
  1566.  * This routine will attempt to derive a country name from the 
  1567.  * specified name, if the choices and content of the name permit.
  1568.  * If the Name consists of a Sequence of Relative Distinguished 
  1569.  * Names containing a Country, the result will be the value of
  1570.  * that attribute..  If the optional arena argument is non-null, 
  1571.  * the memory used will be obtained from that arena; otherwise, 
  1572.  * the memory will be obtained from the heap.  This routine may 
  1573.  * return NULL upon error, in which case it will have created an 
  1574.  * error stack.
  1575.  *
  1576.  * The error may be one of the following values:
  1577.  *  NSS_ERROR_INVALID_NAME
  1578.  *  NSS_ERROR_NO_COUNTRY
  1579.  *  NSS_ERROR_NO_MEMORY
  1580.  *
  1581.  * Return value:
  1582.  *  NULL upon error
  1583.  *  A pointer to a UTF8 String
  1584.  */
  1585. NSS_EXTERN NSSUTF8 * /* XXX fgmr PrintableString */
  1586. NSSName_GetCountry
  1587. (
  1588.   NSSName *name,
  1589.   NSSArena *arenaOpt
  1590. );
  1591. /*
  1592.  * NSSName_GetAttribute
  1593.  *
  1594.  * If the specified name consists of a Sequence of Relative 
  1595.  * Distinguished Names containing an attribute with the specified 
  1596.  * type, and the actual value of that attribute may be expressed 
  1597.  * with a Directory String, then the value of that attribute will 
  1598.  * be returned as a Directory String.  If the optional arena argument 
  1599.  * is non-null, the memory used will be obtained from that arena; 
  1600.  * otherwise, the memory will be obtained from the heap.  This routine 
  1601.  * may return NULL upon error, in which case it will have created an
  1602.  * error stack.
  1603.  *
  1604.  * The error may be one of the following values:
  1605.  *  NSS_ERROR_INVALID_NAME
  1606.  *  NSS_ERROR_NO_ATTRIBUTE
  1607.  *  NSS_ERROR_ATTRIBUTE_VALUE_NOT_STRING
  1608.  *
  1609.  * Return value:
  1610.  *  NULL upon error
  1611.  *  A pointer to a UTF8 String
  1612.  */
  1613. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  1614. NSSName_GetAttribute
  1615. (
  1616.   NSSName *name,
  1617.   NSSOID *attribute,
  1618.   NSSArena *arenaOpt
  1619. );
  1620. /*
  1621.  * NSSGeneralName
  1622.  *
  1623.  * The public "methods" regarding this "object" are:
  1624.  *
  1625.  * NSSGeneralName_CreateFromBER   -- constructor
  1626.  * NSSGeneralName_CreateFromUTF8  -- constructor
  1627.  * NSSGeneralName_Create          -- constructor
  1628.  *
  1629.  * NSSGeneralName_Destroy
  1630.  * NSSGeneralName_GetDEREncoding
  1631.  * NSSGeneralName_GetUTF8Encoding
  1632.  * NSSGeneralName_GetChoice
  1633.  * NSSGeneralName_GetOtherName
  1634.  * NSSGeneralName_GetRfc822Name
  1635.  * NSSGeneralName_GetDNSName
  1636.  * NSSGeneralName_GetX400Address
  1637.  * NSSGeneralName_GetDirectoryName
  1638.  * NSSGeneralName_GetEdiPartyName
  1639.  * NSSGeneralName_GetUniformResourceIdentifier
  1640.  * NSSGeneralName_GetIPAddress
  1641.  * NSSGeneralName_GetRegisteredID
  1642.  * NSSGeneralName_GetSpecifiedChoice
  1643.  * NSSGeneralName_Compare
  1644.  * NSSGeneralName_Duplicate
  1645.  *
  1646.  * NSSGeneralName_GetUID
  1647.  * NSSGeneralName_GetEmail
  1648.  * NSSGeneralName_GetCommonName
  1649.  * NSSGeneralName_GetOrganization
  1650.  * NSSGeneralName_GetOrganizationalUnits
  1651.  * NSSGeneralName_GetStateOrProvince
  1652.  * NSSGeneralName_GetLocality
  1653.  * NSSGeneralName_GetCountry
  1654.  * NSSGeneralName_GetAttribute
  1655.  */
  1656. /*
  1657.  * NSSGeneralName_CreateFromBER
  1658.  *
  1659.  * This routine creates an NSSGeneralName by decoding a BER- or DER-
  1660.  * encoded general name.  If the optional arena argument is non-null,
  1661.  * the memory used will be obtained from that arena; otherwise, the 
  1662.  * memory will be obtained from the heap.  This routine may return 
  1663.  * NULL upon error, in which case it will have created an error stack.
  1664.  *
  1665.  * The error may be one of the following values:
  1666.  *  NSS_ERROR_INVALID_BER
  1667.  *  NSS_ERROR_NO_MEMORY
  1668.  *
  1669.  * Return value:
  1670.  *  NULL upon error
  1671.  *  A pointer to an NSSGeneralName upon success
  1672.  */
  1673. NSS_EXTERN NSSGeneralName *
  1674. NSSGeneralName_CreateFromBER
  1675. (
  1676.   NSSArena *arenaOpt,
  1677.   NSSBER *berGeneralName
  1678. );
  1679. /*
  1680.  * NSSGeneralName_CreateFromUTF8
  1681.  *
  1682.  * This routine creates an NSSGeneralName by decoding a UTF8 string
  1683.  * consisting of the string representation of one of the choices of
  1684.  * general names.  If the optional arena argument is non-null, the 
  1685.  * memory used will be obtained from that arena; otherwise, the memory
  1686.  * will be obtained from the heap.  The routine may return NULL upon
  1687.  * error, in which case it will have created an error stack.
  1688.  *
  1689.  * The error may be one of the following values:
  1690.  *  NSS_ERROR_INVALID_STRING
  1691.  *  NSS_ERROR_NO_MEMORY
  1692.  *
  1693.  * Return value:
  1694.  *  NULL upon error
  1695.  *  A pointer to an NSSGeneralName upon success
  1696.  */
  1697. NSS_EXTERN NSSGeneralName *
  1698. NSSGeneralName_CreateFromUTF8
  1699. (
  1700.   NSSArena *arenaOpt,
  1701.   NSSUTF8 *stringGeneralName
  1702. );
  1703. /*
  1704.  * NSSGeneralName_Create
  1705.  *
  1706.  * This routine creates an NSSGeneralName with the specified choice of
  1707.  * underlying name types.  The value of the choice variable must be one
  1708.  * of the values of the NSSGeneralNameChoice enumeration, and the type
  1709.  * of the arg variable must be as specified in the following table:
  1710.  *
  1711.  *   Choice                                         Type
  1712.  *   ============================================   =========
  1713.  *   NSSGeneralNameChoiceOtherName
  1714.  *   NSSGeneralNameChoiceRfc822Name
  1715.  *   NSSGeneralNameChoiceDNSName
  1716.  *   NSSGeneralNameChoiceX400Address
  1717.  *   NSSGeneralNameChoiceDirectoryName              NSSName *
  1718.  *   NSSGeneralNameChoiceEdiPartyName
  1719.  *   NSSGeneralNameChoiceUniformResourceIdentifier
  1720.  *   NSSGeneralNameChoiceIPAddress
  1721.  *   NSSGeneralNameChoiceRegisteredID
  1722.  *
  1723.  * If the optional arena argument is non-null, the memory used will
  1724.  * be obtained from that arena; otherwise, the memory will be 
  1725.  * obtained from the heap.  This routine may return NULL upon error,
  1726.  * in which case it will have created an error stack.
  1727.  *
  1728.  * The error may be one fo the following values:
  1729.  *  NSS_ERROR_INVALID_CHOICE
  1730.  *  NSS_ERROR_INVALID_ARGUMENT
  1731.  *  NSS_ERROR_NO_MEMORY
  1732.  *
  1733.  * Return value:
  1734.  *  NULL upon error
  1735.  *  A pointer to an NSSGeneralName upon success
  1736.  */
  1737. NSS_EXTERN NSSGeneralName *
  1738. NSSGeneralName_Create
  1739. (
  1740.   NSSGeneralNameChoice choice,
  1741.   void *arg
  1742. );
  1743. /*
  1744.  * NSSGeneralName_Destroy
  1745.  * 
  1746.  * This routine will destroy a General Name object.  It should 
  1747.  * eventually be called on all General Names created without an arena.
  1748.  * While it is not necessary to call it on General Names created within
  1749.  * an arena, it is not an error to do so.  This routine returns a
  1750.  * PRStatus value; if successful, it will return PR_SUCCESS. If 
  1751.  * usuccessful, it will create an error stack and return PR_FAILURE.
  1752.  *
  1753.  * The error may be one of the following values:
  1754.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1755.  *
  1756.  * Return value:
  1757.  *  PR_FAILURE upon failure
  1758.  *  PR_SUCCESS upon success
  1759.  */
  1760. NSS_EXTERN PRStatus
  1761. NSSGeneralName_Destroy
  1762. (
  1763.   NSSGeneralName *generalName
  1764. );
  1765. /*
  1766.  * NSSGeneralName_GetDEREncoding
  1767.  *
  1768.  * This routine will DER-encode a name object.  If the optional arena
  1769.  * argument is non-null, the memory used will be obtained from that
  1770.  * arena; otherwise, the memory will be obtained from the heap.  This
  1771.  * routine may return null upon error, in which case it will have 
  1772.  * created an error stack.
  1773.  *
  1774.  * The error may be one of the following values:
  1775.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1776.  *  NSS_ERROR_NO_MEMORY
  1777.  *
  1778.  * Return value:
  1779.  *  NULL upon error
  1780.  *  The DER encoding of this NSSGeneralName
  1781.  */
  1782. NSS_EXTERN NSSDER *
  1783. NSSGeneralName_GetDEREncoding
  1784. (
  1785.   NSSGeneralName *generalName,
  1786.   NSSArena *arenaOpt
  1787. );
  1788. /*
  1789.  * NSSGeneralName_GetUTF8Encoding
  1790.  *
  1791.  * This routine returns a UTF8 string containing a string 
  1792.  * representation of the General Name in the format specified by the
  1793.  * underlying name choice.  If the optional arena argument is 
  1794.  * non-null, the memory used will be obtained from that arena; 
  1795.  * otherwise, the memory will be obtained from the heap.  This routine
  1796.  * may return NULL upon error, in which case it will have created an
  1797.  * error stack.
  1798.  *
  1799.  * The error may be one of the following values:
  1800.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1801.  *  NSS_ERROR_NO_MEMORY
  1802.  *
  1803.  * Return value:
  1804.  *  NULL upon error
  1805.  *  A pointer to a UTF8 string
  1806.  */
  1807. NSS_EXTERN NSSUTF8 *
  1808. NSSGeneralName_GetUTF8Encoding
  1809. (
  1810.   NSSGeneralName *generalName,
  1811.   NSSArena *arenaOpt
  1812. );
  1813. /*
  1814.  * NSSGeneralName_GetChoice
  1815.  *
  1816.  * This routine returns the type of choice underlying the specified 
  1817.  * general name.  The return value will be a member of the 
  1818.  * NSSGeneralNameChoice enumeration.  This routine may return 
  1819.  * NSSGeneralNameChoiceInvalid upon error, in which case it will have 
  1820.  * created an error stack.
  1821.  *
  1822.  * The error may be one of the following values:
  1823.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1824.  *
  1825.  * Return value:
  1826.  *  NSSGeneralNameChoiceInvalid upon error
  1827.  *  An other member of the NSSGeneralNameChoice enumeration 
  1828.  */
  1829. NSS_EXTERN NSSGeneralNameChoice
  1830. NSSGeneralName_GetChoice
  1831. (
  1832.   NSSGeneralName *generalName
  1833. );
  1834. /*
  1835.  * NSSGeneralName_GetOtherName
  1836.  *
  1837.  * If the choice underlying the specified NSSGeneralName is that of an
  1838.  * Other Name, this routine will return a pointer to that Other name.
  1839.  * Otherwise, this routine will place an error on the error stack, and
  1840.  * return NULL.  If the optional arena argument is non-null, the memory
  1841.  * required will be obtained from that arena; otherwise, the memory 
  1842.  * will be obtained from the heap.  The caller owns the returned 
  1843.  * pointer.  This routine may return NULL upon error, in which case it
  1844.  * will have created an error stack.
  1845.  *
  1846.  * The error may be one of the following values:
  1847.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1848.  *  NSS_ERROR_WRONG_CHOICE
  1849.  *  NSS_ERROR_NO_MEMORY
  1850.  *
  1851.  * Return value:
  1852.  *  NULL upon error
  1853.  *  A caller-owned pointer to an NSSOtherName
  1854.  */
  1855. NSS_EXTERN NSSOtherName *
  1856. NSSGeneralName_GetOtherName
  1857. (
  1858.   NSSGeneralName *generalName,
  1859.   NSSArena *arenaOpt
  1860. );
  1861. /*
  1862.  * NSSGeneralName_GetRfc822Name
  1863.  *
  1864.  * If the choice underlying the specified NSSGeneralName is that of an
  1865.  * RFC 822 Name, this routine will return a pointer to that name.
  1866.  * Otherwise, this routine will place an error on the error stack, and
  1867.  * return NULL.  If the optional arena argument is non-null, the memory
  1868.  * required will be obtained from that arena; otherwise, the memory 
  1869.  * will be obtained from the heap.  The caller owns the returned 
  1870.  * pointer.  This routine may return NULL upon error, in which case it
  1871.  * will have created an error stack.
  1872.  *
  1873.  * The error may be one of the following values:
  1874.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1875.  *  NSS_ERROR_WRONG_CHOICE
  1876.  *  NSS_ERROR_NO_MEMORY
  1877.  *
  1878.  * Return value:
  1879.  *  NULL upon error
  1880.  *  A caller-owned pointer to an NSSRFC822Name
  1881.  */
  1882. NSS_EXTERN NSSRFC822Name *
  1883. NSSGeneralName_GetRfc822Name
  1884. (
  1885.   NSSGeneralName *generalName,
  1886.   NSSArena *arenaOpt
  1887. );
  1888. /*
  1889.  * NSSGeneralName_GetDNSName
  1890.  *
  1891.  * If the choice underlying the specified NSSGeneralName is that of a 
  1892.  * DNS Name, this routine will return a pointer to that DNS name.
  1893.  * Otherwise, this routine will place an error on the error stack, and
  1894.  * return NULL.  If the optional arena argument is non-null, the memory
  1895.  * required will be obtained from that arena; otherwise, the memory 
  1896.  * will be obtained from the heap.  The caller owns the returned 
  1897.  * pointer.  This routine may return NULL upon error, in which case it
  1898.  * will have created an error stack.
  1899.  *
  1900.  * The error may be one of the following values:
  1901.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1902.  *  NSS_ERROR_WRONG_CHOICE
  1903.  *  NSS_ERROR_NO_MEMORY
  1904.  *
  1905.  * Return value:
  1906.  *  NULL upon error
  1907.  *  A caller-owned pointer to an NSSDNSName
  1908.  */
  1909. NSS_EXTERN NSSDNSName *
  1910. NSSGeneralName_GetDNSName
  1911. (
  1912.   NSSGeneralName *generalName,
  1913.   NSSArena *arenaOpt
  1914. );
  1915. /*
  1916.  * NSSGeneralName_GetX400Address
  1917.  *
  1918.  * If the choice underlying the specified NSSGeneralName is that of an
  1919.  * X.400 Address, this routine will return a pointer to that Address.
  1920.  * Otherwise, this routine will place an error on the error stack, and
  1921.  * return NULL.  If the optional arena argument is non-null, the memory
  1922.  * required will be obtained from that arena; otherwise, the memory 
  1923.  * will be obtained from the heap.  The caller owns the returned 
  1924.  * pointer.  This routine may return NULL upon error, in which case it
  1925.  * will have created an error stack.
  1926.  *
  1927.  * The error may be one of the following values:
  1928.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1929.  *  NSS_ERROR_WRONG_CHOICE
  1930.  *  NSS_ERROR_NO_MEMORY
  1931.  *
  1932.  * Return value:
  1933.  *  NULL upon error
  1934.  *  A caller-owned pointer to an NSSX400Address
  1935.  */
  1936. NSS_EXTERN NSSX400Address *
  1937. NSSGeneralName_GetX400Address
  1938. (
  1939.   NSSGeneralName *generalName,
  1940.   NSSArena *arenaOpt
  1941. );
  1942. /*
  1943.  * NSSGeneralName_GetDirectoryName
  1944.  *
  1945.  * If the choice underlying the specified NSSGeneralName is that of a
  1946.  * (directory) Name, this routine will return a pointer to that name.
  1947.  * Otherwise, this routine will place an error on the error stack, and
  1948.  * return NULL.  If the optional arena argument is non-null, the memory
  1949.  * required will be obtained from that arena; otherwise, the memory 
  1950.  * will be obtained from the heap.  The caller owns the returned 
  1951.  * pointer.  This routine may return NULL upon error, in which case it
  1952.  * will have created an error stack.
  1953.  *
  1954.  * The error may be one of the following values:
  1955.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1956.  *  NSS_ERROR_WRONG_CHOICE
  1957.  *  NSS_ERROR_NO_MEMORY
  1958.  *
  1959.  * Return value:
  1960.  *  NULL upon error
  1961.  *  A caller-owned pointer to an NSSName
  1962.  */
  1963. NSS_EXTERN NSSName *
  1964. NSSGeneralName_GetName
  1965. (
  1966.   NSSGeneralName *generalName,
  1967.   NSSArena *arenaOpt
  1968. );
  1969. /*
  1970.  * NSSGeneralName_GetEdiPartyName
  1971.  *
  1972.  * If the choice underlying the specified NSSGeneralName is that of an
  1973.  * EDI Party Name, this routine will return a pointer to that name.
  1974.  * Otherwise, this routine will place an error on the error stack, and
  1975.  * return NULL.  If the optional arena argument is non-null, the memory
  1976.  * required will be obtained from that arena; otherwise, the memory 
  1977.  * will be obtained from the heap.  The caller owns the returned 
  1978.  * pointer.  This routine may return NULL upon error, in which case it
  1979.  * will have created an error stack.
  1980.  *
  1981.  * The error may be one of the following values:
  1982.  *  NSS_ERROR_INVALID_GENERAL_NAME
  1983.  *  NSS_ERROR_WRONG_CHOICE
  1984.  *  NSS_ERROR_NO_MEMORY
  1985.  *
  1986.  * Return value:
  1987.  *  NULL upon error
  1988.  *  A caller-owned pointer to an NSSEdiPartyName
  1989.  */
  1990. NSS_EXTERN NSSEdiPartyName *
  1991. NSSGeneralName_GetEdiPartyName
  1992. (
  1993.   NSSGeneralName *generalName,
  1994.   NSSArena *arenaOpt
  1995. );
  1996. /*
  1997.  * NSSGeneralName_GetUniformResourceIdentifier
  1998.  *
  1999.  * If the choice underlying the specified NSSGeneralName is that of a
  2000.  * URI, this routine will return a pointer to that URI.
  2001.  * Otherwise, this routine will place an error on the error stack, and
  2002.  * return NULL.  If the optional arena argument is non-null, the memory
  2003.  * required will be obtained from that arena; otherwise, the memory 
  2004.  * will be obtained from the heap.  The caller owns the returned 
  2005.  * pointer.  This routine may return NULL upon error, in which case it
  2006.  * will have created an error stack.
  2007.  *
  2008.  * The error may be one of the following values:
  2009.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2010.  *  NSS_ERROR_WRONG_CHOICE
  2011.  *  NSS_ERROR_NO_MEMORY
  2012.  *
  2013.  * Return value:
  2014.  *  NULL upon error
  2015.  *  A caller-owned pointer to an NSSURI
  2016.  */
  2017. NSS_EXTERN NSSURI *
  2018. NSSGeneralName_GetUniformResourceIdentifier
  2019. (
  2020.   NSSGeneralName *generalName,
  2021.   NSSArena *arenaOpt
  2022. );
  2023. /*
  2024.  * NSSGeneralName_GetIPAddress
  2025.  *
  2026.  * If the choice underlying the specified NSSGeneralName is that of an
  2027.  * IP Address , this routine will return a pointer to that address.
  2028.  * Otherwise, this routine will place an error on the error stack, and
  2029.  * return NULL.  If the optional arena argument is non-null, the memory
  2030.  * required will be obtained from that arena; otherwise, the memory 
  2031.  * will be obtained from the heap.  The caller owns the returned 
  2032.  * pointer.  This routine may return NULL upon error, in which case it
  2033.  * will have created an error stack.
  2034.  *
  2035.  * The error may be one of the following values:
  2036.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2037.  *  NSS_ERROR_WRONG_CHOICE
  2038.  *  NSS_ERROR_NO_MEMORY
  2039.  *
  2040.  * Return value:
  2041.  *  NULL upon error
  2042.  *  A caller-owned pointer to an NSSIPAddress
  2043.  */
  2044. NSS_EXTERN NSSIPAddress *
  2045. NSSGeneralName_GetIPAddress
  2046. (
  2047.   NSSGeneralName *generalName,
  2048.   NSSArena *arenaOpt
  2049. );
  2050. /*
  2051.  * NSSGeneralName_GetRegisteredID
  2052.  *
  2053.  * If the choice underlying the specified NSSGeneralName is that of a
  2054.  * Registered ID, this routine will return a pointer to that ID.
  2055.  * Otherwise, this routine will place an error on the error stack, and
  2056.  * return NULL.  If the optional arena argument is non-null, the memory
  2057.  * required will be obtained from that arena; otherwise, the memory 
  2058.  * will be obtained from the heap.  The caller owns the returned 
  2059.  * pointer.  This routine may return NULL upon error, in which case it
  2060.  * will have created an error stack.
  2061.  *
  2062.  * The error may be one of the following values:
  2063.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2064.  *  NSS_ERROR_WRONG_CHOICE
  2065.  *  NSS_ERROR_NO_MEMORY
  2066.  *
  2067.  * Return value:
  2068.  *  NULL upon error
  2069.  *  A caller-owned pointer to an NSSRegisteredID
  2070.  */
  2071. NSS_EXTERN NSSRegisteredID *
  2072. NSSGeneralName_GetRegisteredID
  2073. (
  2074.   NSSGeneralName *generalName,
  2075.   NSSArena *arenaOpt
  2076. );
  2077. /*
  2078.  * NSSGeneralName_GetSpecifiedChoice
  2079.  *
  2080.  * If the choice underlying the specified NSSGeneralName matches the
  2081.  * specified choice, a caller-owned pointer to that underlying object
  2082.  * will be returned.  Otherwise, an error will be placed on the error
  2083.  * stack and NULL will be returned.  If the optional arena argument
  2084.  * is non-null, the memory required will be obtained from that arena;
  2085.  * otherwise, the memory will be obtained from the heap.  The caller
  2086.  * owns the returned pointer.  This routine may return NULL upon 
  2087.  * error, in which caes it will have created an error stack.
  2088.  *
  2089.  * The error may be one of the following values:
  2090.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2091.  *  NSS_ERROR_WRONG_CHOICE
  2092.  *  NSS_ERROR_NO_MEMORY
  2093.  *
  2094.  * Return value:
  2095.  *  NULL upon error
  2096.  *  A caller-owned pointer, which must be typecast
  2097.  */
  2098. NSS_EXTERN void *
  2099. NSSGeneralName_GetSpecifiedChoice
  2100. (
  2101.   NSSGeneralName *generalName,
  2102.   NSSGeneralNameChoice choice,
  2103.   NSSArena *arenaOpt
  2104. );
  2105. /*
  2106.  * NSSGeneralName_Compare
  2107.  * 
  2108.  * This routine compares two General Names for equality.  For two 
  2109.  * General Names to be equal, they must have the same choice of
  2110.  * underlying types, and the underlying values must be equal.  The
  2111.  * result of the comparison will be stored at the location pointed
  2112.  * to by the "equalp" variable, which must point to a valid PRBool.
  2113.  * This routine may return PR_FAILURE upon error, in which case it
  2114.  * will have created an error stack.
  2115.  *
  2116.  * The error may be one of the following value:
  2117.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2118.  *  NSS_ERROR_INVALID_ARGUMENT
  2119.  *
  2120.  * Return value:
  2121.  *  PR_FAILURE upon error
  2122.  *  PR_SUCCESS upon a successful comparison (equal or not)
  2123.  */
  2124. NSS_EXTERN PRStatus
  2125. NSSGeneralName_Compare
  2126. (
  2127.   NSSGeneralName *generalName1,
  2128.   NSSGeneralName *generalName2,
  2129.   PRBool *equalp
  2130. );
  2131. /*
  2132.  * NSSGeneralName_Duplicate
  2133.  *
  2134.  * This routine duplicates the specified General Name.  If the optional
  2135.  * arena argument is non-null, the memory required will be obtained
  2136.  * from that arena; otherwise, the memory will be obtained from the
  2137.  * heap.  This routine may return NULL upon error, in which case it 
  2138.  * will have created an error stack.
  2139.  *
  2140.  * The error may be one of the following values:
  2141.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2142.  *  NSS_ERROR_NO_MEMORY
  2143.  *
  2144.  * Return value:
  2145.  *  NULL upon error
  2146.  *  A pointer to a new NSSGeneralName
  2147.  */
  2148. NSS_EXTERN NSSGeneralName *
  2149. NSSGeneralName_Duplicate
  2150. (
  2151.   NSSGeneralName *generalName,
  2152.   NSSArena *arenaOpt
  2153. );
  2154. /*
  2155.  * NSSGeneralName_GetUID
  2156.  *
  2157.  * This routine will attempt to derive a user identifier from the
  2158.  * specified general name, if the choices and content of the name
  2159.  * permit.  If the General Name is a (directory) Name consisting
  2160.  * of a Sequence of Relative Distinguished Names containing a UID
  2161.  * attribute, the UID will be the value of that attribute.  Note
  2162.  * that no UID attribute is defined in either PKIX or PKCS#9; 
  2163.  * rather, this seems to derive from RFC 1274, which defines the
  2164.  * type as a caseIgnoreString.  We'll return a Directory String.
  2165.  * If the optional arena argument is non-null, the memory used
  2166.  * will be obtained from that arena; otherwise, the memory will be
  2167.  * obtained from the heap.  This routine may return NULL upon error,
  2168.  * in which case it will have created an error stack.
  2169.  *
  2170.  * The error may be one of the following values:
  2171.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2172.  *  NSS_ERROR_NO_UID
  2173.  *  NSS_ERROR_NO_MEMORY
  2174.  *
  2175.  * Return value:
  2176.  *  NULL upon error
  2177.  *  A pointer to a UTF8 String.
  2178.  */
  2179. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2180. NSSGeneralName_GetUID
  2181. (
  2182.   NSSGeneralName *generalName,
  2183.   NSSArena *arenaOpt
  2184. );
  2185. /*
  2186.  * NSSGeneralName_GetEmail
  2187.  *
  2188.  * This routine will attempt to derive an email address from the
  2189.  * specified general name, if the choices and content of the name
  2190.  * permit.  If the General Name is a (directory) Name consisting
  2191.  * of a Sequence of Relative Distinguished names containing either
  2192.  * a PKIX email address or a PKCS#9 email address, the result will
  2193.  * be the value of that attribute.  If the General Name is an RFC 822
  2194.  * Name, the result will be the string form of that name.  If the
  2195.  * optional arena argument is non-null, the memory used will be 
  2196.  * obtained from that arena; otherwise, the memory will be obtained
  2197.  * from the heap.  This routine may return NULL upon error, in which
  2198.  * case it will have created an error stack.
  2199.  *
  2200.  * The error may be one of the following values:
  2201.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2202.  *  NSS_ERROR_NO_EMAIL
  2203.  *  NSS_ERROR_NO_MEMORY
  2204.  *
  2205.  * Return value:
  2206.  *  NULL upon error
  2207.  *  A pointer to a UTF8 String
  2208.  */
  2209. NSS_EXTERN NSSUTF8 * /* XXX fgmr IA5String */
  2210. NSSGeneralName_GetEmail
  2211. (
  2212.   NSSGeneralName *generalName,
  2213.   NSSArena *arenaOpt
  2214. );
  2215. /*
  2216.  * NSSGeneralName_GetCommonName
  2217.  *
  2218.  * This routine will attempt to derive a common name from the
  2219.  * specified general name, if the choices and content of the name
  2220.  * permit.  If the General Name is a (directory) Name consisting
  2221.  * of a Sequence of Relative Distinguished names containing a PKIX
  2222.  * Common Name, the result will be that name.  If the optional arena 
  2223.  * argument is non-null, the memory used will be obtained from that 
  2224.  * arena; otherwise, the memory will be obtained from the heap.  This 
  2225.  * routine may return NULL upon error, in which case it will have 
  2226.  * created an error stack.
  2227.  *
  2228.  * The error may be one of the following values:
  2229.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2230.  *  NSS_ERROR_NO_COMMON_NAME
  2231.  *  NSS_ERROR_NO_MEMORY
  2232.  *
  2233.  * Return value:
  2234.  *  NULL upon error
  2235.  *  A pointer to a UTF8 String
  2236.  */
  2237. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2238. NSSGeneralName_GetCommonName
  2239. (
  2240.   NSSGeneralName *generalName,
  2241.   NSSArena *arenaOpt
  2242. );
  2243. /*
  2244.  * NSSGeneralName_GetOrganization
  2245.  *
  2246.  * This routine will attempt to derive an organisation name from the
  2247.  * specified general name, if the choices and content of the name
  2248.  * permit.  If the General Name is a (directory) Name consisting
  2249.  * of a Sequence of Relative Distinguished names containing an
  2250.  * Organization, the result will be the value of that attribute.  
  2251.  * If the optional arena argument is non-null, the memory used will 
  2252.  * be obtained from that arena; otherwise, the memory will be obtained
  2253.  * from the heap.  This routine may return NULL upon error, in which 
  2254.  * case it will have created an error stack.
  2255.  *
  2256.  * The error may be one of the following values:
  2257.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2258.  *  NSS_ERROR_NO_ORGANIZATION
  2259.  *  NSS_ERROR_NO_MEMORY
  2260.  *
  2261.  * Return value:
  2262.  *  NULL upon error
  2263.  *  A pointer to a UTF8 String
  2264.  */
  2265. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2266. NSSGeneralName_GetOrganization
  2267. (
  2268.   NSSGeneralName *generalName,
  2269.   NSSArena *arenaOpt
  2270. );
  2271. /*
  2272.  * NSSGeneralName_GetOrganizationalUnits
  2273.  *
  2274.  * This routine will attempt to derive a sequence of organisational 
  2275.  * unit names from the specified general name, if the choices and 
  2276.  * content of the name permit.  If the General Name is a (directory) 
  2277.  * Name consisting of a Sequence of Relative Distinguished names 
  2278.  * containing one or more organisational units, the result will 
  2279.  * consist of those units.  If the optional arena  argument is non-
  2280.  * null, the memory used will be obtained from that arena; otherwise, 
  2281.  * the memory will be obtained from the heap.  This routine may return 
  2282.  * NULL upon error, in which case it will have created an error stack.
  2283.  *
  2284.  * The error may be one of the following values:
  2285.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2286.  *  NSS_ERROR_NO_ORGANIZATIONAL_UNITS
  2287.  *  NSS_ERROR_NO_MEMORY
  2288.  *
  2289.  * Return value:
  2290.  *  NULL upon error
  2291.  *  A pointer to a null-terminated array of UTF8 Strings
  2292.  */
  2293. NSS_EXTERN NSSUTF8 ** /* XXX fgmr DirectoryString */
  2294. NSSGeneralName_GetOrganizationalUnits
  2295. (
  2296.   NSSGeneralName *generalName,
  2297.   NSSArena *arenaOpt
  2298. );
  2299. /*
  2300.  * NSSGeneralName_GetStateOrProvince
  2301.  *
  2302.  * This routine will attempt to derive a state or province name from 
  2303.  * the specified general name, if the choices and content of the name
  2304.  * permit.  If the General Name is a (directory) Name consisting
  2305.  * of a Sequence of Relative Distinguished names containing a state or 
  2306.  * province, the result will be the value of that attribute.  If the 
  2307.  * optional arena argument is non-null, the memory used will be 
  2308.  * obtained from that arena; otherwise, the memory will be obtained 
  2309.  * from the heap.  This routine may return NULL upon error, in which 
  2310.  * case it will have created an error stack.
  2311.  *
  2312.  * The error may be one of the following values:
  2313.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2314.  *  NSS_ERROR_NO_STATE_OR_PROVINCE
  2315.  *  NSS_ERROR_NO_MEMORY
  2316.  *
  2317.  * Return value:
  2318.  *  NULL upon error
  2319.  *  A pointer to a UTF8 String
  2320.  */
  2321. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2322. NSSGeneralName_GetStateOrProvince
  2323. (
  2324.   NSSGeneralName *generalName,
  2325.   NSSArena *arenaOpt
  2326. );
  2327. /*
  2328.  * NSSGeneralName_GetLocality
  2329.  *
  2330.  * This routine will attempt to derive a locality name from 
  2331.  * the specified general name, if the choices and content of the name
  2332.  * permit.  If the General Name is a (directory) Name consisting
  2333.  * of a Sequence of Relative Distinguished names containing a Locality, 
  2334.  * the result will be the value of that attribute.  If the optional 
  2335.  * arena argument is non-null, the memory used will be obtained from 
  2336.  * that arena; otherwise, the memory will be obtained from the heap.  
  2337.  * This routine may return NULL upon error, in which case it will have 
  2338.  * created an error stack.
  2339.  *
  2340.  * The error may be one of the following values:
  2341.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2342.  *  NSS_ERROR_NO_LOCALITY
  2343.  *  NSS_ERROR_NO_MEMORY
  2344.  *
  2345.  * Return value:
  2346.  *  NULL upon error
  2347.  *  A pointer to a UTF8 String
  2348.  */
  2349. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2350. NSSGeneralName_GetLocality
  2351. (
  2352.   NSSGeneralName *generalName,
  2353.   NSSArena *arenaOpt
  2354. );
  2355. /*
  2356.  * NSSGeneralName_GetCountry
  2357.  *
  2358.  * This routine will attempt to derive a country name from the 
  2359.  * specified general name, if the choices and content of the name 
  2360.  * permit.  If the General Name is a (directory) Name consisting of a
  2361.  * Sequence of Relative Distinguished names containing a Country, the 
  2362.  * result will be the value of that attribute.  If the optional 
  2363.  * arena argument is non-null, the memory used will be obtained from 
  2364.  * that arena; otherwise, the memory will be obtained from the heap.  
  2365.  * This routine may return NULL upon error, in which case it will have 
  2366.  * created an error stack.
  2367.  *
  2368.  * The error may be one of the following values:
  2369.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2370.  *  NSS_ERROR_NO_COUNTRY
  2371.  *  NSS_ERROR_NO_MEMORY
  2372.  *
  2373.  * Return value:
  2374.  *  NULL upon error
  2375.  *  A pointer to a UTF8 String
  2376.  */
  2377. NSS_EXTERN NSSUTF8 * /* XXX fgmr PrintableString */
  2378. NSSGeneralName_GetCountry
  2379. (
  2380.   NSSGeneralName *generalName,
  2381.   NSSArena *arenaOpt
  2382. );
  2383. /*
  2384.  * NSSGeneralName_GetAttribute
  2385.  *
  2386.  * If the specified general name is a (directory) name consisting
  2387.  * of a Sequence of Relative Distinguished Names containing an 
  2388.  * attribute with the specified type, and the actual value of that
  2389.  * attribute may be expressed with a Directory String, then the
  2390.  * value of that attribute will be returned as a Directory String.
  2391.  * If the optional arena argument is non-null, the memory used will
  2392.  * be obtained from that arena; otherwise, the memory will be obtained
  2393.  * from the heap.  This routine may return NULL upon error, in which
  2394.  * case it will have created an error stack.
  2395.  *
  2396.  * The error may be one of the following values:
  2397.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2398.  *  NSS_ERROR_NO_ATTRIBUTE
  2399.  *  NSS_ERROR_ATTRIBUTE_VALUE_NOT_STRING
  2400.  *
  2401.  * Return value:
  2402.  *  NULL upon error
  2403.  *  A pointer to a UTF8 String
  2404.  */
  2405. NSS_EXTERN NSSUTF8 * /* XXX fgmr DirectoryString */
  2406. NSSGeneralName_GetAttribute
  2407. (
  2408.   NSSGeneralName *generalName,
  2409.   NSSOID *attribute,
  2410.   NSSArena *arenaOpt
  2411. );
  2412. /*
  2413.  * NSSGeneralNameSeq
  2414.  *
  2415.  * The public "methods" regarding this "object" are:
  2416.  *
  2417.  *  NSSGeneralNameSeq_CreateFromBER   -- constructor
  2418.  *  NSSGeneralNameSeq_Create          -- constructor
  2419.  *
  2420.  *  NSSGeneralNameSeq_Destroy
  2421.  *  NSSGeneralNameSeq_GetDEREncoding
  2422.  *  NSSGeneralNameSeq_AppendGeneralName
  2423.  *  NSSGeneralNameSeq_GetGeneralNameCount
  2424.  *  NSSGeneralNameSeq_GetGeneralName
  2425.  *  NSSGeneralNameSeq_Compare
  2426.  *  NSSGeneralnameSeq_Duplicate
  2427.  */
  2428. /*
  2429.  * NSSGeneralNameSeq_CreateFromBER
  2430.  *
  2431.  * This routine creates a general name sequence by decoding a BER-
  2432.  * or DER-encoded GeneralNames.  If the optional arena argument is
  2433.  * non-null, the memory used will be obtained from that arena; 
  2434.  * otherwise, the memory will be obtained from the heap.  This routine
  2435.  * may return NULL upon error, in which case it will have created an
  2436.  * error stack.
  2437.  *
  2438.  * The error may be one of the following values:
  2439.  *  NSS_ERROR_INVALID_BER
  2440.  *  NSS_ERROR_NO_MEMORY
  2441.  *
  2442.  * Return value:
  2443.  *  NULL upon error
  2444.  *  A pointer to an NSSGeneralNameSeq upon success
  2445.  */
  2446. NSS_EXTERN NSSGeneralNameSeq *
  2447. NSSGeneralNameSeq_CreateFromBER
  2448. (
  2449.   NSSArena *arenaOpt,
  2450.   NSSBER *berGeneralNameSeq
  2451. );
  2452. /*
  2453.  * NSSGeneralNameSeq_Create
  2454.  *
  2455.  * This routine creates an NSSGeneralNameSeq from one or more General
  2456.  * Names.  The final argument to this routine must be NULL.  If the
  2457.  * optional arena argument is non-null, the memory used will be 
  2458.  * obtained from that arena; otherwise, the memory will be obtained 
  2459.  * from the heap.  This routine may return NULL upon error, in which
  2460.  * case it will have created an error stack.
  2461.  *
  2462.  * The error may be one of the following values:
  2463.  *  NSS_ERROR_NO_MEMORY
  2464.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2465.  *
  2466.  * Return value:
  2467.  *  NULL upon error
  2468.  *  A pointer to an NSSGeneralNameSeq upon success
  2469.  */
  2470. NSS_EXTERN NSSGeneralNameSeq *
  2471. NSSGeneralNameSeq_Create
  2472. (
  2473.   NSSArena *arenaOpt,
  2474.   NSSGeneralName *generalName1,
  2475.   ...
  2476. );
  2477. /*
  2478.  * NSSGeneralNameSeq_Destroy
  2479.  *
  2480.  * This routine will destroy an NSSGeneralNameSeq object.  It should
  2481.  * eventually be called on all NSSGeneralNameSeqs created without an
  2482.  * arena.  While it is not necessary to call it on NSSGeneralNameSeq's
  2483.  * created within an arena, it is not an error to do so.  This routine
  2484.  * returns a PRStatus value; if successful, it will return PR_SUCCESS.
  2485.  * If unsuccessful, it will create an error stack and return PR_FAILURE.
  2486.  *
  2487.  * The error may be one of the following values:
  2488.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2489.  *
  2490.  * Return value:
  2491.  *  PR_FAILURE upon error
  2492.  *  PR_SUCCESS upon success
  2493.  */
  2494. NSS_EXTERN PRStatus
  2495. NSSGeneralNameSeq_Destroy
  2496. (
  2497.   NSSGeneralNameSeq *generalNameSeq
  2498. );
  2499. /*
  2500.  * NSSGeneralNameSeq_GetDEREncoding
  2501.  *
  2502.  * This routine will DER-encode an NSSGeneralNameSeq object.  If the
  2503.  * optional arena argument is non-null, the memory used will be 
  2504.  * obtained from that arena; otherwise, the memory will be obtained
  2505.  * from the heap.  This routine may return null upon error, in which
  2506.  * case it will have created an error stack.
  2507.  *
  2508.  * The error may be one of the following values:
  2509.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2510.  *  NSS_ERROR_NO_MEMORY
  2511.  *
  2512.  * Return value:
  2513.  *  NULL upon error
  2514.  *  The DER encoding of this NSSGeneralNameSeq
  2515.  */
  2516. NSS_EXTERN NSSDER *
  2517. NSSGeneralNameSeq_GetDEREncoding
  2518. (
  2519.   NSSGeneralNameSeq *generalNameSeq,
  2520.   NSSArena *arenaOpt
  2521. );
  2522. /*
  2523.  * NSSGeneralNameSeq_AppendGeneralName
  2524.  *
  2525.  * This routine appends a General Name to the end of the existing
  2526.  * General Name Sequence.  If the sequence was created with a non-null
  2527.  * arena argument, that same arena will be used for any additional
  2528.  * required memory.  If the sequence was created with a NULL arena
  2529.  * argument, any additional memory will be obtained from the heap.
  2530.  * This routine returns a PRStatus value; it will return PR_SUCCESS
  2531.  * upon success, and upon failure it will create an error stack and 
  2532.  * return PR_FAILURE.
  2533.  *
  2534.  * The error may be one of the following values:
  2535.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2536.  *  NSS_ERROR_INVALID_GENERAL_NAME
  2537.  *  NSS_ERROR_NO_MEMORY
  2538.  * 
  2539.  * Return value:
  2540.  *  PR_SUCCESS upon success
  2541.  *  PR_FAILURE upon failure.
  2542.  */
  2543. NSS_EXTERN PRStatus
  2544. NSSGeneralNameSeq_AppendGeneralName
  2545. (
  2546.   NSSGeneralNameSeq *generalNameSeq,
  2547.   NSSGeneralName *generalName
  2548. );
  2549. /*
  2550.  * NSSGeneralNameSeq_GetGeneralNameCount
  2551.  *
  2552.  * This routine returns the cardinality of the specified General name
  2553.  * Sequence.  This routine may return 0 upon error, in which case it
  2554.  * will have created an error stack.
  2555.  *
  2556.  * The error may be one of the following values:
  2557.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2558.  *
  2559.  * Return value;
  2560.  *  0 upon error
  2561.  *  A positive number upon success
  2562.  */
  2563. NSS_EXTERN PRUint32
  2564. NSSGeneralNameSeq_GetGeneralNameCount
  2565. (
  2566.   NSSGeneralNameSeq *generalNameSeq
  2567. );
  2568. /*
  2569.  * NSSGeneralNameSeq_GetGeneralName
  2570.  *
  2571.  * This routine returns a pointer to the i'th General Name in the 
  2572.  * specified General Name Sequence.  The value of the variable 'i' is
  2573.  * on the range [0,c) where c is the cardinality returned from 
  2574.  * NSSGeneralNameSeq_GetGeneralNameCount.  The caller owns the General
  2575.  * Name the pointer to which is returned.  If the optional arena
  2576.  * argument is non-null, the memory used will be obtained from that
  2577.  * arena; otherwise, the memory will be obtained from the heap.  This
  2578.  * routine may return NULL upon error, in which case it will have 
  2579.  * created an error stack.
  2580.  *
  2581.  * The error may be one of the following values:
  2582.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2583.  *  NSS_ERROR_VALUE_OUT_OF_RANGE
  2584.  *  NSS_ERROR_NO_MEMORY
  2585.  *
  2586.  * Return value:
  2587.  *  NULL upon error
  2588.  *  A caller-owned pointer to a General Name.
  2589.  */
  2590. NSS_EXTERN NSSGeneralName *
  2591. NSSGeneralNameSeq_GetGeneralName
  2592. (
  2593.   NSSGeneralNameSeq *generalNameSeq,
  2594.   NSSArena *arenaOpt,
  2595.   PRUint32 i
  2596. );
  2597. /*
  2598.  * NSSGeneralNameSeq_Compare
  2599.  *
  2600.  * This routine compares two General Name Sequences for equality.  For
  2601.  * two General Name Sequences to be equal, they must have the same
  2602.  * cardinality, and each General Name in one sequence must be equal to
  2603.  * the corresponding General Name in the other.  The result of the
  2604.  * comparison will be stored at the location pointed to by the "equalp"
  2605.  * variable, which must point to a valid PRBool.  This routine may 
  2606.  * return PR_FAILURE upon error, in which case it will have created an
  2607.  * error stack.
  2608.  *
  2609.  * The error may be one of the following values:
  2610.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2611.  *  NSS_ERROR_INVALID_ARGUMENT
  2612.  *
  2613.  * Return value:
  2614.  *  PR_FAILURE upon error
  2615.  *  PR_SUCCESS upon a successful comparison (equal or not)
  2616.  */
  2617. NSS_EXTERN PRStatus
  2618. NSSGeneralNameSeq_Compare
  2619. (
  2620.   NSSGeneralNameSeq *generalNameSeq1,
  2621.   NSSGeneralNameSeq *generalNameSeq2,
  2622.   PRBool *equalp
  2623. );
  2624. /*
  2625.  * NSSGeneralNameSeq_Duplicate
  2626.  *
  2627.  * This routine duplicates the specified sequence of general names.  If
  2628.  * the optional arena argument is non-null, the memory required will be
  2629.  * obtained from that arena; otherwise, the memory will be obtained 
  2630.  * from the heap.  This routine may return NULL upon error, in which 
  2631.  * case it will have created an error stack.
  2632.  *
  2633.  * The error may be one of the following values:
  2634.  *  NSS_ERROR_INVALID_GENERAL_NAME_SEQ
  2635.  *  NSS_ERROR_NO_MEMORY
  2636.  *
  2637.  * Return value:
  2638.  *  NULL upon error
  2639.  *  A pointer to a new General Name Sequence.
  2640.  */
  2641. NSS_EXTERN NSSGeneralNameSeq *
  2642. NSSGeneralNameSeq_Duplicate
  2643. (
  2644.   NSSGeneralNameSeq *generalNameSeq,
  2645.   NSSArena *arenaOpt
  2646. );
  2647. PR_END_EXTERN_C
  2648. #endif /* NSSPT1M_H */