From 1739aea5358f2a9689b4d38b19d3f07ababd4b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mois=C3=A9s=20Guimar=C3=A3es?= Date: Fri, 4 Jul 2014 10:15:39 -0300 Subject: [PATCH] asn: refactoring SignCert to reduce stack usage: 512 bytes - pointers size moved to the heap. --- variable sig moved to the heap (1152 bytes saved) --- ctaocrypt/src/asn.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/ctaocrypt/src/asn.c b/ctaocrypt/src/asn.c index 7ecab8b11..0031d3661 100644 --- a/ctaocrypt/src/asn.c +++ b/ctaocrypt/src/asn.c @@ -5851,21 +5851,28 @@ int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, int SignCert(int requestSz, int sType, byte* buffer, word32 buffSz, RsaKey* rsaKey, ecc_key* eccKey, RNG* rng) { - byte sig[MAX_ENCODED_SIG_SZ]; - int sigSz; + int sigSz; + DECLARE_ARRAY(byte, sig, MAX_ENCODED_SIG_SZ); if (requestSz < 0) return requestSz; - sigSz = MakeSignature(buffer, requestSz, sig, sizeof(sig), rsaKey, eccKey, - rng, sType); - if (sigSz < 0) - return sigSz; + if (!CREATE_ARRAY(byte, sig, MAX_ENCODED_SIG_SZ)) + return MEMORY_E; - if (requestSz + MAX_SEQ_SZ * 2 + sigSz > (int)buffSz) - return BUFFER_E; + sigSz = MakeSignature(buffer, requestSz, sig, MAX_ENCODED_SIG_SZ, rsaKey, + eccKey, rng, sType); - return AddSignature(buffer, requestSz, sig, sigSz, sType); + if (sigSz >= 0) { + if (requestSz + MAX_SEQ_SZ * 2 + sigSz > (int)buffSz) + sigSz = BUFFER_E; + else + sigSz = AddSignature(buffer, requestSz, sig, sigSz, sType); + } + + DESTROY_ARRAY(sig); + + return sigSz; }