diff --git a/memxor.c b/memxor.c
index 5f073a6cd4851bf7459453d2c2ff01071c2f3099..5f2babb128ded1871e21c4d15d0c97d97ec048d8 100644
--- a/memxor.c
+++ b/memxor.c
@@ -13,7 +13,8 @@
 
 #include "memxor.h"
 
-uint8_t *memxor(uint8_t *dst, const uint8_t *src, size_t n)
+uint8_t *
+memxor(uint8_t *dst, const uint8_t *src, size_t n)
 {
   size_t i;
   for (i = 0; i<n; i++)
@@ -21,3 +22,14 @@ uint8_t *memxor(uint8_t *dst, const uint8_t *src, size_t n)
 
   return dst;
 }
+
+uint8_t *
+memxor3(uint8_t *dst, const uint8_t *a, const uint8_t *b, size_t n)
+{
+  size_t i;
+  for (i = 0; i<n; i++)
+    dst[i] = a[i] ^ b[i];
+
+  return dst;
+}
+
diff --git a/memxor.h b/memxor.h
index fe214c3902922b83710706757deae38e266bdd59..5b43a99f9cc7266c8b71e8010d5bf09e9e23e473 100644
--- a/memxor.h
+++ b/memxor.h
@@ -9,5 +9,6 @@
 #include "nettle-types.h"
 
 uint8_t *memxor(uint8_t *dst, const uint8_t *src, size_t n);
+uint8_t *memxor3(uint8_t *dst, const uint8_t *a, const uint8_t *b, size_t n);
 
 #endif /* NETTLE_MEMXOR_H_INCLUDED */