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

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 _SEC_UTIL_H_
  34. #define _SEC_UTIL_H_
  35. #include "seccomon.h"
  36. #include "secitem.h"
  37. #include "prerror.h"
  38. #include "base64.h"
  39. #include "key.h"
  40. #include "secpkcs7.h"
  41. #include "secasn1.h"
  42. #include "secder.h"
  43. #include <stdio.h>
  44. #define SEC_CT_PRIVATE_KEY "private-key"
  45. #define SEC_CT_PUBLIC_KEY "public-key"
  46. #define SEC_CT_CERTIFICATE "certificate"
  47. #define SEC_CT_CERTIFICATE_REQUEST "certificate-request"
  48. #define SEC_CT_PKCS7 "pkcs7"
  49. #define SEC_CT_CRL "crl"
  50. #define NS_CERTREQ_HEADER "-----BEGIN NEW CERTIFICATE REQUEST-----"
  51. #define NS_CERTREQ_TRAILER "-----END NEW CERTIFICATE REQUEST-----"
  52. #define NS_CERT_HEADER "-----BEGIN CERTIFICATE-----"
  53. #define NS_CERT_TRAILER "-----END CERTIFICATE-----"
  54. /* From libsec/pcertdb.c --- it's not declared in sec.h */
  55. extern SECStatus SEC_AddPermCertificate(CERTCertDBHandle *handle,
  56. SECItem *derCert, char *nickname, CERTCertTrust *trust);
  57. #ifdef SECUTIL_NEW
  58. typedef int (*SECU_PPFunc)(PRFileDesc *out, SECItem *item, 
  59.                            char *msg, int level);
  60. #else
  61. typedef int (*SECU_PPFunc)(FILE *out, SECItem *item, char *msg, int level);
  62. #endif
  63. typedef struct {
  64.     enum {
  65. PW_NONE,
  66. PW_FROMFILE,
  67. PW_PLAINTEXT
  68.     } source;
  69.     char *data;
  70. } secuPWData;
  71. /*
  72. ** Change a password on a token, or initialize a token with a password
  73. ** if it does not already have one.
  74. ** Use passwd to send the password in plaintext, pwFile to specify a
  75. ** file containing the password, or NULL for both to prompt the user.
  76. */
  77. SECStatus SECU_ChangePW(PK11SlotInfo *slot, char *passwd, char *pwFile);
  78. /*  These were stolen from the old sec.h... */
  79. /*
  80. ** Check a password for legitimacy. Passwords must be at least 8
  81. ** characters long and contain one non-alphabetic. Return DSTrue if the
  82. ** password is ok, DSFalse otherwise.
  83. */
  84. extern PRBool SEC_CheckPassword(char *password);
  85. /*
  86. ** Blind check of a password. Complement to SEC_CheckPassword which 
  87. ** ignores length and content type, just retuning DSTrue is the password
  88. ** exists, DSFalse if NULL
  89. */
  90. extern PRBool SEC_BlindCheckPassword(char *password);
  91. /*
  92. ** Get a password.
  93. ** First prompt with "msg" on "out", then read the password from "in".
  94. ** The password is then checked using "chkpw".
  95. */
  96. extern char *SEC_GetPassword(FILE *in, FILE *out, char *msg,
  97.       PRBool (*chkpw)(char *));
  98. char *SECU_FilePasswd(PK11SlotInfo *slot, PRBool retry, void *arg);
  99. char *SECU_GetPasswordString(void *arg, char *prompt);
  100. /*
  101. ** Write a dongle password.
  102. ** Uses MD5 to hash constant system data (hostname, etc.), and then
  103. ** creates RC4 key to encrypt a password "pw" into a file "fd".
  104. */
  105. extern SECStatus SEC_WriteDongleFile(int fd, char *pw);
  106. /*
  107. ** Get a dongle password.
  108. ** Uses MD5 to hash constant system data (hostname, etc.), and then
  109. ** creates RC4 key to decrypt and return a password from file "fd".
  110. */
  111. extern char *SEC_ReadDongleFile(int fd);
  112. /* End stolen headers */
  113. /* Get the Key ID (modulus) from the cert with the given nickname. */
  114. extern SECItem * SECU_GetKeyIDFromNickname(char *name);
  115. /* Change the key db password in the database */
  116. extern SECStatus SECU_ChangeKeyDBPassword(SECKEYKeyDBHandle *kdbh);
  117. /* Check if a key name exists. Return PR_TRUE if true, PR_FALSE if not */
  118. extern PRBool SECU_CheckKeyNameExists(SECKEYKeyDBHandle *handle, char *nickname);
  119. /* Find a key by a nickname. Calls SECKEY_FindKeyByName */
  120. extern SECKEYLowPrivateKey *SECU_GetPrivateKey(SECKEYKeyDBHandle *kdbh, char *nickname);
  121. /* Get key encrypted with dongle file in "pathname" */
  122. extern SECKEYLowPrivateKey *SECU_GetPrivateDongleKey(SECKEYKeyDBHandle *handle, 
  123.                                                char *nickname, char *pathname);
  124. extern SECItem *SECU_GetPassword(void *arg, SECKEYKeyDBHandle *handle);
  125. /* Just sticks the two strings together with a / if needed */
  126. char *SECU_AppendFilenameToDir(char *dir, char *filename);
  127. /* Returns result of getenv("SSL_DIR") or NULL */
  128. extern char *SECU_DefaultSSLDir(void);
  129. /*
  130. ** Should be called once during initialization to set the default 
  131. **    directory for looking for cert.db, key.db, and cert-nameidx.db files
  132. ** Removes trailing '/' in 'base' 
  133. ** If 'base' is NULL, defaults to set to .netscape in home directory.
  134. */
  135. extern char *SECU_ConfigDirectory(const char* base);
  136. extern char *SECU_CertDBNameCallback(void *arg, int dbVersion);
  137. extern char *SECU_KeyDBNameCallback(void *arg, int dbVersion);
  138. extern SECKEYPrivateKey *SECU_FindPrivateKeyFromNickname(char *name);
  139. extern SECKEYLowPrivateKey *SECU_FindLowPrivateKeyFromNickname(char *name);
  140. extern SECStatus SECU_DeleteKeyByName(SECKEYKeyDBHandle *handle, char *nickname);
  141. extern SECKEYKeyDBHandle *SECU_OpenKeyDB(PRBool readOnly);
  142. extern CERTCertDBHandle *SECU_OpenCertDB(PRBool readOnly);
  143. /* 
  144. ** Basic callback function for SSL_GetClientAuthDataHook
  145. */
  146. extern int
  147. SECU_GetClientAuthData(void *arg, PRFileDesc *fd,
  148.        struct CERTDistNamesStr *caNames,
  149.        struct CERTCertificateStr **pRetCert,
  150.        struct SECKEYPrivateKeyStr **pRetKey);
  151. /* print out an error message */
  152. extern void SECU_PrintError(char *progName, char *msg, ...);
  153. /* print out a system error message */
  154. extern void SECU_PrintSystemError(char *progName, char *msg, ...);
  155. /* Return informative error string */
  156. extern const char * SECU_Strerror(PRErrorCode errNum);
  157. /* Read the contents of a file into a SECItem */
  158. extern SECStatus SECU_FileToItem(SECItem *dst, PRFileDesc *src);
  159. extern SECStatus SECU_TextFileToItem(SECItem *dst, PRFileDesc *src);
  160. /* Read in a DER from a file, may be ascii  */
  161. extern SECStatus 
  162. SECU_ReadDERFromFile(SECItem *der, PRFileDesc *inFile, PRBool ascii);
  163. /* Indent based on "level" */
  164. extern void SECU_Indent(FILE *out, int level);
  165. /* Print integer value and hex */
  166. extern void SECU_PrintInteger(FILE *out, SECItem *i, char *m, int level);
  167. /* Print ObjectIdentifier symbolically */
  168. extern void SECU_PrintObjectID(FILE *out, SECItem *oid, char *m, int level);
  169. /* Print AlgorithmIdentifier symbolically */
  170. extern void SECU_PrintAlgorithmID(FILE *out, SECAlgorithmID *a, char *m,
  171.   int level);
  172. /* Print SECItem as hex */
  173. extern void SECU_PrintAsHex(FILE *out, SECItem *i, char *m, int level);
  174. /*
  175.  * Format and print the UTC Time "t".  If the tag message "m" is not NULL,
  176.  * do indent formatting based on "level" and add a newline afterward;
  177.  * otherwise just print the formatted time string only.
  178.  */
  179. extern void SECU_PrintUTCTime(FILE *out, SECItem *t, char *m, int level);
  180. /*
  181.  * Format and print the Generalized Time "t".  If the tag message "m"
  182.  * is not NULL, * do indent formatting based on "level" and add a newline
  183.  * afterward; otherwise just print the formatted time string only.
  184.  */
  185. extern void SECU_PrintGeneralizedTime(FILE *out, SECItem *t, char *m,
  186.       int level);
  187. /* Dump all key nicknames */
  188. extern int SECU_PrintKeyNames(SECKEYKeyDBHandle *handle, FILE *out);
  189. /* callback for listing certs through pkcs11 */
  190. extern SECStatus SECU_PrintCertNickname(CERTCertificate *cert, void *data);
  191. /* Dump all certificate nicknames in a database */
  192. extern SECStatus
  193. SECU_PrintCertificateNames(CERTCertDBHandle *handle, PRFileDesc* out, 
  194.                            PRBool sortByName, PRBool sortByTrust);
  195. /* See if nickname already in database. Return 1 true, 0 false, -1 error */
  196. int SECU_CheckCertNameExists(CERTCertDBHandle *handle, char *nickname);
  197. /* Dump contents of cert req */
  198. extern int SECU_PrintCertificateRequest(FILE *out, SECItem *der, char *m,
  199. int level);
  200. /* Dump contents of certificate */
  201. extern int SECU_PrintCertificate(FILE *out, SECItem *der, char *m, int level);
  202. /* print trust flags on a cert */
  203. extern void SECU_PrintTrustFlags(FILE *out, CERTCertTrust *trust, char *m, int level);
  204. /* Dump contents of public key */
  205. extern int SECU_PrintPublicKey(FILE *out, SECItem *der, char *m, int level);
  206. /* Dump contents of private key */
  207. extern int SECU_PrintPrivateKey(FILE *out, SECItem *der, char *m, int level);
  208. /* Print the MD5 and SHA1 fingerprints of a cert */
  209. extern int SECU_PrintFingerprints(FILE *out, SECItem *derCert, char *m,
  210.                                   int level);
  211. /* Pretty-print any PKCS7 thing */
  212. extern int SECU_PrintPKCS7ContentInfo(FILE *out, SECItem *der, char *m, 
  213.       int level);
  214. /* Init PKCS11 stuff */
  215. extern SECStatus SECU_PKCS11Init(PRBool readOnly);
  216. /* Dump contents of signed data */
  217. extern int SECU_PrintSignedData(FILE *out, SECItem *der, char *m, int level,
  218. SECU_PPFunc inner);
  219. extern int SECU_PrintCrl(FILE *out, SECItem *der, char *m, int level);
  220. extern void
  221. SECU_PrintCRLInfo(FILE *out, CERTCrl *crl, char *m, int level);
  222. extern void SECU_PrintExtensions(FILE *out, CERTCertExtension **extensions,
  223.  char *msg, int level);
  224. extern void SECU_PrintName(FILE *out, CERTName *name, char *msg, int level);
  225. /* Convert a High public Key to a Low public Key */
  226. extern SECKEYLowPublicKey *SECU_ConvHighToLow(SECKEYPublicKey *pubHighKey);
  227. extern SECItem *SECU_GetPBEPassword(void *arg);
  228. extern char *SECU_GetModulePassword(PK11SlotInfo *slot, PRBool retry, void *arg);
  229. extern SECStatus DER_PrettyPrint(FILE *out, SECItem *it, PRBool raw);
  230. extern void SEC_Init(void);
  231. extern char *SECU_SECModDBName(void);
  232. /*
  233.  *
  234.  *  Utilities for parsing security tools command lines 
  235.  *
  236.  */
  237. /*  A single command flag  */
  238. typedef struct {
  239.     char flag;
  240.     PRBool needsArg;
  241.     char *arg;
  242.     PRBool activated;
  243. } secuCommandFlag;
  244. /*  A full array of command/option flags  */
  245. typedef struct
  246. {
  247.     int numCommands;
  248.     int numOptions;
  249.     secuCommandFlag *commands;
  250.     secuCommandFlag *options;
  251. } secuCommand;
  252. /*  fill the "arg" and "activated" fields for each flag  */
  253. SECStatus 
  254. SECU_ParseCommandLine(int argc, char **argv, char *progName, secuCommand *cmd);
  255. char *
  256. SECU_GetOptionArg(secuCommand *cmd, int optionNum);
  257. /*
  258.  *
  259.  *  Error messaging
  260.  *
  261.  */
  262. /* Return informative error string */
  263. char *SECU_ErrorString(int16 err);
  264. /* Return informative error string. Does not call XP_GetString */
  265. char *SECU_ErrorStringRaw(int16 err);
  266. #ifndef XP_UNIX
  267. extern int ffs(unsigned int i);
  268. #endif
  269. #include "secerr.h"
  270. #include "sslerr.h"
  271. #endif /* _SEC_UTIL_H_ */