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

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.  * Support routines for PKCS7 implementation, none of which are exported.
  35.  * This file should only contain things that are needed by both the
  36.  * encoding/creation side *and* the decoding/decryption side.  Anything
  37.  * else should just be static routines in the appropriate file.
  38.  *
  39.  * Do not export this file!  If something in here is really needed outside
  40.  * of pkcs7 code, first try to add a PKCS7 interface which will do it for
  41.  * you.  If that has a problem, then just move out what you need, changing
  42.  * its name as appropriate!
  43.  *
  44.  * $Id: p7local.h,v 1.1 2000/03/31 19:16:07 relyea%netscape.com Exp $
  45.  */
  46. #ifndef _P7LOCAL_H_
  47. #define _P7LOCAL_H_
  48. #include "secpkcs7.h"
  49. #include "secasn1t.h"
  50. extern const SEC_ASN1Template sec_PKCS7ContentInfoTemplate[];
  51. /* opaque objects */
  52. typedef struct sec_pkcs7_cipher_object sec_PKCS7CipherObject;
  53. /************************************************************************/
  54. SEC_BEGIN_PROTOS
  55. /*
  56.  * Look through a set of attributes and find one that matches the
  57.  * specified object ID.  If "only" is true, then make sure that
  58.  * there is not more than one attribute of the same type.  Otherwise,
  59.  * just return the first one found. (XXX Does anybody really want
  60.  * that first-found behavior?  It was like that when I found it...)
  61.  */
  62. extern SEC_PKCS7Attribute *sec_PKCS7FindAttribute (SEC_PKCS7Attribute **attrs,
  63.    SECOidTag oidtag,
  64.    PRBool only);
  65. /*
  66.  * Return the single attribute value, doing some sanity checking first:
  67.  * - Multiple values are *not* expected.
  68.  * - Empty values are *not* expected.
  69.  */
  70. extern SECItem *sec_PKCS7AttributeValue (SEC_PKCS7Attribute *attr);
  71. /*
  72.  * Encode a set of attributes (found in "src").
  73.  */
  74. extern SECItem *sec_PKCS7EncodeAttributes (PRArenaPool *poolp,
  75.    SECItem *dest, void *src);
  76. /*
  77.  * Make sure that the order of the attributes guarantees valid DER
  78.  * (which must be in lexigraphically ascending order for a SET OF);
  79.  * if reordering is necessary it will be done in place (in attrs).
  80.  */
  81. extern SECStatus sec_PKCS7ReorderAttributes (SEC_PKCS7Attribute **attrs);
  82. /*
  83.  * Create a context for decrypting, based on the given key and algorithm.
  84.  */
  85. extern sec_PKCS7CipherObject *
  86. sec_PKCS7CreateDecryptObject (PK11SymKey *key, SECAlgorithmID *algid);
  87. /*
  88.  * Create a context for encrypting, based on the given key and algorithm,
  89.  * and fill in the algorithm id.
  90.  */
  91. extern sec_PKCS7CipherObject *
  92. sec_PKCS7CreateEncryptObject (PRArenaPool *poolp, PK11SymKey *key,
  93.       SECOidTag algtag, SECAlgorithmID *algid);
  94. /*
  95.  * Destroy the given decryption or encryption object.
  96.  */
  97. extern void sec_PKCS7DestroyDecryptObject (sec_PKCS7CipherObject *obj);
  98. extern void sec_PKCS7DestroyEncryptObject (sec_PKCS7CipherObject *obj);
  99. /*
  100.  * What will be the output length of the next call to encrypt/decrypt?
  101.  * Result can be used to perform memory allocations.  Note that the amount
  102.  * is exactly accurate only when not doing a block cipher or when final
  103.  * is false, otherwise it is an upper bound on the amount because until
  104.  * we see the data we do not know how many padding bytes there are
  105.  * (always between 1 and the cipher block size).
  106.  *
  107.  * Note that this can return zero, which does not mean that the cipher
  108.  * operation can be skipped!  (It simply means that there are not enough
  109.  * bytes to make up an entire block; the bytes will be reserved until
  110.  * there are enough to encrypt/decrypt at least one block.)  However,
  111.  * if zero is returned it *does* mean that no output buffer need be
  112.  * passed in to the subsequent cipher operation, as no output bytes
  113.  * will be stored.
  114.  */
  115. extern unsigned int sec_PKCS7DecryptLength (sec_PKCS7CipherObject *obj,
  116.     unsigned int input_len,
  117.     PRBool final);
  118. extern unsigned int sec_PKCS7EncryptLength (sec_PKCS7CipherObject *obj,
  119.     unsigned int input_len,
  120.     PRBool final);
  121. /*
  122.  * Decrypt a given length of input buffer (starting at "input" and
  123.  * containing "input_len" bytes), placing the decrypted bytes in
  124.  * "output" and storing the output length in "*output_len_p".
  125.  * "obj" is the return value from sec_PKCS7CreateDecryptObject.
  126.  * When "final" is true, this is the last of the data to be decrypted.
  127.  */ 
  128. extern SECStatus sec_PKCS7Decrypt (sec_PKCS7CipherObject *obj,
  129.    unsigned char *output,
  130.    unsigned int *output_len_p,
  131.    unsigned int max_output_len,
  132.    const unsigned char *input,
  133.    unsigned int input_len,
  134.    PRBool final);
  135. /*
  136.  * Encrypt a given length of input buffer (starting at "input" and
  137.  * containing "input_len" bytes), placing the encrypted bytes in
  138.  * "output" and storing the output length in "*output_len_p".
  139.  * "obj" is the return value from sec_PKCS7CreateEncryptObject.
  140.  * When "final" is true, this is the last of the data to be encrypted.
  141.  */ 
  142. extern SECStatus sec_PKCS7Encrypt (sec_PKCS7CipherObject *obj,
  143.    unsigned char *output,
  144.    unsigned int *output_len_p,
  145.    unsigned int max_output_len,
  146.    const unsigned char *input,
  147.    unsigned int input_len,
  148.    PRBool final);
  149. /* return the correct kea template based on the template selector. skipjack
  150.  * does not have the extra IV.
  151.  */
  152. const SEC_ASN1Template * 
  153. sec_pkcs7_get_kea_template(SECKEATemplateSelector whichTemplate);
  154. /************************************************************************/
  155. SEC_END_PROTOS
  156. #endif /* _P7LOCAL_H_ */