Blame nss/cmd/lib/secutil.h

Packit 40b132
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit 40b132
#ifndef _SEC_UTIL_H_
Packit 40b132
#define _SEC_UTIL_H_
Packit 40b132
Packit 40b132
#include "seccomon.h"
Packit 40b132
#include "secitem.h"
Packit 40b132
#include "secport.h"
Packit 40b132
#include "prerror.h"
Packit 40b132
#include "base64.h"
Packit 40b132
#include "key.h"
Packit 40b132
#include "secpkcs7.h"
Packit 40b132
#include "secasn1.h"
Packit 40b132
#include "secder.h"
Packit 40b132
#include <stdio.h>
Packit 40b132
Packit 40b132
#include "basicutil.h"
Packit 40b132
#include "sslerr.h"
Packit 40b132
#include "sslt.h"
Packit 40b132
Packit 40b132
Packit 40b132
#define SEC_CT_PRIVATE_KEY		"private-key"
Packit 40b132
#define SEC_CT_PUBLIC_KEY		"public-key"
Packit 40b132
#define SEC_CT_CERTIFICATE		"certificate"
Packit 40b132
#define SEC_CT_CERTIFICATE_REQUEST	"certificate-request"
Packit 40b132
#define SEC_CT_CERTIFICATE_ID           "certificate-identity"
Packit 40b132
#define SEC_CT_PKCS7			"pkcs7"
Packit 40b132
#define SEC_CT_CRL			"crl"
Packit 40b132
#define SEC_CT_NAME			"name"
Packit 40b132
Packit 40b132
#define NS_CERTREQ_HEADER "-----BEGIN NEW CERTIFICATE REQUEST-----"
Packit 40b132
#define NS_CERTREQ_TRAILER "-----END NEW CERTIFICATE REQUEST-----"
Packit 40b132
Packit 40b132
#define NS_CERT_HEADER "-----BEGIN CERTIFICATE-----"
Packit 40b132
#define NS_CERT_TRAILER "-----END CERTIFICATE-----"
Packit 40b132
Packit 40b132
#define NS_CRL_HEADER  "-----BEGIN CRL-----"
Packit 40b132
#define NS_CRL_TRAILER "-----END CRL-----"
Packit 40b132
Packit 40b132
#define SECU_Strerror PORT_ErrorToString
Packit 40b132
Packit 40b132
Packit 40b132
typedef struct {
Packit 40b132
    enum {
Packit 40b132
	PW_NONE = 0,
Packit 40b132
	PW_FROMFILE = 1,
Packit 40b132
	PW_PLAINTEXT = 2,
Packit 40b132
	PW_EXTERNAL = 3
Packit 40b132
    } source;
Packit 40b132
    char *data;
Packit 40b132
} secuPWData;
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Change a password on a token, or initialize a token with a password
Packit 40b132
** if it does not already have one.
Packit 40b132
** Use passwd to send the password in plaintext, pwFile to specify a
Packit 40b132
** file containing the password, or NULL for both to prompt the user.
Packit 40b132
*/
Packit 40b132
SECStatus SECU_ChangePW(PK11SlotInfo *slot, char *passwd, char *pwFile);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Change a password on a token, or initialize a token with a password
Packit 40b132
** if it does not already have one.
Packit 40b132
** In this function, you can specify both the old and new passwords
Packit 40b132
** as either a string or file. NOTE: any you don't specify will
Packit 40b132
** be prompted for
Packit 40b132
*/
Packit 40b132
SECStatus SECU_ChangePW2(PK11SlotInfo *slot, char *oldPass, char *newPass,
Packit 40b132
                        char *oldPwFile, char *newPwFile);
