@@ -47,6 +47,7 @@ PBKDF2_HMACBuilder::~PBKDF2_HMACBuilder() {
4747
4848void PBKDF2_HMACBuilder::clearData () {
4949 if (derivedKey != nullptr ) {
50+ forced_memzero (derivedKey, derivedKeyLen);
5051 delete[] derivedKey;
5152 derivedKey = nullptr ;
5253 }
@@ -126,6 +127,7 @@ void PBKDF2_HMACBuilder::calculate() {
126127
127128 // Allocate output buffer
128129 if (derivedKey != nullptr ) {
130+ forced_memzero (derivedKey, derivedKeyLen);
129131 delete[] derivedKey;
130132 }
131133 derivedKey = new uint8_t [derivedKeyLen];
@@ -148,9 +150,8 @@ void PBKDF2_HMACBuilder::getChars(char *output) {
148150 log_e (" Error: PBKDF2-HMAC not calculated or no output buffer provided." );
149151 return ;
150152 }
151- for (size_t i = 0 ; i < derivedKeyLen; i++) {
152- output[i] = (char )derivedKey[i];
153- }
153+
154+ bytes2hex (output, derivedKeyLen * 2 + 1 , derivedKey, derivedKeyLen);
154155}
155156
156157String PBKDF2_HMACBuilder::toString () {
@@ -159,19 +160,15 @@ String PBKDF2_HMACBuilder::toString() {
159160 return " " ;
160161 }
161162
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;
163+ char out[(derivedKeyLen * 2 ) + 1 ];
164+ getChars (out);
165+ return String (out);
170166}
171167
172168// PBKDF2 specific methods
173169void PBKDF2_HMACBuilder::setPassword (const uint8_t * password, size_t len) {
174170 if (this ->password != nullptr ) {
171+ forced_memzero (this ->password , len);
175172 delete[] this ->password ;
176173 }
177174 this ->password = new uint8_t [len];
@@ -190,6 +187,7 @@ void PBKDF2_HMACBuilder::setPassword(String password) {
190187
191188void PBKDF2_HMACBuilder::setSalt (const uint8_t * salt, size_t len) {
192189 if (this ->salt != nullptr ) {
190+ forced_memzero (this ->salt , len);
193191 delete[] this ->salt ;
194192 }
195193 this ->salt = new uint8_t [len];
0 commit comments