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

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 _CMTJS_H_
  34. #define _CMTJS_H_
  35. #include "cmtcmn.h"
  36. #include "ssmdefs.h"
  37. #include "rsrcids.h"
  38. /*
  39.  * Define some constants.
  40.  */
  41. /*
  42.  * These defines are used in conjuction with the function
  43.  * CMT_AddNewModule.
  44.  */
  45. #define PUBLIC_MECH_RSA_FLAG         0x00000001ul
  46. #define PUBLIC_MECH_DSA_FLAG         0x00000002ul
  47. #define PUBLIC_MECH_RC2_FLAG         0x00000004ul
  48. #define PUBLIC_MECH_RC4_FLAG         0x00000008ul
  49. #define PUBLIC_MECH_DES_FLAG         0x00000010ul
  50. #define PUBLIC_MECH_DH_FLAG          0x00000020ul
  51. #define PUBLIC_MECH_FORTEZZA_FLAG    0x00000040ul
  52. #define PUBLIC_MECH_RC5_FLAG         0x00000080ul
  53. #define PUBLIC_MECH_SHA1_FLAG        0x00000100ul
  54. #define PUBLIC_MECH_MD5_FLAG         0x00000200ul
  55. #define PUBLIC_MECH_MD2_FLAG         0x00000400ul
  56.  
  57. #define PUBLIC_MECH_RANDOM_FLAG      0x08000000ul
  58. #define PUBLIC_MECH_FRIENDLY_FLAG    0x10000000ul
  59. #define PUBLIC_OWN_PW_DEFAULTS       0X20000000ul
  60. #define PUBLIC_DISABLE_FLAG          0x40000000ul
  61. /*
  62.  * This is the lone supported constant for the Cipher flag
  63.  * for CMT_AddNewModule
  64.  */
  65. #define PUBLIC_CIPHER_FORTEZZA_FLAG  0x00000001ul
  66. CMT_BEGIN_EXTERN_C
  67. /*
  68.  * FUNCTION: CMT_GenerateKeyPair
  69.  * -----------------------------
  70.  * INPUTS:
  71.  *    control
  72.  *        The Control Connection that has already established a connection
  73.  *        with the psm server.
  74.  *    keyGenContext
  75.  *        The Resource ID of a key gen context to use for creating the
  76.  *        key pair.
  77.  *    mechType
  78.  *        A PKCS11 mechanism used to generate the key pair. Valid values are:
  79.  *          CKM_RSA_PKCS_KEY_PAIR_GEN    0x00000000
  80.  *          CKM_DSA_KEY_PAIR_GEN         0x00000010
  81.  *        The definition of these values can be found at 
  82.  *        http://www.rsa.com/rsalabs/pubs/pkcs11.html
  83.  *        The psm module currently supports v2.01 of PKCS11
  84.  *    params
  85.  *        This parameter will be used to pass parameters to the Key Pair
  86.  *        generation process.  Currently this feature is not supported, so 
  87.  *        pass in NULL for this parameter.
  88.  *    keySize
  89.  *        The size (in bits) of the key to generate.
  90.  *    keyPairId
  91.  *        A pointer to pre-allocated memory where the function can place
  92.  *        the value of the resource ID of the key pair that gets created.
  93.  *
  94.  * NOTES:
  95.  * This function will send a message to the psm server requesting that 
  96.  * a public/private key pair be generated. The key gen context will queue
  97.  * the request. You can send as many key gen requests as you want with a
  98.  * given key gen context. After sending all the key gen requests, the user
  99.  * must call CMT_FinishGeneratingKeys so that the key gen context actually
  100.  * generates the keys.
  101.  *
  102.  * RETURN:
  103.  * A return value of CMTSuccess indicates the request for key generation
  104.  * was queued successfully and the corresponding resource ID can be found
  105.  * at *keyPairId.  Any other return value indicates an error and the value
  106.  * at *keyPairId should be ignored.
  107.  */
  108. CMTStatus
  109. CMT_GenerateKeyPair(PCMT_CONTROL control, CMUint32 keyGenContext, 
  110.     CMUint32 mechType, CMTItem *params, CMUint32 keySize, 
  111.     CMUint32 *keyPairId);
  112. /*
  113.  * FUNCTION: CMT_FinishGeneratingKeys
  114.  * ----------------------------------
  115.  * INPUTS
  116.  *    control
  117.  *        The Control Connection that has already established a connection
  118.  *        with the psm server.
  119.  *    keyGenContext
  120.  *        The resource ID of the key gen context which should finish 
  121.  *        generating its key pairs.
  122.  * NOTES
  123.  * This function will send a message to the psm server notifying the key 
  124.  * gen context with the resource ID of keyGenContext to finish generating
  125.  * all of the key gen requests it has queued up. After each key gen has 
  126.  * finished, the psm server will send a SSM_TASK_COMPLETED_EVENT. So in order
  127.  * to detect when all of the key gens are done, the user should register 
  128.  * an event handler.  See comments for CMT_RegisterEventHandler for information
  129.  * on how to successfully register event handler callbacks. You must register
  130.  * the event handler with keyGenContext as the target resource ID for this
  131.  * to work correctly.
  132.  *
  133.  * RETURN:
  134.  * A return value of CMTSuccess indicates the key gen context has started to
  135.  * generate the key pairs in its queue. Any other return value indicates an
  136.  * error and the key pairs will not be generated.
  137.  */
  138. CMTStatus
  139. CMT_FinishGeneratingKeys(PCMT_CONTROL control, CMUint32 keyGenContext);
  140. /*
  141.  * FUNCTION: CMT_CreateNewCRMFRequest
  142.  * ----------------------------------
  143.  * INPUTS:
  144.  *    control
  145.  *        The Control Connection that has already established a connection
  146.  *        with the psm server.
  147.  *    keyPairID
  148.  *        The resource ID of the key pair that should be associated with
  149.  *        the CRMF request created. At the time this function is called,
  150.  *        key pair should have already been created. 
  151.  *    keyGenType
  152.  *        An enumeration that explains how the key pair will be used.
  153.  *        Look at the definition of SSMKeyGenType in ssmdefs.h for valid
  154.  *        values and their affects on the request.
  155.  *    reqID
  156.  *        A pointer to a pre-allocatd chunk of memory where the library 
  157.  *        can place the resource ID of the new CRMF request.
  158.  * NOTES:
  159.  * This function sends a message to the psm server requesting that a new 
  160.  * CRMF resource object be created. Each CRMF request must be associated with 
  161.  * a public/private key pair, that is why the keyPairID parameter exists.
  162.  * The keyGenType parameter is used to initialize the request, eg set the
  163.  * correct keyUsage extension.
  164.  * 
  165.  * Before encoding a CRMF request, the user will want to set the appropriate
  166.  * attributes to build up the request. The supported attributes are:
  167.  *
  168.  * Attribute Enumeration          Attribute Type       What value means
  169.  * ---------------------          --------------       ----------------
  170.  * SSM_FID_CRMFREQ_REGTOKEN       String               The value to encode as 
  171.  *                                                     the registration token
  172.  *                                                     value for the request.
  173.  *
  174.  * SSM_FID_CRMFREQ_AUTHENTICATOR String                The value to encode as
  175.  *                                                     authenticator control
  176.  *                                                     in the request.
  177.  * 
  178.  * SSM_FID_DN                    String                The RFC1485 formatted
  179.  *                                                     DN to include in the
  180.  *                                                     CRMF request.
  181.  *
  182.  * For information on how to properly set the attribute of a resource, refer
  183.  * to the comments for the functions CMT_SetNumericAttribute and 
  184.  * CMT_SetStringAttribute.
  185.  *
  186.  * RETURN:
  187.  * A return value of CMTSuccess indicates a new CRMF resource was created by
  188.  * the psm server and has the resource ID placed at *reqID. Any other return
  189.  * value indicates an error and the value at *reqID should be ignored.
  190.  */
  191. CMTStatus
  192. CMT_CreateNewCRMFRequest(PCMT_CONTROL control, CMUint32 keyPairID, 
  193.  SSMKeyGenType keyGenType, CMUint32 *reqID);
  194. /*
  195.  * FUNCTION: CMT_EncodeCRMFRequest
  196.  * ------------------------------
  197.  * INPUTS:
  198.  *    control
  199.  *        The Control Connection that has already established a connection
  200.  *        with the psm server.
  201.  *    crmfReqID
  202.  *        An array of resource ID's for CRMF objects to be encoded.
  203.  *    numRequests
  204.  *        The length of the array crmfReqID that is passed in.
  205.  *    der
  206.  *        A pointer to a pre-allocated pointer for a char* where the library
  207.  *        can place the final DER-encoding of the requests.
  208.  * NOTES
  209.  * This function will send a message to the psm server requesting that 
  210.  * a number of CRMF requests be encoded into their appropriate DER 
  211.  * representation. The DER that is sent back will be of the type 
  212.  * CertReqMessages as define in the internet draft for CRMF. To look at the
  213.  * draft, visit the following URL: 
  214.  * http://search.ietf.org/internet-drafts/internet-draft-ietf-pkix-crmf-01.txt
  215.  *
  216.  * RETURN:
  217.  * A return value of CMTSuccess indicates psm successfully encoded the requests
  218.  * and placed the base64 DER encoded request at *der. Any other return value
  219.  * indicates an error and the value at *der should be ignored.
  220.  */
  221. CMTStatus
  222. CMT_EncodeCRMFRequest(PCMT_CONTROL control, CMUint32 *crmfReqID, 
  223.       CMUint32 numRequests, char ** der);
  224. /*
  225.  * FUNCTION: CMT_ProcessCMMFResponse
  226.  * ---------------------------------
  227.  * INPUTS:
  228.  *    control
  229.  *        The Control Connection that has already established a connection
  230.  *        with the psm server.
  231.  *    nickname
  232.  *        The nickname that should be associated with the certificate 
  233.  *        contained in the CMMF Response.
  234.  *    certRepString
  235.  *        This is the base 64 encoded CertRepContent that issues a certificate.
  236.  *        The psm server will decode the base 64 data and then parse the
  237.  *        CertRepContent.
  238.  *    doBackup
  239.  *        A boolean value indicating whether or not psm should initiate the
  240.  *        process of backing up the newly issued certificate into a PKCS-12
  241.  *        file.
  242.  *    clientContext
  243.  *         Client supplied data pointer that is returned to the client during
  244.  *         a UI event.
  245.  * NOTES:
  246.  * This function takes a CertRepContent as defined in the CMMF internet draft
  247.  * (http://search.ietf.org/internet-drafts/draft-ietf-pkix-cmmf-02.txt) and
  248.  * imports the certificate into the user's database. The certificate will have
  249.  * the string value of nickanme as it's nickname when added to the database
  250.  * unless another certificate with that same Distinguished Name (DN) already
  251.  * exists in the database, in which case the nickname of the certificate that
  252.  * already exists will be used. If the value passed in for doBackup is 
  253.  * non-zero, then the psm server will initiate the process of backing up the
  254.  * certificate(s) that were just imported.
  255.  *
  256.  * RETURN:
  257.  * A return value of CMTSuccess indicates the certificate(s) were successfully
  258.  * added to the database. Any other return value means the certificate(s) could
  259.  * not be successfully added to the database.
  260.  */
  261. CMTStatus
  262. CMT_ProcessCMMFResponse(PCMT_CONTROL control, char *nickname, 
  263. char *certRepString, CMBool doBackup,
  264. void *clientContext);
  265. /*
  266.  * FUNCTION: CMT_CreateResource
  267.  * ----------------------------
  268.  * INPUTS:
  269.  *    control
  270.  *        The Control Connection that has already established a connection
  271.  *        with the psm server.
  272.  *    resType
  273.  *        The enumeration representing the resource type to create.
  274.  *    params
  275.  *        A resource dependent binary string that will be sent to the psm 
  276.  *        server. Each resource will expect a binary string it defines.
  277.  *    rsrcId
  278.  *        A pointer to a pre-allocated chunk of memory where the library
  279.  *        can place the resource ID of the newly created resource.
  280.  *    errorCode
  281.  *        A pointer to a pre-allocated chunk of memory where the library
  282.  *        can place the errorCode returned by the psm server after creating
  283.  *        the resource.
  284.  * NOTES:
  285.  * This function sends a message to the psm server requesting that a new 
  286.  * resource be created.  The params parameter depends on the type of resource
  287.  * being created.  Below is a table detailing the format of the params for 
  288.  * a given resource type. Only the resource types listed below can be created
  289.  * by calling this function.
  290.  *
  291.  * Resource Type constant                  Value for params
  292.  * ------------------------------          ----------------
  293.  * SSM_RESTYPE_KEYGEN_CONTEXT              NULL
  294.  * SSM_RESTYPE_SECADVISOR_CONTEXT          NULL
  295.  * SSM_RESTYPE_SIGNTEXT                    NULL
  296.  *
  297.  * RETURN
  298.  * A return value of CMTSuccess means the psm server received the request and
  299.  * processed the create resource create. If the value at *errorCode is zero,
  300.  * then the value at *rsrcId is the resource ID of the newly created resource.
  301.  * Otherwise, creating the new resource failed and *errorCode contains the
  302.  * error code returned by the psm server. ???What are the return values and
  303.  * what do they mean. Any other return value indicates there was an error 
  304.  * in the communication with the psm server and the values at *rsrcId and 
  305.  * *errorCode should be ignored.
  306.  */
  307. CMTStatus
  308. CMT_CreateResource(PCMT_CONTROL control, SSMResourceType resType,
  309.    CMTItem *params, CMUint32 *rsrcId, CMUint32 *errorCode);
  310. /*
  311.  * FUNCTION: CMT_SignText
  312.  * ----------------------
  313.  * INPUTS:
  314.  *    control
  315.  *        The Control Connection that has already established a connection
  316.  *        with the psm server.
  317.  *    resID
  318.  *        The resource ID of an SSMSignTextResource.
  319.  *    stringToSign
  320.  *        The string that the psm server should sign.
  321.  *    hostName
  322.  *        The host name of the site that is requesting a string to be
  323.  *        signed.  This is used for displaying the UI that tells the user
  324.  *        a web site has requested the use sign some text.
  325.  *    caOption
  326.  *        If the value is "auto" then psm will select the certificate
  327.  *        to use for signing automatically.
  328.  *        If the value is "ask" then psm will display a list of 
  329.  *        certificates for signing.
  330.  *    numCAs
  331.  *        The number of CA names included in the array caNames passed in as
  332.  *        the last parameter to this function.
  333.  *    caNames
  334.  *        An array of CA Names to use for filtering the user certs to use
  335.  *        for signing the text.
  336.  * NOTES
  337.  * This function will sign the text passed via the parameter stringToSign.
  338.  * The function will also cause the psm server to send some UI notifying the
  339.  * user that a site has requested the user sign some text.  The hostName 
  340.  * parameter is used in the UI to inform the user which site is requesting
  341.  * the signed text.  The caOption is used to determine if the psm server 
  342.  * should automatically select which personal cert to use in signing the
  343.  * text.  The caNames array is ussed to narrow down the field of personal
  344.  * certs to use when signing the text. In other words, only personal certs 
  345.  * trusted by the CA's passed in will be used.
  346.  *
  347.  * RETURN
  348.  * If the function returns CMTSuccess, that indicates the psm server 
  349.  * successfully signed the text.  The signed text can be retrieved by 
  350.  * calling CMT_GetStringResource and passing in SSM_FID_SIGNTEXT_RESULT
  351.  * as the field ID. Any other return value indicates an error meaning the
  352.  * string was not signed successfully.
  353.  */
  354. CMTStatus
  355. CMT_SignText(PCMT_CONTROL control, CMUint32 resID, char* stringToSign,
  356.              char* hostName, char *caOption, CMInt32 numCAs, char** caNames);
  357. /*
  358.  * FUNCTION: CMT_ProcessChallengeResponse
  359.  * --------------------------------------
  360.  * INPUTS:
  361.  *    control
  362.  *        The Control Connection that has already established a connection
  363.  *        with the psm server.
  364.  *    challengeString
  365.  *        The base64 encoded Challenge string received as the 
  366.  *        Proof-Of-Possession Challenge in response to CRMF request that
  367.  *        specified Challenge-Reponse as the method for Proof-Of-Possession.
  368.  *    responseString
  369.  *        A pointer to pre-allocated char* where the library can place a
  370.  *        copy of the bas64 encoded response to the challenge presented.
  371.  * NOTES
  372.  * This function takes the a challenge--that is encrypted with the public key
  373.  * of a certificate we created--and decrypts it with the private key we 
  374.  * generated.  The format of the challenge is as follows:
  375.  *
  376.  * Challenge ::= SEQUENCE { 
  377.  *      owf                 AlgorithmIdentifier  OPTIONAL, 
  378.  *      -- MUST be present in the first Challenge; MAY be omitted in any 
  379.  *      -- subsequent Challenge in POPODecKeyChallContent (if omitted, 
  380.  *      -- then the owf used in the immediately preceding Challenge is 
  381.  *      -- to be used). 
  382.  *      witness             OCTET STRING, 
  383.  *      -- the result of applying the one-way function (owf) to a 
  384.  *      -- randomly-generated INTEGER, A.  [Note that a different 
  385.  *      -- INTEGER MUST be used for each Challenge.] 
  386.  *      sender              GeneralName, 
  387.  *      -- the name of the sender. 
  388.  *      key                 OCTET STRING, 
  389.  *      -- the public key used to encrypt the challenge.  This will allow 
  390.  *      -- the client to find the appropriate key to do the decryption. 
  391.  *      challenge           OCTET STRING 
  392.  *      -- the encryption (under the public key for which the cert. 
  393.  *      -- request is being made) of Rand, where Rand is specified as 
  394.  *      --   Rand ::= SEQUENCE { 
  395.  *      --      int      INTEGER, 
  396.  *      --       - the randomly-generated INTEGER A (above) 
  397.  *      --      senderHash  OCTET STRING 
  398.  *      --       - the result of applying the one-way function (owf) to 
  399.  *      --       - the sender's general name 
  400.  *      --   } 
  401.  *      -- the size of "int" must be small enough such that "Rand" can be 
  402.  *      -- contained within a single PKCS #1 encryption block. 
  403.  *  } 
  404.  * This challenge is based on the Challenge initially defined in the CMMF
  405.  * internet draft, but differs in that this structure includes the sender
  406.  * as part of the challenge along with the public key and includes a has
  407.  * of the sender in the encrypted Rand structure.  The reason for including
  408.  * the key is to facilitate looking up the key that should be used to 
  409.  * decipher the challenge.  Including the hash of the sender in the encrypted
  410.  * Rand structure makes the challenge smaller and allows it to fit in 
  411.  * one RSA block. 
  412.  *
  413.  * The response is of the type POPODecKeyRespContent as defined in the CMMF
  414.  * internet draft.
  415.  *
  416.  * RETURN
  417.  * A return value of CMTSuccess indicates psm successfully parsed and processed
  418.  * the challenge and created a response.  The base64 encoded response to the
  419.  * challenge is placed at *responseString.  Any other return value indicates
  420.  * an error and the value at *responseString should be ignored.
  421.  */
  422. CMTStatus
  423. CMT_ProcessChallengeResponse(PCMT_CONTROL control, char *challengeString,
  424.      char **responseString);
  425. /*
  426.  * FUNCTION: CMT_GetLocalizedString
  427.  * --------------------------------
  428.  * INPUTS:
  429.  *    control
  430.  *        The Control Connection that has already established a connection
  431.  *        with the psm server.
  432.  *    whichString
  433.  *        The enumerated value corresponding to the localized string to 
  434.  *        retrieve from the psm server
  435.  *    localizedString
  436.  *        A pointer to a pre-allocated char* where the library can place 
  437.  *        copy of the localized string retrieved from the psm server.
  438.  * NOTES
  439.  * This function retrieves a localized string from the psm server.  These 
  440.  * strings are useful for strings that aren't localized in the client 
  441.  * making use of the psm server, but need to be displayed by the user. Look
  442.  * in protocol.h for the enumerations of the localized strings that can 
  443.  * be fetched from psm via this method.
  444.  *
  445.  * RETURN
  446.  * A return value of CMTSuccess indicates the localized string was retrieved
  447.  * successfully and the localized value is located at *localizedString.  Any
  448.  * other return value indicates an error and the value at *localizedString
  449.  * should be ignored.
  450.  */
  451. CMTStatus 
  452. CMT_GetLocalizedString(PCMT_CONTROL        control, 
  453.                        SSMLocalizedString  whichString,
  454.                        char              **localizedString); 
  455. /*
  456.  * FUNCTION: CMT_DeleteModule
  457.  * --------------------------
  458.  * INPUTS:
  459.  *    control
  460.  *        The Control Connection that has already established a connection
  461.  *        with the psm server.
  462.  *    moduleName
  463.  *        The name of the PKCS11 module to delete.
  464.  *    moduleType
  465.  *        A pointer to a pre-allocated integer where the library can place
  466.  *        a value that tells what the type of module was deleted.
  467.  * NOTES
  468.  * This function will send a message to the psm server requesting the server 
  469.  * delete a PKCS-11 module stored in psm's security module database. moduleName
  470.  * is the value passed in as moduleName when the module was added to the 
  471.  * security module database of psm.
  472.  * The values that may be returned by psm for moduleType are:
  473.  *
  474.  *    0      The module was an external module developped by a third party
  475.  *           that was added to the psm security module.
  476.  *
  477.  *    1      The module deleted was the internal PKCS-11 module that comes
  478.  *           built in with the psm server.
  479.  *
  480.  *    2      The module that was deleted was the FIPS  internal module.
  481.  *
  482.  * RETURN
  483.  * A return value of CMTSuccess indicates the security module was successfully
  484.  * delete from the psm security module database and the value at *moduleType
  485.  * will tell what type of module was deleted.
  486.  * Any other return value indicates an error and the value at *moduleType 
  487.  * should be ignored.
  488.  */
  489. CMTStatus
  490. CMT_DeleteModule(PCMT_CONTROL  control,
  491.                  char         *moduleName,
  492.                  int          *moduleType);
  493. /*
  494.  * FUNCTION: CMT_AddNewModule
  495.  * --------------------------
  496.  * INPUTS:
  497.  *    control
  498.  *        The Control Connection that has already established a connection
  499.  *        with the psm server.
  500.  *    moduleName
  501.  *        The name to be associated with the module once it is added to 
  502.  *        the psm security module database.
  503.  *    libraryPath
  504.  *        The path to the library to be  loaded.  The library should be 
  505.  *        loadable at run-time.
  506.  *    pubMechFlags
  507.  *        A bit vector indicating all cryptographic mechanisms that should
  508.  *        be turned on by default.  This module will become the default 
  509.  *        handler for the mechanisms that are set by this bit vector.
  510.  *    pubCipherFlags
  511.  *        A bit vector indicating all SSL or S/MIME cipher functions
  512.  *        supported by the module. Most modules will pas in 0x0 for this
  513.  *        parameter.
  514.  * NOTES:
  515.  * This function sends a message to the psm server and requests the .so
  516.  * file on UNIX or .dll file on Windows be loaded as a PKCS11 module and 
  517.  * be stored in the psm security module database.  The module will be stored
  518.  * with the name moduleName that is passed in and will always expect the 
  519.  * library to live at the path passed in via the parameter libraryPath.
  520.  * The pubMechFlags tell the psm server how this module should be used.
  521.  * Valid values are the #define constants defined at the beginning of
  522.  * this file.
  523.  * 
  524.  * RETURN
  525.  * A return value of CMTSuccess indicates the module was successfully loaded
  526.  * and placed in the security module database of psm.  Any other return value
  527.  * indicates an error and means the module was not loaded successfully and
  528.  * not stored in the psm server's security module database.
  529.  */
  530. CMTStatus
  531. CMT_AddNewModule(PCMT_CONTROL  control,
  532.                  char         *moduleName,
  533.                  char         *libraryPath,
  534.                  unsigned long pubMechFlags,
  535.                  unsigned long pubCipherFlags);
  536. CMT_END_EXTERN_C
  537. #endif /*_CMTJS_H_*/