Packit 40b132
Packit 40b132
/*  These were stolen from the old sec.h... */
Packit 40b132
/*
Packit 40b132
** Check a password for legitimacy. Passwords must be at least 8
Packit 40b132
** characters long and contain one non-alphabetic. Return DSTrue if the
Packit 40b132
** password is ok, DSFalse otherwise.
Packit 40b132
*/
Packit 40b132
extern PRBool SEC_CheckPassword(char *password);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Blind check of a password. Complement to SEC_CheckPassword which 
Packit 40b132
** ignores length and content type, just retuning DSTrue is the password
Packit 40b132
** exists, DSFalse if NULL
Packit 40b132
*/
Packit 40b132
extern PRBool SEC_BlindCheckPassword(char *password);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Get a password.
Packit 40b132
** First prompt with "msg" on "out", then read the password from "in".
Packit 40b132
** The password is then checked using "chkpw".
Packit 40b132
*/
Packit 40b132
extern char *SEC_GetPassword(FILE *in, FILE *out, char *msg,
Packit 40b132
				      PRBool (*chkpw)(char *));
Packit 40b132
Packit 40b132
char *SECU_FilePasswd(PK11SlotInfo *slot, PRBool retry, void *arg);
Packit 40b132
Packit 40b132
char *SECU_GetPasswordString(void *arg, char *prompt);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Write a dongle password.
Packit 40b132
** Uses MD5 to hash constant system data (hostname, etc.), and then
Packit 40b132
** creates RC4 key to encrypt a password "pw" into a file "fd".
Packit 40b132
*/
Packit 40b132
extern SECStatus SEC_WriteDongleFile(int fd, char *pw);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Get a dongle password.
Packit 40b132
** Uses MD5 to hash constant system data (hostname, etc.), and then
Packit 40b132
** creates RC4 key to decrypt and return a password from file "fd".
Packit 40b132
*/
Packit 40b132
extern char *SEC_ReadDongleFile(int fd);
Packit 40b132
Packit 40b132
Packit 40b132
/* End stolen headers */
Packit 40b132
Packit 40b132
/* Just sticks the two strings together with a / if needed */
Packit 40b132
char *SECU_AppendFilenameToDir(char *dir, char *filename);
Packit 40b132
Packit 40b132
/* Returns result of getenv("SSL_DIR") or NULL */
Packit 40b132
extern char *SECU_DefaultSSLDir(void);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Should be called once during initialization to set the default 
Packit 40b132
**    directory for looking for cert.db, key.db, and cert-nameidx.db files
Packit 40b132
** Removes trailing '/' in 'base' 
Packit 40b132
** If 'base' is NULL, defaults to set to .netscape in home directory.
Packit 40b132
*/
Packit 40b132
extern char *SECU_ConfigDirectory(const char* base);
Packit 40b132
Packit 40b132
/* 
Packit 40b132
** Basic callback function for SSL_GetClientAuthDataHook
Packit 40b132
*/
Packit 40b132
extern int
Packit 40b132
SECU_GetClientAuthData(void *arg, PRFileDesc *fd,
Packit 40b132
		       struct CERTDistNamesStr *caNames,
Packit 40b132
		       struct CERTCertificateStr **pRetCert,
Packit 40b132
		       struct SECKEYPrivateKeyStr **pRetKey);
Packit 40b132
Packit 40b132
extern PRBool SECU_GetWrapEnabled(void);
Packit 40b132
extern void SECU_EnableWrap(PRBool enable);
Packit 40b132
Packit 40b132
extern PRBool SECU_GetUtf8DisplayEnabled(void);
Packit 40b132
extern void SECU_EnableUtf8Display(PRBool enable);
Packit 40b132
Packit 40b132
/* revalidate the cert and print information about cert verification
Packit 40b132
 * failure at time == now */
Packit 40b132
extern void
Packit 40b132
SECU_printCertProblems(FILE *outfile, CERTCertDBHandle *handle, 
Packit 40b132
	CERTCertificate *cert, PRBool checksig, 
Packit 40b132
	SECCertificateUsage certUsage, void *pinArg, PRBool verbose);
Packit 40b132
Packit 40b132
/* revalidate the cert and print information about cert verification
Packit 40b132
 * failure at specified time */
Packit 40b132
extern void
Packit 40b132
SECU_printCertProblemsOnDate(FILE *outfile, CERTCertDBHandle *handle, 
Packit 40b132
	CERTCertificate *cert, PRBool checksig, SECCertificateUsage certUsage, 
Packit 40b132
	void *pinArg, PRBool verbose, PRTime datetime);
Packit 40b132
Packit 40b132
/* print out CERTVerifyLog info. */
Packit 40b132
extern void
Packit 40b132
SECU_displayVerifyLog(FILE *outfile, CERTVerifyLog *log,
Packit 40b132
                      PRBool verbose);
