Hi Openssl,
Recently we identified a following issue when snmpwalk is being done on some tables: $ snmpwalk -t 100 -v3 -l authpriv -u snmpsha -a SHA -A otci1234 -x DES -X otci1234 10.72.181.53 .1.3.6.1.4.1.789.1.5.11.1.1 snmpwalk: Decryption error The problem is in freebsd crypto function - EVP_DecryptFinal_ex(). I have pasted the problem piece of code: /freebsd/crypto/openssl/crypto/evp/evp_enc.c: 458 n=ctx->final[b-1]; 459 if (n == 0 || n > (int)b) 460 { 461 EVPerr(EVP_F_EVP_DECRYPTFINAL_EX,EVP_R_BAD_DECRYPT); 462 return(0); 463 } (n == 0) is a valid case for some OIDs. I have instrumented the code (Added these lines) in file /smf/src/snmp/security/Snmpv3Security.cc. 780 int finalBlkLen = 0; 781 782 cout << "Rakesh blk size" << cipherCtx.cipher->block_size; 783 for (int i=0; i< 8; i++) { 784 int x = cipherCtx.final[i]; 785 cout <<"Rakesh final:" << x << endl; 786 x = cipherCtx.buf[i]; 787 cout << "Rakesh buf:" << x << endl; 788 } 789 790 if (!EVP_DecryptFinal(&cipherCtx, *plain + *plainLen, &finalBlkLen)) { ............ ......... Tables returning decrypt error: ============================== OID: .1.3.6.1.4.1.789.1.25.1.1.0 Rakesh blk size8 Rakesh final:21 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:25 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:0 Rakesh buf:0 Rakesh final:5 Rakesh buf:0 Rakesh final:0 <---- last byte (n==0) Rakesh buf:0 Rakesh blk size8 Rakesh final:21 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:25 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:1 Rakesh buf:0 Rakesh final:0 Rakesh buf:0 Rakesh final:5 Rakesh buf:0 Rakesh final:0 <---- last byte (n==0) Rakesh buf:0 This is working tables : ============================= OID:.1.3.6.1.4.1.789.1.5.8.1.1.1028 Rakesh blk size8 Rakesh final:5 Rakesh buf:0 Rakesh final:0 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 <---- (n==6) Rakesh buf:0 Rakesh blk size8 Rakesh final:5 Rakesh buf:0 Rakesh final:0 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 Rakesh buf:0 Rakesh final:6 <--- (n==6) Rakesh buf:0 Hence the check (n==0) needs to be removed in EVP_DecryptFinal_ex() function. Your thoughts? Regards, Rakesh