38 #ifdef SNMP_PP_NAMESPACE
42 #define SNMPv3_USM_MAX_KEY_LEN 32
45 #define SNMPv3_AP_MAXLENGTH_AUTHPARAM 128
46 #define SNMPv3_AP_MAXLENGTH_PRIVPARAM 128
49 #define SNMPv3_AP_OUTPUT_LENGTH_MD5 16
50 #define SNMPv3_AP_OUTPUT_LENGTH_SHA 20
81 virtual int password_to_key(
const unsigned char *password,
82 const unsigned int password_len,
83 const unsigned char *engine_id,
84 const unsigned int engine_id_len,
86 unsigned int *key_len) = 0;
97 virtual int hash(
const unsigned char *data,
98 const unsigned int data_len,
99 unsigned char *digest)
const = 0;
117 virtual int auth_out_msg(
const unsigned char *key,
120 unsigned char *auth_par_ptr) = 0;
146 virtual int auth_inc_msg(
const unsigned char *key,
149 unsigned char *auth_par_ptr,
150 const int auth_par_len) = 0;
155 virtual int get_id()
const = 0;
161 virtual const char *get_id_string()
const = 0;
172 virtual int get_auth_params_len()
const = 0;
177 virtual int get_hash_len()
const = 0;
217 virtual int encrypt(
const unsigned char *key,
218 const unsigned int key_len,
219 const unsigned char *buffer,
220 const unsigned int buffer_len,
221 unsigned char *out_buffer,
222 unsigned int *out_buffer_len,
223 unsigned char *privacy_params,
224 unsigned int *privacy_params_len,
225 const unsigned long engine_boots,
226 const unsigned long engine_time) = 0;
250 virtual int decrypt(
const unsigned char *key,
251 const unsigned int key_len,
252 const unsigned char *buffer,
253 const unsigned int buffer_len,
254 unsigned char *out_buffer,
255 unsigned int *out_buffer_len,
256 const unsigned char *privacy_params,
257 const unsigned int privacy_params_len,
258 const unsigned long engine_boots,
259 const unsigned long engine_time) = 0;
283 virtual int extend_short_key(
const unsigned char *password,
284 const unsigned int password_len,
285 const unsigned char *engine_id,
286 const unsigned int engine_id_len,
288 unsigned int *key_len,
289 const unsigned int max_key_len,
295 virtual int get_id()
const = 0;
300 virtual const char *get_id_string()
const = 0;
311 virtual int get_priv_params_len()
const = 0;
316 virtual int get_min_key_len()
const = 0;
321 virtual void fix_key_len(
unsigned int &key_len)
const = 0;
364 int add_default_modules();
375 int add_auth(
Auth *auth);
384 int del_auth(
const int auth_id);
395 int add_priv(
Priv *priv);
404 int del_priv(
const int priv_id);
410 int password_to_key_auth(
const int auth_prot,
411 const unsigned char *password,
412 const unsigned int password_len,
413 const unsigned char *engine_id,
414 const unsigned int engine_id_len,
416 unsigned int *key_len);
422 int password_to_key_priv(
const int auth_prot,
424 const unsigned char *password,
425 const unsigned int password_len,
426 const unsigned char *engine_id,
427 const unsigned int engine_id_len,
429 unsigned int *key_len);
435 int get_keychange_value(
const int auth_prot,
443 Priv *get_priv(
const int priv_prot);
448 Auth *get_auth(
const int auth_prot);
457 int get_auth_id(
const char *string_id)
const;
466 int get_priv_id(
const char *string_id)
const;
471 int encrypt_msg(
const int priv_prot,
472 const unsigned char *key,
473 const unsigned int key_len,
474 const unsigned char *buffer,
475 const unsigned int buffer_len,
476 unsigned char *out_buffer,
477 unsigned int *out_buffer_len,
478 unsigned char *privacy_params,
479 unsigned int *privacy_params_len,
480 const unsigned long engine_boots,
481 const unsigned long engine_time);
486 int decrypt_msg(
const int priv_prot,
487 const unsigned char *key,
488 const unsigned int key_len,
489 const unsigned char *buffer,
490 const unsigned int buffer_len,
491 unsigned char *out_buffer,
492 unsigned int *out_buffer_len,
493 const unsigned char *privacy_params,
494 const unsigned int privacy_params_len,
495 const unsigned long engine_boots,
496 const unsigned long engine_time);
502 int get_auth_params_len(
const int auth_prot);
508 int get_priv_params_len(
const int priv_prot);
513 int auth_out_msg(
const int auth_prot,
514 const unsigned char *key,
517 unsigned char *auth_par_ptr);
522 int auth_inc_msg(
const int auth_prot,
523 const unsigned char *key,
526 unsigned char *auth_par_ptr,
527 const int auth_par_len);
547 int password_to_key(
const unsigned char *password,
548 const unsigned int password_len,
549 const unsigned char *engine_id,
550 const unsigned int engine_id_len,
552 unsigned int *key_len);
554 int hash(
const unsigned char *data,
555 const unsigned int data_len,
556 unsigned char *digest)
const;
558 int auth_out_msg(
const unsigned char *key,
561 unsigned char *auth_par_ptr);
563 int auth_inc_msg(
const unsigned char *key,
566 unsigned char *auth_par_ptr,
567 const int auth_par_len);
586 int password_to_key(
const unsigned char *password,
587 const unsigned int password_len,
588 const unsigned char *engine_id,
589 const unsigned int engine_id_len,
591 unsigned int *key_len);
593 int hash(
const unsigned char *data,
594 const unsigned int data_len,
595 unsigned char *digest)
const;
597 int auth_out_msg(
const unsigned char *key,
600 unsigned char *auth_par_ptr);
603 int auth_inc_msg(
const unsigned char *key,
606 unsigned char *auth_par_ptr,
607 const int auth_par_len);
626 #if defined(_USE_LIBTOMCRYPT) && !defined(_USE_OPENSSL)
632 int encrypt(
const unsigned char *key,
633 const unsigned int key_len,
634 const unsigned char *buffer,
635 const unsigned int buffer_len,
636 unsigned char *out_buffer,
637 unsigned int *out_buffer_len,
638 unsigned char *privacy_params,
639 unsigned int *privacy_params_len,
640 const unsigned long engine_boots,
641 const unsigned long engine_time);
643 int decrypt(
const unsigned char *key,
644 const unsigned int key_len,
645 const unsigned char *buffer,
646 const unsigned int buffer_len,
647 unsigned char *out_buffer,
648 unsigned int *out_buffer_len,
649 const unsigned char *privacy_params,
650 const unsigned int privacy_params_len,
651 const unsigned long engine_boots,
652 const unsigned long engine_time);
655 const unsigned int password_len,
656 const unsigned char *engine_id,
657 const unsigned int engine_id_len,
659 unsigned int *key_len,
660 const unsigned int max_key_len,
679 { key_len = (key_len >= 16 ? 16 : 0); };
692 int encrypt(
const unsigned char *key,
693 const unsigned int key_len,
694 const unsigned char *buffer,
695 const unsigned int buffer_len,
696 unsigned char *out_buffer,
697 unsigned int *out_buffer_len,
698 unsigned char *privacy_params,
699 unsigned int *privacy_params_len,
700 const unsigned long engine_boots,
701 const unsigned long engine_time);
703 int decrypt(
const unsigned char *key,
704 const unsigned int key_len,
705 const unsigned char *buffer,
706 const unsigned int buffer_len,
707 unsigned char *out_buffer,
708 unsigned int *out_buffer_len,
709 const unsigned char *privacy_params,
710 const unsigned int privacy_params_len,
711 const unsigned long engine_boots,
712 const unsigned long engine_time);
714 int extend_short_key(
const unsigned char *password,
715 const unsigned int password_len,
716 const unsigned char *engine_id,
717 const unsigned int engine_id_len,
719 unsigned int *key_len,
720 const unsigned int max_key_len,
725 const char *get_id_string()
const {
return "IDEA"; };
726 int get_priv_params_len()
const {
return 8; };
727 int get_min_key_len()
const {
return 16; };
728 void fix_key_len(
unsigned int &key_len)
const
729 { key_len = (key_len >= 16 ? 16 : 0); };
735 #if defined(_USE_LIBTOMCRYPT) || defined(_USE_OPENSSL)
746 PrivAES(
const int aes_type_);
748 int encrypt(
const unsigned char *key,
749 const unsigned int key_len,
750 const unsigned char *buffer,
751 const unsigned int buffer_len,
752 unsigned char *out_buffer,
753 unsigned int *out_buffer_len,
754 unsigned char *privacy_params,
755 unsigned int *privacy_params_len,
756 const unsigned long engine_boots,
757 const unsigned long engine_time);
759 int decrypt(
const unsigned char *key,
760 const unsigned int key_len,
761 const unsigned char *buffer,
762 const unsigned int buffer_len,
763 unsigned char *out_buffer,
764 unsigned int *out_buffer_len,
765 const unsigned char *privacy_params,
766 const unsigned int privacy_params_len,
767 const unsigned long engine_boots,
768 const unsigned long engine_time);
770 int extend_short_key(
const unsigned char *password,
771 const unsigned int password_len,
772 const unsigned char *engine_id,
773 const unsigned int engine_id_len,
775 unsigned int *key_len,
776 const unsigned int max_key_len,
779 int get_id()
const {
return aes_type; };
780 const char *get_id_string()
const;
781 int get_priv_params_len()
const {
return 8; };
782 int get_min_key_len()
const {
return key_bytes; };
783 void fix_key_len(
unsigned int &key_len)
const
784 { key_len = (key_len >= (unsigned)key_bytes ? key_bytes : 0); };
790 #if defined(_USE_LIBTOMCRYPT) && !defined(_USE_OPENSSL)
795 #endif // _USE_LIBTOMCRYPT or _USE_OPENSSL
804 #define TRIPLEDES_EDE_KEY_LEN 32
810 #if defined(_USE_LIBTOMCRYPT) && !defined(_USE_OPENSSL)
817 int encrypt(
const unsigned char *key,
818 const unsigned int key_len,
819 const unsigned char *buffer,
820 const unsigned int buffer_len,
821 unsigned char *out_buffer,
822 unsigned int *out_buffer_len,
823 unsigned char *privacy_params,
824 unsigned int *privacy_params_len,
825 const unsigned long engine_boots,
826 const unsigned long engine_time);
828 int decrypt(
const unsigned char *key,
829 const unsigned int key_len,
830 const unsigned char *buffer,
831 const unsigned int buffer_len,
832 unsigned char *out_buffer,
833 unsigned int *out_buffer_len,
834 const unsigned char *privacy_params,
835 const unsigned int privacy_params_len,
836 const unsigned long engine_boots,
837 const unsigned long engine_time);
839 int extend_short_key(
const unsigned char *password,
840 const unsigned int password_len,
841 const unsigned char *engine_id,
842 const unsigned int engine_id_len,
844 unsigned int *key_len,
845 const unsigned int max_key_len,
849 const char *get_id_string()
const {
return "3DESEDE"; };
850 int get_priv_params_len()
const {
return 8; };
851 int get_min_key_len()
const {
return TRIPLEDES_EDE_KEY_LEN; };
852 void fix_key_len(
unsigned int &key_len)
const
853 { key_len = (key_len >= TRIPLEDES_EDE_KEY_LEN
854 ? TRIPLEDES_EDE_KEY_LEN : 0); };
860 #endif // _USE_3DES_EDE
862 #ifdef SNMP_PP_NAMESPACE
Class that holds all authentication and privacy protocols for a snmp entity.
Authentication module using SHA.
int get_auth_params_len() const
Get the maximum length that is needed for the msgAuthenticationParameters field.
int get_min_key_len() const
Get the minimum key length needed for encryption and decryption.
#define SNMP_PRIVPROTOCOL_IDEA
IDEA (non standard)
int get_priv_params_len() const
Get the maximum length that is needed for the msgPrivacyParameters field.
#define SNMPv3_AP_OUTPUT_LENGTH_MD5
int get_hash_len() const
Get length of a hash output.
int priv_size
current size of the priv array
int get_id() const
Get the unique id of the authentication protocol.
#define SNMP_AUTHPROTOCOL_HMACMD5
HMAC-MD5.
int get_id() const
Get the uniqhe id of the privacy protocol.
void fix_key_len(unsigned int &key_len) const
Decrease a too long length to the right value.
int extend_short_key(const unsigned char *password, const unsigned int password_len, const unsigned char *engine_id, const unsigned int engine_id_len, unsigned char *key, unsigned int *key_len, const unsigned int max_key_len, Auth *auth)
Extend a localized key that is too short.
const char * get_id_string() const
Get the unique identifier string of the privacy protocol.
pp_uint64 salt
current salt value (64 bits)
AuthPtr * auth
Array of pointers to Auth-objects.
int get_auth_params_len() const
Get the maximum length that is needed for the msgAuthenticationParameters field.
PrivPtr * priv
Array of pointers to Priv-objects.
Abstract class for priv modules.
unsigned long long pp_uint64
Abstract class for auth modules.
const char * get_id_string() const
Get the unique identifier string of the authentication protocol.
virtual void set_salt(pp_uint64 *new_salt)
Set the pointer to the salt that should be used.
Encryption module using DES.
virtual void set_salt(pp_uint64 *new_salt)
Set the pointer to the salt that should be used.
#define SNMP_PRIVPROTOCOL_3DESEDE
3DES (expired draft standard)
#define SNMP_AUTHPROTOCOL_HMACSHA
HMAC-SHA.
#define SNMPv3_AP_OUTPUT_LENGTH_SHA
Authentication module using MD5.
int get_id() const
Get the unique id of the authentication protocol.
int auth_size
current size of the auth array
int get_hash_len() const
Get length of a hash output.
#define SNMP_PRIVPROTOCOL_DES
DES.
const char * get_id_string() const
Get the unique identifier string of the authentication protocol.