File: OptAuthentication.h

package info (click to toggle)
dibbler 1.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 13,352 kB
  • sloc: cpp: 60,323; ansic: 12,235; sh: 11,951; yacc: 3,418; lex: 969; makefile: 940; perl: 319; xml: 116; python: 74
file content (72 lines) | stat: -rw-r--r-- 1,778 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Dibbler - a portable DHCPv6
 *
 * author: Michal Kowalczuk <michal@kowalczuk.eu>
 * changes: Tomek Mrugalski <thomson(at)klub(dot)com(dot)pl>
 *
 * released under GNU GPL v2 only licence
 */

#ifndef OPTAUTHENTICATION_H
#define OPTAUTHENTICATION_H

#include <vector>
#include "DHCPConst.h"
#include "Opt.h"
#include "Portable.h"

class TOptAuthentication : public TOpt
{
public:
    const static size_t OPT_AUTH_FIXED_SIZE = 11;

    TOptAuthentication(AuthProtocols proto, uint8_t algo, AuthReplay rdm,
                       TMsg* parent);

    TOptAuthentication(char* buf, size_t buflen, TMsg* parent);

    AuthProtocols getProto() const;
    uint8_t getAlgorithm() const;
    AuthReplay getRDM() const;

    void setRDM(AuthReplay value);

    void setReplayDetection(uint64_t value);
    uint64_t getReplayDetection();

    size_t getSize();
    char * storeSelf(char* buf);
    bool doDuties();

    void setPayload(const std::vector<uint8_t>& data);
    void getPayload(std::vector<uint8_t>& data);

    // not real fields, those are used for checksum calculations
    
    /// @todo: remove this
    // specific for method 4 (see DHCPConst.h)
    uint32_t getSPI() const;
    void setAuthInfoLen(uint16_t len);
    void setDigestType(DigestTypes type);

    inline char* getAuthDataPtr() const { return authDataPtr_; }

    void setRealm(const std::string& realm);

private:
    AuthProtocols proto_; // protocol
    uint8_t algo_;  // algorithm
    AuthReplay rdm_;   // replay detection method
    uint64_t replay_;

    std::vector<uint8_t> data_; ///< auth data (specific to a given proto)

    std::string realm_; ///< auth realm (used in delayed-auth)

    char* authDataPtr_;

    // specific for AUTH_PROTO_DIBBLER
    uint16_t AuthInfoLen_;
};

#endif