crypto: ghash - add comment and improve help text
Subsystems (5)
PATCH 1/1 crypto: ghash - add comment and improve help text
From: Eric Biggers <[email protected]>
To help avoid confusion, add a comment to ghash-generic.c which explains the convention that the kernel's implementation of GHASH uses.
Also update the Kconfig help text and module descriptions to call GHASH a "hash function" rather than a "message digest", since the latter normally means a real cryptographic hash function, which GHASH is not.
--- arch/arm/crypto/ghash-ce-glue.c | 2 +- arch/s390/crypto/ghash_s390.c | 2 +- arch/x86/crypto/ghash-clmulni-intel_glue.c | 3 +-- crypto/Kconfig | 11 ++++---- crypto/ghash-generic.c | 31 +++++++++++++++++++--- drivers/crypto/Kconfig | 6 ++--- include/crypto/ghash.h | 2 +- 7 files changed, 41 insertions(+), 16 deletions(-)
arch/arm/crypto/ghash-ce-glue.c +1 -1
@@ -17,7 +17,7 @@#include <linux/crypto.h> #include <linux/module.h> -MODULE_DESCRIPTION ("GHASH secure hash using ARMv8 Crypto Extensions" ); +MODULE_DESCRIPTION ("GHASH hash function using ARMv8 Crypto Extensions" );MODULE_AUTHOR ("Ard Biesheuvel <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS_CRYPTO ("ghash" );
arch/s390/crypto/ghash_s390.c +1 -1
@@ -153,4 +153,4 @@ module_exit(ghash_mod_exit);MODULE_ALIAS_CRYPTO ("ghash" );MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, s390 implementation" ); +MODULE_DESCRIPTION ("GHASH hash function, s390 implementation" );
arch/x86/crypto/ghash-clmulni-intel_glue.c +1 -2
@@ -357,6 +357,5 @@ module_init(ghash_pclmulqdqni_mod_init);module_exit (ghash_pclmulqdqni_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, " -"accelerated by PCLMULQDQ-NI" ); +MODULE_DESCRIPTION ("GHASH hash function, accelerated by PCLMULQDQ-NI" );MODULE_ALIAS_CRYPTO ("ghash" );
crypto/Kconfig +6 -5
@@ -728,11 +728,12 @@ config CRYPTO_VPMSUM_TESTER Unless you are testing these algorithms, you don't need this. config CRYPTO_GHASH - tristate "GHASH digest algorithm" + tristate "GHASH hash function" select CRYPTO_GF128MUL select CRYPTO_HASH help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). + GHASH is the hash function used in GCM (Galois/Counter Mode). + It is not a general-purpose cryptographic hash function. config CRYPTO_POLY1305 tristate "Poly1305 authenticator algorithm"
@@ -1057,12 +1058,12 @@ config CRYPTO_WP512 <http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html> config CRYPTO_GHASH_CLMUL_NI_INTEL - tristate "GHASH digest algorithm (CLMUL-NI accelerated)" + tristate "GHASH hash function (CLMUL-NI accelerated)" depends on X86 && 64BIT select CRYPTO_CRYPTD help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). - The implementation is accelerated by CLMUL-NI of Intel. + This is the x86_64 CLMUL-NI accelerated implementation of + GHASH, the hash function used in GCM (Galois/Counter mode). comment "Ciphers"
crypto/ghash-generic.c +28 -3
@@ -1,12 +1,37 @@// SPDX-License-Identifier: GPL-2.0-only /* -* GHASH: digest algorithm for GCM (Galois/Counter Mode). +* GHASH: hash function for GCM (Galois/Counter Mode). * * Copyright (c) 2007 Nokia Siemens Networks - Mikko Herranen <[email protected]> * Copyright (c) 2009 Intel Corp. * Author: Huang Ying <[email protected]> +*/ + +/* +* GHASH is a keyed hash function used in GCM authentication tag generation. +* +* The original GCM paper [1] presents GHASH as a function GHASH(H, A, C) which +* takes a 16-byte hash key H, additional authenticated data A, and a ciphertext +* C. It formats A and C into a single byte string X, interprets X as a +* polynomial over GF(2^128), and evaluates this polynomial at the point H. +* +* However, the NIST standard for GCM [2] presents GHASH as GHASH(H, X) where X +* is the already-formatted byte string containing both A and C. +* +* "ghash" in the Linux crypto API uses the 'X' (pre-formatted) convention, +* since the API supports only a single data stream per hash. Thus, the +* formatting of 'A' and 'C' is done in the "gcm" template, not in "ghash". +* +* The reason "ghash" is separate from "gcm" is to allow "gcm" to use an +* accelerated "ghash" when a standalone accelerated "gcm(aes)" is unavailable. +* It is generally inappropriate to use "ghash" for other purposes, since it is +* an "ε-almost-XOR-universal hash function", not a cryptographic hash function. +* It can only be used securely in crypto modes specially designed to use it. * -* The algorithm implementation is copied from gcm.c. +* [1] The Galois/Counter Mode of Operation (GCM) +* (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.694.695&rep=rep1&type=pdf) +* [2] Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC +* (https://csrc.nist.gov/publications/detail/sp/800-38d/final) */ #include <crypto/algapi.h>
@@ -156,6 +181,6 @@ subsys_initcall(ghash_mod_init);module_exit (ghash_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm" ); +MODULE_DESCRIPTION ("GHASH hash function" );MODULE_ALIAS_CRYPTO ("ghash" );MODULE_ALIAS_CRYPTO ("ghash-generic" );
drivers/crypto/Kconfig +3 -3
@@ -189,12 +189,12 @@ config S390_PRNG It is available as of z9. config CRYPTO_GHASH_S390 - tristate "GHASH digest algorithm" + tristate "GHASH hash function" depends on S390 select CRYPTO_HASH help - This is the s390 hardware accelerated implementation of the - GHASH message digest algorithm for GCM (Galois/Counter Mode). + This is the s390 hardware accelerated implementation of GHASH, + the hash function used in GCM (Galois/Counter mode). It is available as of z196.
include/crypto/ghash.h +1 -1
@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0 */ /* -* Common values for GHASH algorithms +* Common values for the GHASH hash function */ #ifndef __CRYPTO_GHASH_H__
Signature · 1 line
2.22.0
Quoted 6 lines · Eric Biggers
From: Eric Biggers <[email protected]>
To help avoid confusion, add a comment to
ghash-generic.cwhich explains the convention that the kernel's implementation of GHASH uses.
Quoted 6 lines
Also update the
Kconfighelp text and module descriptions to call GHASH a "hash function" rather than a "message digest", since the latter normally means a real cryptographic hash function, which GHASH is not.Cc Pascal Van Leeuwen <[email protected]>Signed-off-by Eric Biggers <[email protected]>
Quoted 167 lines
--- arch/arm/crypto/ghash-ce-glue.c | 2 +- arch/s390/crypto/ghash_s390.c | 2 +- arch/x86/crypto/ghash-clmulni-intel_glue.c | 3 +-- crypto/Kconfig | 11 ++++---- crypto/ghash-generic.c | 31 +++++++++++++++++++--- drivers/crypto/Kconfig | 6 ++--- include/crypto/ghash.h | 2 +- 7 files changed, 41 insertions(+), 16 deletions(-)arch/arm/crypto/ghash-ce-glue.c +1
-1@@ -17,7 +17,7 @@#include <linux/crypto.h> #include <linux/module.h> -MODULE_DESCRIPTION ("GHASH secure hash using ARMv8 Crypto Extensions" ); +MODULE_DESCRIPTION ("GHASH hash function using ARMv8 Crypto Extensions" );MODULE_AUTHOR ("Ard Biesheuvel <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS_CRYPTO ("ghash" );arch/s390/crypto/ghash_s390.c +1
-1@@ -153,4 +153,4 @@ module_exit(ghash_mod_exit);MODULE_ALIAS_CRYPTO ("ghash" );MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, s390 implementation" ); +MODULE_DESCRIPTION ("GHASH hash function, s390 implementation" );arch/x86/crypto/ghash-clmulni-intel_glue.c +1
-2@@ -357,6 +357,5 @@ module_init(ghash_pclmulqdqni_mod_init);module_exit (ghash_pclmulqdqni_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, " -"accelerated by PCLMULQDQ-NI" ); +MODULE_DESCRIPTION ("GHASH hash function, accelerated by PCLMULQDQ-NI" );MODULE_ALIAS_CRYPTO ("ghash" );crypto/Kconfig +6
-5@@ -728,11 +728,12 @@ config CRYPTO_VPMSUM_TESTER Unless you are testing these algorithms, you don't need this. config CRYPTO_GHASH - tristate "GHASH digest algorithm" + tristate "GHASH hash function" select CRYPTO_GF128MUL select CRYPTO_HASH help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). + GHASH is the hash function used in GCM (Galois/Counter Mode). + It is not a general-purpose cryptographic hash function. config CRYPTO_POLY1305 tristate "Poly1305 authenticator algorithm"@@ -1057,12 +1058,12 @@ config CRYPTO_WP512 <http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html> config CRYPTO_GHASH_CLMUL_NI_INTEL - tristate "GHASH digest algorithm (CLMUL-NI accelerated)" + tristate "GHASH hash function (CLMUL-NI accelerated)" depends on X86 && 64BIT select CRYPTO_CRYPTD help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). - The implementation is accelerated by CLMUL-NI of Intel. + This is the x86_64 CLMUL-NI accelerated implementation of + GHASH, the hash function used in GCM (Galois/Counter mode). comment "Ciphers"crypto/ghash-generic.c +28
-3@@ -1,12 +1,37 @@// SPDX-License-Identifier: GPL-2.0-only /* -* GHASH: digest algorithm for GCM (Galois/Counter Mode). +* GHASH: hash function for GCM (Galois/Counter Mode). * * Copyright (c) 2007 Nokia Siemens Networks - Mikko Herranen <[email protected]> * Copyright (c) 2009 Intel Corp. * Author: Huang Ying <[email protected]> +*/ + +/* +* GHASH is a keyed hash function used in GCM authentication tag generation. +* +* The original GCM paper [1] presents GHASH as a function GHASH(H, A, C) which +* takes a 16-byte hash key H, additional authenticated data A, and a ciphertext +* C. It formats A and C into a single byte string X, interprets X as a +* polynomial over GF(2^128), and evaluates this polynomial at the point H. +* +* However, the NIST standard for GCM [2] presents GHASH as GHASH(H, X) where X +* is the already-formatted byte string containing both A and C. +* +* "ghash" in the Linux crypto API uses the 'X' (pre-formatted) convention, +* since the API supports only a single data stream per hash. Thus, the +* formatting of 'A' and 'C' is done in the "gcm" template, not in "ghash". +* +* The reason "ghash" is separate from "gcm" is to allow "gcm" to use an +* accelerated "ghash" when a standalone accelerated "gcm(aes)" is unavailable. +* It is generally inappropriate to use "ghash" for other purposes, since it is +* an "ε-almost-XOR-universal hash function", not a cryptographic hash function. +* It can only be used securely in crypto modes specially designed to use it. * -* The algorithm implementation is copied from gcm.c. +* [1] The Galois/Counter Mode of Operation (GCM) +* (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.694.695&rep=rep1&type=pdf) +* [2] Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC +* (https://csrc.nist.gov/publications/detail/sp/800-38d/final) */ #include <crypto/algapi.h> @@ -156,6 +181,6 @@ subsys_initcall(ghash_mod_init);module_exit (ghash_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm" ); +MODULE_DESCRIPTION ("GHASH hash function" );MODULE_ALIAS_CRYPTO ("ghash" );MODULE_ALIAS_CRYPTO ("ghash-generic" );drivers/crypto/Kconfig +3
-3@@ -189,12 +189,12 @@ config S390_PRNG It is available as of z9. config CRYPTO_GHASH_S390 - tristate "GHASH digest algorithm" + tristate "GHASH hash function" depends on S390 select CRYPTO_HASH help - This is the s390 hardware accelerated implementation of the - GHASH message digest algorithm for GCM (Galois/Counter Mode). + This is the s390 hardware accelerated implementation of GHASH, + the hash function used in GCM (Galois/Counter mode). It is available as of z196.include/crypto/ghash.h +1
-2@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0 */ /* -* Common values for GHASH algorithms +* Common values for the GHASH hash function */ #ifndef __CRYPTO_GHASH_H__ --2.22.0
Quoted 12 lines
-----Original Message-----
From: Eric Biggers <[email protected]>
Sent: Saturday, July 20, 2019 8:09 AM
To: [email protected]; Herbert Xu <[email protected]>
Cc: Pascal Van Leeuwen <[email protected]>
Subject: [PATCH] crypto: ghash - add comment and improve help textFrom: Eric Biggers <[email protected]>
To help avoid confusion, add a comment to
ghash-generic.cwhich explains the convention that the kernel's implementation of GHASH uses.
Quoted 6 lines
Also update the
Kconfighelp text and module descriptions to call GHASH a "hash function" rather than a "message digest", since the latter normally means a real cryptographic hash function, which GHASH is not.Cc Pascal Van Leeuwen <[email protected]>Signed-off-by Eric Biggers <[email protected]>
Quoted 165 lines
--- arch/arm/crypto/ghash-ce-glue.c | 2 +- arch/s390/crypto/ghash_s390.c | 2 +- arch/x86/crypto/ghash-clmulni-intel_glue.c | 3 +-- crypto/Kconfig | 11 ++++---- crypto/ghash-generic.c | 31 +++++++++++++++++++--- drivers/crypto/Kconfig | 6 ++--- include/crypto/ghash.h | 2 +- 7 files changed, 41 insertions(+), 16 deletions(-)arch/arm/crypto/ghash-ce-glue.c +1
-1@@ -17,7 +17,7 @@#include <linux/crypto.h> #include <linux/module.h> -MODULE_DESCRIPTION ("GHASH secure hash using ARMv8 Crypto Extensions" ); +MODULE_DESCRIPTION ("GHASH hash function using ARMv8 Crypto Extensions" );MODULE_AUTHOR ("Ard Biesheuvel <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS_CRYPTO ("ghash" );arch/s390/crypto/ghash_s390.c +1
-1@@ -153,4 +153,4 @@ module_exit(ghash_mod_exit);MODULE_ALIAS_CRYPTO ("ghash" );MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, s390 implementation" ); +MODULE_DESCRIPTION ("GHASH hash function, s390 implementation" );arch/x86/crypto/ghash-clmulni-intel_glue.c +1
-2@@ -357,6 +357,5 @@ module_init(ghash_pclmulqdqni_mod_init);module_exit (ghash_pclmulqdqni_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm, " -"accelerated by PCLMULQDQ-NI" ); +MODULE_DESCRIPTION ("GHASH hash function, accelerated by PCLMULQDQ-NI" );MODULE_ALIAS_CRYPTO ("ghash" );crypto/Kconfig +6
-5@@ -728,11 +728,12 @@ config CRYPTO_VPMSUM_TESTER Unless you are testing these algorithms, you don't need this. config CRYPTO_GHASH - tristate "GHASH digest algorithm" + tristate "GHASH hash function" select CRYPTO_GF128MUL select CRYPTO_HASH help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). + GHASH is the hash function used in GCM (Galois/Counter Mode). + It is not a general-purpose cryptographic hash function. config CRYPTO_POLY1305 tristate "Poly1305 authenticator algorithm"@@ -1057,12 +1058,12 @@ config CRYPTO_WP512 <http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html> config CRYPTO_GHASH_CLMUL_NI_INTEL - tristate "GHASH digest algorithm (CLMUL-NI accelerated)" + tristate "GHASH hash function (CLMUL-NI accelerated)" depends on X86 && 64BIT select CRYPTO_CRYPTD help - GHASH is message digest algorithm for GCM (Galois/Counter Mode). - The implementation is accelerated by CLMUL-NI of Intel. + This is the x86_64 CLMUL-NI accelerated implementation of + GHASH, the hash function used in GCM (Galois/Counter mode). comment "Ciphers"crypto/ghash-generic.c +28
-3@@ -1,12 +1,37 @@// SPDX-License-Identifier: GPL-2.0-only /* -* GHASH: digest algorithm for GCM (Galois/Counter Mode). +* GHASH: hash function for GCM (Galois/Counter Mode). * * Copyright (c) 2007 Nokia Siemens Networks - Mikko Herranen <[email protected]> * Copyright (c) 2009 Intel Corp. * Author: Huang Ying <[email protected]> +*/ + +/* +* GHASH is a keyed hash function used in GCM authentication tag generation. +* +* The original GCM paper [1] presents GHASH as a function GHASH(H, A, C) which +* takes a 16-byte hash key H, additional authenticated data A, and a ciphertext +* C. It formats A and C into a single byte string X, interprets X as a +* polynomial over GF(2^128), and evaluates this polynomial at the point H. +* +* However, the NIST standard for GCM [2] presents GHASH as GHASH(H, X) where X +* is the already-formatted byte string containing both A and C. +* +* "ghash" in the Linux crypto API uses the 'X' (pre-formatted) convention, +* since the API supports only a single data stream per hash. Thus, the +* formatting of 'A' and 'C' is done in the "gcm" template, not in "ghash". +* +* The reason "ghash" is separate from "gcm" is to allow "gcm" to use an +* accelerated "ghash" when a standalone accelerated "gcm(aes)" is unavailable. +* It is generally inappropriate to use "ghash" for other purposes, since it is +* an "ε-almost-XOR-universal hash function", not a cryptographic hash function. +* It can only be used securely in crypto modes specially designed to use it. * -* The algorithm implementation is copied from gcm.c. +* [1] The Galois/Counter Mode of Operation (GCM) +* (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.694.695&rep=rep1&type=pdf) +* [2] Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC +* (https://csrc.nist.gov/publications/detail/sp/800-38d/final) */ #include <crypto/algapi.h> @@ -156,6 +181,6 @@ subsys_initcall(ghash_mod_init);module_exit (ghash_mod_exit);MODULE_LICENSE ("GPL" ); -MODULE_DESCRIPTION ("GHASH Message Digest Algorithm" ); +MODULE_DESCRIPTION ("GHASH hash function" );MODULE_ALIAS_CRYPTO ("ghash" );MODULE_ALIAS_CRYPTO ("ghash-generic" );drivers/crypto/Kconfig +3
-3@@ -189,12 +189,12 @@ config S390_PRNG It is available as of z9. config CRYPTO_GHASH_S390 - tristate "GHASH digest algorithm" + tristate "GHASH hash function" depends on S390 select CRYPTO_HASH help - This is the s390 hardware accelerated implementation of the - GHASH message digest algorithm for GCM (Galois/Counter Mode). + This is the s390 hardware accelerated implementation of GHASH, + the hash function used in GCM (Galois/Counter mode). It is available as of z196.include/crypto/ghash.h +1
-2@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0 */ /* -* Common values for GHASH algorithms +* Common values for the GHASH hash function */ #ifndef __CRYPTO_GHASH_H__ --
Quoted 1 line
2.22.0
Pascal van Leeuwen
Silicon IP Architect, Multi-Protocol Engines @ Verimatrix www.insidesecure.com
Herbert Xu
maintainerQuoted 12 lines · Eric Biggers
From: Eric Biggers <[email protected]>
To help avoid confusion, add a comment to
ghash-generic.cwhich explains the convention that the kernel's implementation of GHASH uses.Also update the
Kconfighelp text and module descriptions to call GHASH a "hash function" rather than a "message digest", since the latter normally means a real cryptographic hash function, which GHASH is not.Cc Pascal Van Leeuwen <[email protected]>Signed-off-by Eric Biggers <[email protected]>---
Quoted 8 lines
arch/arm/crypto/ghash-ce-glue.c | 2 +- arch/s390/crypto/ghash_s390.c | 2 +- arch/x86/crypto/ghash-clmulni-intel_glue.c | 3 +-- crypto/Kconfig | 11 ++++---- crypto/ghash-generic.c | 31 +++++++++++++++++++--- drivers/crypto/Kconfig | 6 ++--- include/crypto/ghash.h | 2 +- 7 files changed, 41 insertions(+), 16 deletions(-)
Patch applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt