|
|
1.1 root 1: -- $Header: Authentication3.cr,v 1.1 86/12/10 13:34:24 ed Exp $ --
2:
3: -- $Log: Authentication3.cr,v $
4: -- Revision 1.1 86/12/10 13:34:24 ed
5: -- Initial revision
6: --
7: --
8:
9: Authentication: PROGRAM 14 VERSION 3 =
10:
11: BEGIN
12: DEPENDS UPON Time(15) VERSION 2;
13:
14: -- faked dependency: should be DEPENDS UPON Clearinghouse(2) VERSION 3; --
15:
16: Organization: TYPE = STRING;
17: Domain: TYPE = STRING;
18: Object: TYPE = STRING;
19:
20: ThreePartName: TYPE = RECORD [
21: organization: Organization,
22: domain: Domain,
23: object: Object
24: ];
25:
26: Clearinghouse_Name: TYPE = ThreePartName;
27:
28:
29: -- TYPES --
30:
31: -- Types supporting encoding --
32:
33: Key: TYPE = ARRAY 4 OF UNSPECIFIED; -- lsb of each octet is odd parity bit --
34:
35: Block: TYPE = ARRAY 4 OF UNSPECIFIED; -- cipher text or plain text block --
36:
37: HashedPassword: TYPE = CARDINAL;
38:
39: -- Types describing credentials and verifiers --
40:
41: CredentialsType: TYPE = {simple(0), strong(1)};
42:
43: simpleCredentials: CredentialsType = simple;
44:
45: Credentials: TYPE = RECORD [type: CredentialsType,
46: value: SEQUENCE OF UNSPECIFIED];
47:
48: -- nullCredentials doesn't work yet --
49: -- nullCredentials: Credentials = [type: simple, value: []]; --
50:
51: CredentialsPackage: TYPE = RECORD [
52: credentials: Credentials,
53: nonce: LONG CARDINAL,
54: recipient: Clearinghouse_Name,
55: conversationKey: Key ];
56:
57: -- instances of the following type must be a multiple of 64 bits, padded --
58: -- with zeros, before encryption --
59:
60: StrongCredentials: TYPE = RECORD [
61: conversationKey: Key,
62: expirationTime: Time.Time,
63: initiator: Clearinghouse_Name ];
64:
65: SimpleCredentials: TYPE = Clearinghouse_Name;
66:
67: Verifier: TYPE = SEQUENCE 12 OF UNSPECIFIED;
68:
69: StrongVerifier: TYPE = RECORD [
70: timeStamp: Time.Time,
71: ticks: LONG CARDINAL ];
72:
73: SimpleVerifier: TYPE = HashedPassword;
74:
75: Proxy: TYPE = SEQUENCE OF UNSPECIFIED;
76:
77: -- instances of the following type must be a multiple of 64 bits, padded --
78: -- with zeros, before encryption --
79:
80: StrongProxy: TYPE = RECORD [
81: randomBits: Block,
82: expirationTime: Time.Time,
83: agent: Clearinghouse_Name];
84:
85: SimpleProxy: TYPE = BOOLEAN;
86:
87: -- ERRORS --
88:
89: Problem: TYPE = {
90: credentialsInvalid(0), -- credentials unacceptable --
91: verifierInvalid(1), -- verifier unacceptable --
92: verifierExpired(2), -- the verifier was too old --
93: verifierReused(3), -- the verifier has been used before --
94: credentialsExpired(4), -- the credentials have expired --
95: inappropriateCredentials(5), -- passed strong, wanted simple, or vica versa --
96: proxyInvalid(6), -- proxy has invalid format --
97: proxyExpired(7), -- the proxy was too old --
98: otherProblem(8) };
99: AuthenticationError: ERROR[problem: Problem] = 2;
100:
101: CallProblem: TYPE = {
102: tooBusy(0), -- server is too busy to service this request --
103: accessRightsInsufficient(1), -- operation prevented by access controls --
104: keysUnavailable(2), -- the server which holds the required key was inaccessible --
105: strongKeyDoesNotExist(3), -- a strong key critical to this operation has not been registered --
106: simpleKeyDoesNotExist(4), -- a simple key critical to this operation has not been registered --
107: strongKeyAlreadyRegistered(5), -- cannot create a strong key for an entity which already has one --
108: simpleKeyAlreadyRegistered(6), -- cannot create a simple key for an entity which already has one --
109: domainForNewKeyUnavailable(7), -- cannot create a new key because the domain to hold it is unaccessible --
110: domainForNewKeyUnknown(8), -- cannot create a new key because the domain to hold it is unknown --
111: badKey(9), -- bad key passed to CreateStrongKey or ChangeStrongKey --
112: badName(10), -- bad name passed to CreateStrongKey or ChangeStrongKey --
113: databaseFull(11), -- no more data can be added to the Authentication database --
114: otherCallProblem(12) };
115: Which: TYPE = {notApplicable(0), initiator(1), recipient(2), agent(3) };
116: CallError: ERROR [problem: CallProblem, whichArg: Which] = 1;
117:
118:
119: -- PROCEDURES --
120:
121: -- Strong Authentication --
122:
123: GetStrongCredentials: PROCEDURE [
124: initiator, recipient: Clearinghouse_Name,
125: nonce: LONG CARDINAL ]
126: RETURNS [ credentialsPackage: SEQUENCE OF UNSPECIFIED ]
127: -- encrypted with the initiator's strong key --
128: REPORTS [ CallError ] = 1;
129:
130: TradeProxyForCredentials: PROCEDURE [
131: credentials: Credentials, verifier: Verifier,
132: initiator: Clearinghouse_Name, proxy: Proxy,
133: recipient: Clearinghouse_Name, nonce: LONG CARDINAL ]
134: RETURNS [ credentialsPackage: SEQUENCE OF UNSPECIFIED,
135: -- enxrypted with the agent's strong key --
136: proxyForRecipient: Proxy ]
137: REPORTS [ AuthenticationError, CallError ] = 9;
138:
139: CreateStrongKey: PROCEDURE [
140: credentials: Credentials, verifier: Verifier,
141: name: Clearinghouse_Name, encryptedKey: Block ]
142: REPORTS [ AuthenticationError, CallError ] = 3;
143:
144: ChangeStrongKey: PROCEDURE [
145: credentials: Credentials, verifier: Verifier,
146: encryptedNewKey: Block ]
147: REPORTS [ AuthenticationError, CallError ] = 4;
148:
149: DeleteStrongKey: PROCEDURE [
150: credentials: Credentials, verifier: Verifier,
151: name: Clearinghouse_Name ]
152: REPORTS [ AuthenticationError, CallError ] = 5;
153:
154:
155: -- Simple Authentication --
156:
157: CheckSimpleCredentials: PROCEDURE [
158: credentials: Credentials, verifier: Verifier ]
159: RETURNS [ ok: BOOLEAN, initiator: Clearinghouse_Name ]
160: REPORTS [ AuthenticationError, CallError ] = 2;
161:
162: CreateSimpleKey: PROCEDURE [
163: credentials: Credentials, verifier: Verifier,
164: name: Clearinghouse_Name, key: HashedPassword ]
165: REPORTS [ AuthenticationError, CallError ] = 6;
166:
167: ChangeSimpleKey: PROCEDURE [
168: credentials: Credentials, verifier: Verifier,
169: newKey: HashedPassword ]
170: REPORTS [ AuthenticationError, CallError ] = 7;
171:
172: DeleteSimpleKey: PROCEDURE [
173: credentials: Credentials, verifier: Verifier,
174: name: Clearinghouse_Name ]
175: REPORTS [ AuthenticationError, CallError ] = 8;
176:
177:
178: END.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.