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

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 __PROTOCOLF_H__
  34. #define __PROTOCOLF_H__
  35. /*************************************************************************
  36.  * For each type of message, parse and pack function is provided. 
  37.  *
  38.  * Parse functions accept a ptr to the "blob" of data received from the 
  39.  * network and fill in fields of the message, numbers in host-order, strings
  40.  * as C-style NULL-terminated strings. Return SSMPRStatus. 
  41.  *
  42.  * Pack functions take all the info to construct a message and fill in a 
  43.  * ptr to the "blob" of data to be sent. Return length of the data blob, or 
  44.  * a zero in case of an error
  45.  *
  46.  * All functions set NSPR errors when necessary.
  47.  ************************************************************************/
  48. #include "protocol.h"
  49. #include "cert.h"
  50. SSMPRStatus SSM_ParseHelloRequest(void * helloRequest, 
  51.   SSMPRUint32 * version, 
  52.   PRBool * doesUI,
  53.   PRInt32 * policyType,
  54.   SSMPRUint32 * profileLen,
  55.   char ** profile);
  56. SSMPRInt32 SSM_PackHelloReply(void ** helloReply, SSMPRInt32 result, 
  57.       SSMPRUint32 sessionID, SSMPRUint32 version, 
  58.       SSMPRUint32 httpPort, SSMPRUint32 nonceLen, 
  59.       char * nonce, SSMPolicyType policy);
  60. /* Parse data connections requests */
  61. SSMPRStatus SSM_ParseSSLDataConnectionRequest(void *sslRequest, 
  62.       SSMPRUint32 * flags, 
  63.       SSMPRUint32 * port,
  64.       SSMPRUint32 * hostIPLen,
  65.       char ** hostIP, 
  66.       SSMPRUint32 * hostNameLen,
  67.       char ** hostName);
  68. SSMPRStatus SSM_ParseHashStreamRequest(void * hashStreamRequest,
  69.                                        SSMPRUint32 * type);
  70. SSMPRStatus SSM_ParseP7EncodeConnectionRequest(void *request,
  71.        SSMPRUint32 *ciRID);
  72. /* Messages to initiate PKCS7 data connection */
  73. /* PKCS7DecodeRequest message has no data */ 
  74. /* Single data connection reply */
  75. SSMPRInt32 SSM_PackDataConnectionReply(void ** sslReply, 
  76.        SSMPRInt32 result, 
  77.        SSMPRUint32 connID, 
  78.        SSMPRUint32 port);
  79. SSMPRStatus SSM_ParseSSLSocketStatusRequest(void * statusRequest, 
  80.     SSMPRUint32 * connID);
  81. SSMPRInt32 SSM_PackSSLSocketStatusReply(void ** statusReply, 
  82. SSMPRInt32 result, 
  83. SSMPRUint32 resourceID);
  84. /* 
  85.  * UI event is an asynchroneous message sent from PSM server to the client
  86.  * NOTE: (context) is the actual context pointer, it is NOT a ptr-to-ptr.
  87.  * The value of (context) is copied into the packet.
  88.  */
  89. SSMPRInt32 SSM_PackUIEvent(void ** eventRequest, SSMPRUint32 resourceID, 
  90.    SSMPRUint32 width, SSMPRUint32 height,
  91.    SSMPRUint32 urlLen, char * url);
  92. SSMPRInt32 SSM_PackTaskCompletedEvent(void **event, SSMPRUint32 resourceID,
  93.                                      SSMPRUint32 numTasks, SSMPRUint32 result);
  94. /* Verify raw signature */
  95. SSMPRStatus SSM_ParseVerifyRawSigRequest(void * verifyRawSigRequest, 
  96.  SSMPRUint32 * algorithmID,
  97.  SSMPRUint32 * paramsLen, 
  98.  unsigned char ** params,
  99.  SSMPRUint32 * pubKeyLen,
  100.  unsigned char ** pubKey,
  101.  SSMPRUint32 * hashLen,
  102.  unsigned char ** hash,
  103.  SSMPRUint32 * signatureLen,
  104.  unsigned char ** signature);
  105. SSMPRInt32 SSM_PackVerifyRawSigReply(void ** verifyRawSigReply, 
  106.      SSMPRInt32 result);
  107. /* Verify detached signature */
  108. SSMPRStatus SSM_ParseVerifyDetachedSigRequest(void * request, 
  109.   SSMPRInt32 * pkcs7ContentID,
  110.   SSMPRInt32 * certUsage,
  111.   SSMPRInt32 * hashAlgID,
  112.   SSMPRUint32 * keepCert,
  113.   SSMPRUint32 * digestLen,
  114.   unsigned char ** hash);
  115. SSMPRInt32 SSM_PackVerifyDetachedSigReply(void ** verifyDetachedSigReply, 
  116.   SSMPRInt32 result);
  117. /* PKCS#7 functions */
  118. SSMPRStatus SSM_ParseCreateSignedRequest(void *request,
  119.                                          SSMPRInt32 *scertRID,
  120.                                          SSMPRInt32 *ecertRID,
  121.                                          SSMPRUint32 *dig_alg,
  122.                                          SECItem **digest);
  123. SSMPRInt32 SSM_PackCreateSignedReply(void **reply, SSMPRInt32 ciRID,
  124.                                      SSMPRUint32 result);
  125. SSMPRStatus SSM_ParseCreateEncryptedRequest(void *request,
  126.     SSMPRInt32 *scertRID,
  127.                                             SSMPRInt32 *nrcerts,
  128.     SSMPRInt32 **rcertRIDs);
  129. SSMPRInt32 SSM_PackCreateEncryptedReply(void **reply, SSMPRInt32 ciRID,
  130. SSMPRUint32 result);
  131. /* Resource functions */
  132. SSMPRStatus SSM_ParseCreateResourceRequest(void *request,
  133.                                            SSMPRUint32 *type,
  134.                                            unsigned char **params,
  135.                                            SSMPRUint32 *paramLen);
  136. SSMPRStatus SSM_PackCreateResourceReply(void **reply, SSMPRStatus rv,
  137.                                         SSMPRUint32 resID);
  138. SSMPRStatus SSM_ParseGetAttribRequest(void * getAttribRequest, 
  139.       SSMPRUint32 * resourceID, 
  140.       SSMPRUint32 * fieldID);
  141. void SSM_DestroyAttrValue(SSMAttributeValue *value, PRBool freeit);
  142. SSMPRInt32 SSM_PackGetAttribReply(void **getAttribReply,
  143.   SSMPRInt32 result,
  144.   SSMAttributeValue *value);
  145. SSMPRStatus SSM_ParseSetAttribRequest(SECItem *msg,
  146.       SSMPRInt32 *resourceID,
  147.       SSMPRInt32 *fieldID,
  148.       SSMAttributeValue *value);
  149. /* Currently, there is no need for a pack version.  There is nothing to send
  150.  * back except for the notice that the operation was successful.
  151.  */
  152.   
  153.        
  154.        
  155. /* Pickle and unpickle resources. */
  156. SSMPRStatus SSM_ParsePickleResourceRequest(void * pickleResourceRequest, 
  157.   SSMPRUint32 * resourceID);
  158. SSMPRInt32 SSM_PackPickleResourceReply(void ** pickleResourceReply, 
  159.        SSMPRInt32 result,
  160.        SSMPRUint32 resourceLen,
  161.        void * resource);
  162. SSMPRStatus SSM_ParseUnpickleResourceRequest(void * unpickleResourceRequest,
  163.      SSMPRUint32 blobSize,
  164.      SSMPRUint32 * resourceType,
  165.      SSMPRUint32 * resourceLen,
  166.      void ** resource);
  167. SSMPRInt32 SSM_PackUnpickleResourceReply(void ** unpickleResourceReply, 
  168.    SSMPRInt32 result, 
  169.    SSMPRUint32 resourceID);
  170. /* Destroy resource */
  171. SSMPRStatus SSM_ParseDestroyResourceRequest(void * destroyResourceRequest, 
  172.     SSMPRUint32 * resourceID, 
  173.     SSMPRUint32 * resourceType);
  174. SSMPRInt32 SSM_PackDestroyResourceReply(void ** destroyResourceReply, 
  175.                                         SSMPRInt32 result);
  176. /* Duplicate resource */
  177. SSMPRStatus SSM_ParseDuplicateResourceRequest(void * request, 
  178.       SSMPRUint32 * resourceID);
  179. SSMPRInt32 SSM_PackDuplicateResourceReply(void ** reply, SSMPRInt32 result,
  180.   SSMPRUint32 resID);
  181. /* Cert actions */
  182. typedef struct MatchUserCertRequestData {
  183.     PRUint32 certType;
  184.     PRInt32 numCANames;
  185.     char ** caNames;
  186. } MatchUserCertRequestData;
  187. typedef struct SSMCertList {
  188.     PRCList certs;
  189.     PRInt32 count;
  190. } SSMCertList;
  191. typedef struct SSMCertListElement {
  192.     PRCList links;
  193.     PRUint32 certResID;
  194. } SSMCertListElement;
  195. #define SSM_CERT_LIST_ELEMENT_PTR(_q) (SSMCertListElement*)(_q);
  196. SSMPRStatus SSM_ParseVerifyCertRequest(void * verifyCertRequest, 
  197.        SSMPRUint32 * resourceID, 
  198.        SSMPRInt32 * certUsage);
  199. SSMPRInt32 SSM_PackVerifyCertReply(void ** verifyCertReply, 
  200.            SSMPRInt32 result);
  201. SSMPRStatus SSM_ParseImportCertRequest(void * importCertRequest, 
  202.        SSMPRUint32 * blobLen, 
  203.        void ** certBlob);
  204. SSMPRInt32 SSM_PackImportCertReply(void ** importCertReply, SSMPRInt32 result, 
  205.    SSMPRUint32 resourceID);
  206. PRStatus SSM_ParseFindCertByNicknameRequest(void *request, char ** nickname);
  207. PRInt32 SSM_PackFindCertByNicknameReply(void ** reply, PRUint32 resourceID);
  208. PRStatus SSM_ParseFindCertByKeyRequest(void *request, SECItem ** key);
  209. PRInt32 SSM_PackFindCertByKeyReply(void ** reply, PRUint32 resourceID);
  210. PRStatus SSM_ParseFindCertByEmailAddrRequest(void *request, char ** emailAddr);
  211. PRInt32 SSM_PackFindCertByEmailAddrReply(void ** reply, PRUint32 resourceID);
  212. PRStatus SSM_ParseAddTempCertToDBRequest(void *request, PRUint32 *resourceID, char ** nickname, PRInt32 *ssl, PRInt32 *email, PRInt32 *objectSigning);
  213. PRInt32 SSM_PackAddTempCertToDBReply(void ** reply);
  214. PRStatus SSM_ParseMatchUserCertRequest(void *request, MatchUserCertRequestData** data);
  215. PRInt32 SSM_PackMatchUserCertReply(void **reply, SSMCertList * certList);
  216. SSMPRInt32 SSM_PackErrorMessage(void ** errorReply, SSMPRInt32 result);
  217. /* PKCS11 actions */
  218. SSMPRStatus SSM_ParseKeyPairGenRequest(void *keyPairGenRequest, 
  219.        SSMPRInt32 requestLen,
  220.        SSMPRUint32 *keyPairCtxtID,
  221.        SSMPRUint32 *genMechanism,
  222.        SSMPRUint32 *keySize,
  223.        unsigned char **params, 
  224.        SSMPRUint32 *paramLen);
  225. SSMPRInt32 SSM_PackKeyPairGenResponse(void ** keyPairGenResponse, 
  226.       SSMPRUint32 keyPairId);
  227. PRStatus
  228. SSM_ParseFinishKeyGenRequest(void    *finishKeyGenRequest,
  229.                              PRInt32  requestLen,
  230.                              PRInt32 *keyGenContext);
  231. /* CMMF/CRMF Actions */
  232. SSMPRStatus SSM_ParseCreateCRMFReqRequest(void        *crmfReqRequest,
  233.   SSMPRInt32   requestLen,
  234.   SSMPRUint32 *keyPairId);
  235. SSMPRInt32 SSM_PackCreateCRMFReqReply(void        **crmfReqReply,
  236.       SSMPRUint32   crmfReqId);
  237. SSMPRStatus SSM_ParseEncodeCRMFReqRequest(void         *encodeReq,
  238.   SSMPRInt32    requestLen,
  239.   SSMPRUint32 **crmfReqId,
  240.   SSMPRInt32   *numRequests);
  241. SSMPRInt32 SSM_PackEncodeCRMFReqReply(void        **encodeReply,
  242.       char         *crmfDER,
  243.       SSMPRUint32   derLen);
  244. SSMPRStatus SSM_ParseCMMFCertResponse(void        *encodedRes,
  245.       SSMPRInt32   encodeLen,
  246.       char       **nickname,
  247.       char       **base64Der,
  248.       PRBool      *doBackup);
  249. PRStatus SSM_ParsePOPChallengeRequest(void     *challenge,
  250.       PRInt32   len,
  251.       char    **responseString);
  252. PRInt32 SSM_PackPOPChallengeResponse(void   **response,
  253.      char    *responseString,
  254.      PRInt32  responseStringLen);
  255. PRInt32 SSM_PackPasswdRequest(void ** passwdRequest, PRInt32 tokenID,
  256.                               char * prompt, PRInt32 promptLen);
  257. PRStatus SSM_ParsePasswordReply(void * passwdReply, PRInt32 * result, 
  258.                                 PRInt32 * tokenID,
  259.                                 char ** passwd, PRInt32 * passwdLen);
  260. /* Sign Text Actions */
  261. typedef struct {
  262.     char *stringToSign;
  263.     char *hostName;
  264.     char *caOption;
  265.     PRInt32 numCAs;
  266.     char **caNames;
  267. } signTextRequestData;
  268. PRStatus SSM_ParseSignTextRequest(void* signTextRequest, PRInt32 len, PRUint32* resID, signTextRequestData ** data);
  269. PRStatus SSM_ParseGetLocalizedTextRequest(void               *data,
  270.                                           SSMLocalizedString *whichString);  
  271. PRInt32 SSM_PackGetLocalizedTextResponse(void               **data,
  272.  SSMLocalizedString   whichString,
  273.  char                *retString);
  274. PRStatus SSM_ParseAddNewSecurityModuleRequest(void          *data, 
  275.       char         **moduleName,
  276.       char         **libraryPath, 
  277.       unsigned long *pubMechFlags,
  278.       unsigned long *pubCipherFlags);
  279. PRInt32 SSM_PackAddNewModuleResponse(void **data, PRInt32 rv);
  280. PRStatus SSM_ParseDeleteSecurityModuleRequest(void *data, char **moduleName);
  281. PRInt32 SSM_PackDeleteModuleResponse(void **data, PRInt32 moduleType);
  282. PRInt32 SSM_PackFilePathRequest(void **data, PRInt32 resID, char *prompt,
  283. PRBool shouldFileExist, char *fileSuffix);
  284. PRStatus SSM_ParseFilePathReply(void *message, char **filePath,
  285. PRInt32 *rid);
  286. PRInt32 SSM_PackPromptRequestEvent(void **data, PRInt32 resID, char *prompt);
  287. PRStatus SSM_ParsePasswordPromptReply(void *data, PRInt32 *resID, 
  288.       char **reply);
  289. /* messages for importing certs *the traditional way* */
  290. PRInt32 SSM_PackDecodeCertReply(void ** data, PRInt32 certID);
  291. PRStatus SSM_ParseDecodeCertRequest(void * data, PRInt32 * len, 
  292. char ** buffer);
  293. PRStatus SSM_ParseGetKeyChoiceListRequest(void * data, PRUint32 dataLen, 
  294.   char ** type, PRUint32 *typeLen, 
  295.   char ** pqgString, PRUint32 *pqgLen);
  296. PRInt32 SSM_PackGetKeyChoiceListReply(void **data, char ** list);
  297. PRStatus SSM_ParseGenKeyOldStyleRequest(void * data, PRUint32 datalen, 
  298. char ** choiceString, 
  299. char ** challenge, 
  300. char ** typeString, 
  301. char ** pqgString);
  302. PRInt32 SSM_PackGenKeyOldStyleReply(void ** data, char * keydata);
  303. PRStatus SSM_ParseDecodeAndCreateTempCertRequest(void * data, 
  304. char ** certbuf, PRUint32 * certlen, int * certClass);
  305. #endif /*PROTOCOLF_H_*/