On Tue, Oct 29, 2024 at 08:06:39PM +0800, liequan che wrote: > Introduce the SM3 cryptographic hash algorithm (GB/T 32905-2016). > > SM3 (GB/T 32905-2016) is a cryptographic standard issued by the > Organization of State Commercial Cryptography Administration (OSCCA) > as an authorized cryptographic algorithm for use within China. > > Detect the SM3 cryptographic hash algorithm and enable the feature silently > if it is available. > > Signed-off-by: cheliequan <chelieq...@inspur.com> > --- > crypto/hash-gcrypt.c | 3 +++ > crypto/hash-nettle.c | 14 ++++++++++++ > crypto/hash.c | 3 +++ > crypto/hmac-gcrypt.c | 3 +++ > crypto/hmac-nettle.c | 11 ++++++++++ > crypto/pbkdf-gcrypt.c | 6 ++++++ > crypto/pbkdf-nettle.c | 13 ++++++++++++ > include/crypto/hash.h | 1 + > meson.build | 39 ++++++++++++++++++++++++++++++++++ > qapi/crypto.json | 3 ++- > tests/unit/test-crypto-hash.c | 16 ++++++++++++++ > tests/unit/test-crypto-hmac.c | 8 +++++++ > tests/unit/test-crypto-pbkdf.c | 16 ++++++++++++++ > 13 files changed, 135 insertions(+), 1 deletion(-) >
> diff --git a/meson.build b/meson.build > index 85594fd3f1..611c13d182 100644 > --- a/meson.build > +++ b/meson.build > @@ -1754,6 +1754,7 @@ gcrypt = not_found > nettle = not_found > hogweed = not_found > crypto_sm4 = not_found > +crypto_sm3 = not_found > xts = 'none' > > if get_option('nettle').enabled() and get_option('gcrypt').enabled() > @@ -1789,6 +1790,17 @@ if not gnutls_crypto.found() > }''', dependencies: gcrypt) > crypto_sm4 = not_found > endif > + crypto_sm3 = gcrypt > + # SM3 ALG is available in libgcrypt >= 1.8 The gcrypt NEWS says SM3 was added in 1.9, not 1.8 > + if gcrypt.found() and not cc.links(''' > + #include <gcrypt.h> > + int main(void) { > + gcry_md_hd_t handler; > + gcry_md_open(&handler, GCRY_MD_SM3, 0); > + return 0; > + }''', dependencies: gcrypt) > + crypto_sm3 = not_found > + endif > endif > if (not get_option('nettle').auto() or have_system) and not > gcrypt.found() > nettle = dependency('nettle', version: '>=3.4', > @@ -1809,6 +1821,31 @@ if not gnutls_crypto.found() > }''', dependencies: nettle) > crypto_sm4 = not_found > endif > + crypto_sm3 = nettle > + # SM3 ALG is available in nettle >= 3.4 The nettle NEWS says SM3 was added in 3.8, not 3.4 > + if nettle.found() and not cc.links(''' > + #include <nettle/sm3.h> > + #include <nettle/hmac.h> > + int main(void) { > + struct sm3_ctx ctx; > + struct hmac_sm3_ctx hmac_ctx; > + unsigned char data[64] = {0}; > + unsigned char output[32]; > + > + // SM3 hash function test > + sm3_init(&ctx); > + sm3_update(&ctx, 64, data); > + sm3_digest(&ctx, 32, data); > + > + // HMAC-SM3 test > + hmac_sm3_set_key(&hmac_ctx, 32, data); > + hmac_sm3_update(&hmac_ctx, 64, data); > + hmac_sm3_digest(&hmac_ctx, 32, output); > + > + return 0; > + }''', dependencies: nettle) > + crypto_sm3 = not_found > + endif > endif > endif > diff --git a/qapi/crypto.json b/qapi/crypto.json > index 9431522768..3645a4649b 100644 > --- a/qapi/crypto.json > +++ b/qapi/crypto.json > @@ -55,11 +55,12 @@ > # @sha512: SHA-512. (since 2.7) > # > # @ripemd160: RIPEMD-160. (since 2.7) > +# @sm3: SM3. (since 8.2.0) QEMU's current release is 9.1, so the next version this can be added to is 9.2.0, not 8.2.0 With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|