forked from wolfSSL/wolfssl
fix code format, only spaces added, no code has been modified.
This commit is contained in:
@@ -2005,23 +2005,23 @@ int ecc_export_x963(ecc_key* key, byte* out, word32* outLen)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
do {
|
do {
|
||||||
/* pad and store x */
|
/* pad and store x */
|
||||||
XMEMSET(buf, 0, ECC_BUFSIZE);
|
XMEMSET(buf, 0, ECC_BUFSIZE);
|
||||||
ret = mp_to_unsigned_bin(&key->pubkey.x,
|
ret = mp_to_unsigned_bin(&key->pubkey.x,
|
||||||
buf + (numlen - mp_unsigned_bin_size(&key->pubkey.x)));
|
buf + (numlen - mp_unsigned_bin_size(&key->pubkey.x)));
|
||||||
if (ret != MP_OKAY)
|
if (ret != MP_OKAY)
|
||||||
break;
|
break;
|
||||||
XMEMCPY(out+1, buf, numlen);
|
XMEMCPY(out+1, buf, numlen);
|
||||||
|
|
||||||
/* pad and store y */
|
/* pad and store y */
|
||||||
XMEMSET(buf, 0, ECC_BUFSIZE);
|
XMEMSET(buf, 0, ECC_BUFSIZE);
|
||||||
ret = mp_to_unsigned_bin(&key->pubkey.y,
|
ret = mp_to_unsigned_bin(&key->pubkey.y,
|
||||||
buf + (numlen - mp_unsigned_bin_size(&key->pubkey.y)));
|
buf + (numlen - mp_unsigned_bin_size(&key->pubkey.y)));
|
||||||
if (ret != MP_OKAY)
|
if (ret != MP_OKAY)
|
||||||
break;
|
break;
|
||||||
XMEMCPY(out+1+numlen, buf, numlen);
|
XMEMCPY(out+1+numlen, buf, numlen);
|
||||||
|
|
||||||
*outLen = 1 + 2*numlen;
|
*outLen = 1 + 2*numlen;
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
@@ -3041,62 +3041,63 @@ static int accel_fp_mul(int idx, mp_int* k, ecc_point *R, mp_int* modulus,
|
|||||||
mp_clear(&tk);
|
mp_clear(&tk);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* let's reverse kb so it's little endian */
|
/* let's reverse kb so it's little endian */
|
||||||
x = 0;
|
x = 0;
|
||||||
y = mp_unsigned_bin_size(&tk) - 1;
|
y = mp_unsigned_bin_size(&tk) - 1;
|
||||||
mp_clear(&tk);
|
mp_clear(&tk);
|
||||||
|
|
||||||
while ((unsigned)x < y) {
|
while ((unsigned)x < y) {
|
||||||
z = kb[x]; kb[x] = kb[y]; kb[y] = z;
|
z = kb[x]; kb[x] = kb[y]; kb[y] = z;
|
||||||
++x; --y;
|
++x; --y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* at this point we can start, yipee */
|
/* at this point we can start, yipee */
|
||||||
first = 1;
|
first = 1;
|
||||||
for (x = lut_gap-1; x >= 0; x--) {
|
for (x = lut_gap-1; x >= 0; x--) {
|
||||||
/* extract FP_LUT bits from kb spread out by lut_gap bits and offset
|
/* extract FP_LUT bits from kb spread out by lut_gap bits and offset
|
||||||
by x bits from the start */
|
by x bits from the start */
|
||||||
bitpos = x;
|
bitpos = x;
|
||||||
for (y = z = 0; y < FP_LUT; y++) {
|
for (y = z = 0; y < FP_LUT; y++) {
|
||||||
z |= ((kb[bitpos>>3] >> (bitpos&7)) & 1) << y;
|
z |= ((kb[bitpos>>3] >> (bitpos&7)) & 1) << y;
|
||||||
bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid
|
bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid
|
||||||
the mult in each loop */
|
the mult in each loop */
|
||||||
}
|
|
||||||
|
|
||||||
/* double if not first */
|
|
||||||
if (!first) {
|
|
||||||
if ((err = ecc_projective_dbl_point(R, R, modulus, mp)) != MP_OKAY) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/* double if not first */
|
||||||
/* add if not first, otherwise copy */
|
if (!first) {
|
||||||
if (!first && z) {
|
if ((err = ecc_projective_dbl_point(R, R, modulus,
|
||||||
if ((err = ecc_projective_add_point(R, fp_cache[idx].LUT[z], R,
|
mp)) != MP_OKAY) {
|
||||||
modulus, mp)) != MP_OKAY) {
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
} else if (z) {
|
|
||||||
if ((mp_copy(&fp_cache[idx].LUT[z]->x, &R->x) != MP_OKAY) ||
|
/* add if not first, otherwise copy */
|
||||||
(mp_copy(&fp_cache[idx].LUT[z]->y, &R->y) != MP_OKAY) ||
|
if (!first && z) {
|
||||||
(mp_copy(&fp_cache[idx].mu, &R->z) != MP_OKAY)) {
|
if ((err = ecc_projective_add_point(R, fp_cache[idx].LUT[z], R,
|
||||||
err = GEN_MEM_ERR;
|
modulus, mp)) != MP_OKAY) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
} else if (z) {
|
||||||
|
if ((mp_copy(&fp_cache[idx].LUT[z]->x, &R->x) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx].LUT[z]->y, &R->y) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx].mu, &R->z) != MP_OKAY)) {
|
||||||
|
err = GEN_MEM_ERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
first = 0;
|
||||||
}
|
}
|
||||||
first = 0;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
if (err == MP_OKAY) {
|
||||||
z = 0;
|
z = 0;
|
||||||
XMEMSET(kb, 0, KB_SIZE);
|
XMEMSET(kb, 0, KB_SIZE);
|
||||||
/* map R back from projective space */
|
/* map R back from projective space */
|
||||||
if (map) {
|
if (map) {
|
||||||
err = ecc_map(R, modulus, mp);
|
err = ecc_map(R, modulus, mp);
|
||||||
} else {
|
} else {
|
||||||
err = MP_OKAY;
|
err = MP_OKAY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
@@ -3262,76 +3263,77 @@ static int accel_fp_mul2add(int idx1, int idx2,
|
|||||||
mp_clear(&tkb);
|
mp_clear(&tkb);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
x = 0;
|
x = 0;
|
||||||
y = mp_unsigned_bin_size(&tkb) - 1;
|
y = mp_unsigned_bin_size(&tkb) - 1;
|
||||||
mp_clear(&tkb);
|
mp_clear(&tkb);
|
||||||
while ((unsigned)x < y) {
|
while ((unsigned)x < y) {
|
||||||
z = kb[1][x]; kb[1][x] = kb[1][y]; kb[1][y] = z;
|
z = kb[1][x]; kb[1][x] = kb[1][y]; kb[1][y] = z;
|
||||||
++x; --y;
|
++x; --y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* at this point we can start, yipee */
|
/* at this point we can start, yipee */
|
||||||
first = 1;
|
first = 1;
|
||||||
for (x = lut_gap-1; x >= 0; x--) {
|
for (x = lut_gap-1; x >= 0; x--) {
|
||||||
/* extract FP_LUT bits from kb spread out by lut_gap bits and
|
/* extract FP_LUT bits from kb spread out by lut_gap bits and
|
||||||
offset by x bits from the start */
|
offset by x bits from the start */
|
||||||
bitpos = x;
|
bitpos = x;
|
||||||
for (y = zA = zB = 0; y < FP_LUT; y++) {
|
for (y = zA = zB = 0; y < FP_LUT; y++) {
|
||||||
zA |= ((kb[0][bitpos>>3] >> (bitpos&7)) & 1) << y;
|
zA |= ((kb[0][bitpos>>3] >> (bitpos&7)) & 1) << y;
|
||||||
zB |= ((kb[1][bitpos>>3] >> (bitpos&7)) & 1) << y;
|
zB |= ((kb[1][bitpos>>3] >> (bitpos&7)) & 1) << y;
|
||||||
bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid
|
bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid
|
||||||
the mult in each loop */
|
the mult in each loop */
|
||||||
}
|
|
||||||
|
|
||||||
/* double if not first */
|
|
||||||
if (!first) {
|
|
||||||
if ((err = ecc_projective_dbl_point(R, R, modulus, mp)) != MP_OKAY) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/* double if not first */
|
||||||
/* add if not first, otherwise copy */
|
if (!first) {
|
||||||
if (!first) {
|
if ((err = ecc_projective_dbl_point(R, R, modulus,
|
||||||
if (zA) {
|
mp)) != MP_OKAY) {
|
||||||
if ((err = ecc_projective_add_point(R, fp_cache[idx1].LUT[zA],
|
|
||||||
R, modulus, mp)) != MP_OKAY) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (zB) {
|
|
||||||
if ((err = ecc_projective_add_point(R, fp_cache[idx2].LUT[zB],
|
/* add if not first, otherwise copy */
|
||||||
R, modulus, mp)) != MP_OKAY) {
|
if (!first) {
|
||||||
break;
|
if (zA) {
|
||||||
}
|
if ((err = ecc_projective_add_point(R, fp_cache[idx1].LUT[zA],
|
||||||
}
|
R, modulus, mp)) != MP_OKAY) {
|
||||||
} else {
|
|
||||||
if (zA) {
|
|
||||||
if ((mp_copy(&fp_cache[idx1].LUT[zA]->x, &R->x) != MP_OKAY) ||
|
|
||||||
(mp_copy(&fp_cache[idx1].LUT[zA]->y, &R->y) != MP_OKAY) ||
|
|
||||||
(mp_copy(&fp_cache[idx1].mu, &R->z) != MP_OKAY)) {
|
|
||||||
err = GEN_MEM_ERR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
first = 0;
|
|
||||||
}
|
|
||||||
if (zB && first == 0) {
|
|
||||||
if (zB) {
|
|
||||||
if ((err = ecc_projective_add_point(R, fp_cache[idx2].LUT[zB],
|
|
||||||
R, modulus, mp)) != MP_OKAY){
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (zB && first == 1) {
|
if (zB) {
|
||||||
if ((mp_copy(&fp_cache[idx2].LUT[zB]->x, &R->x) != MP_OKAY) ||
|
if ((err = ecc_projective_add_point(R, fp_cache[idx2].LUT[zB],
|
||||||
(mp_copy(&fp_cache[idx2].LUT[zB]->y, &R->y) != MP_OKAY) ||
|
R, modulus, mp)) != MP_OKAY) {
|
||||||
(mp_copy(&fp_cache[idx2].mu, &R->z) != MP_OKAY)) {
|
break;
|
||||||
err = GEN_MEM_ERR;
|
}
|
||||||
break;
|
}
|
||||||
}
|
} else {
|
||||||
first = 0;
|
if (zA) {
|
||||||
|
if ((mp_copy(&fp_cache[idx1].LUT[zA]->x, &R->x) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx1].LUT[zA]->y, &R->y) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx1].mu, &R->z) != MP_OKAY)) {
|
||||||
|
err = GEN_MEM_ERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
if (zB && first == 0) {
|
||||||
|
if (zB) {
|
||||||
|
if ((err = ecc_projective_add_point(R,
|
||||||
|
fp_cache[idx2].LUT[zB], R, modulus, mp)) != MP_OKAY){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (zB && first == 1) {
|
||||||
|
if ((mp_copy(&fp_cache[idx2].LUT[zB]->x, &R->x) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx2].LUT[zB]->y, &R->y) != MP_OKAY) ||
|
||||||
|
(mp_copy(&fp_cache[idx2].mu, &R->z) != MP_OKAY)) {
|
||||||
|
err = GEN_MEM_ERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XMEMSET(kb[0], 0, KB_SIZE);
|
XMEMSET(kb[0], 0, KB_SIZE);
|
||||||
@@ -3901,66 +3903,68 @@ int ecc_encrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
|
|||||||
ret = ecc_shared_secret(privKey, pubKey, sharedSecret, &sharedSz);
|
ret = ecc_shared_secret(privKey, pubKey, sharedSecret, &sharedSz);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
switch (ctx->kdfAlgo) {
|
switch (ctx->kdfAlgo) {
|
||||||
case ecHKDF_SHA256 :
|
case ecHKDF_SHA256 :
|
||||||
ret = HKDF(SHA256, sharedSecret, sharedSz, ctx->kdfSalt,
|
ret = HKDF(SHA256, sharedSecret, sharedSz, ctx->kdfSalt,
|
||||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz, keys, keysLen);
|
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||||
break;
|
keys, keysLen);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
encKey = keys + offset;
|
encKey = keys + offset;
|
||||||
encIv = encKey + encKeySz;
|
encIv = encKey + encKeySz;
|
||||||
macKey = encKey + encKeySz + ivSz;
|
macKey = encKey + encKeySz + ivSz;
|
||||||
|
|
||||||
switch (ctx->encAlgo) {
|
switch (ctx->encAlgo) {
|
||||||
case ecAES_128_CBC:
|
case ecAES_128_CBC:
|
||||||
{
|
{
|
||||||
Aes aes;
|
Aes aes;
|
||||||
ret = AesSetKey(&aes, encKey,KEY_SIZE_128,encIv,AES_ENCRYPTION);
|
ret = AesSetKey(&aes, encKey, KEY_SIZE_128, encIv,
|
||||||
if (ret != 0)
|
AES_ENCRYPTION);
|
||||||
break;
|
if (ret != 0)
|
||||||
ret = AesCbcEncrypt(&aes, out, msg, msgSz);
|
break;
|
||||||
}
|
ret = AesCbcEncrypt(&aes, out, msg, msgSz);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
switch (ctx->macAlgo) {
|
switch (ctx->macAlgo) {
|
||||||
case ecHMAC_SHA256:
|
case ecHMAC_SHA256:
|
||||||
{
|
{
|
||||||
Hmac hmac;
|
Hmac hmac;
|
||||||
ret = HmacSetKey(&hmac, SHA256, macKey, SHA256_DIGEST_SIZE);
|
ret = HmacSetKey(&hmac, SHA256, macKey, SHA256_DIGEST_SIZE);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacUpdate(&hmac, out, msgSz);
|
ret = HmacUpdate(&hmac, out, msgSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacUpdate(&hmac, ctx->macSalt, ctx->macSaltSz);
|
ret = HmacUpdate(&hmac, ctx->macSalt, ctx->macSaltSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacFinal(&hmac, out+msgSz);
|
ret = HmacFinal(&hmac, out+msgSz);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
*outSz = msgSz + digestSz;
|
*outSz = msgSz + digestSz;
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
XFREE(sharedSecret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(sharedSecret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@@ -4051,71 +4055,73 @@ int ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
|
|||||||
ret = ecc_shared_secret(privKey, pubKey, sharedSecret, &sharedSz);
|
ret = ecc_shared_secret(privKey, pubKey, sharedSecret, &sharedSz);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
switch (ctx->kdfAlgo) {
|
switch (ctx->kdfAlgo) {
|
||||||
case ecHKDF_SHA256 :
|
case ecHKDF_SHA256 :
|
||||||
ret = HKDF(SHA256, sharedSecret, sharedSz, ctx->kdfSalt,
|
ret = HKDF(SHA256, sharedSecret, sharedSz, ctx->kdfSalt,
|
||||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz, keys, keysLen);
|
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||||
break;
|
keys, keysLen);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
encKey = keys + offset;
|
encKey = keys + offset;
|
||||||
encIv = encKey + encKeySz;
|
encIv = encKey + encKeySz;
|
||||||
macKey = encKey + encKeySz + ivSz;
|
macKey = encKey + encKeySz + ivSz;
|
||||||
|
|
||||||
switch (ctx->macAlgo) {
|
switch (ctx->macAlgo) {
|
||||||
case ecHMAC_SHA256:
|
case ecHMAC_SHA256:
|
||||||
{
|
{
|
||||||
byte verify[SHA256_DIGEST_SIZE];
|
byte verify[SHA256_DIGEST_SIZE];
|
||||||
Hmac hmac;
|
Hmac hmac;
|
||||||
ret = HmacSetKey(&hmac, SHA256, macKey, SHA256_DIGEST_SIZE);
|
ret = HmacSetKey(&hmac, SHA256, macKey, SHA256_DIGEST_SIZE);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacUpdate(&hmac, msg, msgSz-digestSz);
|
ret = HmacUpdate(&hmac, msg, msgSz-digestSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacUpdate(&hmac, ctx->macSalt, ctx->macSaltSz);
|
ret = HmacUpdate(&hmac, ctx->macSalt, ctx->macSaltSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
ret = HmacFinal(&hmac, verify);
|
ret = HmacFinal(&hmac, verify);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
if (memcmp(verify, msg + msgSz - digestSz, digestSz) != 0)
|
if (memcmp(verify, msg + msgSz - digestSz, digestSz) != 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
switch (ctx->encAlgo) {
|
switch (ctx->encAlgo) {
|
||||||
case ecAES_128_CBC:
|
case ecAES_128_CBC:
|
||||||
{
|
{
|
||||||
Aes aes;
|
Aes aes;
|
||||||
ret = AesSetKey(&aes, encKey,KEY_SIZE_128,encIv,AES_DECRYPTION);
|
ret = AesSetKey(&aes, encKey, KEY_SIZE_128, encIv,
|
||||||
if (ret != 0)
|
AES_DECRYPTION);
|
||||||
break;
|
if (ret != 0)
|
||||||
ret = AesCbcDecrypt(&aes, out, msg, msgSz-digestSz);
|
break;
|
||||||
}
|
ret = AesCbcDecrypt(&aes, out, msg, msgSz-digestSz);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
*outSz = msgSz - digestSz;
|
*outSz = msgSz - digestSz;
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
XFREE(sharedSecret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(sharedSecret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
Reference in New Issue
Block a user