summaryrefslogtreecommitdiffstats
path: root/src/crypto/bn/montgomery.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/bn/montgomery.c')
-rw-r--r--src/crypto/bn/montgomery.c18
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) {