diff --git a/include/mbedtls/gf128mul.h b/include/mbedtls/gf128mul.h
new file mode 100644
index 0000000..41de39c
--- /dev/null
+++ b/include/mbedtls/gf128mul.h
@@ -0,0 +1,46 @@
+/**
+ * \file gf128mul.h
+ *
+ * \brief Fast multiplication in GF(128)
+ *
+ *  Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
+ *  SPDX-License-Identifier: Apache-2.0
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *  not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ */
+#ifndef MBEDTLS_GF128MUL_H
+#define MBEDTLS_GF128MUL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief          Big-Endian definition for 128 bits elements
+ */
+typedef unsigned char be128[16];
+
+/**
+ * \brief          Multiplication in GF(128):
+ *                 r = x times x^4 times x^8 in GF(2^128)
+ *
+ * \param x        the 128-bits number you want to multiply
+ * \param r        result
+ */
+void gf128mul_x_ble(be128 r, const be128 x);
+
+
+
+#endif /* gf128mul.h */
\ No newline at end of file
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 60fa7f8..03d3f6c 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -29,6 +29,7 @@
     entropy_poll.c
     error.c
     gcm.c
+    gf128mul.c
     havege.c
     hkdf.c
     hmac_drbg.c
diff --git a/library/gf128mul.c b/library/gf128mul.c
new file mode 100644
index 0000000..251398f
--- /dev/null
+++ b/library/gf128mul.c
@@ -0,0 +1,78 @@
+/*
+ *  GF(2^128) multiplication functions
+ *
+ *  Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
+ *  SPDX-License-Identifier: Apache-2.0
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *  not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ */
+#include <stdint.h>
+
+#include "mbedtls/gf128mul.h"
+
+/* Endianess with 64 bits values */
+#ifndef GET_UINT64_LE
+#define GET_UINT64_LE(n,b,i)                            \
+{                                                       \
+    (n) = ( (uint64_t) (b)[(i) + 7] << 56 )             \
+        | ( (uint64_t) (b)[(i) + 6] << 48 )             \
+        | ( (uint64_t) (b)[(i) + 5] << 40 )             \
+        | ( (uint64_t) (b)[(i) + 4] << 32 )             \
+        | ( (uint64_t) (b)[(i) + 3] << 24 )             \
+        | ( (uint64_t) (b)[(i) + 2] << 16 )             \
+        | ( (uint64_t) (b)[(i) + 1] <<  8 )             \
+        | ( (uint64_t) (b)[(i)    ]       );            \
+}
+#endif
+
+#ifndef PUT_UINT64_LE
+#define PUT_UINT64_LE(n,b,i)                            \
+{                                                       \
+    (b)[(i) + 7] = (unsigned char) ( (n) >> 56 );       \
+    (b)[(i) + 6] = (unsigned char) ( (n) >> 48 );       \
+    (b)[(i) + 5] = (unsigned char) ( (n) >> 40 );       \
+    (b)[(i) + 4] = (unsigned char) ( (n) >> 32 );       \
+    (b)[(i) + 3] = (unsigned char) ( (n) >> 24 );       \
+    (b)[(i) + 2] = (unsigned char) ( (n) >> 16 );       \
+    (b)[(i) + 1] = (unsigned char) ( (n) >>  8 );       \
+    (b)[(i)    ] = (unsigned char) ( (n)       );       \
+}
+#endif
+
+
+/* Jump table for not having ifs */
+static const uint16_t gf128mul_table_bbe[2] = { 0x00, 0x87 };
+
+
+/*
+ * This function multiply a field element by x, by x^4 and by x^8
+ * in the polynomial field representation. It uses 64-bit word operations
+ * to gain speed but compensates for machine endianess and hence works
+ * correctly on both styles of machine.
+ */
+void mbedtls_gf128mul_x_ble(mbedtls_be128 r, const mbedtls_be128 x)
+{
+    uint64_t a, b, ra, rb;
+
+    GET_UINT64_LE(a, x, 0);
+    GET_UINT64_LE(b, x, 8);
+
+    ra = (a << 1)  ^ gf128mul_table_bbe[b >> 63];
+    rb = (a >> 63) | (b << 1);
+
+    PUT_UINT64_LE(ra, r, 0);
+    PUT_UINT64_LE(rb, r, 8);
+}
+
