]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - crypto/heimdal/lib/asn1/digest.asn1
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / crypto / heimdal / lib / asn1 / digest.asn1
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