svn commit: r202478 - stable/7/sys/opencrypto

Bjoern A. Zeeb bz at FreeBSD.org
Sun Jan 17 13:36:25 UTC 2010


Author: bz
Date: Sun Jan 17 13:36:25 2010
New Revision: 202478
URL: http://svn.freebsd.org/changeset/base/202478

Log:
  MFC r201898:
    Add comments trying to explain what bad things happen here, i.e.
    how hashed MD5/SHA are implemented, abusing Final() for padding and
    sw_octx to transport the key from the beginning to the end.
  
    Enlightened about what was going on here by: cperciva
    Reviewed by:  cperciva

Modified:
  stable/7/sys/opencrypto/cryptosoft.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/opencrypto/cryptosoft.c
==============================================================================
--- stable/7/sys/opencrypto/cryptosoft.c	Sun Jan 17 13:36:13 2010	(r202477)
+++ stable/7/sys/opencrypto/cryptosoft.c	Sun Jan 17 13:36:25 2010	(r202478)
@@ -430,7 +430,16 @@ swcr_authprepare(struct auth_hash *axf, 
 	case CRYPTO_MD5_KPDK:
 	case CRYPTO_SHA1_KPDK:
 	{
-		/* We need a buffer that can hold an md5 and a sha1 result. */
+		/* 
+		 * We need a buffer that can hold an md5 and a sha1 result
+		 * just to throw it away.
+		 * What we do here is the initial part of:
+		 *   ALGO( key, keyfill, .. )
+		 * adding the key to sw_ictx and abusing Final() to get the
+		 * "keyfill" padding.
+		 * In addition we abuse the sw_octx to save the key to have
+		 * it to be able to append it at the end in swcr_authcompute().
+		 */
 		u_char buf[SHA1_RESULTLEN];
 
 		sw->sw_klen = klen;
@@ -491,9 +500,17 @@ swcr_authcompute(struct cryptodesc *crd,
 
 	case CRYPTO_MD5_KPDK:
 	case CRYPTO_SHA1_KPDK:
+		/* If we have no key saved, return error. */
 		if (sw->sw_octx == NULL)
 			return EINVAL;
 
+		/*
+		 * Add the trailing copy of the key (see comment in
+		 * swcr_authprepare()) after the data:
+		 *   ALGO( .., key, algofill )
+		 * and let Final() do the proper, natural "algofill"
+		 * padding.
+		 */
 		axf->Update(&ctx, sw->sw_octx, sw->sw_klen);
 		axf->Final(aalg, &ctx);
 		break;


More information about the svn-src-stable-7 mailing list