Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libgcrypt for openSUSE:Factory checked in at 2026-09-04 12:37:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libgcrypt (Old) and /work/SRC/openSUSE:Factory/.libgcrypt.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libgcrypt" Fri Sep 4 12:37:51 2026 rev:114 rq:1375232 version:1.12.3 Changes: -------- --- /work/SRC/openSUSE:Factory/libgcrypt/libgcrypt.changes 2026-04-23 19:22:58.746815957 +0200 +++ /work/SRC/openSUSE:Factory/.libgcrypt.new.1265/libgcrypt.changes 2026-09-04 12:38:27.742479741 +0200 @@ -1,0 +2,51 @@ +Tue Sep 1 16:38:07 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to 1.12.3: + * Validate hash algorithm for use with RSA modulus + * Validate parameters of Balloon KDF + * Validate parallelism of Argon2 KDF + * Fix parsing quoted parts and CRLF/LFCR in s-expression + * Support BUFLEN check for GCRYMPI_FMT_SSH + * Fix RSA PSS verify message length checking + * Avoid a NULL ptr deref due to a unsupported genkey flag for + ECC + * Assert 32 KiB input cap in gcm_ctr_encrypt + * Fix assertion failure in OCB when a buffered block becomes + block 65536 + * Fix OOB read in IMIT MAC verify of GOST28147 + * Fix CMAC block-count truncation for 64 GiB writes + * Fix AEAD spurious byte-counter carry for 4 GiB adds + * Validate all KEM input lengths + * Add length check of DATALEN when parsing s-expression + * Only accept canonical value for S with EdDSA + * Only accept canonical signatures for RSA + * Fix an assertion failure for invalid small-order Ed25519 public + keys + * Validate length of supplied receiver public-key length in DHKEM + decapsulation + * Use a more strict value for the PKCS#1 minimal frame length. + * Use just strong random for the Dilithium signature nonce and the + Kyber encapsulation coins + * Allow internal users to skip fast random poll for ciphers and + hashes + * Speedup sntrup761 by defer reduction in polynomial + multiplication, reading random with a single call, and reducing + freeze helpers w/o division + * Avoid byte-wise load/store on RISC-V with Zicclsm + * Use unaligned vector memory access on RSIV-V when supported + * Add Intel SM4 instructions accelerated AVX512 and AVX2 + implementation + * Add Intel SM3 extension implementation + * Add Intel SHA512 extension implementation + * kyber: Accept and return a seed using the gcry_pk_genkey API + * Add curve "ietf25" as alternative to "Curve25519" with exact + RFC-8410 semantics. The name "X25519" was already used as an + alias, thus this new name. + * Add straight-line speculation hardening for function ends + * Fix constant time memequal check for SM2 + * Add post-quantum algorithm benchmarking to bench-slope + * Due to the minor API updates and but with no newer branch + released the SO name has been updated. +- update upstream signing key + +------------------------------------------------------------------- Old: ---- libgcrypt-1.12.2.tar.bz2 libgcrypt-1.12.2.tar.bz2.sig New: ---- libgcrypt-1.12.3.tar.bz2 libgcrypt-1.12.3.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libgcrypt.spec ++++++ --- /var/tmp/diff_new_pack.rDDJfX/_old 2026-09-04 12:38:28.818517541 +0200 +++ /var/tmp/diff_new_pack.rDDJfX/_new 2026-09-04 12:38:28.820517611 +0200 @@ -21,7 +21,7 @@ %define libsoname %{name}%{libsover} %define hmac_key orboDeJITITejsirpADONivirpUkvarP Name: libgcrypt -Version: 1.12.2 +Version: 1.12.3 Release: 0 Summary: The GNU Crypto Library License: GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later @@ -33,7 +33,7 @@ Source3: random.conf Source4: hwf.deny # https://www.gnupg.org/signature_key.html -Source5: https://gnupg.org/signature_key.asc#/%{name}.keyring +Source5: %{name}.keyring Source99: libgcrypt.changes Patch1: libgcrypt-1.10.0-allow_FSM_same_state.patch #PATCH-FIX-OPENSUSE Do not pull revision info from GIT when autoconf is run @@ -91,7 +91,6 @@ Requires: %{libsoname} = %{version} Requires: glibc-devel Requires: jitterentropy-devel >= 3.4.0 -Requires: libgpg-error-devel >= 1.49 %description devel Libgcrypt is a general purpose library of cryptographic building ++++++ libgcrypt-1.12.2.tar.bz2 -> libgcrypt-1.12.3.tar.bz2 ++++++ ++++ 20445 lines of diff (skipped) ++++++ libgcrypt-CVE-2024-2236.patch ++++++ --- /var/tmp/diff_new_pack.rDDJfX/_old 2026-09-04 12:38:30.397573011 +0200 +++ /var/tmp/diff_new_pack.rDDJfX/_new 2026-09-04 12:38:30.410573468 +0200 @@ -19,10 +19,10 @@ src/const-time.h | 6 ++++++ 2 files changed, 8 insertions(+) -Index: libgcrypt-1.12.0/cipher/rsa-common.c +Index: libgcrypt-1.12.3/cipher/rsa-common.c =================================================================== ---- libgcrypt-1.12.0.orig/cipher/rsa-common.c -+++ libgcrypt-1.12.0/cipher/rsa-common.c +--- libgcrypt-1.12.3.orig/cipher/rsa-common.c ++++ libgcrypt-1.12.3/cipher/rsa-common.c @@ -28,6 +28,7 @@ #include "cipher.h" #include "pubkey-internal.h" @@ -122,7 +122,7 @@ /* To avoid an extra allocation we reuse the frame buffer. The only caller of this function will anyway free the result soon. */ -@@ -263,6 +318,187 @@ _gcry_rsa_pkcs1_decode_for_enc (unsigned +@@ -269,6 +324,187 @@ _gcry_rsa_pkcs1_decode_for_enc (unsigned } @@ -310,7 +310,7 @@ /* Encode {VALUE,VALUELEN} for an NBITS keys and hash algorithm ALGO using the pkcs#1 block type 1 padding. On success the result is stored as a new MPI at R_RESULT. On error the value at R_RESULT is -@@ -684,14 +920,23 @@ _gcry_rsa_oaep_decode (unsigned char **r +@@ -694,14 +930,23 @@ _gcry_rsa_oaep_decode (unsigned char **r happen due to the leading zero in OAEP frames and due to the following random octets (seed^mask) which may have leading zero bytes. This all is needed to cope with our leading zeroes @@ -335,7 +335,7 @@ nframe = nkey; /* Step 1c: Check that the key is long enough. */ -@@ -706,7 +951,7 @@ _gcry_rsa_oaep_decode (unsigned char **r +@@ -716,7 +961,7 @@ _gcry_rsa_oaep_decode (unsigned char **r gcry_mpi_aprint above. */ /* Allocate space for SEED and DB. */ @@ -344,10 +344,10 @@ if (!seed) { rc = gpg_err_code_from_syserror (); -Index: libgcrypt-1.12.0/src/const-time.h +Index: libgcrypt-1.12.3/src/const-time.h =================================================================== ---- libgcrypt-1.12.0.orig/src/const-time.h -+++ libgcrypt-1.12.0/src/const-time.h +--- libgcrypt-1.12.3.orig/src/const-time.h ++++ libgcrypt-1.12.3/src/const-time.h @@ -26,6 +26,7 @@ #define ct_not_memequal _gcry_ct_not_memequal #define ct_memequal _gcry_ct_memequal @@ -411,11 +411,11 @@ +void _gcry_ct_memcpy (void *dst, const void *src, size_t len, size_t buffer_len); #endif /*GCRY_CONST_TIME_H*/ -Index: libgcrypt-1.12.0/cipher/rsa.c +Index: libgcrypt-1.12.3/cipher/rsa.c =================================================================== ---- libgcrypt-1.12.0.orig/cipher/rsa.c -+++ libgcrypt-1.12.0/cipher/rsa.c -@@ -1198,7 +1198,11 @@ secret_blinded (gcry_mpi_t output, gcry_ +--- libgcrypt-1.12.3.orig/cipher/rsa.c ++++ libgcrypt-1.12.3/cipher/rsa.c +@@ -1214,7 +1214,11 @@ secret_blinded (gcry_mpi_t output, gcry_ /* Undo blinding. Here we calculate: y = (x * r^-1) mod n, where x * is the blinded decrypted data, ri is the modular multiplicative * inverse of r and n is the RSA modulus. */ @@ -427,7 +427,7 @@ _gcry_mpi_release (r); _gcry_mpi_release (ri); -@@ -1433,6 +1437,7 @@ rsa_encrypt (gcry_sexp_t *r_ciph, gcry_s +@@ -1449,6 +1453,7 @@ rsa_encrypt (gcry_sexp_t *r_ciph, gcry_s } @@ -435,7 +435,7 @@ static gcry_err_code_t rsa_decrypt (gcry_sexp_t *r_plain, gcry_sexp_t s_data, gcry_sexp_t keyparms) -@@ -1448,6 +1453,9 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ +@@ -1464,6 +1469,9 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ unsigned int nbits = rsa_get_nbits (keyparms); gcry_sexp_t result = NULL; gcry_sexp_t dummy = NULL; @@ -445,7 +445,7 @@ rc = rsa_check_keysize (nbits); if (rc) -@@ -1495,6 +1503,71 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ +@@ -1511,6 +1519,71 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ mpi_normalize (data); mpi_fdiv_r (data, data, sk.n); @@ -517,7 +517,7 @@ /* Allocate MPI for the plaintext. */ plain = mpi_snew (nbits); -@@ -1525,10 +1598,26 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ +@@ -1541,10 +1614,26 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ switch (ctx.encoding) { case PUBKEY_ENC_PKCS1: @@ -544,7 +544,7 @@ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc)); dummy = sexp_null_cond (result, ct_is_zero (rc)); sexp_release (dummy); -@@ -1542,7 +1631,11 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ +@@ -1558,7 +1647,11 @@ rsa_decrypt (gcry_sexp_t *r_plain, gcry_ plain, ctx.label, ctx.labellen); mpi_free (plain); plain = NULL; @@ -556,11 +556,11 @@ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc)); dummy = sexp_null_cond (result, ct_is_zero (rc)); sexp_release (dummy); -Index: libgcrypt-1.12.0/configure.ac +Index: libgcrypt-1.12.3/configure.ac =================================================================== ---- libgcrypt-1.12.0.orig/configure.ac -+++ libgcrypt-1.12.0/configure.ac -@@ -602,6 +602,22 @@ AC_ARG_ENABLE(jent-support, +--- libgcrypt-1.12.3.orig/configure.ac ++++ libgcrypt-1.12.3/configure.ac +@@ -604,6 +604,22 @@ AC_ARG_ENABLE(jent-support, jentsupport=$enableval,jentsupport=yes) AC_MSG_RESULT($jentsupport) @@ -583,10 +583,10 @@ # Implementation of the --disable-padlock-support switch. AC_MSG_CHECKING([whether padlock support is requested]) AC_ARG_ENABLE(padlock-support, -Index: libgcrypt-1.12.0/mpi/Makefile.am +Index: libgcrypt-1.12.3/mpi/Makefile.am =================================================================== ---- libgcrypt-1.12.0.orig/mpi/Makefile.am -+++ libgcrypt-1.12.0/mpi/Makefile.am +--- libgcrypt-1.12.3.orig/mpi/Makefile.am ++++ libgcrypt-1.12.3/mpi/Makefile.am @@ -181,3 +181,7 @@ EXTRA_libmpi_la_SOURCES = \ asm-common-aarch64.h \ asm-common-amd64.h \ @@ -595,10 +595,10 @@ +if WITH_MARVIN_WORKAROUND +libmpi_la_SOURCES += mpi-mul-cs.c +endif -Index: libgcrypt-1.12.0/mpi/mpi-internal.h +Index: libgcrypt-1.12.3/mpi/mpi-internal.h =================================================================== ---- libgcrypt-1.12.0.orig/mpi/mpi-internal.h -+++ libgcrypt-1.12.0/mpi/mpi-internal.h +--- libgcrypt-1.12.3.orig/mpi/mpi-internal.h ++++ libgcrypt-1.12.3/mpi/mpi-internal.h @@ -238,6 +238,12 @@ void _gcry_mpih_mul_karatsuba_case( mpi_ mpi_ptr_t vp, mpi_size_t vsize, struct karatsuba_ctx *ctx ); @@ -612,10 +612,10 @@ /*-- mpih-mul_1.c (or xxx/cpu/ *.S) --*/ mpi_limb_t _gcry_mpih_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, -Index: libgcrypt-1.12.0/mpi/mpi-mul-cs.c +Index: libgcrypt-1.12.3/mpi/mpi-mul-cs.c =================================================================== --- /dev/null -+++ libgcrypt-1.12.0/mpi/mpi-mul-cs.c ++++ libgcrypt-1.12.3/mpi/mpi-mul-cs.c @@ -0,0 +1,263 @@ +/* Copyright (c) 2024, Hubert Kario, Red Hat + * Released under BSD 2-Clause License, see LICENSE for details @@ -880,10 +880,10 @@ + + memcpy (ret, &atmp[anum], sizeof(limb_t)*modnum); +} -Index: libgcrypt-1.12.0/mpi/mpi-mul.c +Index: libgcrypt-1.12.3/mpi/mpi-mul.c =================================================================== ---- libgcrypt-1.12.0.orig/mpi/mpi-mul.c -+++ libgcrypt-1.12.0/mpi/mpi-mul.c +--- libgcrypt-1.12.3.orig/mpi/mpi-mul.c ++++ libgcrypt-1.12.3/mpi/mpi-mul.c @@ -203,6 +203,133 @@ _gcry_mpi_mul (gcry_mpi_t w, gcry_mpi_t _gcry_mpi_free_limb_space (tmp_limb, tmp_limb_nlimbs); } @@ -1064,11 +1064,11 @@ + _gcry_mpi_reverse_sec (m); /* -- this might be still used by the calling function */ +} +#endif /* WITH_MARVIN_WORKAROUND */ -Index: libgcrypt-1.12.0/src/gcrypt-int.h +Index: libgcrypt-1.12.3/src/gcrypt-int.h =================================================================== ---- libgcrypt-1.12.0.orig/src/gcrypt-int.h -+++ libgcrypt-1.12.0/src/gcrypt-int.h -@@ -470,6 +470,9 @@ void _gcry_mpi_subm (gcry_mpi_t w, gcry_ +--- libgcrypt-1.12.3.orig/src/gcrypt-int.h ++++ libgcrypt-1.12.3/src/gcrypt-int.h +@@ -491,6 +491,9 @@ void _gcry_mpi_subm (gcry_mpi_t w, gcry_ void _gcry_mpi_mul (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v); void _gcry_mpi_mul_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v ); void _gcry_mpi_mulm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m); @@ -1078,7 +1078,7 @@ void _gcry_mpi_mul_2exp (gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt); void _gcry_mpi_div (gcry_mpi_t q, gcry_mpi_t r, gcry_mpi_t dividend, gcry_mpi_t divisor, int round); -@@ -566,6 +569,9 @@ int _gcry_mpi_get_flag (gcry_mpi_t a, en +@@ -587,6 +590,9 @@ int _gcry_mpi_get_flag (gcry_mpi_t a, en #define mpi_mul_2exp(w,u,v) _gcry_mpi_mul_2exp ((w),(u),(v)) #define mpi_mul(w,u,v) _gcry_mpi_mul ((w),(u),(v)) #define mpi_mulm(w,u,v,m) _gcry_mpi_mulm ((w),(u),(v),(m)) @@ -1088,10 +1088,10 @@ #define mpi_powm(w,b,e,m) _gcry_mpi_powm ( (w), (b), (e), (m) ) #define mpi_tdiv(q,r,a,m) _gcry_mpi_div ( (q), (r), (a), (m), 0) #define mpi_fdiv(q,r,a,m) _gcry_mpi_div ( (q), (r), (a), (m), -1) -Index: libgcrypt-1.12.0/src/const-time.c +Index: libgcrypt-1.12.3/src/const-time.c =================================================================== ---- libgcrypt-1.12.0.orig/src/const-time.c -+++ libgcrypt-1.12.0/src/const-time.c +--- libgcrypt-1.12.3.orig/src/const-time.c ++++ libgcrypt-1.12.3/src/const-time.c @@ -105,8 +105,8 @@ _gcry_ct_memmov_cond (void *dst, const v unsigned long op_enable) { @@ -1131,10 +1131,10 @@ + b_dst[i] = (b_src[i] & mask_a) | (b_dst[i] & mask_b); + } +} -Index: libgcrypt-1.12.0/src/sexp.c +Index: libgcrypt-1.12.3/src/sexp.c =================================================================== ---- libgcrypt-1.12.0.orig/src/sexp.c -+++ libgcrypt-1.12.0/src/sexp.c +--- libgcrypt-1.12.3.orig/src/sexp.c ++++ libgcrypt-1.12.3/src/sexp.c @@ -31,6 +31,7 @@ #define GCRYPT_NO_MPI_MACROS 1 @@ -1154,7 +1154,7 @@ * %S - Copy an gcry_sexp_t here. The S-expression needs to be a * regular one, starting with a parenthesis. * (no autoswitch to secure allocation) -@@ -1204,7 +1209,7 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si +@@ -1210,7 +1215,7 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si { switch (*p) { @@ -1163,7 +1163,7 @@ case 'r': case '"': case '\'': case '\\': quoted_esc = 0; break; -@@ -1538,14 +1543,27 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si +@@ -1592,14 +1597,27 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si memcpy (c.pos, astr, alen); c.pos += alen; } @@ -1191,9 +1191,9 @@ + alen = buflen; + } - if (alen < 0) + if (alen < 0 || alen > 65535) { -@@ -1578,9 +1596,18 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si +@@ -1632,9 +1650,18 @@ do_vsexp_sscan (gcry_sexp_t *retsexp, si } *c.pos++ = ST_DATA; @@ -1215,10 +1215,10 @@ } else if (*p == 'd') { -Index: libgcrypt-1.12.0/cipher/pubkey-internal.h +Index: libgcrypt-1.12.3/cipher/pubkey-internal.h =================================================================== ---- libgcrypt-1.12.0.orig/cipher/pubkey-internal.h -+++ libgcrypt-1.12.0/cipher/pubkey-internal.h +--- libgcrypt-1.12.3.orig/cipher/pubkey-internal.h ++++ libgcrypt-1.12.3/cipher/pubkey-internal.h @@ -55,6 +55,14 @@ _gcry_rsa_pkcs1_encode_for_enc (gcry_mpi gpg_err_code_t _gcry_rsa_pkcs1_decode_for_enc (unsigned char **r_result, size_t *r_resultlen, @@ -1234,10 +1234,10 @@ gpg_err_code_t _gcry_rsa_pkcs1_encode_raw_for_sig (gcry_mpi_t *r_result, unsigned int nbits, const unsigned char *value, size_t valuelen); -Index: libgcrypt-1.12.0/cipher/pubkey-util.c +Index: libgcrypt-1.12.3/cipher/pubkey-util.c =================================================================== ---- libgcrypt-1.12.0.orig/cipher/pubkey-util.c -+++ libgcrypt-1.12.0/cipher/pubkey-util.c +--- libgcrypt-1.12.3.orig/cipher/pubkey-util.c ++++ libgcrypt-1.12.3/cipher/pubkey-util.c @@ -195,6 +195,15 @@ _gcry_pk_util_parse_flaglist (gcry_sexp_ rc = GPG_ERR_INV_FLAG; break; @@ -1254,10 +1254,10 @@ default: if (!igninvflag) rc = GPG_ERR_INV_FLAG; -Index: libgcrypt-1.12.0/src/cipher.h +Index: libgcrypt-1.12.3/src/cipher.h =================================================================== ---- libgcrypt-1.12.0.orig/src/cipher.h -+++ libgcrypt-1.12.0/src/cipher.h +--- libgcrypt-1.12.3.orig/src/cipher.h ++++ libgcrypt-1.12.3/src/cipher.h @@ -46,6 +46,7 @@ #define PUBKEY_FLAG_PREHASH (1 << 17) #define PUBKEY_FLAG_BYTE_STRING (1 << 18) @@ -1266,10 +1266,10 @@ /* * The internal flag to select least leak implementation for ECC. * It needs to be a distinct value not covered by PUBKEY_* above. -Index: libgcrypt-1.12.0/tests/pkcs1v2-v15c.h +Index: libgcrypt-1.12.3/tests/pkcs1v2-v15c.h =================================================================== ---- libgcrypt-1.12.0.orig/tests/pkcs1v2-v15c.h -+++ libgcrypt-1.12.0/tests/pkcs1v2-v15c.h +--- libgcrypt-1.12.3.orig/tests/pkcs1v2-v15c.h ++++ libgcrypt-1.12.3/tests/pkcs1v2-v15c.h @@ -21,6 +21,7 @@ const char *mesg; const char *seed; @@ -1587,10 +1587,10 @@ + } } }; -Index: libgcrypt-1.12.0/tests/pkcs1v2.c +Index: libgcrypt-1.12.3/tests/pkcs1v2.c =================================================================== ---- libgcrypt-1.12.0.orig/tests/pkcs1v2.c -+++ libgcrypt-1.12.0/tests/pkcs1v2.c +--- libgcrypt-1.12.3.orig/tests/pkcs1v2.c ++++ libgcrypt-1.12.3/tests/pkcs1v2.c @@ -82,7 +82,7 @@ data_from_hex (const char *string, size_ static int ++++++ libgcrypt.keyring ++++++ --- /var/tmp/diff_new_pack.rDDJfX/_old 2026-09-04 12:38:30.490576278 +0200 +++ /var/tmp/diff_new_pack.rDDJfX/_new 2026-09-04 12:38:30.494576419 +0200 @@ -66,18 +66,39 @@ KdYretbGQwo+vXLXfWk9QKHXwF2IdkUSnL/IyFje/thujBW2UJZMTO3vD830px2G k4h1BBATCAAdFiEEAvON/3Mf+XywOaHaVJ5pXpBboggFAmgeDcYACgkQVJ5pXpBb ogis0wD9H38UP4TH3Y19d7mnkSifeHkldKc4iUP/Ok3w/+Di5qkA/iA7xLTtiuhW -jhnuwb68kTxh8Beg023EiqsJb9qWnY8umFMEYWlKoxMJKyQDAwIIAQEHAgMEXpcP -02ZRAOCLJg1uGzUMwnXiYjDzXbBjUdXH/hBZhaIG6eGu9IXFVvOyMPv9a/6/duYw -+sv4zYMvIWJJ7A2ZxLQkR251UEcuY29tIChSZWxlYXNlIFNpZ25pbmcgS2V5IDIw -MjEpiJoEExMIAEIWIQQC843/cx/5fLA5odpUnmlekFuiCAUCYWlKowIbAwUJD3HX -igULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQVJ5pXpBboghOSgD9FhqN -pOXV4QFT8Z2bXajeOsjnk3nFkrZdOpLHblyVXKMA/RfAxb86Dn40PWuLdsCoANVa -UENSzDPzBjGxvQLiRgGSiHUEEBYKAB0WIQRtqm5kp20oQFcbSQJSiJe4JkA62gUC -YWlO8QAKCRBSiJe4JkA62slAAQCHtjLKSMDL9CzXILeOLyIF8hWc9e9uWsjHdJFH -IPBELwEAq1lsS4pO0+WCQtSAyV5Nxkn+8SEkT4a99D2jmBYKoQWIdQQQFgoAHRYh -BMHTS2khnkruwLocIeP9/yGORbcrBQJhaU9aAAoJEOP9/yGORbcrHh4BAOnpoZI3 -99TjEuXxFK9BRWNUD5oJOsxBHeFHCrDyWIXbAQDc7cQLHPp7X4Ogi1igkEEsovB6 -IiewZn/6HldiuldOAA== -=gHNs +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 +jgQ6Z8pPyCxKDA== +=/vKN -----END PGP PUBLIC KEY BLOCK-----
