From 51dfcfc22316404c24ef12036d06f41df5c74beb Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 21 Sep 2014 11:24:49 -0700 Subject: [PATCH] Handle overlapping in/out buffers in crypto_sign() --- src/libsodium/crypto_sign/ed25519/ref10/sign.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsodium/crypto_sign/ed25519/ref10/sign.c b/src/libsodium/crypto_sign/ed25519/ref10/sign.c index dd6684de..80f64955 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/sign.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/sign.c @@ -61,9 +61,10 @@ crypto_sign(unsigned char *sm, unsigned long long *smlen, { unsigned long long siglen; + memmove(sm + crypto_sign_ed25519_BYTES, m, mlen); /* LCOV_EXCL_START */ if (crypto_sign_detached(sm, &siglen, m, mlen, sk) != 0 || - siglen > crypto_sign_ed25519_BYTES) { + siglen != crypto_sign_ed25519_BYTES) { if (smlen != NULL) { *smlen = 0; } @@ -72,7 +73,6 @@ crypto_sign(unsigned char *sm, unsigned long long *smlen, } /* LCOV_EXCL_STOP */ - memmove(sm + siglen, m, mlen); if (smlen != NULL) { *smlen = mlen + siglen; }