diff --git a/crypto/sm2/sm2_oct.c b/crypto/sm2/sm2_oct.c old mode 100644 new mode 100755 index 6f951e77..f9ca4cfb --- a/crypto/sm2/sm2_oct.c +++ b/crypto/sm2/sm2_oct.c @@ -274,7 +274,9 @@ SM2CiphertextValue *o2i_SM2CiphertextValue(const EC_GROUP *group, ret = cv; end: - SM2CiphertextValue_free(cv); + if ((cv != *pout) && (!ret)) + SM2CiphertextValue_free(cv); + EC_POINT_free(point); BN_CTX_free(bn_ctx); return ret; diff --git a/crypto/sm3/sm3.c b/crypto/sm3/sm3.c old mode 100644 new mode 100755 index 17994f94..fdbcab1f --- a/crypto/sm3/sm3.c +++ b/crypto/sm3/sm3.c @@ -110,8 +110,8 @@ void sm3_final(sm3_ctx_t *ctx, unsigned char *digest) memset(ctx->block, 0, SM3_BLOCK_SIZE - 8); } - count[0] = cpu_to_be32((ctx->nblocks) >> 23); - count[1] = cpu_to_be32((ctx->nblocks << 9) + (ctx->num << 3)); + count[0] = cpu_to_be32((uint32_t)(ctx->nblocks >> 23)); + count[1] = cpu_to_be32((uint32_t)(ctx->nblocks << 9) + (ctx->num << 3)); sm3_compress(ctx->digest, ctx->block); for (i = 0; i < sizeof(ctx->digest)/sizeof(ctx->digest[0]); i++) { diff --git a/include/openssl/sm3.h b/include/openssl/sm3.h old mode 100644 new mode 100755 index 29ce397b..96ef60f2 --- a/include/openssl/sm3.h +++ b/include/openssl/sm3.h @@ -70,7 +70,7 @@ extern "C" { typedef struct { uint32_t digest[8]; - int nblocks; + uint64_t nblocks; unsigned char block[64]; int num; } sm3_ctx_t;