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

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 NSSPKIT_H
  34. #define NSSPKIT_H
  35. #ifdef DEBUG
  36. static const char NSSPKIT_CVS_ID[] = "@(#) $RCSfile: nsspkit.h,v $ $Revision: 1.1 $ $Date: 2000/03/31 19:16:14 $ $Name: NSS_3_1_1_RTM $";
  37. #endif /* DEBUG */
  38. /*
  39.  * nsspkit.h
  40.  *
  41.  * This file defines the types of the top-level PKI objects.
  42.  */
  43. #ifndef NSSBASET_H
  44. #include "nssbaset.h"
  45. #endif /* NSSBASET_H */
  46. PR_BEGIN_EXTERN_C
  47. /*
  48.  * NSSCertificate
  49.  *
  50.  * This is the public representation of a Certificate.  The certificate
  51.  * may be one found on a smartcard or other token, one decoded from data
  52.  * received as part of a protocol, one constructed from constituent
  53.  * parts, etc.  Usually it is associated with ("in") a trust domain; as
  54.  * it can be verified only within a trust domain.  The underlying type
  55.  * of certificate may be of any supported standard, e.g. PKIX, PGP, etc.
  56.  *
  57.  * People speak of "verifying (with) the server's, or correspondant's, 
  58.  * certificate"; for simple operations we support that simplification
  59.  * by implementing public-key crypto operations as methods on this type.
  60.  */
  61. struct NSSCertificateStr;
  62. typedef struct NSSCertificateStr NSSCertificate;
  63. /*
  64.  * NSSUserCertificate
  65.  *
  66.  * A ``User'' certificate is one for which the private key is available.
  67.  * People speak of "using my certificate to sign my email" and "using
  68.  * my certificate to authenticate to (or login to) the server"; for
  69.  * simple operations, we support that simplification by implementing
  70.  * private-key crypto operations as methods on this type.
  71.  *
  72.  * The current design only weakly distinguishes between certificates
  73.  * and user certificates: as far as the compiler goes they're 
  74.  * interchangable; debug libraries only have one common pointer-tracker;
  75.  * etc.  However, attempts to do private-key operations on a certificate
  76.  * for which the private key is not available will fail.
  77.  *
  78.  * Open design question: should these types be more firmly separated?
  79.  */
  80. typedef NSSCertificate NSSUserCertificate;
  81. /*
  82.  * NSSPrivateKey
  83.  *
  84.  * This is the public representation of a Private Key.  In general,
  85.  * the actual value of the key is not available, but operations may
  86.  * be performed with it.
  87.  */
  88. struct NSSPrivateKeyStr;
  89. typedef struct NSSPrivateKeyStr NSSPrivateKey;
  90. /*
  91.  * NSSPublicKey
  92.  *
  93.  */
  94. struct NSSPublicKeyStr;
  95. typedef struct NSSPublicKeyStr NSSPublicKey;
  96. /*
  97.  * NSSSymmetricKey
  98.  *
  99.  */
  100. struct NSSSymmetricKeyStr;
  101. typedef struct NSSSymmetricKeyStr NSSSymmetricKey;
  102. /*
  103.  * NSSTrustDomain
  104.  *
  105.  * A Trust Domain is the field in which certificates may be validated.
  106.  * A trust domain will generally have one or more cryptographic modules
  107.  * open; these modules perform the cryptographic operations, and 
  108.  * provide the basic "root" trust information from which the trust in
  109.  * a specific certificate or key depends.
  110.  *
  111.  * A client program, or a simple server, would typically have one
  112.  * trust domain.  A server supporting multiple "virtual servers" might
  113.  * have a separate trust domain for each virtual server.  The separate
  114.  * trust domains might share some modules (e.g., a hardware crypto
  115.  * accelerator) but not others (e.g., the tokens storing the different
  116.  * servers' private keys, or the databases with each server's trusted
  117.  * root certificates).
  118.  *
  119.  * This object descends from the "permananet database" in the old code.
  120.  */
  121. struct NSSTrustDomainStr;
  122. typedef struct NSSTrustDomainStr NSSTrustDomain;
  123. /*
  124.  * NSSCryptoContext
  125.  *
  126.  * A Crypto Context is a short-term, "helper" object which is used
  127.  * for the lifetime of one ongoing "crypto operation."  Such an
  128.  * operation may be the creation of a signed message, the use of an
  129.  * TLS socket connection, etc.  Each crypto context is "in" a
  130.  * specific trust domain, and it may have associated with it a
  131.  * distinguished certificate, public key, private key, and/or
  132.  * symmetric key.  It can also temporarily hold and use temporary
  133.  * data (e.g. intermediate certificates) which is not stored
  134.  * permanently in the trust domain.
  135.  *
  136.  * In OO terms, this interface inherits interfaces from the trust
  137.  * domain, the certificates, and the keys.  It also provides
  138.  * streaming crypto operations.
  139.  *
  140.  * This object descends from the "temporary database" concept in the
  141.  * old code, but it has changed a lot as a result of what we've 
  142.  * learned.
  143.  */
  144. struct NSSCryptoContextStr;
  145. typedef struct NSSCryptoContextStr NSSCryptoContext;
  146. /*
  147.  * fgmr others
  148.  */
  149. /* 
  150.  * NSSTime
  151.  *
  152.  * Unfortunately, we need an "exceptional" value to indicate
  153.  * an error upon return, or "no value" on input.  Note that zero
  154.  * is a perfectly valid value for both time_t and PRTime.
  155.  *
  156.  * If we were to create a "range" object, with two times for
  157.  * Not Before and Not After, we would have an obvious place for
  158.  * the somewhat arbitrary logic involved in comparing them.
  159.  *
  160.  * Failing that, let's have an NSSTime_CompareRanges function.
  161.  */
  162. struct NSSTimeStr;
  163. typedef struct NSSTimeStr NSSTime;
  164. /*
  165.  * NSSUsage
  166.  *
  167.  * This is trickier than originally planned; I'll write up a
  168.  * doc on it.
  169.  *
  170.  * We'd still like nsspki.h to have a list of common usages,
  171.  * e.g.:
  172.  *
  173.  *  extern const NSSUsage *NSSUsage_ClientAuth;
  174.  *  extern const NSSUsage *NSSUsage_ServerAuth;
  175.  *  extern const NSSUsage *NSSUsage_SignEmail;
  176.  *  extern const NSSUsage *NSSUsage_EncryptEmail;
  177.  *  etc.
  178.  */
  179. struct NSSUsageStr;
  180. typedef struct NSSUsageStr NSSUsage;
  181. /*
  182.  * NSSPolicies
  183.  *
  184.  * Placeholder, for now.
  185.  */
  186. struct NSSPoliciesStr;
  187. typedef struct NSSPoliciesStr NSSPolicies;
  188. /*
  189.  * NSSAlgorithmAndParameters
  190.  *
  191.  * Algorithm is an OID
  192.  * Parameters depend on the algorithm
  193.  */
  194. struct NSSAlgorithmAndParametersStr;
  195. typedef struct NSSAlgorithmAndParametersStr NSSAlgorithmAndParameters;
  196. /*
  197.  * NSSCallback
  198.  *
  199.  * At minimum, a "challenge" method and a closure argument.
  200.  * Usually the challenge will just be prompting for a password.
  201.  * How OO do we want to make it?
  202.  */
  203. struct NSSCallbackStr;
  204. typedef struct NSSCallbackStr NSSCallback;
  205. /*
  206.  * NSSModule and NSSSlot -- placeholders for the PKCS#11 types
  207.  */
  208. struct NSSModuleStr;
  209. typedef struct NSSModuleStr NSSModule;
  210. struct NSSSlotStr;
  211. typedef struct NSSSlotStr NSSSlot;
  212. typedef PRUint32 NSSOperations;
  213. /* 1) Do we want these to be preprocessor definitions or constants? */
  214. /* 2) What is the correct and complete list? */
  215. #define NSSOperations_ENCRYPT           0x0001
  216. #define NSSOperations_DECRYPT           0x0002
  217. #define NSSOperations_WRAP              0x0004
  218. #define NSSOperations_UNWRAP            0x0008
  219. #define NSSOperations_SIGN              0x0010
  220. #define NSSOperations_SIGN_RECOVER      0x0020
  221. #define NSSOperations_VERIFY            0x0040
  222. #define NSSOperations_VERIFY_RECOVER    0x0080
  223. PR_END_EXTERN_C
  224. #endif /* NSSPKIT_H */