mirror of
https://https.git.savannah.gnu.org/git/gnulib.git
synced 2026-05-13 15:13:36 +00:00
Add gc-arcfour and gc-arcfour-tests modules.
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
* tests/test-gc-arcfour.c: New file.
|
||||
|
||||
* modules/gc-arcfour, modules/gc-arcfour-tests: New files.
|
||||
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
* tests/test-gc-rijndael.c: New file.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
* gc-gnulib.c: Support ARCFOUR.
|
||||
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
* gc-gnulib.c: Implement gc_cipher_* API, currently only with AES
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Hashes. */
|
||||
#ifdef GC_USE_MD4
|
||||
# include "md4.h"
|
||||
#endif
|
||||
@@ -49,6 +50,11 @@
|
||||
#ifdef GC_USE_HMAC_MD5
|
||||
# include "hmac.h"
|
||||
#endif
|
||||
|
||||
/* Ciphers. */
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
# include "arcfour.h"
|
||||
#endif
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
# include "rijndael-api-fst.h"
|
||||
#endif
|
||||
@@ -152,6 +158,9 @@ gc_set_allocators (gc_malloc_t func_malloc,
|
||||
typedef struct _gc_cipher_ctx {
|
||||
Gc_cipher alg;
|
||||
Gc_cipher_mode mode;
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
arcfour_context arcfourContext;
|
||||
#endif
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
rijndaelKeyInstance aesEncKey;
|
||||
rijndaelKeyInstance aesDecKey;
|
||||
@@ -173,6 +182,20 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
|
||||
|
||||
switch (alg)
|
||||
{
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
case GC_ARCFOUR128:
|
||||
case GC_ARCFOUR40:
|
||||
switch (mode)
|
||||
{
|
||||
case GC_STREAM:
|
||||
break;
|
||||
|
||||
default:
|
||||
rc = GC_INVALID_CIPHER;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
case GC_AES128:
|
||||
case GC_AES192:
|
||||
@@ -208,6 +231,13 @@ gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key)
|
||||
|
||||
switch (ctx->alg)
|
||||
{
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
case GC_ARCFOUR128:
|
||||
case GC_ARCFOUR40:
|
||||
arcfour_setkey (&ctx->arcfourContext, key, keylen);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
case GC_AES128:
|
||||
case GC_AES192:
|
||||
@@ -297,6 +327,13 @@ gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data)
|
||||
|
||||
switch (ctx->alg)
|
||||
{
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
case GC_ARCFOUR128:
|
||||
case GC_ARCFOUR40:
|
||||
arcfour_stream (&ctx->arcfourContext, data, data, len);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
case GC_AES128:
|
||||
case GC_AES192:
|
||||
@@ -326,6 +363,13 @@ gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data)
|
||||
|
||||
switch (ctx->alg)
|
||||
{
|
||||
#ifdef GC_USE_ARCFOUR
|
||||
case GC_ARCFOUR128:
|
||||
case GC_ARCFOUR40:
|
||||
arcfour_stream (&ctx->arcfourContext, data, data, len);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef GC_USE_RIJNDAEL
|
||||
case GC_AES128:
|
||||
case GC_AES192:
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
* gc-arcfour.m4: New file.
|
||||
|
||||
* gc-rijndael.m4: New file.
|
||||
|
||||
2005-10-19 Simon Josefsson <jas@extundo.com>
|
||||
|
||||
15
m4/gc-arcfour.m4
Normal file
15
m4/gc-arcfour.m4
Normal file
@@ -0,0 +1,15 @@
|
||||
# gc-arcfour.m4 serial 1
|
||||
dnl Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
AC_DEFUN([gl_GC_ARCFOUR],
|
||||
[
|
||||
AC_REQUIRE([gl_GC])
|
||||
AC_DEFINE(GC_USE_ARCFOUR, 1,
|
||||
[Define if you want to support ARCFOUR through GC.])
|
||||
if test "$ac_cv_libgcrypt" != yes; then
|
||||
gl_ARCFOUR
|
||||
fi
|
||||
])
|
||||
26
modules/gc-arcfour
Normal file
26
modules/gc-arcfour
Normal file
@@ -0,0 +1,26 @@
|
||||
Description:
|
||||
Generic crypto wrappers for ARCFOUR stream cipher.
|
||||
|
||||
Files:
|
||||
m4/gc-arcfour.m4
|
||||
lib/arcfour.h
|
||||
lib/arcfour.c
|
||||
m4/arcfour.m4
|
||||
|
||||
Depends-on:
|
||||
stdint
|
||||
gc
|
||||
|
||||
configure.ac:
|
||||
gl_GC_ARCFOUR
|
||||
|
||||
Makefile.am:
|
||||
|
||||
Include:
|
||||
"gc.h"
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Simon Josefsson
|
||||
11
modules/gc-arcfour-tests
Normal file
11
modules/gc-arcfour-tests
Normal file
@@ -0,0 +1,11 @@
|
||||
Files:
|
||||
tests/test-gc-arcfour.c
|
||||
|
||||
Depends-on:
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
TESTS += test-gc-arcfour
|
||||
noinst_PROGRAMS += test-gc-arcfour
|
||||
test_gc_arcfour_SOURCES = test-gc-arcfour.c
|
||||
99
tests/test-gc-arcfour.c
Normal file
99
tests/test-gc-arcfour.c
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Free Software Foundation
|
||||
* Written by Simon Josefsson
|
||||
*
|
||||
* 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "gc.h"
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
gc_cipher_handle ctx;
|
||||
/* Test vector from Cryptlib via Libgcrypt labeled there: "from the
|
||||
State/Commerce Department". */
|
||||
static char key_1[] = { 0x61, 0x8A, 0x63, 0xD2, 0xFB };
|
||||
static char plaintext_1[] = { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C };
|
||||
static const char ciphertext_1[] = { 0xF1, 0x38, 0x29, 0xC9, 0xDE };
|
||||
char scratch[16];
|
||||
Gc_rc rc;
|
||||
|
||||
rc = gc_init ();
|
||||
if (rc != GC_OK)
|
||||
{
|
||||
printf ("gc_init() failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
rc = gc_cipher_open (GC_ARCFOUR40, GC_STREAM, &ctx);
|
||||
if (rc != GC_OK)
|
||||
return 1;
|
||||
|
||||
rc = gc_cipher_setkey (ctx, sizeof (key_1), key_1);
|
||||
if (rc != GC_OK)
|
||||
return 1;
|
||||
|
||||
memcpy (scratch, plaintext_1, sizeof (plaintext_1));
|
||||
rc = gc_cipher_encrypt_inline (ctx, sizeof (plaintext_1), scratch);
|
||||
if (rc != GC_OK)
|
||||
return 1;
|
||||
|
||||
if (memcmp (scratch, ciphertext_1, sizeof (ciphertext_1)))
|
||||
{
|
||||
size_t i;
|
||||
printf ("expected:\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
printf ("%02x ", scratch[i] & 0xFF);
|
||||
printf ("\ncomputed:\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
printf ("%02x ", ciphertext_1[i] & 0xFF);
|
||||
printf ("\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* decrypt */
|
||||
|
||||
rc = gc_cipher_setkey (ctx, sizeof (key_1), key_1);
|
||||
if (rc != GC_OK)
|
||||
return 1;
|
||||
|
||||
rc = gc_cipher_decrypt_inline (ctx, sizeof (plaintext_1), scratch);
|
||||
if (rc != GC_OK)
|
||||
return 1;
|
||||
|
||||
if (memcmp (scratch, plaintext_1, sizeof (plaintext_1)))
|
||||
{
|
||||
size_t i;
|
||||
printf ("expected:\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
printf ("%02x ", plaintext_1[i] & 0xFF);
|
||||
printf ("\ncomputed:\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
printf ("%02x ", scratch[i] & 0xFF);
|
||||
printf ("\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
gc_done ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user