--- /dev/null
+/* hmac-md5.h
+ *
+ * HMAC message authentication code.
+ */
+
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2001 Niels Möller
+ *
+ * The nettle library 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.
+ *
+ * The nettle 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 Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the nettle library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#ifndef NETTLE_HMAC_MD5_H_INCLUDED
+#define NETTLE_HMAC_MD5_H_INCLUDED
+
+#include "hmac.h"
+#include "md5.h"
+
+struct hmac_md5_ctx HMAC_CTX(struct md5_ctx);
+
+void
+hmac_md5_set_key(struct hmac_md5_ctx *ctx,
+ unsigned key_length, const uint8_t *key);
+
+void
+hmac_md5_update(struct hmac_md5_ctx *ctx,
+ unsigned length, const uint8_t *data);
+
+void
+hmac_md5_digest(struct hmac_md5_ctx *ctx,
+ unsigned length, uint8_t *digest);
+
+#endif /* NETTLE_HMAC_MD5_H_INCLUDED */
void
rsa_compute_root(struct rsa_private_key *key, mpz_t x, const mpz_t m);
+#define RSA_SIGN(key, algorithm, ctx, length, data, signature) ( \
+ algorithm##_update(ctx, length, data), \
+ rsa_##algorithm##_sign(key, ctx, signature) \
+)
+
+#define RSA_VERIFY(key, algorithm, ctx, length, data, signature) ( \
+ algorithm##_update(ctx, length, data), \
+ rsa_##algorithm##_verify(key, ctx, signature) \
+)
#endif /* NETTLE_RSA_H_INCLUDED */
* md5Identifier ::= AlgorithmIdentifier {md5, NULL}
*/
-static const uint8_t md5_prefix[] =
+static const uint8_t
+md5_prefix[] =
{
/* 18 octets prefix, 16 octets hash, 34 total. */
0x30, 32, /* SEQUENCE */
* sha1Identifier ::= AlgorithmIdentifier {id-sha1, NULL}
*/
-static const uint8_t sha1_prefix[] =
+static const uint8_t
+sha1_prefix[] =
{
/* 15 octets prefix, 20 octets hash, total 35 */
0x30, 33, /* SEQUENCE */
/* Here comes the raw hash value */
};
-
-
static void
pkcs1_encode_sha1(mpz_t m, unsigned length, struct sha1_ctx *hash)
{
des-test des3-test des-compat-test \
md5-test md5-compat-test sha1-test sha256-test \
serpent-test twofish-test \
- cbc-test bignum-test yarrow-test
+ cbc-test rsa-test bignum-test yarrow-test
# M4_FILES = aes-test.m4 arcfour-test.m4 blowfish-test.m4 cast128-test.m4 \
# des-test.m4 des3-test.m4 \
#include "aes.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* 128 bit keys */
test_cipher(&nettle_aes128,
#include "arcfour.h"
int
-main(int argc, char **argv)
+test_main(void)
{
test_cipher(&nettle_arcfour128,
HL("01234567 89ABCDEF 00000000 00000000"),
#include "config.h"
#endif
-#if HAVE_LIBGMP
-#include "bignum.h"
-
#include <stdlib.h>
#include <string.h>
+#if HAVE_LIBGMP
+#include "bignum.h"
+
static void
test_bignum(const char *hex, unsigned length, const uint8_t *base256)
{
#endif /* HAVE_LIBGMP */
int
-main(int argc, char **argv)
+test_main(void)
{
#if HAVE_LIBGMP
test_bignum("0", 0, "");
#include "blowfish.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* 208 bit key. Test from GNUPG. */
test_cipher(&nettle_blowfish128,
#include "cast128.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* Test vectors from B.1. Single Plaintext-Key-Ciphertext Sets, RFC
* 2144 */
#include "cbc.h"
int
-main(int argc, char **argv)
+test_main(void)
{
uint8_t msg[2 * AES_BLOCK_SIZE] = "Listen, I'll say this only once!";
#include <string.h>
#include "des-compat.h"
+#include "testutils.h"
#define C_Block des_cblock
#define Key_schedule des_key_schedule
static int ede_cfb64_test();
#endif
-int main(int argc, char **argv)
+int
+test_main(void)
{
int i,j,err=0;
des_cblock in,out,outin,iv3;
#include "des.h"
int
-main(int argc, char **argv)
+test_main(void)
{
struct des_ctx ctx;
#include "des.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* Intermediate values:
* After first DES encryption: "cd ea 2a 20 c2 e0 9e 48"
#include "md5-compat.h"
int
-main(int argc, char **argv)
+test_main(void)
{
MD5_CTX ctx;
unsigned char digest[MD5_DIGEST_SIZE];
#include "md5.h"
int
-main(int argc, char **argv)
+test_main(void)
{
test_hash(&nettle_md5, 0, "",
H("D41D8CD98F00B204 E9800998ECF8427E"));
#include "serpent.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* The first test for each key size from the ecb_vk.txt and ecb_vt.txt
* files in the serpent package. */
#include "sha.h"
int
-main(int argc, char **argv)
+test_main(void)
{
test_hash(&nettle_sha1, 0, "",
H("DA39A3EE5E6B4B0D 3255BFEF95601890 AFD80709"));
#include "sha.h"
int
-main(int argc, char **argv)
+test_main(void)
{
test_hash(&nettle_sha256, 3, "abc",
H("ba7816bf8f01cfea 414140de5dae2223"
#include "cbc.h"
#include <ctype.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+/* For getopt() */
+#include <unistd.h>
+
/* -1 means invalid */
const signed char hex_digits[0x100] =
{
}
}
+int verbose = 0;
+
+int
+main(int argc, char **argv)
+{
+ int c;
+
+ while ((c = getopt (argc, argv, "v")) != -1)
+ switch (c)
+ {
+ case 'v':
+ verbose = 1;
+ break;
+ case '?':
+ if (isprint (optopt))
+ fprintf (stderr, "Unknown option `-%c'.\n", optopt);
+ else
+ fprintf (stderr,
+ "Unknown option character `\\x%x'.\n",
+ optopt);
+ default:
+ abort();
+ }
+
+ return test_main();
+}
+
void
test_cipher(const struct nettle_cipher *cipher,
unsigned key_length,
const uint8_t *
decode_hex_dup(const char *hex);
+/* The main program */
+int
+test_main(void);
+
+extern int verbose;
+
void
test_cipher(const struct nettle_cipher *cipher,
unsigned key_length,
unsigned length,
const uint8_t *data,
const uint8_t *digest);
-
+
#define H2(d, s) decode_hex((d), (s))
#define H(x) decode_hex_dup(x)
#define HL(x) decode_hex_length(x), decode_hex_dup(x)
#include "twofish.h"
int
-main(int argc, char **argv)
+test_main(void)
{
/* 128 bit key */
test_cipher(&nettle_twofish128,
#include <stdlib.h>
#include <string.h>
-static int verbose = 0;
-
/* Lagged fibonacci sequence as described in Knuth 3.6 */
#define KK 100
}
int
-main(int argc, char **argv)
+test_main(void)
{
FILE *input;
static const char zeroes[100];
- if ((argc == 2)
- && (argv[1][0] == '-')
- && (argv[1][1] == 'v'))
- verbose = 1;
-
yarrow256_init(&yarrow, 2, sources);
memset(&yarrow.seed_file, 0, sizeof(yarrow.seed_file));