Packit 40b132
Packit 40b132
/* Read in a DER from a file, may be ascii  */
Packit 40b132
extern SECStatus 
Packit 40b132
SECU_ReadDERFromFile(SECItem *der, PRFileDesc *inFile, PRBool ascii,
Packit 40b132
		     PRBool warnOnPrivateKeyInAsciiFile);
Packit 40b132
Packit 40b132
/* Print integer value and hex */
Packit 40b132
extern void SECU_PrintInteger(FILE *out, const SECItem *i, const char *m,
Packit 40b132
                              int level);
Packit 40b132
Packit 40b132
/* Print ObjectIdentifier symbolically */
Packit 40b132
extern SECOidTag SECU_PrintObjectID(FILE *out, const SECItem *oid,
Packit 40b132
                                    const char *m, int level);
Packit 40b132
Packit 40b132
/* Print AlgorithmIdentifier symbolically */
Packit 40b132
extern void SECU_PrintAlgorithmID(FILE *out, SECAlgorithmID *a, char *m,
Packit 40b132
				  int level);
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Format and print the UTC Time "t".  If the tag message "m" is not NULL,
Packit 40b132
 * do indent formatting based on "level" and add a newline afterward;
Packit 40b132
 * otherwise just print the formatted time string only.
Packit 40b132
 */
Packit 40b132
extern void SECU_PrintUTCTime(FILE *out, const SECItem *t, const char *m,
Packit 40b132
                              int level);
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Format and print the Generalized Time "t".  If the tag message "m"
Packit 40b132
 * is not NULL, * do indent formatting based on "level" and add a newline
Packit 40b132
 * afterward; otherwise just print the formatted time string only.
Packit 40b132
 */
Packit 40b132
extern void SECU_PrintGeneralizedTime(FILE *out, const SECItem *t,
Packit 40b132
                                      const char *m, int level);
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Format and print the UTC or Generalized Time "t".  If the tag message
Packit 40b132
 * "m" is not NULL, do indent formatting based on "level" and add a newline
Packit 40b132
 * afterward; otherwise just print the formatted time string only.
Packit 40b132
 */
Packit 40b132
extern void SECU_PrintTimeChoice(FILE *out, const SECItem *t, const char *m,
Packit 40b132
                                 int level);
Packit 40b132
Packit 40b132
/* callback for listing certs through pkcs11 */
Packit 40b132
extern SECStatus SECU_PrintCertNickname(CERTCertListNode* cert, void *data);
Packit 40b132
Packit 40b132
/* Dump all certificate nicknames in a database */
Packit 40b132
extern SECStatus
Packit 40b132
SECU_PrintCertificateNames(CERTCertDBHandle *handle, PRFileDesc* out, 
Packit 40b132
                           PRBool sortByName, PRBool sortByTrust);
Packit 40b132
Packit 40b132
/* See if nickname already in database. Return 1 true, 0 false, -1 error */
Packit 40b132
int SECU_CheckCertNameExists(CERTCertDBHandle *handle, char *nickname);
Packit 40b132
Packit 40b132
/* Dump contents of cert req */
Packit 40b132
extern int SECU_PrintCertificateRequest(FILE *out, SECItem *der, char *m,
Packit 40b132
	int level);
Packit 40b132
Packit 40b132
/* Dump contents of certificate */
Packit 40b132
extern int SECU_PrintCertificate(FILE *out, const SECItem *der, const char *m,
Packit 40b132
                                 int level);
Packit 40b132
Packit 40b132
extern int SECU_PrintCertificateBasicInfo(FILE *out, const SECItem *der, const char *m,
Packit 40b132
                                 int level);
Packit 40b132
Packit 40b132
extern int SECU_PrintDumpDerIssuerAndSerial(FILE *out, SECItem *der, char *m,
Packit 40b132
                                 int level);
Packit 40b132
Packit 40b132
/* Dump contents of a DER certificate name (issuer or subject) */
Packit 40b132
extern int SECU_PrintDERName(FILE *out, SECItem *der, const char *m, int level);
Packit 40b132
Packit 40b132
/* print trust flags on a cert */
Packit 40b132
extern void SECU_PrintTrustFlags(FILE *out, CERTCertTrust *trust, char *m, 
Packit 40b132
                                 int level);
Packit 40b132
Packit 40b132
extern int SECU_PrintSubjectPublicKeyInfo(FILE *out, SECItem *der, char *m, 
Packit 40b132
                                          int level);
Packit 40b132
Packit 40b132
#ifdef HAVE_EPV_TEMPLATE
Packit 40b132
/* Dump contents of private key */
Packit 40b132
extern int SECU_PrintPrivateKey(FILE *out, SECItem *der, char *m, int level);
Packit 40b132
#endif
Packit 40b132
Packit 40b132
/* Dump contents of an RSA public key */
Packit 40b132
extern void SECU_PrintRSAPublicKey(FILE *out, SECKEYPublicKey *pk, char *m, int level);
Packit 40b132
Packit 40b132
/* Dump contents of a DSA public key */
Packit 40b132
extern void SECU_PrintDSAPublicKey(FILE *out, SECKEYPublicKey *pk, char *m, int level);
Packit 40b132
Packit 40b132
/* Print the MD5 and SHA1 fingerprints of a cert */
Packit 40b132
extern int SECU_PrintFingerprints(FILE *out, SECItem *derCert, char *m,
Packit 40b132
                                  int level);
Packit 40b132
Packit 40b132
/* Pretty-print any PKCS7 thing */
Packit 40b132
extern int SECU_PrintPKCS7ContentInfo(FILE *out, SECItem *der, char *m, 
Packit 40b132
				      int level);
Packit 40b132
Packit 40b132
/* Init PKCS11 stuff */
Packit 40b132
extern SECStatus SECU_PKCS11Init(PRBool readOnly);
Packit 40b132
Packit 40b132
/* Dump contents of signed data */
Packit 40b132
extern int SECU_PrintSignedData(FILE *out, SECItem *der, const char *m, 
Packit 40b132
                                int level, SECU_PPFunc inner);
Packit 40b132
Packit 40b132
/* Dump contents of signed data, excluding the signature */
Packit 40b132
extern int SECU_PrintSignedContent(FILE *out, SECItem *der, char *m, int level,
Packit 40b132
                                   SECU_PPFunc inner);
Packit 40b132
Packit 40b132
/* Print cert data and its trust flags */
Packit 40b132
extern SECStatus SEC_PrintCertificateAndTrust(CERTCertificate *cert,
Packit 40b132
                                              const char *label,
Packit 40b132
                                              CERTCertTrust *trust);
Packit 40b132
Packit 40b132
extern int SECU_PrintCrl(FILE *out, SECItem *der, char *m, int level);
Packit 40b132
Packit 40b132
extern void
Packit 40b132
SECU_PrintCRLInfo(FILE *out, CERTCrl *crl, char *m, int level);
Packit 40b132
Packit 40b132
extern void SECU_PrintString(FILE *out, const SECItem *si, const char *m,
Packit 40b132
                             int level);
Packit 40b132
extern void SECU_PrintAny(FILE *out, const SECItem *i, const char *m, int level);
Packit 40b132
Packit 40b132
extern void SECU_PrintPolicy(FILE *out, SECItem *value, char *msg, int level);
Packit 40b132
extern void SECU_PrintPrivKeyUsagePeriodExtension(FILE *out, SECItem *value,
Packit 40b132
                                 char *msg, int level);
Packit 40b132
Packit 40b132
extern void SECU_PrintExtensions(FILE *out, CERTCertExtension **extensions,
Packit 40b132
				 char *msg, int level);
Packit 40b132
Packit 40b132
extern void SECU_PrintNameQuotesOptional(FILE *out, CERTName *name, 
Packit 40b132
					 const char *msg, int level, 
Packit 40b132
					 PRBool quotes);
Packit 40b132
extern void SECU_PrintName(FILE *out, CERTName *name, const char *msg,
Packit 40b132
                           int level);
