Back to index

lightning-sunbird  0.9+nobinonly
nsCMS.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is Mozilla Communicator.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corp..
00019  * Portions created by the Initial Developer are Copyright (C) 2001
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s): David Drinan <ddrinan@netscape.com>
00023  *   Kai Engert <kengert@redhat.com>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either the GNU General Public License Version 2 or later (the "GPL"), or
00027  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #ifndef __NS_CMS_H__
00040 #define __NS_CMS_H__
00041 
00042 #include "nsISupports.h"
00043 #include "nsCOMPtr.h"
00044 #include "nsXPIDLString.h"
00045 #include "nsIInterfaceRequestor.h"
00046 #include "nsICMSMessage.h"
00047 #include "nsICMSMessage2.h"
00048 #include "nsIX509Cert3.h"
00049 #include "nsVerificationJob.h"
00050 #include "nsICMSEncoder.h"
00051 #include "nsICMSDecoder.h"
00052 #include "sechash.h"
00053 #include "cms.h"
00054 #include "nsNSSShutDown.h"
00055 
00056 #define NS_CMSMESSAGE_CLASSNAME "CMS Message Object"
00057 #define NS_CMSMESSAGE_CID \
00058   { 0xa4557478, 0xae16, 0x11d5, { 0xba,0x4b,0x00,0x10,0x83,0x03,0xb1,0x17 } }
00059 
00060 class nsCMSMessage : public nsICMSMessage,
00061                      public nsICMSMessage2,
00062                      public nsNSSShutDownObject
00063 {
00064 public:
00065   NS_DECL_ISUPPORTS
00066   NS_DECL_NSICMSMESSAGE
00067   NS_DECL_NSICMSMESSAGE2
00068 
00069   nsCMSMessage();
00070   nsCMSMessage(NSSCMSMessage* aCMSMsg);
00071   virtual ~nsCMSMessage();
00072   
00073   void referenceContext(nsIInterfaceRequestor* aContext) {m_ctx = aContext;}
00074   NSSCMSMessage* getCMS() {return m_cmsMsg;};
00075 private:
00076   nsCOMPtr<nsIInterfaceRequestor> m_ctx;
00077   NSSCMSMessage * m_cmsMsg;
00078   NSSCMSSignerInfo* GetTopLevelSignerInfo();
00079   nsresult CommonVerifySignature(unsigned char* aDigestData, PRUint32 aDigestDataLen);
00080 
00081   nsresult CommonAsyncVerifySignature(nsISMimeVerificationListener *aListener,
00082                                       unsigned char* aDigestData, PRUint32 aDigestDataLen);
00083 
00084   virtual void virtualDestroyNSSReference();
00085   void destructorSafeDestroyNSSReference();
00086 
00087 friend class nsSMimeVerificationJob;
00088 };
00089 
00090 // ===============================================
00091 // nsCMSDecoder - implementation of nsICMSDecoder
00092 // ===============================================
00093 
00094 #define NS_CMSDECODER_CLASSNAME "CMS Decoder Object"
00095 #define NS_CMSDECODER_CID \
00096   { 0x9dcef3a4, 0xa3bc, 0x11d5, { 0xba, 0x47, 0x00, 0x10, 0x83, 0x03, 0xb1, 0x17 } }
00097 
00098 class nsCMSDecoder : public nsICMSDecoder,
00099                      public nsNSSShutDownObject
00100 {
00101 public:
00102   NS_DECL_ISUPPORTS
00103   NS_DECL_NSICMSDECODER
00104 
00105   nsCMSDecoder();
00106   virtual ~nsCMSDecoder();
00107 
00108 private:
00109   nsCOMPtr<nsIInterfaceRequestor> m_ctx;
00110   NSSCMSDecoderContext *m_dcx;
00111   virtual void virtualDestroyNSSReference();
00112   void destructorSafeDestroyNSSReference();
00113 };
00114 
00115 // ===============================================
00116 // nsCMSEncoder - implementation of nsICMSEncoder
00117 // ===============================================
00118 
00119 #define NS_CMSENCODER_CLASSNAME "CMS Decoder Object"
00120 #define NS_CMSENCODER_CID \
00121   { 0xa15789aa, 0x8903, 0x462b, { 0x81, 0xe9, 0x4a, 0xa2, 0xcf, 0xf4, 0xd5, 0xcb } }
00122 class nsCMSEncoder : public nsICMSEncoder,
00123                      public nsNSSShutDownObject
00124 {
00125 public:
00126   NS_DECL_ISUPPORTS
00127   NS_DECL_NSICMSENCODER
00128 
00129   nsCMSEncoder();
00130   virtual ~nsCMSEncoder();
00131 
00132 private:
00133   nsCOMPtr<nsIInterfaceRequestor> m_ctx;
00134   NSSCMSEncoderContext *m_ecx;
00135   virtual void virtualDestroyNSSReference();
00136   void destructorSafeDestroyNSSReference();
00137 };
00138 
00139 #endif