/*
* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
* YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions and disclaimer are agreed and accepted by the user:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the names of the copyrighters, the name of the project which
* is related to this software (hereinafter referred to as "project") nor
* the names of the contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 4. No merchantable use may be permitted without prior written
* notification to the copyrighters. However, using this software for the
* purpose of testing or evaluating any products including merchantable
* products may be permitted without any notification to the copyrighters.
*
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
* BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* $TAHI: v6eval/lib/Pz/MvFunction.h,v 1.44 2005/05/09 09:35:24 akisada Exp $
*/
#if !defined(__MvFunction_h__)
#define __MvFunction_h__ 1
#include "McObject.h"
class PObject;
//======================================================================
class MvAction:public MvKeyword {
public:
MvAction(CSTR,int32_t);
virtual ~MvAction();
virtual WObject* compose(WControl&,WObject*,const PObject*) const;
};
//----------------------------------------------------------------------
// ANY TOKEN CAN BE RIGHT VALUE OR COMPOUND COMPARISON INDICATOR
class MvANY:public MvAction {
public:
MvANY(CSTR,int32_t);
virtual ~MvANY();
virtual PObject* tokenObject(int,CSTR) const;
virtual WObject* compose(WControl&,WObject*,const PObject*) const;
virtual bool comparableMeta(const MObject*) const;
};
inline bool MvANY::comparableMeta(const MObject*) const {return true;}
//----------------------------------------------------------------------
// STOP TOKEN CAN BE COMPOUND COMPARISON INDICATOR
class MvSTOP:public MvAction {
public:
MvSTOP(CSTR,int32_t);
virtual ~MvSTOP();
virtual PObject* tokenObject(int,CSTR) const;
virtual WObject* compose(WControl&,WObject*,const PObject*) const;
virtual bool comparableMeta(const MObject*) const;
};
inline bool MvSTOP::comparableMeta(const MObject*) const {return true;}
//----------------------------------------------------------------------
class MvAUTO:public MvAction {
public:
MvAUTO(CSTR,int32_t);
virtual ~MvAUTO();
virtual PObject* tokenObject(int,CSTR) const;
};
//----------------------------------------------------------------------
class MvFILL:public MvAction {
public:
MvFILL(CSTR,int32_t);
virtual ~MvFILL();
virtual PObject* tokenObject(int,CSTR) const;
};
//----------------------------------------------------------------------
class MvZERO:public MvAction {
public:
MvZERO(CSTR,int32_t);
virtual ~MvZERO();
virtual PObject* tokenObject(int,CSTR) const;
};
//======================================================================
class MvOperator:public MvKeyword {
private:
uint32_t operation_;
public:
MvOperator(CSTR,int32_t,int32_t);
virtual ~MvOperator();
virtual PObject* tokenObject(int,CSTR) const;
virtual uint32_t operation() const;
};
inline uint32_t MvOperator::operation() const {return operation_;}
class TObject;
class PvEther;
class PvV4Addr;
class PvV6Addr;
class PFunction;
class PvObjectID;
//======================================================================
class MvFunction:public MObject {
private:
public:
MvFunction(CSTR);
virtual ~MvFunction();
virtual int32_t token() const;
virtual PObject* tokenObject(int,CSTR) const;
virtual uint32_t objectLength(const PObject* =0,const WObject* =0) const;
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool functionGenerate(WControl&,WObject*,OCTBUF&,const PObjectList&) const;
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool evaluateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
virtual int32_t compareObject(const PObject&,const PObjectList&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
virtual bool isV6Addr() const;
virtual bool isOctets() const;
// COMPOSE INTERFACE ----------------------------------------------------------
virtual WObject* compose(WControl&,WObject* w_parent,const PObject* pv) const;
// COMPOSE INTERFACE PROTECTED MvFunction* ------------------------------------
protected:
virtual WObject* composeWv(WControl&,WObject* w_parent,const PObject* pv) const;
virtual void args_compose(WControl&,
WObject* w_self,const PObjectList& pas) const;
};
inline uint32_t MvFunction::functionLength(const PObjectList&,const WObject*) const {return 0;}
//======================================================================
class MvWithin:public MvFunction {
public:
MvWithin(CSTR);
virtual ~MvWithin();
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
virtual int32_t compareObject(const PObject&,const PObjectList&) const;
};
//======================================================================
class MvOneof:public MvFunction {
public:
MvOneof(CSTR);
virtual ~MvOneof();
virtual int32_t compareObject(const PObject&,const PObjectList&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
// COMPOSE INTERFACE ----------------------------------------------------------
virtual WObject* composeWv(WControl&,WObject* w_parent,const PObject* pv) const;
virtual void args_compose(WControl&,
WObject* w_self,const PObjectList& pas) const;
};
//======================================================================
class MvComb:public MvFunction {
public:
MvComb(CSTR);
virtual ~MvComb();
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
// COMPOSE INTERFACE ----------------------------------------------------------
virtual WObject* composeWv(WControl&,WObject* w_parent,const PObject* pv) const;
virtual void args_compose(WControl&,
WObject* w_self,const PObjectList& pas) const;
};
//======================================================================
class MvOctets:public MvFunction {
public:
MvOctets(CSTR);
virtual ~MvOctets();
virtual bool functionGenerate(WControl&,WObject*,OCTBUF&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
virtual bool isOctets() const;
};
//======================================================================
class MvRepeat:public MvOctets {
public:
MvRepeat(CSTR);
virtual ~MvRepeat();
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvHexStr: public MvOctets {
public:
MvHexStr(CSTR);
virtual ~MvHexStr();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual bool hex_pton(OCTSTR, uint32_t, CSTR, uint32_t, bool) const;
virtual bool isHexStr(CSTR, uint32_t) const;
};
//======================================================================
class MvInt2Hex: public MvOctets {
public:
MvInt2Hex(CSTR);
virtual ~MvInt2Hex();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
};
//======================================================================
class MvFile: public MvOctets {
public:
MvFile(CSTR);
virtual ~MvFile();
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
};
//======================================================================
class MvSipTxt: public MvFile {
public:
MvSipTxt(CSTR);
virtual ~MvSipTxt();
virtual PvObject *generateValue(WObject *, const PObjectList &) const;
virtual PvObject *evaluateValue(WObject *, const PObjectList &) const;
};
//======================================================================
class MvAscii: public MvOctets {
public:
MvAscii(CSTR);
virtual ~MvAscii();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
virtual PvObject *generateValue(WObject *,
const PObjectList &) const;
virtual PvObject *evaluateValue(WObject *,
const PObjectList &) const;
};
//======================================================================
class MvDnsStr: public MvOctets {
public:
MvDnsStr(CSTR);
virtual ~MvDnsStr();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual PvObject *generateValue(WObject *, const PObjectList &) const;
virtual PvObject *evaluateValue(WObject *, const PObjectList &) const;
};
//======================================================================
class MvDnsName: public MvOctets {
public:
MvDnsName(CSTR);
virtual ~MvDnsName();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual PvObject *generateValue(WObject *, const PObjectList &) const;
virtual PvObject *evaluateValue(WObject *, const PObjectList &) const;
virtual bool isDnsName(CSTR, uint32_t) const;
};
//======================================================================
class MvCookie64: public MvOctets {
public:
MvCookie64(CSTR);
virtual ~MvCookie64();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
virtual PvObject *generateValue(WObject *,
const PObjectList &) const;
virtual PvObject *evaluateValue(WObject *,
const PObjectList &) const;
};
//======================================================================
class MvKbu: public MvOctets {
public:
MvKbu(CSTR);
virtual ~MvKbu();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
};
//======================================================================
class MfBSA: public MvOctets {
public:
MfBSA(CSTR);
virtual ~MfBSA();
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual OCTSTR init(OCTSTR, const PObjectList &) const;
virtual void update(OCTSTR, const PObjectList &, const OCTBUF &) const;
virtual PvOctets *result(OCTSTR, const PObjectList &) const;
virtual int32_t token() const;
virtual PObject *tokenObject(int, CSTR) const;
};
inline int32_t MfBSA::token() const {return metaToken(tkn_bsafunc_);}
//======================================================================
class MfDHCPAuth: public MvOctets {
public:
MfDHCPAuth(CSTR);
virtual ~MfDHCPAuth();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual OCTSTR init(OCTSTR, const PObjectList &) const;
virtual void update(OCTSTR, const PObjectList &, const OCTBUF &) const;
virtual PvOctets *result(OCTSTR, const PObjectList &) const;
virtual int32_t token() const;
virtual PObject *tokenObject(int, CSTR) const;
};
inline int32_t MfDHCPAuth::token() const {return metaToken(tkn_dhcpauthfunc_);}
//======================================================================
class MvSubstr:public MvOctets {
public:
MvSubstr(CSTR);
virtual ~MvSubstr();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateSubstr(WObject*,PObject*,PObject*,PvOctets&) const;
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
// COMPOSE INTERFACE ----------------------------------------------------------
virtual WObject* composeWv(WControl&,WObject* w_parent,const PObject* pv) const;
virtual void args_compose(WControl&,
WObject* w_self,const PObjectList& pas) const;
};
//======================================================================
class MvPatch:public MvSubstr {
public:
MvPatch(CSTR);
virtual ~MvPatch();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvLeft:public MvSubstr {
public:
MvLeft(CSTR);
virtual ~MvLeft();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvRight:public MvSubstr {
public:
MvRight(CSTR);
virtual ~MvRight();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateOctetsWith(const PObjectList&,PvOctets&,WObject*) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV4:public MvFunction {
public:
MvV4(CSTR);
virtual ~MvV4();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateV4Addr(const PObjectList&,PvV4Addr&) const;
virtual bool functionGenerate(WControl&,WObject*,OCTBUF&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
inline uint32_t MvV4::functionLength(const PObjectList&,const WObject*) const {return sizeof(v4addr);}
//======================================================================
class MvEther:public MvFunction {
public:
MvEther(CSTR);
virtual ~MvEther();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool evaluateEther(const PObjectList&,PvEther&) const;
virtual bool generateTN(const PObject*,PvEther&) const;
virtual bool generateNUT(const PObject*,PvEther&) const;
virtual bool functionGenerate(WControl&,WObject*,OCTBUF&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
inline uint32_t MvEther::functionLength(const PObjectList&,const WObject*) const {return sizeof(etheraddr);}
//======================================================================
class MvEtherSRC:public MvEther {
public:
MvEtherSRC(CSTR);
virtual ~MvEtherSRC();
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool evaluateEther(const PObjectList&,PvEther&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvEtherDST:public MvEther {
public:
MvEtherDST(CSTR);
virtual ~MvEtherDST();
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool evaluateEther(const PObjectList&,PvEther&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvEtherNUT:public MvEther {
public:
MvEtherNUT(CSTR);
virtual ~MvEtherNUT();
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvEtherTN:public MvEther {
public:
MvEtherTN(CSTR);
virtual ~MvEtherTN();
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvEtherMulti:public MvEther {
public:
MvEtherMulti(CSTR);
virtual ~MvEtherMulti();
virtual bool generateEther(const PObjectList&,PvEther&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
};
//======================================================================
class MvV6:public MvFunction {
public:
MvV6(CSTR);
virtual ~MvV6();
virtual uint32_t functionLength(const PObjectList&,const WObject*) const;
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool evaluateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool generateTN(const PObject*,PvV6Addr&) const;
virtual bool generateNUT(const PObject*,PvV6Addr&) const;
virtual bool functionGenerate(WControl&,WObject*,OCTBUF&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
virtual bool isV6Addr() const;
};
inline uint32_t MvV6::functionLength(const PObjectList&,const WObject*) const {return sizeof(v6addr);}
//======================================================================
class MvV6SRC:public MvV6 {
public:
MvV6SRC(CSTR);
virtual ~MvV6SRC();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool evaluateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6DST:public MvV6 {
public:
MvV6DST(CSTR);
virtual ~MvV6DST();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool evaluateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6NUT:public MvV6 {
public:
MvV6NUT(CSTR);
virtual ~MvV6NUT();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6TN:public MvV6 {
public:
MvV6TN(CSTR);
virtual ~MvV6TN();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6PNUT:public MvV6 {
public:
MvV6PNUT(CSTR);
virtual ~MvV6PNUT();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6PTN:public MvV6 {
public:
MvV6PTN(CSTR);
virtual ~MvV6PTN();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6Merge:public MvV6 {
public:
MvV6Merge(CSTR);
virtual ~MvV6Merge();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
virtual PvObject* generateValue(WObject*,const PObjectList&) const;
virtual PvObject* evaluateValue(WObject*,const PObjectList&) const;
};
//======================================================================
class MvV6V6:public MvV6 {
public:
MvV6V6(CSTR);
virtual ~MvV6V6();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvV6Ether:public MvV6 {
public:
MvV6Ether(CSTR);
virtual ~MvV6Ether();
virtual bool generateV6Addr(const PObjectList&,PvV6Addr&) const;
virtual bool checkArgument(const PFunction&,const PObjectList&) const;
};
//======================================================================
class MvObjectID: public MvOctets {
public:
MvObjectID(CSTR);
virtual ~MvObjectID();
virtual bool generateOctetsWith(const PObjectList &, PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &, const WObject *) const;
virtual bool checkArgument(const PFunction &, const PObjectList &) const;
virtual bool asn1encode(char *, uint32_t *, CSTR, uint32_t) const;
virtual bool isOidStr(CSTR, uint32_t) const;
};
////////////////////////////////////////////////////////////////
// HASH_I = prf(SKEYID, //
// g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b ) //
// HASH_R = prf(SKEYID, //
// g^xr | g^xi | CKY-R | CKY-I | SAi_b | IDir_b ) //
////////////////////////////////////////////////////////////////
class MvP1_HASH: public MvOctets {
public:
MvP1_HASH(CSTR);
virtual ~MvP1_HASH();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
};
////////////////////////////////////////////////////////////////
// phase 1 IV = hash( g^xi | g^xr ) //
////////////////////////////////////////////////////////////////
class MvP1_IV: public MvOctets {
public:
MvP1_IV(CSTR);
virtual ~MvP1_IV();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
};
////////////////////////////////////////////////////////////////////////////////
// phase 2 IV = //
// hash( the last phase 1 CBC output block | the phase 2 message id ) //
////////////////////////////////////////////////////////////////////////////////
class MvP2_IV: public MvOctets {
public:
MvP2_IV(CSTR);
virtual ~MvP2_IV();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
};
////////////////////////////////////////////////////////////////////////////////
// HASH(2) = prf(SKEYID_a, M-ID | Ni_b | SA | Nr [ | KE ] [ | IDci | IDcr ) //
////////////////////////////////////////////////////////////////////////////////
class MvP2_HASH_2: public MvOctets {
public:
MvP2_HASH_2(CSTR);
virtual ~MvP2_HASH_2();
virtual bool generateOctetsWith(const PObjectList &,
PvOctets &, WObject *) const;
virtual uint32_t functionLength(const PObjectList &,
const WObject *) const;
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
virtual OCTSTR init(OCTSTR, const PObjectList &) const;
virtual void update(OCTSTR, const PObjectList &,
const OCTBUF &) const;
virtual PvOctets *result(OCTSTR, const PObjectList &) const;
virtual int32_t token() const;
virtual PObject *tokenObject(int, CSTR) const;
};
inline int32_t MvP2_HASH_2::token() const {
return(metaToken(tkn_ike_p2_hash_func_)); }
////////////////////////////////////////////////////////////////////////////////
// HASH(1) = prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr ) //
////////////////////////////////////////////////////////////////////////////////
class MvP2_HASH_1: public MvP2_HASH_2 {
public:
MvP2_HASH_1(CSTR key): MvP2_HASH_2(key) {}
virtual ~MvP2_HASH_1() {};
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
virtual void update(OCTSTR, const PObjectList &,
const OCTBUF &) const;
};
////////////////////////////////////////////////////////
// HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b) //
////////////////////////////////////////////////////////
class MvP2_HASH_3: public MvP2_HASH_2 {
public:
MvP2_HASH_3(CSTR key): MvP2_HASH_2(key) {}
virtual ~MvP2_HASH_3() {};
virtual bool checkArgument(const PFunction &,
const PObjectList &) const;
virtual void update(OCTSTR, const PObjectList &,
const OCTBUF &) const;
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1