00001
00002
00003
00004
00005
00006
00007 #if ! H323_DISABLE_H235
00008
00009 #ifndef __H235_H
00010 #define __H235_H
00011
00012 #ifdef P_USE_PRAGMA
00013 #pragma interface
00014 #endif
00015
00016 #include <ptclib/asner.h>
00017
00018
00019
00020
00021
00022 class H235_ChallengeString : public PASN_OctetString
00023 {
00024 #ifndef PASN_LEANANDMEAN
00025 PCLASSINFO(H235_ChallengeString, PASN_OctetString);
00026 #endif
00027 public:
00028 H235_ChallengeString(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);
00029
00030 H235_ChallengeString(const char * v);
00031 H235_ChallengeString(const PString & v);
00032 H235_ChallengeString(const PBYTEArray & v);
00033
00034 H235_ChallengeString & operator=(const char * v);
00035 H235_ChallengeString & operator=(const PString & v);
00036 H235_ChallengeString & operator=(const PBYTEArray & v);
00037 PObject * Clone() const;
00038 };
00039
00040
00041
00042
00043
00044
00045 class H235_TimeStamp : public PASN_Integer
00046 {
00047 #ifndef PASN_LEANANDMEAN
00048 PCLASSINFO(H235_TimeStamp, PASN_Integer);
00049 #endif
00050 public:
00051 H235_TimeStamp(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);
00052
00053 H235_TimeStamp & operator=(int v);
00054 H235_TimeStamp & operator=(unsigned v);
00055 PObject * Clone() const;
00056 };
00057
00058
00059
00060
00061
00062
00063 class H235_RandomVal : public PASN_Integer
00064 {
00065 #ifndef PASN_LEANANDMEAN
00066 PCLASSINFO(H235_RandomVal, PASN_Integer);
00067 #endif
00068 public:
00069 H235_RandomVal(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);
00070
00071 H235_RandomVal & operator=(int v);
00072 H235_RandomVal & operator=(unsigned v);
00073 PObject * Clone() const;
00074 };
00075
00076
00077
00078
00079
00080
00081 class H235_Password : public PASN_BMPString
00082 {
00083 #ifndef PASN_LEANANDMEAN
00084 PCLASSINFO(H235_Password, PASN_BMPString);
00085 #endif
00086 public:
00087 H235_Password(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass);
00088
00089 H235_Password & operator=(const char * v);
00090 H235_Password & operator=(const PString & v);
00091 H235_Password & operator=(const PWORDArray & v);
00092 H235_Password & operator=(const PASN_BMPString & v);
00093 PObject * Clone() const;
00094 };
00095
00096
00097
00098
00099
00100
00101 class H235_Identifier : public PASN_BMPString
00102 {
00103 #ifndef PASN_LEANANDMEAN
00104 PCLASSINFO(H235_Identifier, PASN_BMPString);
00105 #endif
00106 public:
00107 H235_Identifier(unsigned tag = UniversalBMPString, TagClass tagClass = UniversalTagClass);
00108
00109 H235_Identifier & operator=(const char * v);
00110 H235_Identifier & operator=(const PString & v);
00111 H235_Identifier & operator=(const PWORDArray & v);
00112 H235_Identifier & operator=(const PASN_BMPString & v);
00113 PObject * Clone() const;
00114 };
00115
00116
00117
00118
00119
00120
00121 class H235_KeyMaterial : public PASN_BitString
00122 {
00123 #ifndef PASN_LEANANDMEAN
00124 PCLASSINFO(H235_KeyMaterial, PASN_BitString);
00125 #endif
00126 public:
00127 H235_KeyMaterial(unsigned tag = UniversalBitString, TagClass tagClass = UniversalTagClass);
00128
00129 PObject * Clone() const;
00130 };
00131
00132
00133
00134
00135
00136
00137 class H235_NonStandardParameter : public PASN_Sequence
00138 {
00139 #ifndef PASN_LEANANDMEAN
00140 PCLASSINFO(H235_NonStandardParameter, PASN_Sequence);
00141 #endif
00142 public:
00143 H235_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00144
00145 PASN_ObjectId m_nonStandardIdentifier;
00146 PASN_OctetString m_data;
00147
00148 PINDEX GetDataLength() const;
00149 BOOL Decode(PASN_Stream & strm);
00150 void Encode(PASN_Stream & strm) const;
00151 #ifndef PASN_NOPRINTON
00152 void PrintOn(ostream & strm) const;
00153 #endif
00154 Comparison Compare(const PObject & obj) const;
00155 PObject * Clone() const;
00156 };
00157
00158
00159
00160
00161
00162
00163 class H235_DHset : public PASN_Sequence
00164 {
00165 #ifndef PASN_LEANANDMEAN
00166 PCLASSINFO(H235_DHset, PASN_Sequence);
00167 #endif
00168 public:
00169 H235_DHset(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00170
00171 PASN_BitString m_halfkey;
00172 PASN_BitString m_modSize;
00173 PASN_BitString m_generator;
00174
00175 PINDEX GetDataLength() const;
00176 BOOL Decode(PASN_Stream & strm);
00177 void Encode(PASN_Stream & strm) const;
00178 #ifndef PASN_NOPRINTON
00179 void PrintOn(ostream & strm) const;
00180 #endif
00181 Comparison Compare(const PObject & obj) const;
00182 PObject * Clone() const;
00183 };
00184
00185
00186
00187
00188
00189
00190 class H235_ECpoint : public PASN_Sequence
00191 {
00192 #ifndef PASN_LEANANDMEAN
00193 PCLASSINFO(H235_ECpoint, PASN_Sequence);
00194 #endif
00195 public:
00196 H235_ECpoint(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00197
00198 enum OptionalFields {
00199 e_x,
00200 e_y
00201 };
00202
00203 PASN_BitString m_x;
00204 PASN_BitString m_y;
00205
00206 PINDEX GetDataLength() const;
00207 BOOL Decode(PASN_Stream & strm);
00208 void Encode(PASN_Stream & strm) const;
00209 #ifndef PASN_NOPRINTON
00210 void PrintOn(ostream & strm) const;
00211 #endif
00212 Comparison Compare(const PObject & obj) const;
00213 PObject * Clone() const;
00214 };
00215
00216
00217
00218
00219
00220
00221 class H235_ECKASDH_eckasdhp;
00222 class H235_ECKASDH_eckasdh2;
00223
00224 class H235_ECKASDH : public PASN_Choice
00225 {
00226 #ifndef PASN_LEANANDMEAN
00227 PCLASSINFO(H235_ECKASDH, PASN_Choice);
00228 #endif
00229 public:
00230 H235_ECKASDH(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00231
00232 enum Choices {
00233 e_eckasdhp,
00234 e_eckasdh2
00235 };
00236
00237 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00238 operator H235_ECKASDH_eckasdhp &() const;
00239 #else
00240 operator H235_ECKASDH_eckasdhp &();
00241 operator const H235_ECKASDH_eckasdhp &() const;
00242 #endif
00243 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00244 operator H235_ECKASDH_eckasdh2 &() const;
00245 #else
00246 operator H235_ECKASDH_eckasdh2 &();
00247 operator const H235_ECKASDH_eckasdh2 &() const;
00248 #endif
00249
00250 BOOL CreateObject();
00251 PObject * Clone() const;
00252 };
00253
00254
00255
00256
00257
00258
00259 class H235_ECGDSASignature : public PASN_Sequence
00260 {
00261 #ifndef PASN_LEANANDMEAN
00262 PCLASSINFO(H235_ECGDSASignature, PASN_Sequence);
00263 #endif
00264 public:
00265 H235_ECGDSASignature(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00266
00267 PASN_BitString m_r;
00268 PASN_BitString m_s;
00269
00270 PINDEX GetDataLength() const;
00271 BOOL Decode(PASN_Stream & strm);
00272 void Encode(PASN_Stream & strm) const;
00273 #ifndef PASN_NOPRINTON
00274 void PrintOn(ostream & strm) const;
00275 #endif
00276 Comparison Compare(const PObject & obj) const;
00277 PObject * Clone() const;
00278 };
00279
00280
00281
00282
00283
00284
00285 class H235_TypedCertificate : public PASN_Sequence
00286 {
00287 #ifndef PASN_LEANANDMEAN
00288 PCLASSINFO(H235_TypedCertificate, PASN_Sequence);
00289 #endif
00290 public:
00291 H235_TypedCertificate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00292
00293 PASN_ObjectId m_type;
00294 PASN_OctetString m_certificate;
00295
00296 PINDEX GetDataLength() const;
00297 BOOL Decode(PASN_Stream & strm);
00298 void Encode(PASN_Stream & strm) const;
00299 #ifndef PASN_NOPRINTON
00300 void PrintOn(ostream & strm) const;
00301 #endif
00302 Comparison Compare(const PObject & obj) const;
00303 PObject * Clone() const;
00304 };
00305
00306
00307
00308
00309
00310
00311 class H235_AuthenticationBES : public PASN_Choice
00312 {
00313 #ifndef PASN_LEANANDMEAN
00314 PCLASSINFO(H235_AuthenticationBES, PASN_Choice);
00315 #endif
00316 public:
00317 H235_AuthenticationBES(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00318
00319 enum Choices {
00320 e_default,
00321 e_radius
00322 };
00323
00324 BOOL CreateObject();
00325 PObject * Clone() const;
00326 };
00327
00328
00329
00330
00331
00332
00333 class H235_NonStandardParameter;
00334 class H235_AuthenticationBES;
00335
00336 class H235_AuthenticationMechanism : public PASN_Choice
00337 {
00338 #ifndef PASN_LEANANDMEAN
00339 PCLASSINFO(H235_AuthenticationMechanism, PASN_Choice);
00340 #endif
00341 public:
00342 H235_AuthenticationMechanism(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00343
00344 enum Choices {
00345 e_dhExch,
00346 e_pwdSymEnc,
00347 e_pwdHash,
00348 e_certSign,
00349 e_ipsec,
00350 e_tls,
00351 e_nonStandard,
00352 e_authenticationBES,
00353 e_keyExch
00354 };
00355
00356 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00357 operator H235_NonStandardParameter &() const;
00358 #else
00359 operator H235_NonStandardParameter &();
00360 operator const H235_NonStandardParameter &() const;
00361 #endif
00362 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00363 operator H235_AuthenticationBES &() const;
00364 #else
00365 operator H235_AuthenticationBES &();
00366 operator const H235_AuthenticationBES &() const;
00367 #endif
00368
00369 BOOL CreateObject();
00370 PObject * Clone() const;
00371 };
00372
00373
00374
00375
00376
00377
00378 class H235_Element : public PASN_Choice
00379 {
00380 #ifndef PASN_LEANANDMEAN
00381 PCLASSINFO(H235_Element, PASN_Choice);
00382 #endif
00383 public:
00384 H235_Element(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00385
00386 enum Choices {
00387 e_octets,
00388 e_integer,
00389 e_bits,
00390 e_name,
00391 e_flag
00392 };
00393
00394 BOOL CreateObject();
00395 PObject * Clone() const;
00396 };
00397
00398
00399
00400
00401
00402
00403 class H235_IV8 : public PASN_OctetString
00404 {
00405 #ifndef PASN_LEANANDMEAN
00406 PCLASSINFO(H235_IV8, PASN_OctetString);
00407 #endif
00408 public:
00409 H235_IV8(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);
00410
00411 H235_IV8(const char * v);
00412 H235_IV8(const PString & v);
00413 H235_IV8(const PBYTEArray & v);
00414
00415 H235_IV8 & operator=(const char * v);
00416 H235_IV8 & operator=(const PString & v);
00417 H235_IV8 & operator=(const PBYTEArray & v);
00418 PObject * Clone() const;
00419 };
00420
00421
00422
00423
00424
00425
00426 class H235_IV16 : public PASN_OctetString
00427 {
00428 #ifndef PASN_LEANANDMEAN
00429 PCLASSINFO(H235_IV16, PASN_OctetString);
00430 #endif
00431 public:
00432 H235_IV16(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);
00433
00434 H235_IV16(const char * v);
00435 H235_IV16(const PString & v);
00436 H235_IV16(const PBYTEArray & v);
00437
00438 H235_IV16 & operator=(const char * v);
00439 H235_IV16 & operator=(const PString & v);
00440 H235_IV16 & operator=(const PBYTEArray & v);
00441 PObject * Clone() const;
00442 };
00443
00444
00445
00446
00447
00448
00449 class H235_Params : public PASN_Sequence
00450 {
00451 #ifndef PASN_LEANANDMEAN
00452 PCLASSINFO(H235_Params, PASN_Sequence);
00453 #endif
00454 public:
00455 H235_Params(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00456
00457 enum OptionalFields {
00458 e_ranInt,
00459 e_iv8,
00460 e_iv16,
00461 e_iv,
00462 e_clearSalt
00463 };
00464
00465 PASN_Integer m_ranInt;
00466 H235_IV8 m_iv8;
00467 H235_IV16 m_iv16;
00468 PASN_OctetString m_iv;
00469 PASN_OctetString m_clearSalt;
00470
00471 PINDEX GetDataLength() const;
00472 BOOL Decode(PASN_Stream & strm);
00473 void Encode(PASN_Stream & strm) const;
00474 #ifndef PASN_NOPRINTON
00475 void PrintOn(ostream & strm) const;
00476 #endif
00477 Comparison Compare(const PObject & obj) const;
00478 PObject * Clone() const;
00479 };
00480
00481
00482
00483
00484
00485
00486 class H235_ReturnSig : public PASN_Sequence
00487 {
00488 #ifndef PASN_LEANANDMEAN
00489 PCLASSINFO(H235_ReturnSig, PASN_Sequence);
00490 #endif
00491 public:
00492 H235_ReturnSig(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00493
00494 enum OptionalFields {
00495 e_requestRandom,
00496 e_certificate
00497 };
00498
00499 H235_Identifier m_generalId;
00500 H235_RandomVal m_responseRandom;
00501 H235_RandomVal m_requestRandom;
00502 H235_TypedCertificate m_certificate;
00503
00504 PINDEX GetDataLength() const;
00505 BOOL Decode(PASN_Stream & strm);
00506 void Encode(PASN_Stream & strm) const;
00507 #ifndef PASN_NOPRINTON
00508 void PrintOn(ostream & strm) const;
00509 #endif
00510 Comparison Compare(const PObject & obj) const;
00511 PObject * Clone() const;
00512 };
00513
00514
00515
00516
00517
00518
00519 class H235_EncodedReturnSig : public PASN_OctetString
00520 {
00521 #ifndef PASN_LEANANDMEAN
00522 PCLASSINFO(H235_EncodedReturnSig, PASN_OctetString);
00523 #endif
00524 public:
00525 H235_EncodedReturnSig(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00526
00527 BOOL DecodeSubType(H235_ReturnSig & obj) { return PASN_OctetString::DecodeSubType(obj); }
00528 void EncodeSubType(const H235_ReturnSig & obj) { PASN_OctetString::EncodeSubType(obj); }
00529
00530 PObject * Clone() const;
00531 };
00532
00533
00534
00535
00536
00537
00538 class H235_KeySyncMaterial : public PASN_Sequence
00539 {
00540 #ifndef PASN_LEANANDMEAN
00541 PCLASSINFO(H235_KeySyncMaterial, PASN_Sequence);
00542 #endif
00543 public:
00544 H235_KeySyncMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00545
00546 H235_Identifier m_generalID;
00547 H235_KeyMaterial m_keyMaterial;
00548
00549 PINDEX GetDataLength() const;
00550 BOOL Decode(PASN_Stream & strm);
00551 void Encode(PASN_Stream & strm) const;
00552 #ifndef PASN_NOPRINTON
00553 void PrintOn(ostream & strm) const;
00554 #endif
00555 Comparison Compare(const PObject & obj) const;
00556 PObject * Clone() const;
00557 };
00558
00559
00560
00561
00562
00563
00564 class H235_EncodedKeySyncMaterial : public PASN_OctetString
00565 {
00566 #ifndef PASN_LEANANDMEAN
00567 PCLASSINFO(H235_EncodedKeySyncMaterial, PASN_OctetString);
00568 #endif
00569 public:
00570 H235_EncodedKeySyncMaterial(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00571
00572 BOOL DecodeSubType(H235_KeySyncMaterial & obj) { return PASN_OctetString::DecodeSubType(obj); }
00573 void EncodeSubType(const H235_KeySyncMaterial & obj) { PASN_OctetString::EncodeSubType(obj); }
00574
00575 PObject * Clone() const;
00576 };
00577
00578
00579
00580
00581
00582
00583 class H235_V3KeySyncMaterial : public PASN_Sequence
00584 {
00585 #ifndef PASN_LEANANDMEAN
00586 PCLASSINFO(H235_V3KeySyncMaterial, PASN_Sequence);
00587 #endif
00588 public:
00589 H235_V3KeySyncMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00590
00591 enum OptionalFields {
00592 e_generalID,
00593 e_algorithmOID,
00594 e_encryptedSessionKey,
00595 e_encryptedSaltingKey,
00596 e_clearSaltingKey,
00597 e_paramSsalt,
00598 e_keyDerivationOID,
00599 e_genericKeyMaterial
00600 };
00601
00602 H235_Identifier m_generalID;
00603 PASN_ObjectId m_algorithmOID;
00604 H235_Params m_paramS;
00605 PASN_OctetString m_encryptedSessionKey;
00606 PASN_OctetString m_encryptedSaltingKey;
00607 PASN_OctetString m_clearSaltingKey;
00608 H235_Params m_paramSsalt;
00609 PASN_ObjectId m_keyDerivationOID;
00610 PASN_OctetString m_genericKeyMaterial;
00611
00612 PINDEX GetDataLength() const;
00613 BOOL Decode(PASN_Stream & strm);
00614 void Encode(PASN_Stream & strm) const;
00615 #ifndef PASN_NOPRINTON
00616 void PrintOn(ostream & strm) const;
00617 #endif
00618 Comparison Compare(const PObject & obj) const;
00619 PObject * Clone() const;
00620 };
00621
00622
00623
00624
00625
00626
00627 class H235_ECKASDH_eckasdhp : public PASN_Sequence
00628 {
00629 #ifndef PASN_LEANANDMEAN
00630 PCLASSINFO(H235_ECKASDH_eckasdhp, PASN_Sequence);
00631 #endif
00632 public:
00633 H235_ECKASDH_eckasdhp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00634
00635 H235_ECpoint m_public_key;
00636 PASN_BitString m_modulus;
00637 H235_ECpoint m_base;
00638 PASN_BitString m_weierstrassA;
00639 PASN_BitString m_weierstrassB;
00640
00641 PINDEX GetDataLength() const;
00642 BOOL Decode(PASN_Stream & strm);
00643 void Encode(PASN_Stream & strm) const;
00644 #ifndef PASN_NOPRINTON
00645 void PrintOn(ostream & strm) const;
00646 #endif
00647 Comparison Compare(const PObject & obj) const;
00648 PObject * Clone() const;
00649 };
00650
00651
00652
00653
00654
00655
00656 class H235_ECKASDH_eckasdh2 : public PASN_Sequence
00657 {
00658 #ifndef PASN_LEANANDMEAN
00659 PCLASSINFO(H235_ECKASDH_eckasdh2, PASN_Sequence);
00660 #endif
00661 public:
00662 H235_ECKASDH_eckasdh2(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00663
00664 H235_ECpoint m_public_key;
00665 PASN_BitString m_fieldSize;
00666 H235_ECpoint m_base;
00667 PASN_BitString m_weierstrassA;
00668 PASN_BitString m_weierstrassB;
00669
00670 PINDEX GetDataLength() const;
00671 BOOL Decode(PASN_Stream & strm);
00672 void Encode(PASN_Stream & strm) const;
00673 #ifndef PASN_NOPRINTON
00674 void PrintOn(ostream & strm) const;
00675 #endif
00676 Comparison Compare(const PObject & obj) const;
00677 PObject * Clone() const;
00678 };
00679
00680
00681
00682
00683
00684
00685 class H235_ProfileElement;
00686
00687 class H235_ArrayOf_ProfileElement : public PASN_Array
00688 {
00689 #ifndef PASN_LEANANDMEAN
00690 PCLASSINFO(H235_ArrayOf_ProfileElement, PASN_Array);
00691 #endif
00692 public:
00693 H235_ArrayOf_ProfileElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00694
00695 PASN_Object * CreateObject() const;
00696 H235_ProfileElement & operator[](PINDEX i) const;
00697 PObject * Clone() const;
00698 };
00699
00700
00701
00702
00703
00704
00705 class H235_ProfileElement : public PASN_Sequence
00706 {
00707 #ifndef PASN_LEANANDMEAN
00708 PCLASSINFO(H235_ProfileElement, PASN_Sequence);
00709 #endif
00710 public:
00711 H235_ProfileElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00712
00713 enum OptionalFields {
00714 e_paramS,
00715 e_element
00716 };
00717
00718 PASN_Integer m_elementID;
00719 H235_Params m_paramS;
00720 H235_Element m_element;
00721
00722 PINDEX GetDataLength() const;
00723 BOOL Decode(PASN_Stream & strm);
00724 void Encode(PASN_Stream & strm) const;
00725 #ifndef PASN_NOPRINTON
00726 void PrintOn(ostream & strm) const;
00727 #endif
00728 Comparison Compare(const PObject & obj) const;
00729 PObject * Clone() const;
00730 };
00731
00732
00733
00734
00735
00736
00737 template <class ToBeSigned>
00738 class H235_SIGNED : public PASN_Sequence
00739 {
00740 #ifndef PASN_LEANANDMEAN
00741 PCLASSINFO(H235_SIGNED, PASN_Sequence);
00742 #endif
00743 public:
00744 H235_SIGNED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00745
00746 ToBeSigned m_toBeSigned;
00747 PASN_ObjectId m_algorithmOID;
00748 H235_Params m_paramS;
00749 PASN_BitString m_signature;
00750
00751 PINDEX GetDataLength() const;
00752 BOOL Decode(PASN_Stream & strm);
00753 void Encode(PASN_Stream & strm) const;
00754 #ifndef PASN_NOPRINTON
00755 void PrintOn(ostream & strm) const;
00756 #endif
00757 Comparison Compare(const PObject & obj) const;
00758 PObject * Clone() const;
00759 };
00760
00761
00762
00763
00764
00765
00766 template <class ToBeEncrypted>
00767 class H235_ENCRYPTED : public PASN_Sequence
00768 {
00769 #ifndef PASN_LEANANDMEAN
00770 PCLASSINFO(H235_ENCRYPTED, PASN_Sequence);
00771 #endif
00772 public:
00773 H235_ENCRYPTED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00774
00775 PASN_ObjectId m_algorithmOID;
00776 H235_Params m_paramS;
00777 PASN_OctetString m_encryptedData;
00778
00779 PINDEX GetDataLength() const;
00780 BOOL Decode(PASN_Stream & strm);
00781 void Encode(PASN_Stream & strm) const;
00782 #ifndef PASN_NOPRINTON
00783 void PrintOn(ostream & strm) const;
00784 #endif
00785 Comparison Compare(const PObject & obj) const;
00786 PObject * Clone() const;
00787 };
00788
00789
00790
00791
00792
00793
00794 template <class ToBeHashed>
00795 class H235_HASHED : public PASN_Sequence
00796 {
00797 #ifndef PASN_LEANANDMEAN
00798 PCLASSINFO(H235_HASHED, PASN_Sequence);
00799 #endif
00800 public:
00801 H235_HASHED(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00802
00803 PASN_ObjectId m_algorithmOID;
00804 H235_Params m_paramS;
00805 PASN_BitString m_hash;
00806
00807 PINDEX GetDataLength() const;
00808 BOOL Decode(PASN_Stream & strm);
00809 void Encode(PASN_Stream & strm) const;
00810 #ifndef PASN_NOPRINTON
00811 void PrintOn(ostream & strm) const;
00812 #endif
00813 Comparison Compare(const PObject & obj) const;
00814 PObject * Clone() const;
00815 };
00816
00817
00818
00819
00820
00821
00822 class H235_KeySignedMaterial : public PASN_Sequence
00823 {
00824 #ifndef PASN_LEANANDMEAN
00825 PCLASSINFO(H235_KeySignedMaterial, PASN_Sequence);
00826 #endif
00827 public:
00828 H235_KeySignedMaterial(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00829
00830 enum OptionalFields {
00831 e_srandom,
00832 e_timeStamp
00833 };
00834
00835 H235_Identifier m_generalId;
00836 H235_RandomVal m_mrandom;
00837 H235_RandomVal m_srandom;
00838 H235_TimeStamp m_timeStamp;
00839 H235_ENCRYPTED<H235_EncodedKeySyncMaterial> m_encrptval;
00840
00841 PINDEX GetDataLength() const;
00842 BOOL Decode(PASN_Stream & strm);
00843 void Encode(PASN_Stream & strm) const;
00844 #ifndef PASN_NOPRINTON
00845 void PrintOn(ostream & strm) const;
00846 #endif
00847 Comparison Compare(const PObject & obj) const;
00848 PObject * Clone() const;
00849 };
00850
00851
00852
00853
00854
00855
00856 class H235_EncodedKeySignedMaterial : public PASN_OctetString
00857 {
00858 #ifndef PASN_LEANANDMEAN
00859 PCLASSINFO(H235_EncodedKeySignedMaterial, PASN_OctetString);
00860 #endif
00861 public:
00862 H235_EncodedKeySignedMaterial(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00863
00864 BOOL DecodeSubType(H235_KeySignedMaterial & obj) { return PASN_OctetString::DecodeSubType(obj); }
00865 void EncodeSubType(const H235_KeySignedMaterial & obj) { PASN_OctetString::EncodeSubType(obj); }
00866
00867 PObject * Clone() const;
00868 };
00869
00870
00871
00872
00873
00874
00875 class H235_H235CertificateSignature : public PASN_Sequence
00876 {
00877 #ifndef PASN_LEANANDMEAN
00878 PCLASSINFO(H235_H235CertificateSignature, PASN_Sequence);
00879 #endif
00880 public:
00881 H235_H235CertificateSignature(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00882
00883 enum OptionalFields {
00884 e_requesterRandom
00885 };
00886
00887 H235_TypedCertificate m_certificate;
00888 H235_RandomVal m_responseRandom;
00889 H235_RandomVal m_requesterRandom;
00890 H235_SIGNED<H235_EncodedReturnSig> m_signature;
00891
00892 PINDEX GetDataLength() const;
00893 BOOL Decode(PASN_Stream & strm);
00894 void Encode(PASN_Stream & strm) const;
00895 #ifndef PASN_NOPRINTON
00896 void PrintOn(ostream & strm) const;
00897 #endif
00898 Comparison Compare(const PObject & obj) const;
00899 PObject * Clone() const;
00900 };
00901
00902
00903
00904
00905
00906
00907 class H235_KeyMaterial;
00908 class H235_V3KeySyncMaterial;
00909
00910 class H235_H235Key : public PASN_Choice
00911 {
00912 #ifndef PASN_LEANANDMEAN
00913 PCLASSINFO(H235_H235Key, PASN_Choice);
00914 #endif
00915 public:
00916 H235_H235Key(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00917
00918 enum Choices {
00919 e_secureChannel,
00920 e_sharedSecret,
00921 e_certProtectedKey,
00922 e_secureSharedSecret
00923 };
00924
00925 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00926 operator H235_KeyMaterial &() const;
00927 #else
00928 operator H235_KeyMaterial &();
00929 operator const H235_KeyMaterial &() const;
00930 #endif
00931 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00932 operator H235_ENCRYPTED<H235_EncodedKeySyncMaterial> &() const;
00933 #else
00934 operator H235_ENCRYPTED<H235_EncodedKeySyncMaterial> &();
00935 operator const H235_ENCRYPTED<H235_EncodedKeySyncMaterial> &() const;
00936 #endif
00937 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00938 operator H235_SIGNED<H235_EncodedKeySignedMaterial> &() const;
00939 #else
00940 operator H235_SIGNED<H235_EncodedKeySignedMaterial> &();
00941 operator const H235_SIGNED<H235_EncodedKeySignedMaterial> &() const;
00942 #endif
00943 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00944 operator H235_V3KeySyncMaterial &() const;
00945 #else
00946 operator H235_V3KeySyncMaterial &();
00947 operator const H235_V3KeySyncMaterial &() const;
00948 #endif
00949
00950 BOOL CreateObject();
00951 PObject * Clone() const;
00952 };
00953
00954
00955
00956
00957
00958
00959 class H235_ClearToken : public PASN_Sequence
00960 {
00961 #ifndef PASN_LEANANDMEAN
00962 PCLASSINFO(H235_ClearToken, PASN_Sequence);
00963 #endif
00964 public:
00965 H235_ClearToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00966
00967 enum OptionalFields {
00968 e_timeStamp,
00969 e_password,
00970 e_dhkey,
00971 e_challenge,
00972 e_random,
00973 e_certificate,
00974 e_generalID,
00975 e_nonStandard,
00976 e_eckasdhkey,
00977 e_sendersID,
00978 e_h235Key,
00979 e_profileInfo
00980 };
00981
00982 PASN_ObjectId m_tokenOID;
00983 H235_TimeStamp m_timeStamp;
00984 H235_Password m_password;
00985 H235_DHset m_dhkey;
00986 H235_ChallengeString m_challenge;
00987 H235_RandomVal m_random;
00988 H235_TypedCertificate m_certificate;
00989 H235_Identifier m_generalID;
00990 H235_NonStandardParameter m_nonStandard;
00991 H235_ECKASDH m_eckasdhkey;
00992 H235_Identifier m_sendersID;
00993 H235_H235Key m_h235Key;
00994 H235_ArrayOf_ProfileElement m_profileInfo;
00995
00996 PINDEX GetDataLength() const;
00997 BOOL Decode(PASN_Stream & strm);
00998 void Encode(PASN_Stream & strm) const;
00999 #ifndef PASN_NOPRINTON
01000 void PrintOn(ostream & strm) const;
01001 #endif
01002 Comparison Compare(const PObject & obj) const;
01003 PObject * Clone() const;
01004 };
01005
01006
01007
01008
01009
01010
01011 class H235_EncodedGeneralToken : public PASN_OctetString
01012 {
01013 #ifndef PASN_LEANANDMEAN
01014 PCLASSINFO(H235_EncodedGeneralToken, PASN_OctetString);
01015 #endif
01016 public:
01017 H235_EncodedGeneralToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
01018
01019 BOOL DecodeSubType(H235_ClearToken & obj) { return PASN_OctetString::DecodeSubType(obj); }
01020 void EncodeSubType(const H235_ClearToken & obj) { PASN_OctetString::EncodeSubType(obj); }
01021
01022 PObject * Clone() const;
01023 };
01024
01025
01026
01027
01028
01029
01030 class H235_PwdCertToken : public H235_ClearToken
01031 {
01032 #ifndef PASN_LEANANDMEAN
01033 PCLASSINFO(H235_PwdCertToken, H235_ClearToken);
01034 #endif
01035 public:
01036 H235_PwdCertToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
01037
01038 PObject * Clone() const;
01039 };
01040
01041
01042
01043
01044
01045
01046 class H235_EncodedPwdCertToken : public PASN_OctetString
01047 {
01048 #ifndef PASN_LEANANDMEAN
01049 PCLASSINFO(H235_EncodedPwdCertToken, PASN_OctetString);
01050 #endif
01051 public:
01052 H235_EncodedPwdCertToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
01053
01054 BOOL DecodeSubType(H235_PwdCertToken & obj) { return PASN_OctetString::DecodeSubType(obj); }
01055 void EncodeSubType(const H235_PwdCertToken & obj) { PASN_OctetString::EncodeSubType(obj); }
01056
01057 PObject * Clone() const;
01058 };
01059
01060
01061
01062
01063
01064
01065 class H235_CryptoToken_cryptoEncryptedToken;
01066 class H235_CryptoToken_cryptoSignedToken;
01067 class H235_CryptoToken_cryptoHashedToken;
01068
01069 class H235_CryptoToken : public PASN_Choice
01070 {
01071 #ifndef PASN_LEANANDMEAN
01072 PCLASSINFO(H235_CryptoToken, PASN_Choice);
01073 #endif
01074 public:
01075 H235_CryptoToken(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
01076
01077 enum Choices {
01078 e_cryptoEncryptedToken,
01079 e_cryptoSignedToken,
01080 e_cryptoHashedToken,
01081 e_cryptoPwdEncr
01082 };
01083
01084 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
01085 operator H235_CryptoToken_cryptoEncryptedToken &() const;
01086 #else
01087 operator H235_CryptoToken_cryptoEncryptedToken &();
01088 operator const H235_CryptoToken_cryptoEncryptedToken &() const;
01089 #endif
01090 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
01091 operator H235_CryptoToken_cryptoSignedToken &() const;
01092 #else
01093 operator H235_CryptoToken_cryptoSignedToken &();
01094 operator const H235_CryptoToken_cryptoSignedToken &() const;
01095 #endif
01096 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
01097 operator H235_CryptoToken_cryptoHashedToken &() const;
01098 #else
01099 operator H235_CryptoToken_cryptoHashedToken &();
01100 operator const H235_CryptoToken_cryptoHashedToken &() const;
01101 #endif
01102 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
01103 operator H235_ENCRYPTED<H235_EncodedPwdCertToken> &() const;
01104 #else
01105 operator H235_ENCRYPTED<H235_EncodedPwdCertToken> &();
01106 operator const H235_ENCRYPTED<H235_EncodedPwdCertToken> &() const;
01107 #endif
01108
01109 BOOL CreateObject();
01110 PObject * Clone() const;
01111 };
01112
01113
01114
01115
01116
01117
01118 class H235_CryptoToken_cryptoEncryptedToken : public PASN_Sequence
01119 {
01120 #ifndef PASN_LEANANDMEAN
01121 PCLASSINFO(H235_CryptoToken_cryptoEncryptedToken, PASN_Sequence);
01122 #endif
01123 public:
01124 H235_CryptoToken_cryptoEncryptedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
01125
01126 PASN_ObjectId m_tokenOID;
01127 H235_ENCRYPTED<H235_EncodedGeneralToken> m_token;
01128
01129 PINDEX GetDataLength() const;
01130 BOOL Decode(PASN_Stream & strm);
01131 void Encode(PASN_Stream & strm) const;
01132 #ifndef PASN_NOPRINTON
01133 void PrintOn(ostream & strm) const;
01134 #endif
01135 Comparison Compare(const PObject & obj) const;
01136 PObject * Clone() const;
01137 };
01138
01139
01140
01141
01142
01143
01144 class H235_CryptoToken_cryptoSignedToken : public PASN_Sequence
01145 {
01146 #ifndef PASN_LEANANDMEAN
01147 PCLASSINFO(H235_CryptoToken_cryptoSignedToken, PASN_Sequence);
01148 #endif
01149 public:
01150 H235_CryptoToken_cryptoSignedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
01151
01152 PASN_ObjectId m_tokenOID;
01153 H235_SIGNED<H235_EncodedGeneralToken> m_token;
01154
01155 PINDEX GetDataLength() const;
01156 BOOL Decode(PASN_Stream & strm);
01157 void Encode(PASN_Stream & strm) const;
01158 #ifndef PASN_NOPRINTON
01159 void PrintOn(ostream & strm) const;
01160 #endif
01161 Comparison Compare(const PObject & obj) const;
01162 PObject * Clone() const;
01163 };
01164
01165
01166
01167
01168
01169
01170 class H235_CryptoToken_cryptoHashedToken : public PASN_Sequence
01171 {
01172 #ifndef PASN_LEANANDMEAN
01173 PCLASSINFO(H235_CryptoToken_cryptoHashedToken, PASN_Sequence);
01174 #endif
01175 public:
01176 H235_CryptoToken_cryptoHashedToken(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
01177
01178 PASN_ObjectId m_tokenOID;
01179 H235_ClearToken m_hashedVals;
01180 H235_HASHED<H235_EncodedGeneralToken> m_token;
01181
01182 PINDEX GetDataLength() const;
01183 BOOL Decode(PASN_Stream & strm);
01184 void Encode(PASN_Stream & strm) const;
01185 #ifndef PASN_NOPRINTON
01186 void PrintOn(ostream & strm) const;
01187 #endif
01188 Comparison Compare(const PObject & obj) const;
01189 PObject * Clone() const;
01190 };
01191
01192
01193 #endif // __H235_H
01194
01195 #endif // if ! H323_DISABLE_H235
01196
01197
01198