Lines Matching refs:msg

263 usm_decode(struct snmp_message *msg, struct ber_element *elm, const char **errp)  in usm_decode()  argument
283 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
291 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
304 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
315 (saltlen != (MSG_HAS_PRIV(msg) ? SNMP_USM_SALTLEN : 0))) { in usm_decode()
317 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
324 msg->sm_usmerr = OIDVAL_usmErrEngineId; in usm_decode()
326 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
330 msg->sm_engine_boots = (u_int32_t)engine_boots; in usm_decode()
331 msg->sm_engine_time = (u_int32_t)engine_time; in usm_decode()
333 memcpy(msg->sm_username, user, userlen); in usm_decode()
334 msg->sm_username[userlen] = '\0'; in usm_decode()
335 msg->sm_user = usm_finduser(msg->sm_username); in usm_decode()
336 if (msg->sm_user == NULL) { in usm_decode()
338 msg->sm_usmerr = OIDVAL_usmErrUserName; in usm_decode()
340 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
343 if (MSG_SECLEVEL(msg) > msg->sm_user->uu_seclevel) { in usm_decode()
345 msg->sm_usmerr = OIDVAL_usmErrSecLevel; in usm_decode()
347 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
355 if (!usm_valid_digest(msg, offs + offs2, digest, digestlen)) { in usm_decode()
357 msg->sm_usmerr = OIDVAL_usmErrDigest; in usm_decode()
359 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
363 if (MSG_HAS_PRIV(msg)) { in usm_decode()
364 memcpy(msg->sm_salt, salt, saltlen); in usm_decode()
365 if ((decr = usm_decrypt(msg, elm->be_next)) == NULL) { in usm_decode()
367 msg->sm_usmerr = OIDVAL_usmErrDecrypt; in usm_decode()
369 msg->sm_flags &= SNMP_MSGFLAG_REPORT; in usm_decode()
375 if (MSG_HAS_AUTH(msg)) { in usm_decode()
381 msg->sm_usmerr = OIDVAL_usmErrTimeWindow; in usm_decode()
397 usm_encode(struct snmp_message *msg, struct ber_element *e) in usm_encode() argument
406 msg->sm_digest_offs = 0; in usm_encode()
411 if (MSG_HAS_AUTH(msg)) { in usm_encode()
418 assert(msg->sm_user != NULL); in usm_encode()
421 digestlen = usm_get_digestlen(msg->sm_user->uu_auth); in usm_encode()
425 if (MSG_HAS_PRIV(msg)) { in usm_encode()
427 assert(msg->sm_user != NULL); in usm_encode()
429 ++(msg->sm_user->uu_salt); in usm_encode()
430 memcpy(msg->sm_salt, &msg->sm_user->uu_salt, in usm_encode()
431 sizeof(msg->sm_salt)); in usm_encode()
432 saltlen = sizeof(msg->sm_salt); in usm_encode()
436 msg->sm_engine_boots = (u_int32_t)snmpd_env->sc_engine_boots; in usm_encode()
437 msg->sm_engine_time = (u_int32_t)snmpd_engine_time(); in usm_encode()
440 msg->sm_engine_boots, msg->sm_engine_time, in usm_encode()
441 msg->sm_username)) == NULL) in usm_encode()
447 ober_set_writecallback(a, usm_cb_digest, msg); in usm_encode()
449 if ((a = ober_add_nstring(a, msg->sm_salt, saltlen)) == NULL) in usm_encode()
460 ober_set_writecallback(res, usm_cb_digest, msg); in usm_encode()
472 struct snmp_message *msg = arg; in usm_cb_digest() local
473 msg->sm_digest_offs += offs; in usm_cb_digest()
477 usm_encrypt(struct snmp_message *msg, struct ber_element *pdu) in usm_encrypt() argument
485 if (!MSG_HAS_PRIV(msg)) in usm_encrypt()
498 elen = usm_crypt(msg, ptr, len, encbuf, 1); in usm_encrypt()
513 usm_finalize_digest(struct snmp_message *msg, char *buf, ssize_t len) in usm_finalize_digest() argument
520 if (msg->sm_resp == NULL || in usm_finalize_digest()
521 !MSG_HAS_AUTH(msg) || in usm_finalize_digest()
522 msg->sm_user == NULL || in usm_finalize_digest()
523 msg->sm_digest_offs == 0 || in usm_finalize_digest()
527 if ((digestlen = usm_get_digestlen(msg->sm_user->uu_auth)) == 0) in usm_finalize_digest()
531 assert(msg->sm_digest_offs + digestlen <= (size_t)len); in usm_finalize_digest()
532 assert(!memcmp(buf + msg->sm_digest_offs, digest, digestlen)); in usm_finalize_digest()
535 if ((md = usm_get_md(msg->sm_user->uu_auth)) == NULL) in usm_finalize_digest()
538 HMAC(md, msg->sm_user->uu_authkey, (int)msg->sm_user->uu_authkeylen, in usm_finalize_digest()
541 memcpy(buf + msg->sm_digest_offs, digest, digestlen); in usm_finalize_digest()
546 usm_make_report(struct snmp_message *msg) in usm_make_report() argument
548 appl_report(msg, 0, &OID(MIB_usmStats, msg->sm_usmerr, 0)); in usm_make_report()
552 usm_valid_digest(struct snmp_message *msg, off_t offs, in usm_valid_digest() argument
559 if (!MSG_HAS_AUTH(msg)) in usm_valid_digest()
562 if (digestlen != usm_get_digestlen(msg->sm_user->uu_auth)) in usm_valid_digest()
566 assert(offs + digestlen <= msg->sm_datalen); in usm_valid_digest()
567 assert(bcmp(&msg->sm_data[offs], digest, digestlen) == 0); in usm_valid_digest()
570 if ((md = usm_get_md(msg->sm_user->uu_auth)) == NULL) in usm_valid_digest()
573 memset(&msg->sm_data[offs], 0, digestlen); in usm_valid_digest()
574 HMAC(md, msg->sm_user->uu_authkey, (int)msg->sm_user->uu_authkeylen, in usm_valid_digest()
575 msg->sm_data, msg->sm_datalen, exp_digest, &hlen); in usm_valid_digest()
585 usm_decrypt(struct snmp_message *msg, struct ber_element *encr) in usm_decrypt() argument
598 scoped_pdu_len = usm_crypt(msg, privstr, (int)privlen, buf, 0); in usm_decrypt()
622 usm_crypt(struct snmp_message *msg, u_char *inbuf, int inlen, u_char *outbuf, in usm_crypt() argument
634 if ((cipher = usm_get_cipher(msg->sm_user->uu_priv)) == NULL) in usm_crypt()
637 privkey = (u_char *)msg->sm_user->uu_privkey; in usm_crypt()
641 switch (msg->sm_user->uu_priv) { in usm_crypt()
645 iv[i] = msg->sm_salt[i] ^ privkey[SNMP_USM_SALTLEN + i]; in usm_crypt()
649 ivv = htobe32(msg->sm_engine_boots); in usm_crypt()
651 ivv = htobe32(msg->sm_engine_time); in usm_crypt()
653 memcpy(iv + 2 * sizeof(ivv), msg->sm_salt, SNMP_USM_SALTLEN); in usm_crypt()