This encryption will be needed for implementing RTMPE type 8.
I still have to write a test.
---
libavutil/Makefile | 3 ++
libavutil/avutil.h | 2 +-
libavutil/xtea.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++
libavutil/xtea.h | 44 +++++++++++++++++++++++++++++
tests/fate/libavutil.mak | 4 +++
5 files changed, 120 insertions(+), 1 deletions(-)
create mode 100644 libavutil/xtea.c
create mode 100644 libavutil/xtea.h
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 6fe174b..aac18ad 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -37,6 +37,7 @@ HEADERS = adler32.h
\
samplefmt.h \
sha.h \
time.h \
+ xtea.h \
ARCH_HEADERS = bswap.h \
intmath.h \
@@ -81,6 +82,7 @@ OBJS = adler32.o
\
time.o \
tree.o \
utils.o \
+ xtea.o \
TESTPROGS = adler32 \
aes \
@@ -98,3 +100,4 @@ TESTPROGS = adler32
\
parseutils \
sha \
tree \
+ xtea \
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 351e827..2aae161 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -152,7 +152,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 34
+#define LIBAVUTIL_VERSION_MINOR 0
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/xtea.c b/libavutil/xtea.c
new file mode 100644
index 0000000..356c865
--- /dev/null
+++ b/libavutil/xtea.c
@@ -0,0 +1,68 @@
+/*
+ * XTEA algorithm
+ * Copyright (c) 2012 Samuel Pitoiset
+ *
+ * loosely based on the implementation of David Wheeler and Roger Needham
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "avutil.h"
+#include "common.h"
+#include "xtea.h"
+
+void av_xtea_encrypt(uint32_t num_rounds, uint32_t *data, uint32_t *key)
+{
+ uint32_t v0 = data[0], v1 = data[1], i;
+ uint32_t sum = 0, delta = 0x9E3779B9;
+
+ for (i = 0; i < num_rounds; i++) {
+ v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + key[sum & 3]);
+ sum += delta;
+ v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + key[sum >> 11 & 3]);
+ }
+
+ data[0] = v0;
+ data[1] = v1;
+}
+
+void av_xtea_decrypt(uint32_t num_rounds, uint32_t *data, uint32_t *key)
+{
+ uint32_t v0 = data[0], v1 = data[1], i;
+ uint32_t delta = 0x9E3779B9, sum = delta * num_rounds;
+
+ for (i = 0; i < num_rounds; i++) {
+ v1 -= ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + key[sum >> 11 & 3]);
+ sum -= delta;
+ v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + key[sum & 3]);
+ }
+
+ data[0] = v0;
+ data[1] = v1;
+}
+
+#ifdef TEST
+#include <stdio.h>
+#undef printf
+
+int main(void)
+{
+ // TODO: Write tests.
+ return 0;
+}
+
+#endif
diff --git a/libavutil/xtea.h b/libavutil/xtea.h
new file mode 100644
index 0000000..30da631
--- /dev/null
+++ b/libavutil/xtea.h
@@ -0,0 +1,44 @@
+/*
+ * XTEA algorithm
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_XTEA_H
+#define AVUTIL_XTEA_H
+
+#include <stdint.h>
+
+/**
+ * @brief Encrypts using the XTEA algorithm.
+ *
+ * @param num_rounds number of rounds
+ * @param data data to encrypt
+ * @param key a key
+ */
+void av_xtea_encrypt(uint32_t num_rounds, uint32_t *data, uint32_t *key);
+
+/**
+ * @brief Decrypts using the XTEA algorithm.
+ *
+ * @param num_rounds number of rounds
+ * @param data data to decrypt
+ * @param key a key
+ */
+void av_xtea_decrypt(uint32_t num_rounds, uint32_t *data, uint32_t *key);
+
+#endif /* AVUTIL_XTEA_H */
diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak
index 9993584..d9309d8 100644
--- a/tests/fate/libavutil.mak
+++ b/tests/fate/libavutil.mak
@@ -37,4 +37,8 @@ FATE_LIBAVUTIL += fate-sha
fate-sha: libavutil/sha-test$(EXESUF)
fate-sha: CMD = run libavutil/sha-test
+FATE_LIBAVUTIL += fate-xtea
+fate-xtea: libavutil/xtea-test$(EXESUF)
+fate-xtea: CMD = run libavutil/sha-test
+
fate-libavutil: $(FATE_LIBAVUTIL)
--
1.7.7.5 (Apple Git-26)
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel