# BRCM_VERSION=3
[bcm963xx.git] / userapps / opensource / net-snmp / include / net-snmp / library / snmpusm.h
1 /*
2  * snmpusm.h
3  *
4  * Header file for USM support.
5  */
6
7 #ifndef SNMPUSM_H
8 #define SNMPUSM_H
9
10 #ifdef __cplusplus
11 extern          "C" {
12 #endif
13
14 #define WILDCARDSTRING "*"
15
16     /*
17      * General.
18      */
19 #define USM_MAX_ID_LENGTH               1024    /* In bytes. */
20 #define USM_MAX_SALT_LENGTH             128     /* In BITS. */
21 #define USM_DES_SALT_LENGTH             64      /* In BITS. */
22 #define USM_AES_SALT_LENGTH             128     /* In BITS. */
23 #define USM_MAX_KEYEDHASH_LENGTH        128     /* In BITS. */
24
25 #define USM_TIME_WINDOW                 150
26 #define USM_MD5_AND_SHA_AUTH_LEN        12      /* bytes */
27 #define USM_MAX_AUTHSIZE                USM_MD5_AND_SHA_AUTH_LEN
28
29 #define USM_SEC_MODEL_NUMBER            3
30
31     /*
32      * Structures.
33      */
34     struct usmStateReference {
35         char           *usr_name;
36         size_t          usr_name_length;
37         u_char         *usr_engine_id;
38         size_t          usr_engine_id_length;
39         oid            *usr_auth_protocol;
40         size_t          usr_auth_protocol_length;
41         u_char         *usr_auth_key;
42         size_t          usr_auth_key_length;
43         oid            *usr_priv_protocol;
44         size_t          usr_priv_protocol_length;
45         u_char         *usr_priv_key;
46         size_t          usr_priv_key_length;
47         u_int           usr_sec_level;
48     };
49
50
51     /*
52      * struct usmUser: a structure to represent a given user in a list 
53      */
54     /*
55      * Note: Any changes made to this structure need to be reflected in
56      * the following functions: 
57      */
58
59     struct usmUser;
60     struct usmUser {
61         u_char         *engineID;
62         size_t          engineIDLen;
63         char           *name;
64         char           *secName;
65         oid            *cloneFrom;
66         size_t          cloneFromLen;
67         oid            *authProtocol;
68         size_t          authProtocolLen;
69         u_char         *authKey;
70         size_t          authKeyLen;
71         oid            *privProtocol;
72         size_t          privProtocolLen;
73         u_char         *privKey;
74         size_t          privKeyLen;
75         u_char         *userPublicString;
76         int             userStatus;
77         int             userStorageType;
78         struct usmUser *next;
79         struct usmUser *prev;
80     };
81
82
83
84     /*
85      * Prototypes.
86      */
87     struct usmStateReference *usm_malloc_usmStateReference(void);
88
89     void            usm_free_usmStateReference(void *old);
90
91     int             usm_set_usmStateReference_name(struct usmStateReference
92                                                    *ref, char *name,
93                                                    size_t name_len);
94
95     int             usm_set_usmStateReference_engine_id(struct
96                                                         usmStateReference
97                                                         *ref,
98                                                         u_char * engine_id,
99                                                         size_t
100                                                         engine_id_len);
101
102     int             usm_set_usmStateReference_auth_protocol(struct
103                                                             usmStateReference
104                                                             *ref,
105                                                             oid *
106                                                             auth_protocol,
107                                                             size_t
108                                                             auth_protocol_len);
109
110     int             usm_set_usmStateReference_auth_key(struct
111                                                        usmStateReference
112                                                        *ref,
113                                                        u_char * auth_key,
114                                                        size_t
115                                                        auth_key_len);
116
117     int             usm_set_usmStateReference_priv_protocol(struct
118                                                             usmStateReference
119                                                             *ref,
120                                                             oid *
121                                                             priv_protocol,
122                                                             size_t
123                                                             priv_protocol_len);
124
125     int             usm_set_usmStateReference_priv_key(struct
126                                                        usmStateReference
127                                                        *ref,
128                                                        u_char * priv_key,
129                                                        size_t
130                                                        priv_key_len);
131
132     int             usm_set_usmStateReference_sec_level(struct
133                                                         usmStateReference
134                                                         *ref,
135                                                         int sec_level);
136
137 #ifdef SNMP_TESTING_CODE
138     void            emergency_print(u_char * field, u_int length);
139 #endif
140
141     int             asn_predict_int_length(int type, long number,
142                                            size_t len);
143
144     int             asn_predict_length(int type, u_char * ptr,
145                                        size_t u_char_len);
146
147     int             usm_set_salt(u_char * iv,
148                                  size_t * iv_length,
149                                  u_char * priv_salt,
150                                  size_t priv_salt_length,
151                                  u_char * msgSalt);
152
153     int             usm_parse_security_parameters(u_char * secParams,
154                                                   size_t remaining,
155                                                   u_char * secEngineID,
156                                                   size_t * secEngineIDLen,
157                                                   u_int * boots_uint,
158                                                   u_int * time_uint,
159                                                   char *secName,
160                                                   size_t * secNameLen,
161                                                   u_char * signature,
162                                                   size_t *
163                                                   signature_length,
164                                                   u_char * salt,
165                                                   size_t * salt_length,
166                                                   u_char ** data_ptr);
167
168     int             usm_check_and_update_timeliness(u_char * secEngineID,
169                                                     size_t secEngineIDLen,
170                                                     u_int boots_uint,
171                                                     u_int time_uint,
172                                                     int *error);
173
174     SecmodOutMsg    usm_secmod_generate_out_msg;
175     SecmodOutMsg    usm_secmod_generate_out_msg;
176     SecmodInMsg     usm_secmod_process_in_msg;
177     int             usm_generate_out_msg(int, u_char *, size_t, int, int,
178                                          u_char *, size_t, char *, size_t,
179                                          int, u_char *, size_t, void *,
180                                          u_char *, size_t *, u_char **,
181                                          size_t *);
182     int             usm_rgenerate_out_msg(int, u_char *, size_t, int, int,
183                                           u_char *, size_t, char *, size_t,
184                                           int, u_char *, size_t, void *,
185                                           u_char **, size_t *, size_t *);
186
187     int             usm_process_in_msg(int, size_t, u_char *, int, int,
188                                        u_char *, size_t, u_char *,
189                                        size_t *, char *, size_t *,
190                                        u_char **, size_t *, size_t *,
191                                        void **, netsnmp_session *, u_char);
192
193     int             usm_check_secLevel(int level, struct usmUser *user);
194     struct usmUser *usm_get_userList(void);
195     struct usmUser *usm_get_user(u_char * engineID, size_t engineIDLen,
196                                  char *name);
197     struct usmUser *usm_get_user_from_list(u_char * engineID,
198                                            size_t engineIDLen, char *name,
199                                            struct usmUser *userList,
200                                            int use_default);
201     struct usmUser *usm_add_user(struct usmUser *user);
202     struct usmUser *usm_add_user_to_list(struct usmUser *user,
203                                          struct usmUser *userList);
204     struct usmUser *usm_free_user(struct usmUser *user);
205     struct usmUser *usm_create_user(void);
206     struct usmUser *usm_create_initial_user(const char *name,
207                                             const oid * authProtocol,
208                                             size_t authProtocolLen,
209                                             const oid * privProtocol,
210                                             size_t privProtocolLen);
211     struct usmUser *usm_cloneFrom_user(struct usmUser *from,
212                                        struct usmUser *to);
213     struct usmUser *usm_remove_user(struct usmUser *user);
214     struct usmUser *usm_remove_user_from_list(struct usmUser *user,
215                                               struct usmUser **userList);
216     char           *get_objid(char *line, oid ** optr, size_t * len);
217     void            usm_save_users(const char *token, const char *type);
218     void            usm_save_users_from_list(struct usmUser *user,
219                                              const char *token,
220                                              const char *type);
221     void            usm_save_user(struct usmUser *user, const char *token,
222                                   const char *type);
223     SNMPCallback    usm_store_users;
224     struct usmUser *usm_read_user(char *line);
225     void            usm_parse_config_usmUser(const char *token,
226                                              char *line);
227
228     void            usm_set_password(const char *token, char *line);
229     void            usm_set_user_password(struct usmUser *user,
230                                           const char *token, char *line);
231     void            init_usm(void);
232     int             init_usm_post_config(int majorid, int minorid,
233                                          void *serverarg, void *clientarg);
234
235 #ifdef __cplusplus
236 }
237 #endif
238 #endif                          /* SNMPUSM_H */