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

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 _PKCS12T_H_
  34. #define _PKCS12T_H_
  35. #include "seccomon.h"
  36. #include "secoid.h"
  37. #include "cert.h"
  38. #include "key.h"
  39. #include "plarena.h"
  40. #include "secpkcs7.h"
  41. #include "secdig.h" /* for SGNDigestInfo */
  42. /* PKCS12 Structures */
  43. typedef struct SEC_PKCS12PFXItemStr SEC_PKCS12PFXItem;
  44. typedef struct SEC_PKCS12MacDataStr SEC_PKCS12MacData;
  45. typedef struct SEC_PKCS12AuthenticatedSafeStr SEC_PKCS12AuthenticatedSafe;
  46. typedef struct SEC_PKCS12BaggageItemStr SEC_PKCS12BaggageItem;
  47. typedef struct SEC_PKCS12BaggageStr SEC_PKCS12Baggage;
  48. typedef struct SEC_PKCS12Baggage_OLDStr SEC_PKCS12Baggage_OLD;
  49. typedef struct SEC_PKCS12ESPVKItemStr SEC_PKCS12ESPVKItem;
  50. typedef struct SEC_PKCS12PVKSupportingDataStr SEC_PKCS12PVKSupportingData;
  51. typedef struct SEC_PKCS12PVKAdditionalDataStr SEC_PKCS12PVKAdditionalData;
  52. typedef struct SEC_PKCS12SafeContentsStr SEC_PKCS12SafeContents;
  53. typedef struct SEC_PKCS12SafeBagStr SEC_PKCS12SafeBag;
  54. typedef struct SEC_PKCS12PrivateKeyStr SEC_PKCS12PrivateKey;
  55. typedef struct SEC_PKCS12PrivateKeyBagStr SEC_PKCS12PrivateKeyBag;
  56. typedef struct SEC_PKCS12CertAndCRLBagStr SEC_PKCS12CertAndCRLBag;
  57. typedef struct SEC_PKCS12CertAndCRLStr SEC_PKCS12CertAndCRL;
  58. typedef struct SEC_PKCS12X509CertCRLStr SEC_PKCS12X509CertCRL;
  59. typedef struct SEC_PKCS12SDSICertStr SEC_PKCS12SDSICert;
  60. typedef struct SEC_PKCS12SecretStr SEC_PKCS12Secret;
  61. typedef struct SEC_PKCS12SecretAdditionalStr SEC_PKCS12SecretAdditional;
  62. typedef struct SEC_PKCS12SecretItemStr SEC_PKCS12SecretItem;
  63. typedef struct SEC_PKCS12SecretBagStr SEC_PKCS12SecretBag;
  64. typedef SECItem *(* SEC_PKCS12PasswordFunc)(SECItem *args);
  65. /* PKCS12 types */
  66. /* stores shrouded keys */
  67. struct SEC_PKCS12BaggageStr
  68. {
  69.     PRArenaPool     *poolp;
  70.     SEC_PKCS12BaggageItem **bags;
  71.     int luggage_size; /* used locally */
  72. };
  73. /* additional data to be associated with keys. currently there
  74.  * is nothing defined to be stored here.  allows future expansion.
  75.  */
  76. struct SEC_PKCS12PVKAdditionalDataStr
  77. {
  78.     PRArenaPool *poolp;
  79.     SECOidData *pvkAdditionalTypeTag; /* used locally */
  80.     SECItem     pvkAdditionalType;
  81.     SECItem     pvkAdditionalContent;
  82. };
  83. /* cert and other supporting data for private keys.  used
  84.  * for both shrouded and non-shrouded keys.
  85.  */
  86. struct SEC_PKCS12PVKSupportingDataStr
  87. {
  88.     PRArenaPool *poolp;
  89.     SGNDigestInfo  **assocCerts;
  90.     SECItem regenerable;
  91.     SECItem          nickname;
  92.     SEC_PKCS12PVKAdditionalData     pvkAdditional;
  93.     SECItem pvkAdditionalDER;
  94.     SECItem uniNickName;
  95.     /* used locally */
  96.     int nThumbs;
  97. };
  98. /* shrouded key structure.  supports only pkcs8 shrouding
  99.  * currently.
  100.  */
  101. struct SEC_PKCS12ESPVKItemStr
  102. {
  103.     PRArenaPool *poolp; /* used locally */
  104.     SECOidData *espvkTag; /* used locally */
  105.     SECItem espvkOID;
  106.     SEC_PKCS12PVKSupportingData espvkData;
  107.     union
  108.     {
  109. SECKEYEncryptedPrivateKeyInfo *pkcs8KeyShroud;
  110.     } espvkCipherText;
  111.     PRBool duplicate; /* used locally */
  112.     PRBool problem_cert;  /* used locally */
  113.     PRBool single_cert; /* used locally */
  114.     int nCerts; /* used locally */
  115.     SECItem derCert; /* used locally */
  116. };
  117. /* generic bag store for the safe.  safeBagType identifies
  118.  * the type of bag stored.
  119.  */
  120. struct SEC_PKCS12SafeBagStr
  121. {
  122.     PRArenaPool *poolp;
  123.     SECOidData *safeBagTypeTag; /* used locally */
  124.     SECItem     safeBagType;
  125.     union
  126.     {
  127. SEC_PKCS12PrivateKeyBag *keyBag;
  128. SEC_PKCS12CertAndCRLBag *certAndCRLBag;
  129. SEC_PKCS12SecretBag     *secretBag;
  130.     } safeContent;
  131.     SECItem derSafeContent;
  132.     SECItem  safeBagName;
  133.     SECItem uniSafeBagName;
  134. };
  135. /* stores private keys and certificates in a list.  each safebag
  136.  * has an ID identifying the type of content stored.
  137.  */
  138. struct SEC_PKCS12SafeContentsStr
  139. {
  140.     PRArenaPool      *poolp;
  141.     SEC_PKCS12SafeBag **contents;
  142.     /* used for tracking purposes */
  143.     int safe_size;
  144.     PRBool old;
  145.     PRBool swapUnicode;
  146.     PRBool possibleSwapUnicode;
  147. };
  148. /* private key structure which holds encrypted private key and
  149.  * supporting data including nickname and certificate thumbprint.
  150.  */
  151. struct SEC_PKCS12PrivateKeyStr
  152. {
  153.     PRArenaPool *poolp;
  154.     SEC_PKCS12PVKSupportingData pvkData;
  155.     SECKEYPrivateKeyInfo pkcs8data;   /* borrowed from PKCS 8 */
  156.     PRBool duplicate; /* used locally */
  157.     PRBool problem_cert;/* used locally */
  158.     PRBool single_cert; /* used locally */
  159.     int nCerts; /* used locally */
  160.     SECItem derCert; /* used locally */
  161. };
  162. /* private key bag, holds a (null terminated) list of private key
  163.  * structures.
  164.  */
  165. struct SEC_PKCS12PrivateKeyBagStr
  166. {
  167.     PRArenaPool     *poolp;
  168.     SEC_PKCS12PrivateKey  **privateKeys;
  169.     int bag_size; /* used locally */
  170. };
  171. /* container to hold certificates.  currently supports x509
  172.  * and sdsi certificates
  173.  */
  174. struct SEC_PKCS12CertAndCRLStr
  175. {
  176.     PRArenaPool     *poolp;
  177.     SECOidData     *BagTypeTag;    /* used locally */
  178.     SECItem         BagID;
  179.     union
  180.     {
  181.      SEC_PKCS12X509CertCRL *x509;
  182.      SEC_PKCS12SDSICert *sdsi;
  183.     } value;
  184.     SECItem derValue;
  185.     SECItem nickname; /* used locally */
  186.     PRBool duplicate; /* used locally */
  187. };
  188. /* x509 certificate structure. typically holds the der encoding
  189.  * of the x509 certificate.  thumbprint contains a digest of the
  190.  * certificate
  191.  */
  192. struct SEC_PKCS12X509CertCRLStr
  193. {
  194.     PRArenaPool      *poolp;
  195.     SEC_PKCS7ContentInfo certOrCRL;
  196.     SGNDigestInfo thumbprint;
  197.     SECItem *derLeafCert; /* used locally */
  198. };
  199. /* sdsi certificate structure. typically holds the der encoding
  200.  * of the sdsi certificate.  thumbprint contains a digest of the
  201.  * certificate
  202.  */
  203. struct SEC_PKCS12SDSICertStr
  204. {
  205.     PRArenaPool     *poolp;
  206.     SECItem         value;
  207.     SGNDigestInfo   thumbprint;
  208. };
  209. /* contains a null terminated list of certs and crls */
  210. struct SEC_PKCS12CertAndCRLBagStr
  211. {
  212.     PRArenaPool      *poolp;
  213.     SEC_PKCS12CertAndCRL **certAndCRLs;
  214.     int bag_size; /* used locally */
  215. };
  216. /* additional secret information.  currently no information
  217.  * stored in this structure.
  218.  */
  219. struct SEC_PKCS12SecretAdditionalStr
  220. {
  221.     PRArenaPool     *poolp;
  222.     SECOidData     *secretTypeTag;         /* used locally */
  223.     SECItem         secretAdditionalType;
  224.     SECItem         secretAdditionalContent;
  225. };
  226. /* secrets container.  this will be used to contain currently
  227.  * unspecified secrets.  (it's a secret)
  228.  */
  229. struct SEC_PKCS12SecretStr
  230. {
  231.     PRArenaPool     *poolp;
  232.     SECItem secretName;
  233.     SECItem value;
  234.     SEC_PKCS12SecretAdditional secretAdditional;
  235.     SECItem uniSecretName;
  236. };
  237. struct SEC_PKCS12SecretItemStr
  238. {
  239.     PRArenaPool     *poolp;
  240.     SEC_PKCS12Secret secret;
  241.     SEC_PKCS12SafeBag subFolder;
  242. };    
  243. /* a bag of secrets.  holds a null terminated list of secrets.
  244.  */
  245. struct SEC_PKCS12SecretBagStr
  246. {
  247.     PRArenaPool      *poolp;
  248.     SEC_PKCS12SecretItem **secrets;
  249.     int bag_size; /* used locally */
  250. };
  251. struct SEC_PKCS12MacDataStr
  252. {
  253.     SGNDigestInfo safeMac;
  254.     SECItem macSalt;
  255. };
  256. /* outer transfer unit */
  257. struct SEC_PKCS12PFXItemStr
  258. {
  259.     PRArenaPool *poolp;
  260.     SEC_PKCS12MacData macData;
  261.     SEC_PKCS7ContentInfo authSafe; 
  262.     /* for compatibility with beta */
  263.     PRBool old;
  264.     SGNDigestInfo  old_safeMac;
  265.     SECItem old_macSalt;
  266.     /* compatibility between platforms for unicode swapping */
  267.     PRBool swapUnicode;
  268. };
  269. struct SEC_PKCS12BaggageItemStr {
  270.     PRArenaPool     *poolp;
  271.     SEC_PKCS12ESPVKItem **espvks;
  272.     SEC_PKCS12SafeBag **unencSecrets;
  273.     int nEspvks;
  274.     int nSecrets; 
  275. };
  276.     
  277. /* stores shrouded keys */
  278. struct SEC_PKCS12Baggage_OLDStr
  279. {
  280.     PRArenaPool     *poolp;
  281.     SEC_PKCS12ESPVKItem **espvks;
  282.     int luggage_size; /* used locally */
  283. };
  284. /* authenticated safe, stores certs, keys, and shrouded keys */
  285. struct SEC_PKCS12AuthenticatedSafeStr
  286. {
  287.     PRArenaPool     *poolp;
  288.     SECItem         version;
  289.     SECOidData     *transportTypeTag; /* local not part of encoding*/
  290.     SECItem         transportMode;
  291.     SECItem         privacySalt;
  292.     SEC_PKCS12Baggage   baggage;
  293.     SEC_PKCS7ContentInfo  *safe;
  294.     /* used for beta compatibility */
  295.     PRBool old;
  296.     PRBool emptySafe;
  297.     SEC_PKCS12Baggage_OLD old_baggage;
  298.     SEC_PKCS7ContentInfo old_safe;
  299.     PRBool swapUnicode;
  300. };
  301. #define SEC_PKCS12_PFX_VERSION 1 /* what we create */
  302. /* PKCS 12 Templates */
  303. extern const SEC_ASN1Template SEC_PKCS12PFXItemTemplate_OLD[];
  304. extern const SEC_ASN1Template SEC_PKCS12AuthenticatedSafeTemplate_OLD[];
  305. extern const SEC_ASN1Template SEC_PKCS12BaggageTemplate_OLD[];
  306. extern const SEC_ASN1Template SEC_PKCS12PFXItemTemplate[];
  307. extern const SEC_ASN1Template SEC_PKCS12MacDataTemplate[];
  308. extern const SEC_ASN1Template SEC_PKCS12AuthenticatedSafeTemplate[];
  309. extern const SEC_ASN1Template SEC_PKCS12BaggageTemplate[];
  310. extern const SEC_ASN1Template SEC_PKCS12ESPVKItemTemplate[];
  311. extern const SEC_ASN1Template SEC_PKCS12PVKSupportingDataTemplate[];
  312. extern const SEC_ASN1Template SEC_PKCS12PVKAdditionalTemplate[];
  313. extern const SEC_ASN1Template SEC_PKCS12SafeContentsTemplate_OLD[];
  314. extern const SEC_ASN1Template SEC_PKCS12SafeContentsTemplate[];
  315. extern const SEC_ASN1Template SEC_PKCS12SafeBagTemplate[];
  316. extern const SEC_ASN1Template SEC_PKCS12PrivateKeyTemplate[];
  317. extern const SEC_ASN1Template SEC_PKCS12PrivateKeyBagTemplate[];
  318. extern const SEC_ASN1Template SEC_PKCS12CertAndCRLTemplate[];
  319. extern const SEC_ASN1Template SEC_PKCS12CertAndCRLBagTemplate[];
  320. extern const SEC_ASN1Template SEC_PKCS12X509CertCRLTemplate_OLD[];
  321. extern const SEC_ASN1Template SEC_PKCS12X509CertCRLTemplate[];
  322. extern const SEC_ASN1Template SEC_PKCS12SDSICertTemplate[];
  323. extern const SEC_ASN1Template SEC_PKCS12SecretBagTemplate[];
  324. extern const SEC_ASN1Template SEC_PKCS12SecretTemplate[];
  325. extern const SEC_ASN1Template SEC_PKCS12SecretItemTemplate[];
  326. extern const SEC_ASN1Template SEC_PKCS12SecretAdditionalTemplate[];
  327. extern const SEC_ASN1Template SGN_DigestInfoTemplate[];
  328. extern const SEC_ASN1Template SEC_PointerToPKCS12KeyBagTemplate[];
  329. extern const SEC_ASN1Template SEC_PointerToPKCS12CertAndCRLBagTemplate[];
  330. extern const SEC_ASN1Template SEC_PointerToPKCS12CertAndCRLBagTemplate_OLD[];
  331. extern const SEC_ASN1Template SEC_PointerToPKCS12SecretBagTemplate[];
  332. extern const SEC_ASN1Template SEC_PointerToPKCS12X509CertCRLTemplate_OLD[];
  333. extern const SEC_ASN1Template SEC_PointerToPKCS12X509CertCRLTemplate[];
  334. extern const SEC_ASN1Template SEC_PointerToPKCS12SDSICertTemplate[];
  335. extern const SEC_ASN1Template SEC_PKCS12CodedSafeBagTemplate[];
  336. extern const SEC_ASN1Template SEC_PKCS12CodedCertBagTemplate[];
  337. extern const SEC_ASN1Template SEC_PKCS12CodedCertAndCRLBagTemplate[];
  338. extern const SEC_ASN1Template SEC_PKCS12PVKSupportingDataTemplate_OLD[];
  339. extern const SEC_ASN1Template SEC_PKCS12ESPVKItemTemplate_OLD[];
  340. #endif