h235auth.h

Go to the documentation of this file.
00001 /*
00002  * h235auth.h
00003  *
00004  * H.235 authorisation PDU's
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Contributor(s): Fürbass Franz <franz.fuerbass@infonova.at>
00025  *
00026  * $Revision: 21293 $
00027  * $Author: rjongbloed $
00028  * $Date: 2008-10-12 23:24:41 +0000 (Sun, 12 Oct 2008) $
00029  */
00030 
00031 #ifndef OPAL_H323_H235AUTH_H
00032 #define OPAL_H323_H235AUTH_H
00033 
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037 
00038 #include <opal/buildopts.h>
00039 
00040 class H323TransactionPDU;
00041 class H225_CryptoH323Token;
00042 class H225_ArrayOf_AuthenticationMechanism;
00043 class H225_ArrayOf_PASN_ObjectId;
00044 class H235_ClearToken;
00045 class H235_AuthenticationMechanism;
00046 class PASN_ObjectId;
00047 class PASN_Sequence;
00048 class PASN_Array;
00049 
00050 namespace PWLibStupidLinkerHacks {
00051 extern int h235AuthLoader;
00052 };
00053 
00057 class H235Authenticator : public PObject
00058 {
00059     PCLASSINFO(H235Authenticator, PObject);
00060   public:
00061     H235Authenticator();
00062 
00063     virtual void PrintOn(
00064       ostream & strm
00065     ) const;
00066 
00067     virtual const char * GetName() const = 0;
00068 
00069     virtual PBoolean PrepareTokens(
00070       PASN_Array & clearTokens,
00071       PASN_Array & cryptoTokens
00072     );
00073 
00074     virtual H235_ClearToken * CreateClearToken();
00075     virtual H225_CryptoH323Token * CreateCryptoToken();
00076 
00077     virtual PBoolean Finalise(
00078       PBYTEArray & rawPDU
00079     );
00080 
00081     enum ValidationResult {
00082       e_OK = 0,     
00083       e_Absent,     
00084       e_Error,      
00085       e_InvalidTime,
00086       e_BadPassword,
00087       e_ReplyAttack,
00088       e_Disabled    
00089     };
00090 
00091     virtual ValidationResult ValidateTokens(
00092       const PASN_Array & clearTokens,
00093       const PASN_Array & cryptoTokens,
00094       const PBYTEArray & rawPDU
00095     );
00096 
00097     virtual ValidationResult ValidateClearToken(
00098       const H235_ClearToken & clearToken
00099     );
00100 
00101     virtual ValidationResult ValidateCryptoToken(
00102       const H225_CryptoH323Token & cryptoToken,
00103       const PBYTEArray & rawPDU
00104     );
00105 
00106     virtual PBoolean IsCapability(
00107       const H235_AuthenticationMechanism & mechansim,
00108       const PASN_ObjectId & algorithmOID
00109     ) = 0;
00110 
00111     virtual PBoolean SetCapability(
00112       H225_ArrayOf_AuthenticationMechanism & mechansims,
00113       H225_ArrayOf_PASN_ObjectId & algorithmOIDs
00114     ) = 0;
00115 
00116     virtual PBoolean UseGkAndEpIdentifiers() const;
00117 
00118     virtual PBoolean IsSecuredPDU(
00119       unsigned rasPDU,
00120       PBoolean received
00121     ) const;
00122 
00123     virtual PBoolean IsActive() const;
00124 
00125     void Enable(
00126       PBoolean enab = PTrue
00127     ) { enabled = enab; }
00128     void Disable() { enabled = PFalse; }
00129 
00130     const PString & GetRemoteId() const { return remoteId; }
00131     void SetRemoteId(const PString & id) { remoteId = id; }
00132 
00133     const PString & GetLocalId() const { return localId; }
00134     void SetLocalId(const PString & id) { localId = id; }
00135 
00136     const PString & GetPassword() const { return password; }
00137     void SetPassword(const PString & pw) { password = pw; }
00138 
00139 
00140   protected:
00141     PBoolean AddCapability(
00142       unsigned mechanism,
00143       const PString & oid,
00144       H225_ArrayOf_AuthenticationMechanism & mechansims,
00145       H225_ArrayOf_PASN_ObjectId & algorithmOIDs
00146     );
00147 
00148     PBoolean     enabled;
00149 
00150     PString  remoteId;      // ID of remote entity
00151     PString  localId;       // ID of local entity
00152     PString  password;      // shared secret
00153 
00154     unsigned sentRandomSequenceNumber;
00155     unsigned lastRandomSequenceNumber;
00156     unsigned lastTimestamp;
00157     int      timestampGracePeriod;
00158 
00159     PMutex mutex;
00160 };
00161 
00162 
00163 PDECLARE_LIST(H235Authenticators, H235Authenticator)
00164   public:
00165     void PreparePDU(
00166       H323TransactionPDU & pdu,
00167       PASN_Array & clearTokens,
00168       unsigned clearOptionalField,
00169       PASN_Array & cryptoTokens,
00170       unsigned cryptoOptionalField
00171     );
00172 
00173     H235Authenticator::ValidationResult ValidatePDU(
00174       const H323TransactionPDU & pdu,
00175       const PASN_Array & clearTokens,
00176       unsigned clearOptionalField,
00177       const PASN_Array & cryptoTokens,
00178       unsigned cryptoOptionalField,
00179       const PBYTEArray & rawPDU
00180     );
00181 };
00182 
00183 
00184 
00185 
00190 class H235AuthSimpleMD5 : public H235Authenticator
00191 {
00192     PCLASSINFO(H235AuthSimpleMD5, H235Authenticator);
00193   public:
00194     H235AuthSimpleMD5();
00195 
00196     PObject * Clone() const;
00197 
00198     virtual const char * GetName() const;
00199 
00200     virtual H225_CryptoH323Token * CreateCryptoToken();
00201 
00202     virtual ValidationResult ValidateCryptoToken(
00203       const H225_CryptoH323Token & cryptoToken,
00204       const PBYTEArray & rawPDU
00205     );
00206 
00207     virtual PBoolean IsCapability(
00208       const H235_AuthenticationMechanism & mechansim,
00209       const PASN_ObjectId & algorithmOID
00210     );
00211 
00212     virtual PBoolean SetCapability(
00213       H225_ArrayOf_AuthenticationMechanism & mechansim,
00214       H225_ArrayOf_PASN_ObjectId & algorithmOIDs
00215     );
00216 
00217     virtual PBoolean IsSecuredPDU(
00218       unsigned rasPDU,
00219       PBoolean received
00220     ) const;
00221 };
00222 
00223 
00230 class H235AuthCAT : public H235Authenticator
00231 {
00232     PCLASSINFO(H235AuthCAT, H235Authenticator);
00233   public:
00234     H235AuthCAT();
00235 
00236     PObject * Clone() const;
00237 
00238     virtual const char * GetName() const;
00239 
00240     virtual H235_ClearToken * CreateClearToken();
00241 
00242     virtual ValidationResult ValidateClearToken(
00243       const H235_ClearToken & clearToken
00244     );
00245 
00246     virtual PBoolean IsCapability(
00247       const H235_AuthenticationMechanism & mechansim,
00248       const PASN_ObjectId & algorithmOID
00249     );
00250 
00251     virtual PBoolean SetCapability(
00252       H225_ArrayOf_AuthenticationMechanism & mechansim,
00253       H225_ArrayOf_PASN_ObjectId & algorithmOIDs
00254     );
00255 
00256     virtual PBoolean IsSecuredPDU(
00257       unsigned rasPDU,
00258       PBoolean received
00259     ) const;
00260 };
00261 
00262 
00263 #if OPAL_PTLIB_SSL
00264 
00265 namespace PWLibStupidLinkerHacks {
00266   extern int h235AuthProcedure1Loader;
00267 };
00268 
00271 class H235AuthProcedure1 : public H235Authenticator
00272 {
00273     PCLASSINFO(H235AuthProcedure1, H235Authenticator);
00274   public:
00275     H235AuthProcedure1();
00276 
00277     PObject * Clone() const;
00278 
00279     virtual const char * GetName() const;
00280 
00281     virtual H225_CryptoH323Token * CreateCryptoToken();
00282 
00283     virtual PBoolean Finalise(
00284       PBYTEArray & rawPDU
00285     );
00286 
00287     virtual ValidationResult ValidateCryptoToken(
00288       const H225_CryptoH323Token & cryptoToken,
00289       const PBYTEArray & rawPDU
00290     );
00291 
00292     virtual PBoolean IsCapability(
00293       const H235_AuthenticationMechanism & mechansim,
00294       const PASN_ObjectId & algorithmOID
00295     );
00296 
00297     virtual PBoolean SetCapability(
00298       H225_ArrayOf_AuthenticationMechanism & mechansim,
00299       H225_ArrayOf_PASN_ObjectId & algorithmOIDs
00300     );
00301 
00302     virtual PBoolean UseGkAndEpIdentifiers() const;
00303 };
00304 
00305 #endif
00306 
00307 
00308 #endif //OPAL_H323_H235AUTH_H
00309 
00310 

Generated on Mon Feb 1 00:25:29 2010 for OPAL by  doxygen 1.5.1