[llvm-commits] [test-suite] r46443 - in /test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4: ./ Makefile rc4.c rc4.h

Chris Lattner sabre at nondot.org
Sun Jan 27 22:56:33 PST 2008


Author: lattner
Date: Mon Jan 28 00:56:33 2008
New Revision: 46443

URL: http://llvm.org/viewvc/llvm-project?rev=46443&view=rev
Log:
add a new benchmark.

Added:
    test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/
    test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/Makefile
    test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.c
    test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.h

Added: test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/Makefile
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/Makefile?rev=46443&view=auto

==============================================================================
--- test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/Makefile (added)
+++ test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/Makefile Mon Jan 28 00:56:33 2008
@@ -0,0 +1,14 @@
+LEVEL = ../../../..
+
+PROG     = enc-rc4
+ifdef LARGE_PROBLEM_SIZE
+RUN_OPTIONS = 1000000
+else
+ifdef SMALL_PROBLEM_SIZE
+RUN_OPTIONS = 2000
+else
+RUN_OPTIONS = 200000
+endif
+endif
+include $(LEVEL)/MultiSource/Makefile.multisrc
+

Added: test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.c
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.c?rev=46443&view=auto

==============================================================================
--- test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.c (added)
+++ test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.c Mon Jan 28 00:56:33 2008
@@ -0,0 +1,153 @@
+/*
+ *  An implementation of the ARC4 algorithm
+ *
+ *  Copyright (C) 2001-2003  Christophe Devine
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "rc4.h"
+
+void rc4_setup( struct rc4_state *s, unsigned char *key,  int length )
+{
+    int i, j, k, *m, a;
+
+    s->x = 0;
+    s->y = 0;
+    m = s->m;
+
+    for( i = 0; i < 256; i++ )
+    {
+        m[i] = i;
+    }
+
+    j = k = 0;
+
+    for( i = 0; i < 256; i++ )
+    {
+        a = m[i];
+        j = (unsigned char) ( j + a + key[k] );
+        m[i] = m[j]; m[j] = a;
+        if( ++k >= length ) k = 0;
+    }
+}
+
+void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
+{ 
+    int i, x, y, *m, a, b;
+
+    x = s->x;
+    y = s->y;
+    m = s->m;
+
+    for( i = 0; i < length; i++ )
+    {
+        x = (unsigned char) ( x + 1 ); a = m[x];
+        y = (unsigned char) ( y + a );
+        m[x] = b = m[y];
+        m[y] = a;
+        data[i] ^= m[(unsigned char) ( a + b )];
+    }
+
+    s->x = x;
+    s->y = y;
+}
+
+#include <string.h>
+#include <stdio.h>
+
+/*
+ * ARC4 tests vectors from OpenSSL (crypto/rc4/rc4test.c)
+ */
+
+static unsigned char keys[7][30]={
+        {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
+        {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
+        {8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+        {4,0xef,0x01,0x23,0x45},
+        {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
+        {4,0xef,0x01,0x23,0x45},
+        };
+
+static unsigned char data_len[7]={8,8,8,20,28,10};
+static unsigned char data[7][30]={
+        {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff},
+        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
+        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
+        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+           0x00,0x00,0x00,0x00,0xff},
+        {0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
+           0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
+           0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
+           0x12,0x34,0x56,0x78,0xff},
+        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
+        {0},
+        };
+
+static unsigned char output[7][30]={
+        {0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00},
+        {0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00},
+        {0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00},
+        {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,
+         0xbd,0x61,0x5a,0x11,0x62,0xe1,0xc7,0xba,
+         0x36,0xb6,0x78,0x58,0x00},
+        {0x66,0xa0,0x94,0x9f,0x8a,0xf7,0xd6,0x89,
+         0x1f,0x7f,0x83,0x2b,0xa8,0x33,0xc0,0x0c,
+         0x89,0x2e,0xbe,0x30,0x14,0x3c,0xe2,0x87,
+         0x40,0x01,0x1e,0xcf,0x00},
+        {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,0xbd,0x61,0x00},
+        {0},
+        };
+
+int main( int argc, const char **argv )
+{
+    int i, j;
+    struct rc4_state s;
+    unsigned char buffer[30];
+  
+    int count = 200000;
+    if (argc == 2) count = atoi(argv[1]); 
+
+    printf( "\n RC4 Validation Tests:\n\n" );
+
+    for( i = 0; i < 6; i++ )
+    {
+        printf( " Test %d ", i + 1 );
+
+	for( j = 0; j < count; j++ ) 
+	{
+	  
+	  memcpy( buffer, data[i], data_len[i] );
+	  
+	  rc4_setup( &s, &keys[i][1], keys[i][0] );
+	  rc4_crypt( &s, buffer, data_len[i] );
+	  
+	}
+
+	if( memcmp( buffer, output[i], data_len[i] ) )
+	{
+	  printf( "failed!\n" );
+	  return( 1 );
+	}
+
+        printf( "passed.\n" );
+    }
+
+    printf( "\n" );
+
+    return( 0 );
+}
+

Added: test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.h
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.h?rev=46443&view=auto

==============================================================================
--- test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.h (added)
+++ test-suite/trunk/MultiSource/Benchmarks/Trimaran/enc-rc4/rc4.h Mon Jan 28 00:56:33 2008
@@ -0,0 +1,12 @@
+#ifndef _RC4_H
+#define _RC4_H
+
+struct rc4_state
+{
+    int x, y, m[256];
+};
+
+void rc4_setup( struct rc4_state *s, unsigned char *key,  int length );
+void rc4_crypt( struct rc4_state *s, unsigned char *data, int length );
+
+#endif /* rc4.h */





More information about the llvm-commits mailing list