From 148040de78a718a79c8d0905131bff5bd81a8179 Mon Sep 17 00:00:00 2001 From: Daniel Berger <78529+djberg96@users.noreply.github.com> Date: Mon, 9 Feb 2026 08:41:42 -0500 Subject: [PATCH 1/3] Add more encryption constants. --- ext/gpgme/gpgme_n.c | 30 ++++++++++++++++ lib/gpgme/constants.rb | 18 ++++++++++ test/encryption_flags_test.rb | 65 +++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 test/encryption_flags_test.rb diff --git a/ext/gpgme/gpgme_n.c b/ext/gpgme/gpgme_n.c index c761936..c4e1c38 100644 --- a/ext/gpgme/gpgme_n.c +++ b/ext/gpgme/gpgme_n.c @@ -3649,6 +3649,36 @@ Init_gpgme_n (void) rb_define_const (mGPGME, "GPGME_ENCRYPT_NO_ENCRYPT_TO", INT2FIX(GPGME_ENCRYPT_NO_ENCRYPT_TO)); #endif + /* This flag was added in 1.3.0. */ +#ifdef GPGME_ENCRYPT_PREPARE + rb_define_const (mGPGME, "GPGME_ENCRYPT_PREPARE", + INT2FIX(GPGME_ENCRYPT_PREPARE)); +#endif + /* This flag was added in 1.4.0. */ +#ifdef GPGME_ENCRYPT_EXPECT_SIGN + rb_define_const (mGPGME, "GPGME_ENCRYPT_EXPECT_SIGN", + INT2FIX(GPGME_ENCRYPT_EXPECT_SIGN)); +#endif + /* This flag was added in 1.11.0. */ +#ifdef GPGME_ENCRYPT_NO_COMPRESS + rb_define_const (mGPGME, "GPGME_ENCRYPT_NO_COMPRESS", + INT2FIX(GPGME_ENCRYPT_NO_COMPRESS)); +#endif + /* This flag was added in 1.13.0. */ +#ifdef GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK + rb_define_const (mGPGME, "GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK", + INT2FIX(GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK)); +#endif + /* This flag was added in 1.13.0. */ +#ifdef GPGME_ENCRYPT_SYMMETRIC + rb_define_const (mGPGME, "GPGME_ENCRYPT_SYMMETRIC", + INT2FIX(GPGME_ENCRYPT_SYMMETRIC)); +#endif + /* This flag was added in 1.14.0. */ +#ifdef GPGME_ENCRYPT_THROW_KEYIDS + rb_define_const (mGPGME, "GPGME_ENCRYPT_THROW_KEYIDS", + INT2FIX(GPGME_ENCRYPT_THROW_KEYIDS)); +#endif /* Random number generation mode flags added in 2.0.0 */ #if defined(GPGME_VERSION_NUMBER) && GPGME_VERSION_NUMBER >= 0x020000 diff --git a/lib/gpgme/constants.rb b/lib/gpgme/constants.rb index 8d0d268..1af47e5 100644 --- a/lib/gpgme/constants.rb +++ b/lib/gpgme/constants.rb @@ -101,6 +101,24 @@ module GPGME if defined?(GPGME_ENCRYPT_NO_ENCRYPT_TO) ENCRYPT_NO_ENCRYPT_TO = GPGME_ENCRYPT_NO_ENCRYPT_TO end + if defined?(GPGME_ENCRYPT_PREPARE) + ENCRYPT_PREPARE = GPGME_ENCRYPT_PREPARE + end + if defined?(GPGME_ENCRYPT_EXPECT_SIGN) + ENCRYPT_EXPECT_SIGN = GPGME_ENCRYPT_EXPECT_SIGN + end + if defined?(GPGME_ENCRYPT_NO_COMPRESS) + ENCRYPT_NO_COMPRESS = GPGME_ENCRYPT_NO_COMPRESS + end + if defined?(GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK) + ENCRYPT_UNSIGNED_INTEGRITY_CHECK = GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK + end + if defined?(GPGME_ENCRYPT_SYMMETRIC) + ENCRYPT_SYMMETRIC = GPGME_ENCRYPT_SYMMETRIC + end + if defined?(GPGME_ENCRYPT_THROW_KEYIDS) + ENCRYPT_THROW_KEYIDS = GPGME_ENCRYPT_THROW_KEYIDS + end IMPORT_NEW = GPGME_IMPORT_NEW IMPORT_SECRET = GPGME_IMPORT_SECRET IMPORT_SIG = GPGME_IMPORT_SIG diff --git a/test/encryption_flags_test.rb b/test/encryption_flags_test.rb new file mode 100644 index 0000000..e8834b3 --- /dev/null +++ b/test/encryption_flags_test.rb @@ -0,0 +1,65 @@ +# -*- encoding: utf-8 -*- +require 'test_helper' + +describe 'GPGME Encryption Flags' do + it 'should expose ENCRYPT_ALWAYS_TRUST' do + assert_equal 1, GPGME::ENCRYPT_ALWAYS_TRUST + end + + it 'should expose ENCRYPT_NO_ENCRYPT_TO if available' do + if defined?(GPGME::ENCRYPT_NO_ENCRYPT_TO) + assert GPGME::ENCRYPT_NO_ENCRYPT_TO.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_PREPARE if available' do + if defined?(GPGME::ENCRYPT_PREPARE) + assert GPGME::ENCRYPT_PREPARE.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_EXPECT_SIGN if available' do + if defined?(GPGME::ENCRYPT_EXPECT_SIGN) + assert GPGME::ENCRYPT_EXPECT_SIGN.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_NO_COMPRESS if available' do + if defined?(GPGME::ENCRYPT_NO_COMPRESS) + assert GPGME::ENCRYPT_NO_COMPRESS.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_UNSIGNED_INTEGRITY_CHECK if available' do + if defined?(GPGME::ENCRYPT_UNSIGNED_INTEGRITY_CHECK) + assert GPGME::ENCRYPT_UNSIGNED_INTEGRITY_CHECK.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_SYMMETRIC if available' do + if defined?(GPGME::ENCRYPT_SYMMETRIC) + assert GPGME::ENCRYPT_SYMMETRIC.is_a?(Integer) + end + end + + it 'should expose ENCRYPT_THROW_KEYIDS if available' do + if defined?(GPGME::ENCRYPT_THROW_KEYIDS) + assert GPGME::ENCRYPT_THROW_KEYIDS.is_a?(Integer) + end + end + + it 'should use different flag values for different flags' do + flags = [] + flags << GPGME::ENCRYPT_ALWAYS_TRUST + flags << GPGME::ENCRYPT_NO_ENCRYPT_TO if defined?(GPGME::ENCRYPT_NO_ENCRYPT_TO) + flags << GPGME::ENCRYPT_PREPARE if defined?(GPGME::ENCRYPT_PREPARE) + flags << GPGME::ENCRYPT_EXPECT_SIGN if defined?(GPGME::ENCRYPT_EXPECT_SIGN) + flags << GPGME::ENCRYPT_NO_COMPRESS if defined?(GPGME::ENCRYPT_NO_COMPRESS) + flags << GPGME::ENCRYPT_UNSIGNED_INTEGRITY_CHECK if defined?(GPGME::ENCRYPT_UNSIGNED_INTEGRITY_CHECK) + flags << GPGME::ENCRYPT_SYMMETRIC if defined?(GPGME::ENCRYPT_SYMMETRIC) + flags << GPGME::ENCRYPT_THROW_KEYIDS if defined?(GPGME::ENCRYPT_THROW_KEYIDS) + + # All flags should be unique + assert_equal flags.length, flags.uniq.length + end +end From b7aacd9fbd35ac8bd7151c30a3bf880effdf3b8e Mon Sep 17 00:00:00 2001 From: Daniel Berger <78529+djberg96@users.noreply.github.com> Date: Mon, 9 Feb 2026 19:23:51 -0500 Subject: [PATCH 2/3] Add have_const for encrypt enums. --- ext/gpgme/extconf.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ext/gpgme/extconf.rb b/ext/gpgme/extconf.rb index 18b1c62..494dc97 100644 --- a/ext/gpgme/extconf.rb +++ b/ext/gpgme/extconf.rb @@ -225,6 +225,19 @@ end have_func('gpgme_op_export_keys') +have_const('GPGME_ENCRYPT_ALWAYS_TRUST', 'gpgme.h') +have_const('GPGME_ENCRYPT_NO_ENCRYPT_TO', 'gpgme.h') +have_const('GPGME_ENCRYPT_PREPARE', 'gpgme.h') +have_const('GPGME_ENCRYPT_EXPECT_SIGN', 'gpgme.h') +have_const('GPGME_ENCRYPT_NO_COMPRESS', 'gpgme.h') +have_const('GPGME_ENCRYPT_SYMMETRIC', 'gpgme.h') +have_const('GPGME_ENCRYPT_THROW_KEYIDS', 'gpgme.h') +have_const('GPGME_ENCRYPT_WRAP', 'gpgme.h') +have_const('GPGME_ENCRYPT_WANT_ADDRESS', 'gpgme.h') +have_const('GPGME_ENCRYPT_ARCHIVE', 'gpgme.h') +have_const('GPGME_ENCRYPT_FILE', 'gpgme.h') +have_const('GPGME_ENCRYPT_ADD_RECP', 'gpgme.h') +have_const('GPGME_ENCRYPT_CHG_RECP', 'gpgme.h') create_makefile ('gpgme_n') From c6654831b360531c56f6000b8437f5398bde8432 Mon Sep 17 00:00:00 2001 From: Daniel Berger <78529+djberg96@users.noreply.github.com> Date: Mon, 9 Feb 2026 19:29:07 -0500 Subject: [PATCH 3/3] Update encryption constant checks to use have_const. --- ext/gpgme/gpgme_n.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/ext/gpgme/gpgme_n.c b/ext/gpgme/gpgme_n.c index c4e1c38..040a219 100644 --- a/ext/gpgme/gpgme_n.c +++ b/ext/gpgme/gpgme_n.c @@ -3644,41 +3644,58 @@ Init_gpgme_n (void) /* The available flags for gpgme_op_encrypt. */ rb_define_const (mGPGME, "GPGME_ENCRYPT_ALWAYS_TRUST", INT2FIX(GPGME_ENCRYPT_ALWAYS_TRUST)); - /* This flag was added in 1.2.0. */ -#ifdef GPGME_ENCRYPT_NO_ENCRYPT_TO +#ifdef HAVE_CONST_GPGME_ENCRYPT_NO_ENCRYPT_TO rb_define_const (mGPGME, "GPGME_ENCRYPT_NO_ENCRYPT_TO", INT2FIX(GPGME_ENCRYPT_NO_ENCRYPT_TO)); #endif - /* This flag was added in 1.3.0. */ -#ifdef GPGME_ENCRYPT_PREPARE +#ifdef HAVE_CONST_GPGME_ENCRYPT_PREPARE rb_define_const (mGPGME, "GPGME_ENCRYPT_PREPARE", INT2FIX(GPGME_ENCRYPT_PREPARE)); #endif - /* This flag was added in 1.4.0. */ -#ifdef GPGME_ENCRYPT_EXPECT_SIGN +#ifdef HAVE_CONST_GPGME_ENCRYPT_EXPECT_SIGN rb_define_const (mGPGME, "GPGME_ENCRYPT_EXPECT_SIGN", INT2FIX(GPGME_ENCRYPT_EXPECT_SIGN)); #endif - /* This flag was added in 1.11.0. */ -#ifdef GPGME_ENCRYPT_NO_COMPRESS +#ifdef HAVE_CONST_GPGME_ENCRYPT_NO_COMPRESS rb_define_const (mGPGME, "GPGME_ENCRYPT_NO_COMPRESS", INT2FIX(GPGME_ENCRYPT_NO_COMPRESS)); #endif - /* This flag was added in 1.13.0. */ -#ifdef GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK +#ifdef HAVE_CONST_GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK rb_define_const (mGPGME, "GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK", INT2FIX(GPGME_ENCRYPT_UNSIGNED_INTEGRITY_CHECK)); #endif - /* This flag was added in 1.13.0. */ -#ifdef GPGME_ENCRYPT_SYMMETRIC +#ifdef HAVE_CONST_GPGME_ENCRYPT_SYMMETRIC rb_define_const (mGPGME, "GPGME_ENCRYPT_SYMMETRIC", INT2FIX(GPGME_ENCRYPT_SYMMETRIC)); #endif - /* This flag was added in 1.14.0. */ -#ifdef GPGME_ENCRYPT_THROW_KEYIDS +#ifdef HAVE_CONST_GPGME_ENCRYPT_THROW_KEYIDS rb_define_const (mGPGME, "GPGME_ENCRYPT_THROW_KEYIDS", INT2FIX(GPGME_ENCRYPT_THROW_KEYIDS)); #endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_WRAP + rb_define_const (mGPGME, "GPGME_ENCRYPT_WRAP", + INT2FIX(GPGME_ENCRYPT_WRAP)); +#endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_WANT_ADDRESS + rb_define_const (mGPGME, "GPGME_ENCRYPT_WANT_ADDRESS", + INT2FIX(GPGME_ENCRYPT_WANT_ADDRESS)); +#endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_ARCHIVE + rb_define_const (mGPGME, "GPGME_ENCRYPT_ARCHIVE", + INT2FIX(GPGME_ENCRYPT_ARCHIVE)); +#endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_FILE + rb_define_const (mGPGME, "GPGME_ENCRYPT_FILE", + INT2FIX(GPGME_ENCRYPT_FILE)); +#endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_ADD_RECP + rb_define_const (mGPGME, "GPGME_ENCRYPT_ADD_RECP", + INT2FIX(GPGME_ENCRYPT_ADD_RECP)); +#endif +#ifdef HAVE_CONST_GPGME_ENCRYPT_CHG_RECP + rb_define_const (mGPGME, "GPGME_ENCRYPT_CHG_RECP", + INT2FIX(GPGME_ENCRYPT_CHG_RECP)); +#endif /* Random number generation mode flags added in 2.0.0 */ #if defined(GPGME_VERSION_NUMBER) && GPGME_VERSION_NUMBER >= 0x020000