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

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. /*
  34.  * All the data structures for Software fortezza are internal only.
  35.  * The external API for Software fortezza is MACI (which is only used by
  36.  * the PKCS #11 module.
  37.  */
  38. #ifndef _SWFORTTI_H_
  39. #define _SWFORTTI_H_
  40. #include "maci.h"
  41. #include "seccomon.h"
  42. #include "mcom_db.h"  /* really should be included by certt.h */
  43. #include "certt.h"
  44. #include "keyt.h"
  45. #include "swfortt.h"
  46. /* the following parameters are tunable. The bigger the key registers are,
  47.  * the less likely the PKCS #11 module will thrash. */
  48. #define KEY_REGISTERS 100
  49. #define MAX_RA_SLOTS 20
  50. /* SKIPJACK algorithm constants */
  51. #define SKIPJACK_KEY_SIZE 10
  52. #define SKIPJACK_BLOCK_SIZE 8
  53. #define SKIPJACK_LEAF_SIZE 16
  54. /* private typedefs */
  55. typedef unsigned char FORTSkipjackKey[SKIPJACK_KEY_SIZE];
  56. typedef unsigned char *FORTSkipjackKeyPtr;
  57. typedef unsigned char fortRaPrivate[20];
  58. typedef unsigned char *fortRaPrivatePtr;
  59. /* save a public/private key pair */
  60. struct FORTRaRegistersStr {
  61.     CI_RA public;
  62.     fortRaPrivate private;
  63. };
  64. /* FORTEZZA Key Register */
  65. struct FORTKeySlotStr {
  66.     FORTSkipjackKey data;
  67.     PRBool   present;
  68. };
  69. /* structure to hole private key information */
  70. struct fortKeyInformationStr {
  71.     SECItem keyFlags;
  72.     SECItem privateKeyWrappedWithKs;
  73.     SECItem     derPublicKey;
  74.     SECItem p;
  75.     SECItem g;
  76.     SECItem q;
  77. };
  78. /* struture to hole Ks wrapped data */
  79. struct fortProtectedDataStr {
  80.     SECItem length;
  81.     SECItem dataIV;
  82.     SECItem dataEncryptedWithKs;
  83. };
  84. /* This structure represents a fortezza personality */
  85. struct fortSlotEntryStr {
  86.     SECItem trusted;
  87.     SECItem certificateIndex;
  88.     int  certIndex;
  89.     fortProtectedData certificateLabel;
  90.     fortProtectedData certificateData;
  91.     fortKeyInformation *exchangeKeyInformation;
  92.     fortKeyInformation *signatureKeyInformation;
  93. };
  94. /* this structure represents a K value wrapped by a protected pin */
  95. struct fortProtectedPhraseStr {
  96.     SECItem kValueIV;
  97.     SECItem wrappedKValue;
  98.     SECItem memPhraseIV;
  99.     SECItem hashedEncryptedMemPhrase;
  100. };
  101. /* This structure represents all the relevant data stored in a der encoded
  102.  * fortezza slot file. */
  103. struct FORTSWFileStr {
  104.     PRArenaPool *arena;
  105.     SECItem version;
  106.     SECItem derIssuer;
  107.     SECItem serialID;
  108.     fortProtectedPhrase initMemPhrase;
  109. #define fortezzaPhrase initMemPhrase 
  110.     fortProtectedPhrase ssoMemPhrase;
  111.     fortProtectedPhrase userMemPhrase;
  112.     fortProtectedPhrase ssoPinPhrase;
  113.     fortProtectedPhrase userPinPhrase;
  114.     SECItem wrappedRandomSeed;
  115.     fortSlotEntry **slotEntries;
  116. };
  117. /* This data structed represents a signed data structure */
  118. struct FORTSignedSWFileStr {
  119.     FORTSWFile  file;
  120.     CERTSignedData signatureWrap;
  121.     FORTSkipjackKeyPtr Kinit;
  122.     FORTSkipjackKeyPtr Ks;
  123. };
  124. /* collect all the data that makes up a token */
  125. struct FORTSWTokenStr {
  126.     PRBool login;        /* has this token been logged in? */
  127.     int lock;        /* the current lock state */
  128.     int certIndex;        /* index of the current personality */
  129.     int key;        /* currently selected key */
  130.     int nextRa;        /* where the next Ra/ra pair will go */
  131.     FORTSWFile *config_file;           /* parsed Fortezza Config file */
  132.     unsigned char IV[SKIPJACK_BLOCK_SIZE];
  133.     FORTKeySlot keyReg[KEY_REGISTERS]; /* sw fortezza key slots */
  134.     FORTRaRegisters RaValues[MAX_RA_SLOTS];  /* Ra/ra values */
  135. };
  136. #endif