1313// limitations under the License.
1414
1515#include < Arduino.h>
16+ #include < os.h> // For forced_memzero
1617#include " PBKDF2_HMACBuilder.h"
1718
1819// Block size for HMAC (64 bytes for SHA-1, SHA-256, SHA-512)
@@ -47,6 +48,7 @@ PBKDF2_HMACBuilder::~PBKDF2_HMACBuilder() {
4748
4849void PBKDF2_HMACBuilder::clearData () {
4950 if (derivedKey != nullptr ) {
51+ forced_memzero (derivedKey, derivedKeyLen);
5052 delete[] derivedKey;
5153 derivedKey = nullptr ;
5254 }
@@ -126,6 +128,7 @@ void PBKDF2_HMACBuilder::calculate() {
126128
127129 // Allocate output buffer
128130 if (derivedKey != nullptr ) {
131+ forced_memzero (derivedKey, derivedKeyLen);
129132 delete[] derivedKey;
130133 }
131134 derivedKey = new uint8_t [derivedKeyLen];
@@ -148,9 +151,8 @@ void PBKDF2_HMACBuilder::getChars(char *output) {
148151 log_e (" Error: PBKDF2-HMAC not calculated or no output buffer provided." );
149152 return ;
150153 }
151- for (size_t i = 0 ; i < derivedKeyLen; i++) {
152- output[i] = (char )derivedKey[i];
153- }
154+
155+ bytes2hex (output, derivedKeyLen * 2 + 1 , derivedKey, derivedKeyLen);
154156}
155157
156158String PBKDF2_HMACBuilder::toString () {
@@ -159,19 +161,15 @@ String PBKDF2_HMACBuilder::toString() {
159161 return " " ;
160162 }
161163
162- String result = " " ;
163- for (size_t i = 0 ; i < derivedKeyLen; i++) {
164- if (derivedKey[i] < 0x10 ) {
165- result += " 0" ;
166- }
167- result += String (derivedKey[i], HEX);
168- }
169- return result;
164+ char out[(derivedKeyLen * 2 ) + 1 ];
165+ getChars (out);
166+ return String (out);
170167}
171168
172169// PBKDF2 specific methods
173170void PBKDF2_HMACBuilder::setPassword (const uint8_t * password, size_t len) {
174171 if (this ->password != nullptr ) {
172+ forced_memzero (this ->password , len);
175173 delete[] this ->password ;
176174 }
177175 this ->password = new uint8_t [len];
@@ -190,6 +188,7 @@ void PBKDF2_HMACBuilder::setPassword(String password) {
190188
191189void PBKDF2_HMACBuilder::setSalt (const uint8_t * salt, size_t len) {
192190 if (this ->salt != nullptr ) {
191+ forced_memzero (this ->salt , len);
193192 delete[] this ->salt ;
194193 }
195194 this ->salt = new uint8_t [len];
0 commit comments