Move .gitignore to lib/ in preparation for moving lib to the root.
[libradsec.git] / radius / tests / rfc.txt
1 #  All attribute lengths are implicit, and are calculated automatically
2 #
3 #  Input is of the form:
4 #
5 #       WORD ...
6 #
7 #  The WORD is a keyword which indicates the format of the following text.
8 #  WORD is one of:
9 #
10 #       raw - read the grammar defined below, and encode an attribute.
11 #             The grammer supports a trivial way of describing RADIUS
12 #             attributes, without reference to dictionaries or fancy
13 #             parsers
14 #
15 #       encode - reads "Attribute-Name = value", encodes it, and prints
16 #                the result as text.
17 #               use "-" to encode the output of the last command
18 #
19 #       decode - reads hex, and decodes it "Attribute-Name = value"
20 #               use "-" to decode the output of the last command
21 #
22 #       data - the expected output of the previous command, in ASCII form.
23 #              if the actual command output is different, an error message
24 #              is produced, and the program terminates.
25 #
26 #
27 #  The "raw" input satisfies the following grammar:
28 #
29 #       Identifier = 1*DIGIT *( "." 1*DIGIT )
30 #
31 #       HEXCHAR = HEXDIG HEXDIG 
32 #
33 #       STRING = DQUOTE *CHAR DQUOTE
34 #
35 #       TLV = "{" 1*DIGIT DATA "}"
36 #
37 #       DATA = 1*HEXCHAR / 1*TLV / STRING
38 #
39 #       LINE = Identifier DATA
40 #
41 #  The "Identifier" is a RADIUS attribute identifier, as given in the draft.
42 #
43 #       e.g.    1               for User-Name
44 #               26.9.1          Vendor-Specific, Cisco, Cisco-AVPAir
45 #               241.1           Extended Attribute, number 1
46 #               241.2.3         Extended Attribute 2, data type TLV, TLV type 3
47 #               etc.
48 #
49 #  The "DATA" portion is the contents of the RADIUS Attribute.
50 #
51 #               123456789abcdef hex string
52 #               12 34 56 ab     with spaces for clarity
53 #               "hello"         Text string
54 #               { 1 abcdef }    TLV, TLV-Type 1, data "abcdef"
55 #
56 #  TLVs can be nested:
57 #
58 #       { tlv-type { tlv-type data } }          { 3 { 4 01020304 } }
59 #
60 #  TLVs can be concatencated
61 #
62 #       {tlv-type data } { tlv-type data}       { 3 040506 } { 8 aabbcc }
63 #
64 #  The "raw" data is encoded without reference to dictionaries.  Any
65 #  valid string is parsed to a RADIUS attribute.  The resulting RADIUS
66 #  attribute *may not* be correctly formatted to the relevant RADIUS
67 #  specifications.  i.e. you can use this tool to create attribute 1
68 #  (User-Name), which is encoded as a series of TLVs.  That's up to you.
69 #
70 #  The purpose of the "raw" command is to have a simple way of encoding
71 #  attributes which is independent of any dictionaries or packet processing
72 #  routines.
73 #
74 #  The output data is the hex version of the encoded attribute.
75 #
76
77 encode User-Name = bob
78 data 01 05 62 6f 62
79
80 decode -
81 data User-Name = "bob"
82
83 decode 01 05 62 6f 62
84 data User-Name = "bob"
85
86 #
87 #  The Type/Length is OK, but the attribute data is of the wrong size.
88 #
89 decode 04 04 ab cd
90 data Attr-4 = 0xabcd
91
92 #  Zero-length attributes
93 decode 01 02
94 data 
95
96 # don't encode zero-length attributes
97 #encode User-Name = ""
98 #data 
99
100 # except for CUI.  Thank you, WiMAX!
101 decode 59 02
102 data Chargeable-User-Identity = ""
103
104 # Hah! Thought you had it figured out, didn't you?
105 #encode -
106 #data 59 02
107
108 encode NAS-Port = 10
109 data 05 06 00 00 00 0a
110
111 decode -
112 data NAS-Port = 10
113
114 walk 05 06 00 00 00 0a
115 data v0 a5 l4
116
117 walk 05 06 00 00 00 0a 02 06 00 00 00 0a
118 data v0 a5 l4,v0 a2 l4
119
120 walk 1a 0c 00 00 00 01 05 06 00 00 00 0a
121 data v1 a5 l4
122
123 walk 1a 12 00 00 00 01 05 06 00 00 00 0a 03 06 00 00 00 0a
124 data v1 a5 l4,v1 a3 l4
125
126 # Access-Request, code 1, authentication vector of zero
127 sign 05 06 00 00 00 0a
128 data 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
129
130 code 4
131
132 sign 05 06 00 00 00 0a
133 data 62 63 f1 db 80 70 a6 64 37 31 63 e4 aa 95 5a 68
134
135 sign 05 06 00 00 00 0a
136 data 62 63 f1 db 80 70 a6 64 37 31 63 e4 aa 95 5a 68
137
138 secret hello
139 sign 05 06 00 00 00 0a
140 data 69 20 c0 b9 e1 2f 12 54 9f 92 16 5e f4 64 9b fd
141
142 secret testing123
143 sign 05 06 00 00 00 0a
144 data 62 63 f1 db 80 70 a6 64 37 31 63 e4 aa 95 5a 68