snmpusm.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*
  2. * snmpusm.h
  3. *
  4. * Header file for USM support.
  5. *
  6. * Portions of this file are copyrighted by:
  7. * Copyright (c) 2016 VMware, Inc. All rights reserved.
  8. * Use is subject to license terms specified in the COPYING file
  9. * distributed with the Net-SNMP package.
  10. */
  11. #ifndef SNMPUSM_H
  12. #define SNMPUSM_H
  13. #include <net-snmp/library/callback.h>
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #define WILDCARDSTRING "*"
  18. /*
  19. * General.
  20. */
  21. #define USM_MAX_ID_LENGTH 1024 /* In bytes. */
  22. #define USM_MAX_SALT_LENGTH 128 /* In BITS. */
  23. #define USM_DES_SALT_LENGTH 64 /* In BITS. */
  24. #define USM_AES_SALT_LENGTH 128 /* In BITS. */
  25. #define USM_MAX_KEYEDHASH_LENGTH 128 /* In BITS. */
  26. #define USM_TIME_WINDOW 150
  27. #define USM_MD5_AND_SHA_AUTH_LEN 12 /* bytes */
  28. #define USM_HMAC128SHA224_AUTH_LEN 16 /* OPTIONAL */
  29. #define USM_HMAC192SHA256_AUTH_LEN 24 /* MUST */
  30. #define USM_HMAC256SHA384_AUTH_LEN 32 /* OPTIONAL */
  31. #define USM_HMAC384SHA512_AUTH_LEN 48 /* SHOULD */
  32. #define USM_MAX_AUTHSIZE USM_HMAC384SHA512_AUTH_LEN
  33. #define USM_SEC_MODEL_NUMBER SNMP_SEC_MODEL_USM
  34. /*
  35. * Structures.
  36. */
  37. struct usmStateReference;
  38. /*
  39. * struct usmUser: a structure to represent a given user in a list
  40. */
  41. /*
  42. * Note: Any changes made to this structure need to be reflected in
  43. * the following functions:
  44. */
  45. struct usmUser;
  46. struct usmUser {
  47. u_int flags;
  48. u_char *engineID;
  49. size_t engineIDLen;
  50. char *name;
  51. char *secName;
  52. oid *cloneFrom;
  53. size_t cloneFromLen;
  54. oid *authProtocol;
  55. size_t authProtocolLen;
  56. u_char *authKey;
  57. size_t authKeyLen;
  58. u_char *authKeyKu;
  59. size_t authKeyKuLen;
  60. oid *privProtocol;
  61. size_t privProtocolLen;
  62. u_char *privKeyKu;
  63. size_t privKeyKuLen;
  64. u_char *privKey;
  65. size_t privKeyLen;
  66. u_char *userPublicString;
  67. size_t userPublicStringLen;
  68. int userStatus;
  69. int userStorageType;
  70. /* these are actually DH * pointers but only if openssl is avail. */
  71. void *usmDHUserAuthKeyChange;
  72. void *usmDHUserPrivKeyChange;
  73. struct usmUser *next;
  74. struct usmUser *prev;
  75. };
  76. #define USMUSER_FLAG_KEEP_MASTER_KEY 0x01
  77. /*
  78. * Prototypes.
  79. */
  80. NETSNMP_IMPORT
  81. int usm_extend_user_kul(struct usmUser *user,
  82. u_int privKeyBufSize);
  83. NETSNMP_IMPORT
  84. struct usmUser *usm_get_userList(void);
  85. NETSNMP_IMPORT
  86. struct usmUser *usm_get_user(const u_char *engineID, size_t engineIDLen,
  87. const char *name);
  88. NETSNMP_IMPORT
  89. struct usmUser *usm_add_user(struct usmUser *user);
  90. NETSNMP_IMPORT
  91. struct usmUser *usm_free_user(struct usmUser *user);
  92. NETSNMP_IMPORT
  93. struct usmUser *usm_create_user(void);
  94. NETSNMP_IMPORT
  95. struct usmUser *usm_cloneFrom_user(struct usmUser *from,
  96. struct usmUser *to);
  97. NETSNMP_IMPORT
  98. struct usmUser *usm_remove_user(struct usmUser *user);
  99. NETSNMP_IMPORT
  100. void usm_parse_config_usmUser(const char *token,
  101. char *line);
  102. NETSNMP_IMPORT
  103. void usm_set_user_password(struct usmUser *user,
  104. const char *token, char *line);
  105. void init_usm(void);
  106. NETSNMP_IMPORT
  107. void init_usm_conf(const char *app);
  108. NETSNMP_IMPORT
  109. void shutdown_usm(void);
  110. NETSNMP_IMPORT
  111. int usm_lookup_auth_type(const char *str);
  112. NETSNMP_IMPORT
  113. const char *usm_lookup_auth_str(int value);
  114. NETSNMP_IMPORT
  115. oid *usm_get_auth_oid(int auth_type, size_t *oid_len);
  116. NETSNMP_IMPORT
  117. int usm_lookup_priv_type(const char *str);
  118. NETSNMP_IMPORT
  119. const char *usm_lookup_priv_str(int value);
  120. NETSNMP_IMPORT
  121. oid *usm_get_priv_oid(int priv_type, size_t *oid_len);
  122. #define USM_CREATE_USER_AUTH_DFLT -1
  123. #define USM_CREATE_USER_AUTH_NONE NETSNMP_USMAUTH_NONE
  124. #define USM_CREATE_USER_AUTH_MD5 NETSNMP_USMAUTH_HMACMD5
  125. #define USM_CREATE_USER_AUTH_SHA1 NETSNMP_USMAUTH_HMACSHA1
  126. #define USM_CREATE_USER_AUTH_SHA USM_CREATE_USER_AUTH_SHA1
  127. #define USM_CREATE_USER_AUTH_SHA512 NETSNMP_USMAUTH_HMAC384SHA512
  128. #define USM_CREATE_USER_AUTH_SHA384 NETSNMP_USMAUTH_HMAC256SHA384
  129. #define USM_CREATE_USER_AUTH_SHA256 NETSNMP_USMAUTH_HMAC192SHA256
  130. #define USM_CREATE_USER_AUTH_SHA224 NETSNMP_USMAUTH_HMAC128SHA224
  131. /** flags for variants fo priv algorithsm */
  132. #define USM_DES_FLAG_3 0x000100
  133. #define USM_AES_FLAG_192 0x000100
  134. #define USM_AES_FLAG_256 0x000200
  135. #define USM_AES_REEDER_FLAG 0x030000
  136. #define USM_AES_FLAG_CISCO 0x100000
  137. #define USM_PRIV_MASK_ALG 0x0000ff
  138. #define USM_PRIV_MASK_VARIANT 0x00ff00
  139. #define USM_CREATE_USER_PRIV_DFLT -1
  140. #define USM_CREATE_USER_PRIV_NONE 0
  141. #define USM_CREATE_USER_PRIV_DES 0x01
  142. #define USM_CREATE_USER_PRIV_3DES \
  143. (USM_CREATE_USER_PRIV_DES | USM_DES_FLAG_3)
  144. #define USM_CREATE_USER_PRIV_AES 0x02
  145. #define USM_CREATE_USER_PRIV_AES192 \
  146. (USM_CREATE_USER_PRIV_AES | USM_AES_FLAG_192)
  147. #define USM_CREATE_USER_PRIV_AES256 \
  148. (USM_CREATE_USER_PRIV_AES | USM_AES_FLAG_256)
  149. #define USM_CREATE_USER_PRIV_AES192_CISCO \
  150. (USM_CREATE_USER_PRIV_AES | USM_AES_FLAG_192 | USM_AES_FLAG_CISCO \
  151. | USM_AES_REEDER_FLAG)
  152. #define USM_CREATE_USER_PRIV_AES256_CISCO \
  153. (USM_CREATE_USER_PRIV_AES | USM_AES_FLAG_256 | USM_AES_FLAG_CISCO \
  154. | USM_AES_REEDER_FLAG)
  155. NETSNMP_IMPORT
  156. int usm_create_user_from_session(netsnmp_session * session);
  157. NETSNMP_IMPORT
  158. void usm_parse_create_usmUser(const char *token,
  159. char *line);
  160. NETSNMP_IMPORT
  161. const oid *get_default_authtype(size_t *);
  162. NETSNMP_IMPORT
  163. const oid *get_default_privtype(size_t *);
  164. #ifdef __cplusplus
  165. }
  166. #endif
  167. #endif /* SNMPUSM_H */