swforti.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.  * Software implementation of FORTEZZA Skipjack primatives and helper functions.
  35.  */
  36. #ifndef _SWFORTI_H_
  37. #define _SWFORTI_H_
  38. #ifndef RETURN_TYPE
  39. #define RETURN_TYPE int
  40. #endif
  41. #include "seccomon.h"
  42. #include "swfort.h"
  43. #include "swfortti.h"
  44. #include "maci.h"
  45. SEC_BEGIN_PROTOS
  46. /*
  47.  * Check to see if the index is ok, and that key is appropriately present or
  48.  * absent.
  49.  */
  50. int fort_KeyOK(FORTSWToken *token, int index, PRBool isPresent);
  51. /*
  52.  * clear out a key register
  53.  */
  54. void fort_ClearKey(FORTKeySlot *key);
  55. /*
  56.  * clear out an Ra register
  57.  */
  58. void fort_ClearRaSlot(FORTRaRegisters *ra);
  59. /*
  60.  * provide a helper function to do all the loggin out functions.
  61.  * NOTE: Logging in only happens in MACI_CheckPIN
  62.  */
  63. void fort_Logout(FORTSWToken *token);
  64. /*
  65.  * update the new IV value based on the current cipherText (should be the last 
  66.  * block of the cipher text).
  67.  */
  68. int fort_UpdateIV(unsigned char *cipherText, unsigned int size,unsigned char *IV);
  69. /*
  70.  * verify that we have a card initialized, and if necessary, logged in.
  71.  */
  72. int fort_CardExists(FORTSWToken *token,PRBool needLogin);
  73. /*
  74.  * walk down the cert slot entries, counting them.
  75.  * return that count.
  76.  */
  77. int fort_GetCertCount(FORTSWFile *file);
  78. /*
  79.  * copy an unsigned SECItem to a signed SecItem. (if the high bit is on,
  80.  * pad with a leading 0.
  81.  */
  82. SECStatus fort_CopyUnsigned(PRArenaPool *arena, SECItem *to, const SECItem *from);
  83. /*
  84.  * NOTE: these keys do not have the public values, and cannot be used to
  85.  * extract the public key from the private key. Since we never do this in
  86.  * this code, and this function is private, we're reasonably safe (as long as
  87.  * any of your callees do not try to extract the public value as well).
  88.  * Also -- the token must be logged in before this function is called.
  89.  */
  90. SECKEYLowPrivateKey * fort_GetPrivKey(FORTSWToken *token,KeyType keyType,fortSlotEntry *certEntry);
  91. /*
  92.  * find a particulare certificate entry from the config
  93.  * file.
  94.  */
  95. fortSlotEntry * fort_GetCertEntry(FORTSWFile *file,int index);
  96. /*
  97.  * use the token to termine it's CI_State.
  98.  */
  99. CI_STATE fort_GetState(FORTSWToken *token);
  100. /*
  101.  * find the private ra value for a given public Ra value.
  102.  */
  103. fortRaPrivatePtr fort_LookupPrivR(FORTSWToken *token,CI_RA Ra);
  104. /*
  105.  * go add more noise to the random number generator
  106.  */
  107. void fort_AddNoise(void);
  108. /*
  109.  * Get a random number
  110.  */
  111. int fort_GenerateRandom(unsigned char *buf, int bytes);
  112. /*
  113.  * We're deep in the bottom of MACI and PKCS #11... We need to
  114.  * find our fortezza key file. This function lets us search manual paths to 
  115.  * find our key file.
  116.  */
  117. char *fort_FindFileInPath(char *path, char *fn);
  118. char *fort_LookupFORTEZZAInitFile(void);
  119. FORTSkipjackKeyPtr fort_CalculateKMemPhrase(FORTSWFile *file, 
  120.   fortProtectedPhrase * prot_phrase, char *phrase, FORTSkipjackKeyPtr wrapKey);
  121. PRBool fort_CheckMemPhrase(FORTSWFile *file, 
  122.   fortProtectedPhrase * prot_phrase, char *phrase, FORTSkipjackKeyPtr wrapKey);
  123. /* These function actually implements skipjack CBC64 Decrypt */
  124. int fort_skipjackDecrypt(FORTSkipjackKeyPtr key, unsigned char *iv, 
  125. unsigned long size, unsigned char *cipherIn, 
  126. unsigned char *plainOut);
  127. /* These function actually implements skipjack CBC64 Encrypt */
  128. int fort_skipjackEncrypt(FORTSkipjackKeyPtr key, unsigned char *iv, 
  129. unsigned long size, unsigned char *plainIn, 
  130. unsigned char *cipherOut);
  131. /*
  132.  * unwrap is used for key generation and mixing
  133.  */
  134. int fort_skipjackUnwrap(FORTSkipjackKeyPtr key,unsigned long len, 
  135. unsigned char *cipherIn, unsigned char *plainOut);
  136. /*
  137.  * unwrap is used for key generation and mixing
  138.  */
  139. int
  140. fort_skipjackWrap(FORTSkipjackKeyPtr key,unsigned long len, 
  141. unsigned char *plainIn, unsigned char *cipherOut);
  142. SEC_END_PROTOS
  143. #endif