diff options
Diffstat (limited to 'src/crypto/bn/montgomery.c')
-rw-r--r-- | src/crypto/bn/montgomery.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/crypto/bn/montgomery.c b/src/crypto/bn/montgomery.c index 3fec7e3..c6c9c88 100644 --- a/src/crypto/bn/montgomery.c +++ b/src/crypto/bn/montgomery.c @@ -130,14 +130,18 @@ BN_MONT_CTX *BN_MONT_CTX_new(void) { return NULL; } - memset(ret, 0, sizeof(BN_MONT_CTX)); - BN_init(&ret->RR); - BN_init(&ret->N); - BN_init(&ret->Ni); - + BN_MONT_CTX_init(ret); + ret->flags = BN_FLG_MALLOCED; return ret; } +void BN_MONT_CTX_init(BN_MONT_CTX *mont) { + memset(mont, 0, sizeof(BN_MONT_CTX)); + BN_init(&mont->RR); + BN_init(&mont->N); + BN_init(&mont->Ni); +} + void BN_MONT_CTX_free(BN_MONT_CTX *mont) { if (mont == NULL) { return; @@ -146,7 +150,9 @@ void BN_MONT_CTX_free(BN_MONT_CTX *mont) { BN_free(&mont->RR); BN_free(&mont->N); BN_free(&mont->Ni); - OPENSSL_free(mont); + if (mont->flags & BN_FLG_MALLOCED) { + OPENSSL_free(mont); + } } BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from) { |