]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libsec/port/tsmemcmp.c
libsec: implement SPKI fingerprinting for okCertificate()
[plan9front.git] / sys / src / libsec / port / tsmemcmp.c
1 #include "os.h"
2 #include <libsec.h>
3
4 /*
5  * timing safe memcmp()
6  */
7 int
8 tsmemcmp(void *a1, void *a2, ulong n)
9 {
10         int lt, gt, c1, c2, r, m;
11         uchar *s1, *s2;
12
13         r = m = 0;
14         s1 = a1;
15         s2 = a2;
16         while(n--){
17                 c1 = *s1++;
18                 c2 = *s2++;
19                 lt = (c1 - c2) >> 8;
20                 gt = (c2 - c1) >> 8;
21                 r |= (lt - gt) & ~m;
22                 m |= lt | gt;
23         }
24         return r;
25 }