summaryrefslogtreecommitdiff
path: root/ext/aes/gstaeshelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/aes/gstaeshelper.c')
-rw-r--r--ext/aes/gstaeshelper.c187
1 files changed, 187 insertions, 0 deletions
diff --git a/ext/aes/gstaeshelper.c b/ext/aes/gstaeshelper.c
new file mode 100644
index 000000000..663593a46
--- /dev/null
+++ b/ext/aes/gstaeshelper.c
@@ -0,0 +1,187 @@
+/*
+ * GStreamer gstreamer-aeshelper
+ *
+ * Copyright, LCC (C) 2015 RidgeRun, LCC <carsten.behling@ridgerun.com>
+ * Copyright, LCC (C) 2016 RidgeRun, LCC <jose.jimenez@ridgerun.com>
+ * Copyright (C) 2020 Nice, Contact: Rabindra Harlalka <Rabindra.Harlalka@nice.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1335, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gstaeshelper.h"
+
+GType
+gst_aes_cipher_get_type (void)
+{
+ static GType aes_cipher_type = 0;
+
+ if (g_once_init_enter (&aes_cipher_type)) {
+ static GEnumValue aes_cipher_types[] = {
+ {GST_AES_CIPHER_128_CBC, "AES 128 bit cipher key using CBC method",
+ "aes-128-cbc"},
+ {GST_AES_CIPHER_256_CBC,
+ "AES 256 bit cipher key using CBC method",
+ "aes-256-cbc"},
+ {0, NULL, NULL},
+ };
+
+ GType temp = g_enum_register_static ("GstAesCipher",
+ aes_cipher_types);
+
+ g_once_init_leave (&aes_cipher_type, temp);
+ }
+
+ return aes_cipher_type;
+}
+
+const gchar *
+gst_aes_cipher_enum_to_string (GstAesCipher cipher)
+{
+ switch (cipher) {
+ case GST_AES_CIPHER_128_CBC:
+ return "aes-128-cbc";
+ break;
+ case GST_AES_CIPHER_256_CBC:
+ return "aes-256-cbc";
+ break;
+ }
+
+ return "";
+}
+
+
+gchar
+gst_aes_nibble_to_hex (gchar in)
+{
+ return in < 10 ? in + 48 : in + 55;
+}
+
+/*
+ * gst_aes_bytearray2hexstring
+ *
+ * convert array of bytes to hex string
+ *
+ * @param in input byte array
+ * @param out allocated hex string for output
+ * @param len length of input byte array
+ *
+ * @return output hex string
+ */
+gchar *
+gst_aes_bytearray2hexstring (const guchar * in, gchar * const out,
+ const gushort len)
+{
+ gushort i;
+ gchar high;
+ gchar low;
+
+ for (i = 0; i < len; i++) {
+ high = (in[i] & 0xF0) >> 4;
+ low = in[i] & 0x0F;
+ out[i * 2] = gst_aes_nibble_to_hex (high);
+ out[i * 2 + 1] = gst_aes_nibble_to_hex (low);
+ }
+ out[len * 2] = 0; /* null terminate */
+
+ return out;
+}
+
+/*
+ * gst_aes_hexstring2bytearray
+ *
+ * convert hex string to array of bytes
+ *
+ * @param filter calling element
+ * @param in input hex string
+ * @param allocated byte array for output
+ *
+ * @return output byte array
+ */
+guint
+gst_aes_hexstring2bytearray (GstElement * filter, const gchar * in,
+ guchar * out)
+{
+ gchar byte_val;
+ guint hex_count = 0;
+
+ GST_LOG_OBJECT (filter, "Converting hex string to number");
+
+ g_return_val_if_fail (in && out, 0);
+
+ while (*in != 0) {
+ /* Compute fist half-byte */
+ if (*in >= 'A' && *in <= 'F') {
+ byte_val = (*in - 55) << 4;
+ } else if (*in >= 'a' && *in <= 'f') {
+ byte_val = (*in - 87) << 4;
+ } else if (*in >= '0' && *in <= '9') {
+ byte_val = (*in - 48) << 4;
+ } else {
+ return 0;
+ }
+ in++;
+ if (*in == 0) {
+ break;
+ }
+ /* Compute second half-byte */
+ if (*in >= 'A' && *in <= 'F') {
+ *out = (*in - 55) + byte_val;
+ } else if (*in >= 'a' && *in <= 'f') {
+ *out = (*in - 87) + byte_val;
+ } else if (*in >= '0' && *in <= '9') {
+ *out = (*in - 48) + byte_val;
+ } else {
+ return 0;
+ }
+
+ GST_LOG_OBJECT (filter, "ch: %c%c, hex: 0x%x", *(in - 1), *in, *out);
+ in++;
+ out++;
+ if (!in || !out)
+ return 0;
+ hex_count++;
+ }
+ GST_LOG_OBJECT (filter, "Hex string conversion successful");
+
+ return hex_count;
+}