/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef _CERTUTIL_H
#define _CERTUTIL_H

extern SECKEYPrivateKey *
CERTUTIL_GeneratePrivateKey(KeyType keytype,
                            PK11SlotInfo *slot,
                            int rsasize,
                            int publicExponent,
                            char *noise,
                            SECKEYPublicKey **pubkeyp,
                            char *pqgFile,
                            PK11AttrFlags attrFlags,
                            CK_FLAGS opFlagsOn,
                            CK_FLAGS opFlagsOff,
                            secuPWData *pwdata);

extern char *progName;

enum certutilExtns {
    ext_keyUsage = 0,
    ext_basicConstraint,
    ext_authorityKeyID,
    ext_CRLDistPts,
    ext_NSCertType,
    ext_extKeyUsage,
    ext_authInfoAcc,
    ext_subjInfoAcc,
    ext_certPolicies,
    ext_policyMappings,
    ext_policyConstr,
    ext_inhibitAnyPolicy,
    ext_subjectKeyID,
    ext_nameConstraints,
    ext_subjectAltName,
    ext_End
};

typedef struct ExtensionEntryStr {
    PRBool activated;
    const char *arg;
} ExtensionEntry;

typedef ExtensionEntry certutilExtnList[ext_End];

extern SECStatus
AddExtensions(void *extHandle, const char *emailAddrs, const char *dnsNames,
              certutilExtnList extList, const char *extGeneric);

extern SECStatus
GetOidFromString(PLArenaPool *arena, SECItem *to,
                 const char *from, size_t fromLen);

#endif /* _CERTUTIL_H */