diff --git a/man/integritytab.xml b/man/integritytab.xml
index 196ae2fc97..8b2aea70f7 100644
--- a/man/integritytab.xml
+++ b/man/integritytab.xml
@@ -56,7 +56,7 @@
The third field if present contains an absolute filename path to a key file or a -
to specify none. When the filename is present, the "integrity-algorithm" defaults to hmac-sha256
with the key length derived from the number of bytes in the key file. At this time the only supported integrity algorithms
- when using key file are hmac-sha256 and hmac-sha512. The maximum size of the key file is 4096 bytes.
+ when using key file are hmac-sha256, hmac-sha512, phmac-sha256, and hmac-sha512. The maximum size of the key file is 4096 bytes.
The fourth field, if present, is a comma-delimited list of options or a - to specify none. The following options are
@@ -125,7 +125,7 @@
-
+
The algorithm used for integrity checking. The default is crc32c. Must match option used during format.
diff --git a/src/integritysetup/integrity-util.c b/src/integritysetup/integrity-util.c
index 94ff62bf76..7e52f5c0dc 100644
--- a/src/integritysetup/integrity-util.c
+++ b/src/integritysetup/integrity-util.c
@@ -11,7 +11,7 @@
#include "time-util.h"
static int supported_integrity_algorithm(char *user_supplied) {
- if (!STR_IN_SET(user_supplied, "crc32", "crc32c", "xxhash64", "sha1", "sha256", "hmac-sha256", "hmac-sha512"))
+ if (!STR_IN_SET(user_supplied, "crc32", "crc32c", "xxhash64", "sha1", "sha256", "hmac-sha256", "hmac-sha512", "phmac-sha256", "phmac-sha512"))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unsupported integrity algorithm (%s)", user_supplied);
return 0;
}
diff --git a/src/integritysetup/integrity-util.h b/src/integritysetup/integrity-util.h
index 4347a0ac7e..5cc7e42de9 100644
--- a/src/integritysetup/integrity-util.h
+++ b/src/integritysetup/integrity-util.h
@@ -13,4 +13,6 @@ int parse_integrity_options(
#define DM_HMAC_256 "hmac(sha256)"
#define DM_HMAC_512 "hmac(sha512)"
+#define DM_PHMAC_256 "phmac(sha256)"
+#define DM_PHMAC_512 "phmac(sha512)"
#define DM_MAX_KEY_SIZE 4096 /* Maximum size of key allowed for dm-integrity */
diff --git a/src/integritysetup/integritysetup.c b/src/integritysetup/integritysetup.c
index c55535febb..6bb3958fc6 100644
--- a/src/integritysetup/integritysetup.c
+++ b/src/integritysetup/integritysetup.c
@@ -79,6 +79,10 @@ static const char *integrity_algorithm_select(const void *key_file_buf) {
return DM_HMAC_256;
if (streq("hmac-sha512", arg_integrity_algorithm))
return DM_HMAC_512;
+ if (streq("phmac-sha256", arg_integrity_algorithm))
+ return DM_PHMAC_256;
+ if (streq("phmac-sha512", arg_integrity_algorithm))
+ return DM_PHMAC_512;
return arg_integrity_algorithm;
} else if (key_file_buf)
return DM_HMAC_256;