Packit 40b132
extern void SECU_PrintRDN(FILE *out, CERTRDN *rdn, const char *msg, int level);
Packit 40b132
Packit 40b132
#ifdef SECU_GetPassword
Packit 40b132
/* Convert a High public Key to a Low public Key */
Packit 40b132
extern SECKEYLowPublicKey *SECU_ConvHighToLow(SECKEYPublicKey *pubHighKey);
Packit 40b132
#endif
Packit 40b132
Packit 40b132
extern char *SECU_GetModulePassword(PK11SlotInfo *slot, PRBool retry, void *arg);
Packit 40b132
Packit 40b132
extern SECStatus DER_PrettyPrint(FILE *out, const SECItem *it, PRBool raw);
Packit 40b132
Packit 40b132
extern char *SECU_SECModDBName(void);
Packit 40b132
Packit 40b132
/* Fetch and register an oid if it hasn't been done already */
Packit 40b132
extern void SECU_cert_fetchOID(SECOidTag *data, const SECOidData *src);
Packit 40b132
Packit 40b132
extern SECStatus SECU_RegisterDynamicOids(void);
Packit 40b132
Packit 40b132
/* Identifies hash algorithm tag by its string representation. */
Packit 40b132
extern SECOidTag SECU_StringToSignatureAlgTag(const char *alg);
Packit 40b132
Packit 40b132
/* Store CRL in output file or pk11 db. Also
Packit 40b132
 * encodes with base64 and exports to file if ascii flag is set
Packit 40b132
 * and file is not NULL. */
Packit 40b132
extern SECStatus SECU_StoreCRL(PK11SlotInfo *slot, SECItem *derCrl,
Packit 40b132
                               PRFileDesc *outFile, PRBool ascii, char *url);
Packit 40b132
Packit 40b132
Packit 40b132
/*
Packit 40b132
** DER sign a single block of data using private key encryption and the
Packit 40b132
** MD5 hashing algorithm. This routine first computes a digital signature
Packit 40b132
** using SEC_SignData, then wraps it with an CERTSignedData and then der
Packit 40b132
** encodes the result.
Packit 40b132
**	"arena" is the memory arena to use to allocate data from
Packit 40b132
**      "sd" returned CERTSignedData 
Packit 40b132
** 	"result" the final der encoded data (memory is allocated)
Packit 40b132
** 	"buf" the input data to sign
Packit 40b132
** 	"len" the amount of data to sign
Packit 40b132
** 	"pk" the private key to encrypt with
Packit 40b132
*/
Packit 40b132
extern SECStatus SECU_DerSignDataCRL(PLArenaPool *arena, CERTSignedData *sd,
Packit 40b132
                                     unsigned char *buf, int len,
Packit 40b132
                                     SECKEYPrivateKey *pk, SECOidTag algID);
Packit 40b132
Packit 40b132
typedef enum  {
Packit 40b132
    noKeyFound = 1,
Packit 40b132
    noSignatureMatch = 2,
Packit 40b132
    failToEncode = 3,
Packit 40b132
    failToSign = 4,
Packit 40b132
    noMem = 5
Packit 40b132
} SignAndEncodeFuncExitStat;
Packit 40b132
Packit 40b132
extern SECStatus
Packit 40b132
SECU_SignAndEncodeCRL(CERTCertificate *issuer, CERTSignedCrl *signCrl,
Packit 40b132
                      SECOidTag hashAlgTag, SignAndEncodeFuncExitStat *resCode);
Packit 40b132
Packit 40b132
extern SECStatus
Packit 40b132
SECU_CopyCRL(PLArenaPool *destArena, CERTCrl *destCrl, CERTCrl *srcCrl);
Packit 40b132
Packit 40b132
/*
Packit 40b132
** Finds the crl Authority Key Id extension. Returns NULL if no such extension
Packit 40b132
** was found.
Packit 40b132
*/
Packit 40b132
CERTAuthKeyID *
Packit 40b132
SECU_FindCRLAuthKeyIDExten (PLArenaPool *arena, CERTSignedCrl *crl);
Packit 40b132
Packit 40b132
/*
Packit 40b132
 * Find the issuer of a crl. Cert usage should be checked before signing a crl.
Packit 40b132
 */
Packit 40b132
CERTCertificate *
Packit 40b132
SECU_FindCrlIssuer(CERTCertDBHandle *dbHandle, SECItem* subject,
Packit 40b132
                   CERTAuthKeyID* id, PRTime validTime);
