Switch unrolled loop in BN_usub with memcpy.
See also upstream's 06cf881a3a10d5af3c1255c08cfd0c6ddb5f1cc3, 9f040d6decca7930e978784c917f731e5c45e8f0, and 9f6795e7d2d1e35668ad70ba0afc480062be4e2e. Change-Id: I27d90e382867a5fe988d152b31f8494e001a6a9f Reviewed-on: https://boringssl-review.googlesource.com/6628 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
c3ae38b4f8
commit
502a843dee
@ -56,6 +56,8 @@
|
||||
|
||||
#include <openssl/bn.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/mem.h>
|
||||
|
||||
@ -311,27 +313,8 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) {
|
||||
}
|
||||
}
|
||||
|
||||
if (rp != ap) {
|
||||
for (;;) {
|
||||
if (!dif--) {
|
||||
break;
|
||||
}
|
||||
rp[0] = ap[0];
|
||||
if (!dif--) {
|
||||
break;
|
||||
}
|
||||
rp[1] = ap[1];
|
||||
if (!dif--) {
|
||||
break;
|
||||
}
|
||||
rp[2] = ap[2];
|
||||
if (!dif--) {
|
||||
break;
|
||||
}
|
||||
rp[3] = ap[3];
|
||||
rp += 4;
|
||||
ap += 4;
|
||||
}
|
||||
if (dif > 0 && rp != ap) {
|
||||
memcpy(rp, ap, sizeof(*rp) * dif);
|
||||
}
|
||||
|
||||
r->top = max;
|
||||
|
Loading…
Reference in New Issue
Block a user