1 | -- $Id$
|
---|
2 |
|
---|
3 | DIGEST DEFINITIONS ::=
|
---|
4 | BEGIN
|
---|
5 |
|
---|
6 | IMPORTS EncryptedData, Principal FROM krb5;
|
---|
7 |
|
---|
8 | DigestTypes ::= BIT STRING {
|
---|
9 | ntlm-v1(0),
|
---|
10 | ntlm-v1-session(1),
|
---|
11 | ntlm-v2(2),
|
---|
12 | digest-md5(3),
|
---|
13 | chap-md5(4),
|
---|
14 | ms-chap-v2(5)
|
---|
15 | }
|
---|
16 |
|
---|
17 | DigestInit ::= SEQUENCE {
|
---|
18 | type UTF8String, -- http, sasl, chap, cram-md5 --
|
---|
19 | channel [0] SEQUENCE {
|
---|
20 | cb-type UTF8String,
|
---|
21 | cb-binding UTF8String
|
---|
22 | } OPTIONAL,
|
---|
23 | hostname [1] UTF8String OPTIONAL -- for chap/cram-md5
|
---|
24 | }
|
---|
25 |
|
---|
26 | DigestInitReply ::= SEQUENCE {
|
---|
27 | nonce UTF8String, -- service nonce/challange
|
---|
28 | opaque UTF8String, -- server state
|
---|
29 | identifier [0] UTF8String OPTIONAL
|
---|
30 | }
|
---|
31 |
|
---|
32 |
|
---|
33 | DigestRequest ::= SEQUENCE {
|
---|
34 | type UTF8String, -- http, sasl-md5, chap, cram-md5 --
|
---|
35 | digest UTF8String, -- http:md5/md5-sess sasl:clear/int/conf --
|
---|
36 | username UTF8String, -- username user used
|
---|
37 | responseData UTF8String, -- client response
|
---|
38 | authid [0] UTF8String OPTIONAL,
|
---|
39 | authentication-user [1] Principal OPTIONAL, -- principal to get key from
|
---|
40 | realm [2] UTF8String OPTIONAL,
|
---|
41 | method [3] UTF8String OPTIONAL,
|
---|
42 | uri [4] UTF8String OPTIONAL,
|
---|
43 | serverNonce UTF8String, -- same as "DigestInitReply.nonce"
|
---|
44 | clientNonce [5] UTF8String OPTIONAL,
|
---|
45 | nonceCount [6] UTF8String OPTIONAL,
|
---|
46 | qop [7] UTF8String OPTIONAL,
|
---|
47 | identifier [8] UTF8String OPTIONAL,
|
---|
48 | hostname [9] UTF8String OPTIONAL,
|
---|
49 | opaque UTF8String -- same as "DigestInitReply.opaque"
|
---|
50 | }
|
---|
51 | -- opaque = hex(cksum(type|serverNonce|identifier|hostname,digest-key))
|
---|
52 | -- serverNonce = hex(time[4bytes]random[12bytes])(-cbType:cbBinding)
|
---|
53 |
|
---|
54 |
|
---|
55 | DigestError ::= SEQUENCE {
|
---|
56 | reason UTF8String,
|
---|
57 | code INTEGER (-2147483648..2147483647)
|
---|
58 | }
|
---|
59 |
|
---|
60 | DigestResponse ::= SEQUENCE {
|
---|
61 | success BOOLEAN,
|
---|
62 | rsp [0] UTF8String OPTIONAL,
|
---|
63 | tickets [1] SEQUENCE OF OCTET STRING OPTIONAL,
|
---|
64 | channel [2] SEQUENCE {
|
---|
65 | cb-type UTF8String,
|
---|
66 | cb-binding UTF8String
|
---|
67 | } OPTIONAL,
|
---|
68 | session-key [3] OCTET STRING OPTIONAL
|
---|
69 | }
|
---|
70 |
|
---|
71 | NTLMInit ::= SEQUENCE {
|
---|
72 | flags [0] INTEGER (0..4294967295),
|
---|
73 | hostname [1] UTF8String OPTIONAL,
|
---|
74 | domain [1] UTF8String OPTIONAL
|
---|
75 | }
|
---|
76 |
|
---|
77 | NTLMInitReply ::= SEQUENCE {
|
---|
78 | flags [0] INTEGER (0..4294967295),
|
---|
79 | opaque [1] OCTET STRING,
|
---|
80 | targetname [2] UTF8String,
|
---|
81 | challange [3] OCTET STRING,
|
---|
82 | targetinfo [4] OCTET STRING OPTIONAL
|
---|
83 | }
|
---|
84 |
|
---|
85 | NTLMRequest ::= SEQUENCE {
|
---|
86 | flags [0] INTEGER (0..4294967295),
|
---|
87 | opaque [1] OCTET STRING,
|
---|
88 | username [2] UTF8String,
|
---|
89 | targetname [3] UTF8String,
|
---|
90 | targetinfo [4] OCTET STRING OPTIONAL,
|
---|
91 | lm [5] OCTET STRING,
|
---|
92 | ntlm [6] OCTET STRING,
|
---|
93 | sessionkey [7] OCTET STRING OPTIONAL
|
---|
94 | }
|
---|
95 |
|
---|
96 | NTLMResponse ::= SEQUENCE {
|
---|
97 | success [0] BOOLEAN,
|
---|
98 | flags [1] INTEGER (0..4294967295),
|
---|
99 | sessionkey [2] OCTET STRING OPTIONAL,
|
---|
100 | tickets [3] SEQUENCE OF OCTET STRING OPTIONAL
|
---|
101 | }
|
---|
102 |
|
---|
103 | NTLMRequest2 ::= SEQUENCE {
|
---|
104 | loginUserName [0] UTF8String,
|
---|
105 | loginDomainName [1] UTF8String,
|
---|
106 | flags [2] INTEGER (0..4294967295),
|
---|
107 | lmchallenge [3] OCTET STRING SIZE (8),
|
---|
108 | ntChallengeResponce [4] OCTET STRING,
|
---|
109 | lmChallengeResponce [5] OCTET STRING
|
---|
110 | }
|
---|
111 |
|
---|
112 | NTLMReply ::= SEQUENCE {
|
---|
113 | success [0] BOOLEAN,
|
---|
114 | flags [1] INTEGER (0..4294967295),
|
---|
115 | sessionkey [2] OCTET STRING OPTIONAL
|
---|
116 | }
|
---|
117 |
|
---|
118 | DigestReqInner ::= CHOICE {
|
---|
119 | init [0] DigestInit,
|
---|
120 | digestRequest [1] DigestRequest,
|
---|
121 | ntlmInit [2] NTLMInit,
|
---|
122 | ntlmRequest [3] NTLMRequest,
|
---|
123 | supportedMechs [4] NULL
|
---|
124 | }
|
---|
125 |
|
---|
126 | DigestREQ ::= [APPLICATION 128] SEQUENCE {
|
---|
127 | apReq [0] OCTET STRING,
|
---|
128 | innerReq [1] EncryptedData
|
---|
129 | }
|
---|
130 |
|
---|
131 | DigestRepInner ::= CHOICE {
|
---|
132 | error [0] DigestError,
|
---|
133 | initReply [1] DigestInitReply,
|
---|
134 | response [2] DigestResponse,
|
---|
135 | ntlmInitReply [3] NTLMInitReply,
|
---|
136 | ntlmResponse [4] NTLMResponse,
|
---|
137 | supportedMechs [5] DigestTypes,
|
---|
138 | ...
|
---|
139 | }
|
---|
140 |
|
---|
141 | DigestREP ::= [APPLICATION 129] SEQUENCE {
|
---|
142 | apRep [0] OCTET STRING,
|
---|
143 | innerRep [1] EncryptedData
|
---|
144 | }
|
---|
145 |
|
---|
146 |
|
---|
147 | -- HTTP
|
---|
148 |
|
---|
149 | -- md5
|
---|
150 | -- A1 = unq(username-value) ":" unq(realm-value) ":" passwd
|
---|
151 | -- md5-sess
|
---|
152 | -- A1 = HEX(H(unq(username-value) ":" unq(realm-value) ":" passwd ) ":" unq(nonce-value) ":" unq(cnonce-value))
|
---|
153 |
|
---|
154 | -- qop == auth
|
---|
155 | -- A2 = Method ":" digest-uri-value
|
---|
156 | -- qop == auth-int
|
---|
157 | -- A2 = Method ":" digest-uri-value ":" H(entity-body)
|
---|
158 |
|
---|
159 | -- request-digest = HEX(KD(HEX(H(A1)),
|
---|
160 | -- unq(nonce-value) ":" nc-value ":" unq(cnonce-value) ":" unq(qop-value) ":" HEX(H(A2))))
|
---|
161 | -- no "qop"
|
---|
162 | -- request-digest = HEX(KD(HEX(H(A1)), unq(nonce-value) ":" HEX(H(A2))))
|
---|
163 |
|
---|
164 |
|
---|
165 | -- SASL:
|
---|
166 | -- SS = H( { unq(username-value), ":", unq(realm-value), ":", password } )
|
---|
167 | -- A1 = { SS, ":", unq(nonce-value), ":", unq(cnonce-value) }
|
---|
168 | -- A1 = { SS, ":", unq(nonce-value), ":", unq(cnonce-value), ":", unq(authzid-value) }
|
---|
169 |
|
---|
170 | -- A2 = "AUTHENTICATE:", ":", digest-uri-value
|
---|
171 | -- qop == auth-int,auth-conf
|
---|
172 | -- A2 = "AUTHENTICATE:", ":", digest-uri-value, ":00000000000000000000000000000000"
|
---|
173 |
|
---|
174 | -- response-value = HEX( KD ( HEX(H(A1)),
|
---|
175 | -- { unq(nonce-value), ":" nc-value, ":",
|
---|
176 | -- unq(cnonce-value), ":", qop-value, ":",
|
---|
177 | -- HEX(H(A2)) }))
|
---|
178 |
|
---|
179 | END
|
---|