[FFmpeg-cvslog] r16971 - in trunk/libavutil: des.c des.h

reimar subversion
Tue Feb 3 17:45:42 CET 2009


Author: reimar
Date: Tue Feb  3 17:45:42 2009
New Revision: 16971

Log:
Add support for 3DES to DES module

Modified:
   trunk/libavutil/des.c
   trunk/libavutil/des.h

Modified: trunk/libavutil/des.c
==============================================================================
--- trunk/libavutil/des.c	Tue Feb  3 15:20:55 2009	(r16970)
+++ trunk/libavutil/des.c	Tue Feb  3 17:45:42 2009	(r16971)
@@ -293,10 +293,14 @@ uint64_t ff_des_encdec(uint64_t in, uint
 #endif
 
 int av_des_init(AVDES *d, const uint8_t *key, int key_bits, int decrypt) {
-    if (key_bits != 64)
+    if (key_bits != 64 && key_bits != 192)
         return -1;
-    d->triple_des = 0;
+    d->triple_des = key_bits > 64;
     gen_roundkeys(d->round_keys[0], AV_RB64(key));
+    if (d->triple_des) {
+        gen_roundkeys(d->round_keys[1], AV_RB64(key +  8));
+        gen_roundkeys(d->round_keys[2], AV_RB64(key + 16));
+    }
     return 0;
 }
 
@@ -306,10 +310,18 @@ void av_des_crypt(AVDES *d, uint8_t *dst
         uint64_t dst_val;
         uint64_t src_val = src ? be2me_64(*(const uint64_t *)src) : 0;
         if (decrypt) {
+            if (d->triple_des) {
+                src_val = des_encdec(src_val, d->round_keys[2], 1);
+                src_val = des_encdec(src_val, d->round_keys[1], 0);
+            }
             dst_val = des_encdec(src_val, d->round_keys[0], 1) ^ iv_val;
             iv_val = iv ? src_val : 0;
         } else {
             dst_val = des_encdec(src_val ^ iv_val, d->round_keys[0], 0);
+            if (d->triple_des) {
+                dst_val = des_encdec(dst_val, d->round_keys[1], 1);
+                dst_val = des_encdec(dst_val, d->round_keys[2], 0);
+            }
             iv_val = iv ? dst_val : 0;
         }
         *(uint64_t *)dst = be2me_64(dst_val);

Modified: trunk/libavutil/des.h
==============================================================================
--- trunk/libavutil/des.h	Tue Feb  3 15:20:55 2009	(r16970)
+++ trunk/libavutil/des.h	Tue Feb  3 17:45:42 2009	(r16971)
@@ -32,7 +32,7 @@ struct AVDES {
 /**
  * \brief Initializes an AVDES context.
  *
- * \param key_bits must be 64
+ * \param key_bits must be 64 or 192
  * \param decrypt 0 for encryption, 1 for decryption
  */
 int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt);




More information about the ffmpeg-cvslog mailing list