Packit 40b132
Packit 40b132
Packit 40b132
/* call back function used in encoding of an extension. Called from
Packit 40b132
 * SECU_EncodeAndAddExtensionValue */
Packit 40b132
typedef SECStatus (* EXTEN_EXT_VALUE_ENCODER) (PLArenaPool *extHandleArena,
Packit 40b132
                                               void *value, SECItem *encodedValue);
Packit 40b132
Packit 40b132
/* Encodes and adds extensions to the CRL or CRL entries. */
Packit 40b132
SECStatus 
Packit 40b132
SECU_EncodeAndAddExtensionValue(PLArenaPool *arena, void *extHandle, 
Packit 40b132
                                void *value, PRBool criticality, int extenType, 
Packit 40b132
                                EXTEN_EXT_VALUE_ENCODER EncodeValueFn);
Packit 40b132
Packit 40b132
/* Caller ensures that dst is at least item->len*2+1 bytes long */
Packit 40b132
void
Packit 40b132
SECU_SECItemToHex(const SECItem * item, char * dst);
Packit 40b132
Packit 40b132
/* Requires 0x prefix. Case-insensitive. Will do in-place replacement if
Packit 40b132
 * successful */
Packit 40b132
SECStatus
Packit 40b132
SECU_SECItemHexStringToBinary(SECItem* srcdest);
Packit 40b132
Packit 40b132
/* Parse a version range string, with "min" and "max" version numbers,
Packit 40b132
 * separated by colon (":"), and return the result in vr and v2.
Packit 40b132
 *
Packit 40b132
 * Both min and max values are optional.
Packit 40b132
 * The following syntax is used to specify the enabled protocol versions:
Packit 40b132
 * A string with only a max value is expected as ":{max}",
Packit 40b132
 * and all implemented versions less than or equal to max will be enabled.
Packit 40b132
 * A string with only a min value is expected as "{min}:",
Packit 40b132
 * and all implemented versions greater than or equal to min will be enabled.
Packit 40b132
 * A string consisting of a colon only means "all versions enabled".
Packit 40b132
 *
Packit 40b132
 * Because output parameter type SSLVersionRange doesn't allow to set
Packit 40b132
 * version 2 values, we use a separate boolean output parameter
Packit 40b132
 * to return whether SSL 2 is enabled.
Packit 40b132
 *
Packit 40b132
 * In order to avoid a link dependency from libsectool to libssl,
Packit 40b132
 * the caller must provide the desired default values for the min/max values,
Packit 40b132
 * by providing defaultEnableSSL2 and defaultVersionRange
Packit 40b132
 * (which can be obtained from libssl by calling SSL_VersionRangeGetSupported).
Packit 40b132
 */
Packit 40b132
SECStatus
Packit 40b132
SECU_ParseSSLVersionRangeString(const char *input,
Packit 40b132
                                const SSLVersionRange defaultVersionRange,
Packit 40b132
                                const PRBool defaultEnableSSL2,
Packit 40b132
                                SSLVersionRange *vrange,
Packit 40b132
                                PRBool *enableSSL2);
Packit 40b132
Packit 40b132
/*
Packit 40b132
 *
Packit 40b132
 *  Error messaging
Packit 40b132
 *
Packit 40b132
 */
Packit 40b132
Packit 40b132
void printflags(char *trusts, unsigned int flags);
Packit 40b132
Packit 40b132
#if !defined(XP_UNIX) && !defined(XP_OS2)
Packit 40b132
extern int ffs(unsigned int i);
Packit 40b132
#endif
Packit 40b132
Packit 40b132
/* Finds certificate by searching it in the DB or by examinig file
Packit 40b132
 * in the local directory. */
Packit 40b132
CERTCertificate*
Packit 40b132
SECU_FindCertByNicknameOrFilename(CERTCertDBHandle *handle,
Packit 40b132
                                  char *name, PRBool ascii,
Packit 40b132
                                  void *pwarg);
Packit 40b132
#include "secerr.h"
Packit 40b132
#include "sslerr.h"
Packit 40b132
Packit 40b132
#endif /* _SEC_UTIL_H_ */