svn commit: r249365 - in user/andre/tcp-ao/sys: conf crypto crypto/cmac crypto/hmac crypto/rijndael

Adrian Chadd adrian at freebsd.org
Thu Apr 11 22:38:16 UTC 2013


Are you planning on making TCP-AO compile time optional?



Adrian


On 11 April 2013 08:55, Andre Oppermann <andre at freebsd.org> wrote:
> Author: andre
> Date: Thu Apr 11 15:55:52 2013
> New Revision: 249365
> URL: http://svnweb.freebsd.org/changeset/base/249365
>
> Log:
>   Adjust the HMAC and CMAC functions to the FreeBSD environment
>   and include them into the kernel build in preparation for use
>   in the TCP-AO code.
>
>   Note that we do not have explicit_bzero() so the compiler may
>   optimize away the bzero() to wipe out key storage on the stack
>   before returning.
>
>   Sponsored by: Juniper Networks
>
> Modified:
>   user/andre/tcp-ao/sys/conf/files
>   user/andre/tcp-ao/sys/crypto/cmac/cmac.c
>   user/andre/tcp-ao/sys/crypto/cmac/cmac.h
>   user/andre/tcp-ao/sys/crypto/hmac/hmac.c
>   user/andre/tcp-ao/sys/crypto/hmac/hmac.h
>   user/andre/tcp-ao/sys/crypto/rijndael/rijndael-api.c
>   user/andre/tcp-ao/sys/crypto/rijndael/rijndael.h
>   user/andre/tcp-ao/sys/crypto/sha1.h
>
> Modified: user/andre/tcp-ao/sys/conf/files
> ==============================================================================
> --- user/andre/tcp-ao/sys/conf/files    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/conf/files    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -541,8 +541,8 @@ crypto/sha1.c                       optional carp | crypto |
>                                          netgraph_mppc_encryption | sctp
>  crypto/sha2/sha2.c             optional crypto | geom_bde | ipsec | random | \
>                                          sctp | zfs
> -crypto/cmac/cmac.c             optional crypto | netinet | netinet6
> -crypto/hmac/hmac.c             optional crypto | netinet | netinet6
> +crypto/cmac/cmac.c             optional inet | inet6
> +crypto/hmac/hmac.c             optional inet | inet6
>  ddb/db_access.c                        optional ddb
>  ddb/db_break.c                 optional ddb
>  ddb/db_capture.c               optional ddb
> @@ -3116,6 +3116,7 @@ netinet/tcp_timer.c               optional inet | ine
>  netinet/tcp_timewait.c         optional inet | inet6
>  netinet/tcp_usrreq.c           optional inet | inet6
>  netinet/udp_usrreq.c           optional inet | inet6
> +netinet/tcp_ao.c               optional inet | inet6
>  netinet/libalias/alias.c       optional libalias inet | netgraph_nat inet
>  netinet/libalias/alias_db.c    optional libalias inet | netgraph_nat inet
>  netinet/libalias/alias_mod.c   optional libalias | netgraph_nat
>
> Modified: user/andre/tcp-ao/sys/crypto/cmac/cmac.c
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/cmac/cmac.c    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/cmac/cmac.c    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -24,8 +24,10 @@
>  #include <sys/param.h>
>  #include <sys/systm.h>
>
> -#include <crypto/rijndael.h>
> -#include <crypto/cmac.h>
> +#include <crypto/rijndael/rijndael.h>
> +#include <crypto/cmac/cmac.h>
> +
> +#define explicit_bzero(a, b)   bzero(a, b)
>
>  #define LSHIFT(v, r) do {                                      \
>         int i;                                                  \
>
> Modified: user/andre/tcp-ao/sys/crypto/cmac/cmac.h
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/cmac/cmac.h    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/cmac/cmac.h    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -19,6 +19,10 @@
>  #ifndef _CMAC_H_
>  #define _CMAC_H_
>
> +#ifndef _RIJNDAEL_H_
> +#include <crypto/rijndael/rijndael.h>
> +#endif
> +
>  #define AES_CMAC_KEY_LENGTH    16
>  #define AES_CMAC_DIGEST_LENGTH 16
>
>
> Modified: user/andre/tcp-ao/sys/crypto/hmac/hmac.c
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/hmac/hmac.c    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/hmac/hmac.c    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -24,10 +24,12 @@
>  #include <sys/param.h>
>  #include <sys/systm.h>
>
> -#include <crypto/md5.h>
> +#include <sys/md5.h>
>  #include <crypto/sha1.h>
> -#include <crypto/sha2.h>
> -#include <crypto/hmac.h>
> +#include <crypto/sha2/sha2.h>
> +#include <crypto/hmac/hmac.h>
> +
> +#define explicit_bzero(a, b)   bzero(a, b)
>
>  void
>  HMAC_MD5_Init(HMAC_MD5_CTX *ctx, const u_int8_t *key, u_int key_len)
> @@ -144,9 +146,9 @@ HMAC_SHA256_Init(HMAC_SHA256_CTX *ctx, c
>         int i;
>
>         if (key_len > SHA256_BLOCK_LENGTH) {
> -               SHA256Init(&ctx->ctx);
> -               SHA256Update(&ctx->ctx, key, key_len);
> -               SHA256Final(ctx->key, &ctx->ctx);
> +               SHA256_Init(&ctx->ctx);
> +               SHA256_Update(&ctx->ctx, key, key_len);
> +               SHA256_Final(ctx->key, &ctx->ctx);
>                 ctx->key_len = SHA256_DIGEST_LENGTH;
>         } else {
>                 bcopy(key, ctx->key, key_len);
> @@ -158,8 +160,8 @@ HMAC_SHA256_Init(HMAC_SHA256_CTX *ctx, c
>         for (i = 0; i < SHA256_BLOCK_LENGTH; i++)
>                 k_ipad[i] ^= 0x36;
>
> -       SHA256Init(&ctx->ctx);
> -       SHA256Update(&ctx->ctx, k_ipad, SHA256_BLOCK_LENGTH);
> +       SHA256_Init(&ctx->ctx);
> +       SHA256_Update(&ctx->ctx, k_ipad, SHA256_BLOCK_LENGTH);
>
>         explicit_bzero(k_ipad, sizeof k_ipad);
>  }
> @@ -167,7 +169,7 @@ HMAC_SHA256_Init(HMAC_SHA256_CTX *ctx, c
>  void
>  HMAC_SHA256_Update(HMAC_SHA256_CTX *ctx, const u_int8_t *data, u_int len)
>  {
> -       SHA256Update(&ctx->ctx, data, len);
> +       SHA256_Update(&ctx->ctx, data, len);
>  }
>
>  void
> @@ -176,17 +178,17 @@ HMAC_SHA256_Final(u_int8_t digest[SHA256
>         u_int8_t k_opad[SHA256_BLOCK_LENGTH];
>         int i;
>
> -       SHA256Final(digest, &ctx->ctx);
> +       SHA256_Final(digest, &ctx->ctx);
>
>         bzero(k_opad, SHA256_BLOCK_LENGTH);
>         bcopy(ctx->key, k_opad, ctx->key_len);
>         for (i = 0; i < SHA256_BLOCK_LENGTH; i++)
>                 k_opad[i] ^= 0x5c;
>
> -       SHA256Init(&ctx->ctx);
> -       SHA256Update(&ctx->ctx, k_opad, SHA256_BLOCK_LENGTH);
> -       SHA256Update(&ctx->ctx, digest, SHA256_DIGEST_LENGTH);
> -       SHA256Final(digest, &ctx->ctx);
> +       SHA256_Init(&ctx->ctx);
> +       SHA256_Update(&ctx->ctx, k_opad, SHA256_BLOCK_LENGTH);
> +       SHA256_Update(&ctx->ctx, digest, SHA256_DIGEST_LENGTH);
> +       SHA256_Final(digest, &ctx->ctx);
>
>         explicit_bzero(k_opad, sizeof k_opad);
>  }
>
> Modified: user/andre/tcp-ao/sys/crypto/hmac/hmac.h
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/hmac/hmac.h    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/hmac/hmac.h    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -19,6 +19,10 @@
>  #ifndef _HMAC_H_
>  #define _HMAC_H_
>
> +#include <sys/md5.h>
> +#include <crypto/sha1.h>
> +#include <crypto/sha2/sha2.h>
> +
>  typedef struct _HMAC_MD5_CTX {
>         MD5_CTX         ctx;
>         u_int8_t        key[MD5_BLOCK_LENGTH];
> @@ -32,7 +36,7 @@ typedef struct _HMAC_SHA1_CTX {
>  } HMAC_SHA1_CTX;
>
>  typedef struct _HMAC_SHA256_CTX {
> -       SHA2_CTX        ctx;
> +       SHA256_CTX      ctx;
>         u_int8_t        key[SHA256_BLOCK_LENGTH];
>         u_int           key_len;
>  } HMAC_SHA256_CTX;
>
> Modified: user/andre/tcp-ao/sys/crypto/rijndael/rijndael-api.c
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/rijndael/rijndael-api.c        Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/rijndael/rijndael-api.c        Thu Apr 11 15:55:52 2013        (r249365)
> @@ -45,6 +45,13 @@ rijndael_set_key(rijndael_ctx *ctx, cons
>  }
>
>  void
> +rijndael_set_key_enc_only(rijndael_ctx *ctx, const u_char *key, int bits)
> +{
> +
> +       ctx->Nr = rijndaelKeySetupEnc(ctx->ek, key, bits);
> +}
> +
> +void
>  rijndael_decrypt(const rijndael_ctx *ctx, const u_char *src, u_char *dst)
>  {
>
>
> Modified: user/andre/tcp-ao/sys/crypto/rijndael/rijndael.h
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/rijndael/rijndael.h    Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/rijndael/rijndael.h    Thu Apr 11 15:55:52 2013        (r249365)
> @@ -42,6 +42,7 @@ typedef struct {
>  } rijndael_ctx;
>
>  void   rijndael_set_key(rijndael_ctx *, const u_char *, int);
> +void   rijndael_set_key_enc_only(rijndael_ctx *, const u_char *, int);
>  void   rijndael_decrypt(const rijndael_ctx *, const u_char *, u_char *);
>  void   rijndael_encrypt(const rijndael_ctx *, const u_char *, u_char *);
>
>
> Modified: user/andre/tcp-ao/sys/crypto/sha1.h
> ==============================================================================
> --- user/andre/tcp-ao/sys/crypto/sha1.h Thu Apr 11 14:45:43 2013        (r249364)
> +++ user/andre/tcp-ao/sys/crypto/sha1.h Thu Apr 11 15:55:52 2013        (r249365)
> @@ -68,5 +68,7 @@ typedef struct sha1_ctxt SHA1_CTX;
>  #endif /* _KERNEL */
>
>  #define        SHA1_RESULTLEN  (160/8)
> +#define        SHA1_BLOCK_LENGTH       64
> +#define        SHA1_DIGEST_LENGTH      SHA1_RESULTLEN
>
>  #endif /*_NETINET6_SHA1_H_*/


More information about the svn-src-user mailing list