Skip to content

Commit 9344367

Browse files
pmatilaiffesti
authored andcommitted
Add support for SHA3-256 and SHA3-512
Sequoia doesn't yet support SHA3 so we need to skip it in the default CI tests. Tests verified locally with libgrypt and openssl builds. Fixes: #3436
1 parent 71e88ec commit 9344367

File tree

6 files changed

+61
-8
lines changed

6 files changed

+61
-8
lines changed

include/rpm/rpmcrypto.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ typedef enum rpmHashAlgo_e {
2323
RPM_HASH_MD2 = 5, /*!< MD2 */
2424
RPM_HASH_TIGER192 = 6, /*!< TIGER192 */
2525
RPM_HASH_HAVAL_5_160 = 7, /*!< HAVAL-5-160 */
26-
RPM_HASH_SHA256 = 8, /*!< SHA256 */
27-
RPM_HASH_SHA384 = 9, /*!< SHA384 */
28-
RPM_HASH_SHA512 = 10, /*!< SHA512 */
29-
RPM_HASH_SHA224 = 11, /*!< SHA224 */
26+
RPM_HASH_SHA256 = 8, /*!< SHA2-256 */
27+
RPM_HASH_SHA384 = 9, /*!< SHA2-384 */
28+
RPM_HASH_SHA512 = 10, /*!< SHA2-512 */
29+
RPM_HASH_SHA224 = 11, /*!< SHA2-224 */
30+
RPM_HASH_SHA3_256 = 12, /*!< SHA3-256 */
31+
/*!< reserved */
32+
RPM_HASH_SHA3_512 = 14, /*!< SHA3-512 */
3033
} rpmHashAlgo;
3134

3235
/** \ingroup rpmcrypto

include/rpm/rpmpgp.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,13 @@ typedef enum pgpHashAlgo_e {
143143
PGPHASHALGO_MD2 = 5, /*!< MD2 */
144144
PGPHASHALGO_TIGER192 = 6, /*!< TIGER192 */
145145
PGPHASHALGO_HAVAL_5_160 = 7, /*!< HAVAL-5-160 */
146-
PGPHASHALGO_SHA256 = 8, /*!< SHA256 */
147-
PGPHASHALGO_SHA384 = 9, /*!< SHA384 */
148-
PGPHASHALGO_SHA512 = 10, /*!< SHA512 */
149-
PGPHASHALGO_SHA224 = 11, /*!< SHA224 */
146+
PGPHASHALGO_SHA256 = 8, /*!< SHA2-256 */
147+
PGPHASHALGO_SHA384 = 9, /*!< SHA2-384 */
148+
PGPHASHALGO_SHA512 = 10, /*!< SHA2-512 */
149+
PGPHASHALGO_SHA224 = 11, /*!< SHA2-224 */
150+
PGPHASHALGO_SHA3_256 = 12, /*!< SHA3-256 */
151+
/*!< 13 reserved */
152+
PGPHASHALGO_SHA3_512 = 14, /*!< SHA3-256 */
150153
} pgpHashAlgo;
151154

152155
/** \ingroup rpmpgp

macros.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ Supplements: (%{name} = %{version}-%{release} and langpacks-%{1})\
395395
# 8 SHA256 (default)
396396
# 9 SHA384
397397
# 10 SHA512
398+
# 12 SHA3-256
399+
# 14 SHA3-512
398400
#
399401
%_source_filedigest_algorithm 8
400402
%_binary_filedigest_algorithm 8

rpmio/digest_libgcrypt.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ size_t rpmDigestLength(int hashalgo)
4646
return 48;
4747
case RPM_HASH_SHA512:
4848
return 64;
49+
case RPM_HASH_SHA3_256:
50+
return 32;
51+
case RPM_HASH_SHA3_512:
52+
return 64;
4953
default:
5054
return 0;
5155
}
@@ -66,6 +70,10 @@ static int hashalgo2gcryalgo(int hashalgo)
6670
return GCRY_MD_SHA384;
6771
case RPM_HASH_SHA512:
6872
return GCRY_MD_SHA512;
73+
case RPM_HASH_SHA3_256:
74+
return GCRY_MD_SHA3_256;
75+
case RPM_HASH_SHA3_512:
76+
return GCRY_MD_SHA3_512;
6977
default:
7078
return 0;
7179
}

rpmio/digest_openssl.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ static const EVP_MD *getEVPMD(int hashalgo)
6666
case RPM_HASH_SHA224:
6767
return EVP_sha224();
6868

69+
case RPM_HASH_SHA3_256:
70+
return EVP_sha3_256();
71+
72+
case RPM_HASH_SHA3_512:
73+
return EVP_sha3_512();
74+
6975
default:
7076
return EVP_md_null();
7177
}

tests/rpmbuild.at

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3641,3 +3641,34 @@ b718a835936fd2f6c8855f210c4789a1 hello-1.0.tar.gz
36413641
],
36423642
[])
36433643
RPMTEST_CLEANUP
3644+
3645+
AT_SETUP([file digests sha3])
3646+
AT_KEYWORDS([build digest])
3647+
AT_SKIP_IF([test x$PGP = xsequoia])
3648+
RPMDB_INIT
3649+
RPMTEST_CHECK([[
3650+
runroot rpmbuild -bs --quiet \
3651+
--define "_source_filedigest_algorithm 12" \
3652+
/data/SPECS/hello.spec
3653+
runroot rpm -q --qf "[%{filedigests} %{filenames}\n]" /build/SRPMS/hello-1.0-1.src.rpm
3654+
]],
3655+
[0],
3656+
[f1a0a1e0e413d66a4bd948cb16bdd03600c7aea6dcd04522bcbc3041a29ee651 hello-1.0-modernize.patch
3657+
a0da711d71069ab2735448140c5e0b51b4aeb3150a72877df54f372350e68644 hello-1.0.tar.gz
3658+
bf352b9ec1645d799dde77fcde2249eb62a0a29a1c10fbbc3dce03d851132b3f hello.spec
3659+
],
3660+
[])
3661+
3662+
RPMTEST_CHECK([[
3663+
runroot rpmbuild -bs --quiet \
3664+
--define "_source_filedigest_algorithm 14" \
3665+
/data/SPECS/hello.spec
3666+
runroot rpm -q --qf "[%{filedigests} %{filenames}\n]" /build/SRPMS/hello-1.0-1.src.rpm
3667+
]],
3668+
[0],
3669+
[11ddad2c1e5ef58d94d008634d9ad3a95cb7b5fab51652e73bb999c8d12110c4cdf6c572187c1a880a3c171a1af739fb48f77e98f5e30cc3bc1ec91a16182915 hello-1.0-modernize.patch
3670+
154b8717381c284af9b939cc28199347edc5cbcc3228bf0983d52323ca19ec73ad85a834ee9851d746561a0bdfc2dfa7278846b3b7b492d66451658275e0f1d5 hello-1.0.tar.gz
3671+
7cbf4a017c065a583caecea1de6c7e48210c949e416db788118b81d8ccbc941d0890bc48b3c250208f80b7a059a3fe40fd27426f6b25920cd533bfe83c2676a2 hello.spec
3672+
],
3673+
[])
3674+
RPMTEST_CLEANUP

0 commit comments

Comments
 (0)