├── CONTRIBUTING.md ├── COPYING ├── README.mediawiki ├── README_generic.md ├── changelog.upstream ├── debian ├── changelog ├── control ├── copyright ├── gpg-bash-lib.install ├── rules ├── source │ ├── format │ └── lintian-overrides └── watch ├── make-helper-overrides.bsh └── usr ├── libexec └── gpg-bash-lib │ ├── modules.d │ ├── 50_common │ └── 50_helper │ └── source_all └── share ├── doc └── gpg-bash-lib │ └── examples │ ├── get-bitcoin-keys │ ├── README.md │ └── bitcoind_signing_graph.png │ ├── one │ ├── one_annotated │ └── verify_bitcoind └── gpg-bash-lib ├── misc ├── bitcoind-pub-keys.d │ ├── 0AD83877C1F0CD1EE9BD660AD7CC770B81FD22A8.gpg │ ├── 152812300785C96444D3334D17565732E08E5E41.gpg │ ├── 28F5900B1BB5D1A4B6B6D1A9ED357015286A333D.gpg │ ├── 590B7292695AFFA5B672CBB2E13FC145CD3F4304.gpg │ ├── 637DB1E23370F84AFF88CCE03152347D07DA627C.gpg │ ├── 6E01EEC9656903B0542B8F1003DB6322267C373B.gpg │ ├── 74E2DEF5D77260B98BC19438099BAD163C70FBFA.gpg │ ├── 82921A4B88FD454B7EB8CE3C796C4109063D4EAF.gpg │ ├── 9D3CC86A72F8494342EA5FD10A41BDC3F4FAFF1C.gpg │ ├── 9DEAE0DC7063249FB05474681E4AED62986CD25D.gpg │ ├── CFB16E21C950F67FA95E558F2EEB9F5CC09526C1.gpg │ └── D1DBF2C4B96F2DEBF4C16654410108112E7EA81F.gpg ├── gpg-test-pub-key.d │ └── pubring.gpg └── test-files │ ├── test-file │ └── test-file.asc ├── unit-tests ├── traps_and_shopts └── verification └── unit_test /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Conditions for Contributions to Whonix 2 | 3 | By contributing to Whonix, you acknowledge that you have read, understood and agreed to our Privacy Policy, Cookie Policy, Terms of Service, and E-Sign Consent. 4 | 5 | https://www.whonix.org/wiki/Privacy_Policy 6 | 7 | https://www.whonix.org/wiki/Cookie_Policy 8 | 9 | https://www.whonix.org/wiki/Terms_of_Service 10 | 11 | https://www.whonix.org/wiki/E-Sign_Consent 12 | 13 | Conditions for Contributions to Whonix are not part of Whonix's license. 14 | -------------------------------------------------------------------------------- /README.mediawiki: -------------------------------------------------------------------------------- 1 | = Why = 2 | 3 | Writing bash scripts that do file verification using gpg that really is secure 4 | and passes a comprehensive threat model, that covers indefinite freeze, 5 | rollback, endless data attacks, etc. is hard. 6 | 7 | gpg-bash-lib's goal is to provide a bash library that we can collaboratively 8 | develop, audit and abstract the hard work into reuseable functions. 9 | 10 | Checking gpg exit codes only is insufficient. 11 | [http://lists.gnupg.org/pipermail/gnupg-devel/2005-December/022559.html Quote Werner Koch] 12 | ([https://gnupg.org/ gnupg] lead developer): 13 |
"there is no clear distinction between the codes and for proper error reporting 14 | you are advised to use the --status-fd messages."
15 | 16 | (For a definition of these attacks, see 17 | [https://www.updateframework.com TUF] ([https://github.com/theupdateframework/tuf The Update Framework])'s 18 | [https://github.com/theupdateframework/tuf/blob/develop/SECURITY.md threat model] ([http://www.webcitation.org/6F7Io2ncN w]).) 19 | 20 | = What does it do = 21 | 22 | * Abstracts file verification into common functions. 23 | * Allows detecting of stale files, i.e. detection downgrade or indefinite freeze attacks by implementing a valid-until like mechanism. 24 | * Internally parses gpg's --status-file output. 25 | * It is signal friendly. 26 | * Detects endless data attacks, aborts and reports this. 27 | * Detects indefinite freeze and rollback (downgrade) attacks and reports this. 28 | * Can help with verification of names of files, that are otherwise not covered by default when using gpg. 29 | * Provide diagnostic output (variables) that contain information if the local clock is sane by comparing signature creation date with local clock. 30 | 31 | = What does it NOT do = 32 | 33 | * Anything else not mentioned above in "What does it do". 34 | 35 | = Requirements = 36 | 37 | * bash 38 | 39 | = Installation = 40 |
 41 | sudo make install
 42 | 
43 | 44 | Or see [https://github.com/Whonix/gpg-bash-lib/blob/master/README_generic.md README_generic.md]. 45 | 46 | = Usage = 47 | 48 | == Practical == 49 | 50 | === Examples === 51 | See [https://github.com/Whonix/gpg-bash-lib/blob/master/usr/share/gpg-bash-lib/examples/ /usr/share/gpg-bash-lib/examples/] folder. 52 | 53 | === Mini Demo === 54 | After installation, if you would run the following command. 55 | 56 | [https://github.com/Whonix/gpg-bash-lib/blob/master/usr/share/gpg-bash-lib/examples/one /usr/share/gpg-bash-lib/examples/one] 57 | 58 | You would see the following output. 59 | 60 |
 61 | your_script_begin: ...
 62 | verification: BEGIN
 63 | verification: END
 64 | your_script_output: BEGIN
 65 | gpg_bash_lib_output_failure_status: false
 66 | gpg_bash_lib_output_gpg_verify_exit_code: 0
 67 | gpg_bash_lib_output_goodsig_status: true
 68 | gpg_bash_lib_output_validsig_status: true
 69 | gpg_bash_lib_output_fingerprint_in_hex: 5E08605EBEA0FE88695DCB88FD0A8B4171DFE4E4
 70 | gpg_bash_lib_output_signed_on_unixtime: 1422049448
 71 | gpg_bash_lib_output_signed_on_date: March 01 13:56:27 UTC 2015
 72 | gpg_bash_lib_output_notation[$file@name]: test-file
 73 | gpg_bash_lib_output_file_name_tampering: false
 74 | gpg_bash_lib_output_freshness_status: true
 75 | gpg_bash_lib_output_freshness_detail: current
 76 | gpg_bash_lib_output_freshness_msg:
 77 | - Freshness: Signature is current.
 78 | - valid-max: Signatures are valid up to 30 days.
 79 | - Signature Creation Date: March 01 13:56:27 UTC 2015
 80 | - Current System Date    : March 02 16:0:55 UTC 2015
 81 | - Local System Clock: Your clock seems okay.
 82 | - Relative Signature Creation Time: According to your system clock, signature was created 2 days 26 minutes 3 seconds ago.
 83 | gpg_bash_lib_output_alright_status: true
 84 | your_script_output: END
 85 | 
86 | 87 | All information (Signature Creation Date, etc.) are easily accessible through 88 | separate variables, which are all documented below. 89 | 90 | == Example Implementations == 91 | 92 | * [https://github.com/Whonix/whonixcheck whonixcheck]: See function [https://github.com/Whonix/whonixcheck/blob/fd60ad1c09d3681fd15c1370d1fbf3a9ba854aad/usr/lib/whonixcheck/check_news#L122 verify_whonix_news]. 93 | * [https://github.com/Whonix/tb-updater tb-updater]: See function [https://github.com/Whonix/tb-updater/blob/95d0ce13c601cb62d5f70b06dd80eb92d857cfbe/usr/bin/update-torbrowser#L901 tb_gpg_verify] and function [https://github.com/Whonix/tb-updater/blob/95d0ce13c601cb62d5f70b06dd80eb92d857cfbe/usr/bin/update-torbrowser#L644 tb_confirm_update]. 94 | 95 | == Theoretical == 96 | 97 | === Introduction === 98 | 99 | It is assumed, that your script downloaded a data file as well as a signature file. A separate folder containing the keys that are supposed to be used for gpg verification, such as for example /usr/share/program-name/signing-keys.d is required as a prerequisite. You can then use this library to do the gpg verification for you. 100 | 101 | Set at least all required gpg_bash_lib_input_* variables, that are documented below. Then run the main function gpg_bash_lib_function_main_verify (or just one function you wish to use). Then enjoy the gpg_bash_lib_output_* variables, that this library has set for you. 102 | 103 | If you wish to run gpg_bash_lib_function_main_verify another time, store the variables you want to keep in variables of your own, because they will be overridden on subsequent runs. 104 | 105 | === Variables === 106 | 107 | ==== Input Variables ==== 108 | 109 | ===== gpg_bash_lib_input_temp_folder ===== 110 | * description: Folder that can be used for temporary files. Warning: that folder will be deleted before usage to make sure it is clean! 111 | * required: no 112 | * defaults to: "$(mktemp --directory)" 113 | * expected value: /path/to/temp/folder 114 | * example: gpg_bash_lib_input_temp_folder=/home/user/some-tmp-folder 115 | 116 | ===== gpg_bash_lib_input_key_import_dir ===== 117 | * description: The folder that contains gpg signing keys that are supposed to be accepted. Must already exist. Must contain gpg public keys. 118 | * required: yes 119 | * expected value: /path/to/folder 120 | * example: gpg_bash_lib_input_key_import_dir=/usr/share/program-name/signing-keys.d 121 | 122 | ===== gpg_bash_lib_input_file_name_enforce ===== 123 | * description: Enforce, that the name of the file is stored in the file@name OpenPGP notation and matches the actual file name. If enabled, gpg_bash_lib_output_alright_status will be set to true if it matches. Otherwise to false. Rather gpg_bash_lib_output_file_name_tampering will be set to true (match), missing (no file@name OpenPGP notation inside the signature, false (mismatch) accordingly. 124 | * required: no 125 | * defaults to: disabled by default 126 | * expected value: true or false 127 | * example: gpg_bash_lib_input_file_name_enforce=true 128 | 129 | ===== gpg_bash_lib_input_cleanup ===== 130 | * description: Delete the folder stored in the gpg_bash_lib_input_temp_folder variable or not. 131 | * required: no 132 | * defaults to: disabled by default 133 | * expected value: true or false 134 | * example: gpg_bash_lib_input_cleanup=true 135 | 136 | ===== gpg_bash_lib_input_data_file ===== 137 | * description: The data file that is supposed to be verified. 138 | * required: yes 139 | * expected value: /path/to/file 140 | * example: gpg_bash_lib_input_data_file=/home/user/some-file.tar.gz 141 | 142 | ===== gpg_bash_lib_input_sig_file ===== 143 | * description: The signature file that is supposed to be verified. 144 | * required: yes 145 | * expected value: /path/to/file 146 | * example: gpg_bash_lib_input_data_file=/home/user/some-file.tar.gz.asc 147 | 148 | ===== gpg_bash_lib_input_error_handler_extra ===== 149 | * description: Custom error handler function you may wish to invoke in case the ERR trap function gpg_bash_lib_function_error_handler gets ever hit. 150 | * required: no 151 | * defaults to: none 152 | * expected value: A command or bash function name. 153 | * example usage: 154 | 155 |
156 | gpg_bash_lib_input_error_handler_extra='error_handler'
157 | 
158 | 159 |
160 | gpg_bash_lib_input_error_handler_extra='error_handler "$gpg_bash_lib_output_error_handler_message"'
161 | 
162 | 163 |
164 | gpg_bash_lib_input_error_handler_extra='error_handler "$gpg_bash_lib_output_error_handler_message" ; return 0'
165 | 
166 | 167 | ===== gpg_bash_lib_input_verify_timeout_after ===== 168 | * description: After how many seconds a gpg verification attempt should be forced timeout. Sends signal SIGTERM to gpg. Useful to defeat an endless data attacks or bugs. Increase this value when you are working with bigger files and/or slow systems. 169 | * required: no 170 | * defaults to: 10 171 | * expected value: integer 172 | * example: gpg_bash_lib_input_verify_timeout_after=120 173 | 174 | ===== gpg_bash_lib_input_verify_kill_after ===== 175 | * description: After how many seconds, if gpg did not react to SIGTERM due to timeout (see above), signal SIGKILL should be used. Useful to defeat an endless data attacks or bugs. 176 | * required: no 177 | * defaults to: 10 178 | * expected value: integer 179 | * example: gpg_bash_lib_input_verify_timeout_after=20 180 | 181 | ===== gpg_bash_lib_input_maximum_age_in_seconds ===== 182 | * description: After how many seconds, a signature is considered outdated. gpg adds the creation time of the signature (Signature Creation Date) to every signature. That value is detected (see also variables gpg_bash_lib_output_signed_on_unixtime and gpg_bash_lib_output_signed_on_date below) and compared against this variable. 183 | * required: no 184 | * defaults to: 2592000 (which is sane as 1 month) 185 | * expected value: integer 186 | * example: gpg_bash_lib_input_maximum_age_in_seconds=2592000 187 | 188 | ===== gpg_bash_lib_input_slow_clock_lenient_up_to_seconds ===== 189 | * description: After how many seconds, a signature is considered outdated. 190 | * required: no 191 | * defaults to: 1800 (which is same as 30 minutes) 192 | * expected value: integer 193 | * example: gpg_bash_lib_input_slow_clock_lenient_up_to_seconds=1800 194 | 195 | ==== Output Variables ==== 196 | 197 | ===== gpg_bash_lib_output_failure_status ===== 198 | * possible values: true or false 199 | * recommendation: Make sure to check for this value! Since the trap gpg_bash_lib_function_error_handler has been invoked, something unexpected, a bug has occurred. Regard this as verification failed. 200 | * example usage: 201 |
202 | if [ "$gpg_bash_lib_output_failure_status" = "true" ]; then
203 |    echo 'Fatal signature verification error! Report this bug!' >&2
204 |    exit 1
205 | fi
206 | 
207 | 208 | ===== gpg_bash_lib_output_diagnostic_message ===== 209 | * possible values: A verbose diagnostic textual string. 210 | * recommendation: Display this value when running your script in verbose mode. 211 | * example content: 212 |
213 | gpg_bash_lib_internal_gpg_verify_status_fd_file: /tmp/tmp.lZDa3dOyUr/gpg_bash_lib_internal_gpg_verify_status_fd_file
214 | gpg_bash_lib_internal_gpg_verify_output_file: /tmp/tmp.lZDa3dOyUr/gpg_bash_lib_internal_gpg_verify_output_file
215 | gpg_bash_lib_output_gpg_import_output:
216 | gpg: keyring `/tmp/tmp.lZDa3dOyUr/secring.gpg' created
217 | gpg: keyring `/tmp/tmp.lZDa3dOyUr/pubring.gpg' created
218 | gpg: /tmp/tmp.lZDa3dOyUr/trustdb.gpg: trustdb created
219 | gpg: key 01C1FA07: public key "auto generated local signing key " imported
220 | gpg: Total number processed: 1
221 | gpg:               imported: 1  (RSA: 1)
222 | gpg_bash_lib_output_gpg_verify_output:
223 | gpg: Signature made Wed 25 Feb 2015 12:17:44 AM UTC using RSA key ID 8006F538
224 | gpg: Good signature from "auto generated local signing key "
225 | gpg: Signature notation: file@name=test-file
226 | gpg: WARNING: This key is not certified with a trusted signature!
227 | gpg:          There is no indication that the signature belongs to the owner.
228 | Primary key fingerprint: EB53 FEB4 7F25 ED3B 22F6  7D8B 87A3 BF01 01C1 FA07
229 |      Subkey fingerprint: E0A4 BE54 D1D8 1354 17FB  1CC2 42B6 02D3 8006 F538
230 | gpg_bash_lib_output_gpg_verify_status_fd_output:
231 | [GNUPG:] SIG_ID wW/AZUo5pHeQTTOWMwGTynGlLXQ 2015-02-25 1424823464
232 | [GNUPG:] GOODSIG 42B602D38006F538 auto generated local signing key 
233 | [GNUPG:] NOTATION_NAME file@name
234 | [GNUPG:] NOTATION_DATA test-file
235 | [GNUPG:] VALIDSIG E0A4BE54D1D8135417FB1CC242B602D38006F538 2015-02-25 1424823464 0 4 0 1 2 00 EB53FEB47F25ED3B22F67D8B87A3BF0101C1FA07
236 | [GNUPG:] TRUST_UNDEFINED
237 | 
238 | 239 | ===== gpg_bash_lib_output_gpg_import_output ===== 240 | * possible values: A textual string containing output of the gpg --import part. 241 | * recommendation: Since already included in gpg_bash_lib_output_diagnostic_message, you most likely will not need it. 242 | 243 | ===== gpg_bash_lib_output_gpg_verify_exit_code ===== 244 | * possible values: integer. The exit code of the gpg --verify action, most likely 0 or other exit codes such as 1, or if timeout was reached, 124 if sending signal sigterm was sufficient or 137 if sending signal sigkill was required. 245 | * recommendation: Check if it is 0, since other exit codes indicate failures or timeouts. Probably better not to rely on it for anything else but debug output, since the unreliability of gpg verify exit codes is the reason this library has been implemented in the first place. 246 | * example value: 0 247 | * example usage: 248 |
249 |    case "$gpg_bash_lib_output_gpg_verify_exit_code" in
250 |       "0")
251 |          true
252 |          ;;
253 |       "124")
254 |          echo "Soft gpg verification timeout!" >&2
255 |          exit 1
256 |          ;;
257 |       "137")
258 |          echo "Hard gpg verification timeout!" >&2
259 |          exit 1
260 |          ;;
261 |       *)
262 |          echo "gpg_bash_lib_output_gpg_verify_exit_code neither represents success nor timeout. It is: $gpg_bash_lib_output_gpg_verify_exit_code" >&2
263 |          exit 125
264 |          ;;
265 |    esac
266 | 
267 | 268 | ===== gpg_bash_lib_output_gpg_verify_output ===== 269 | * possible values: A textual string containing output of the gpg --verify part. 270 | * recommendation: Since already included in gpg_bash_lib_output_diagnostic_message, you most likely will not need it. 271 | 272 | ===== gpg_bash_lib_output_gpg_verify_status_fd_output ===== 273 | * possible values: A textual string containing output of the gpg --status-file part. 274 | * recommendation: Since already included in gpg_bash_lib_output_diagnostic_message, you most likely will not need it. 275 | 276 | ===== gpg_bash_lib_output_signed_on_unixtime ===== 277 | * possible values: An integer, the Signature Creation Date represented as unixtime. 278 | * recommendation: Consider using this variable instead of gpg_bash_lib_output_signed_on_date by converting it to some formatted date string that you prefer. 279 | * example content: 1419456919 280 | 281 | ===== gpg_bash_lib_output_signed_on_date ===== 282 | * possible values: gpg_bash_lib_output_signed_on_unixtimeconverted to a textual date string using. 283 | * recommendation: Show this variable in your script, ask the user for confirmation. 284 | * example content: March 01 13:56:27 UTC 2015 285 | 286 | ===== gpg_bash_lib_output_file_name_tampering ===== 287 | * possible values: Set to true (match), missing (no file@name OpenPGP notation inside the signature, false (mismatch) accordingly. 288 | * recommendation: If you are using gpg_bash_lib_input_file_name_enforce=true, you should check this value. 289 | * example content: true 290 | * example usage: 291 |
292 |    echo "File name is       : $(basename "$gpg_bash_lib_input_data_file")"
293 |    case "$gpg_bash_lib_output_file_name_tampering" in
294 |       "false")
295 |          echo "File name should be: ${gpg_bash_lib_output_notation[$"file@name"]}"
296 |          echo 'File name okay, has not been tampered with.'
297 |          ;;
298 |       "missing")
299 |          ## Not trying to access ${gpg_bash_lib_output_notation[$"file@name"]},
300 |          ## because that variable does not exist then.
301 |          echo 'File name tampering detected! file@name OpenPGP notation missing!' >&2
302 |          exit 1
303 |          ;;
304 |       "true")
305 |          echo "File name should be: ${gpg_bash_lib_output_notation[$"file@name"]}"
306 |          echo 'File name tampering detected!' >&2
307 |          exit 1
308 |          ;;
309 |       *)
310 |          echo "gpg_bash_lib_output_file_name_tampering neither represents false, missing, nor success. It is: $gpg_bash_lib_output_gpg_verify_exit_code" >&2
311 |          exit 125
312 |          ;;
313 |    esac
314 | 
315 | 316 | ===== gpg_bash_lib_output_notation["file@name"] ===== 317 | * possible values: name of file that was signed or "" if not in use (not using gpg_bash_lib_input_file_name_enforce=true). 318 | * example content: test-file 319 | * example use: 320 |
321 | echo "gpg_bash_lib_output_notation[file@name]: ${gpg_bash_lib_output_notation[$"file@name"]}"
322 | 
323 | 324 | ===== gpg_bash_lib_output_slow_clock_lenient_up_to_pretty_output ===== 325 | * possible value: Textual string containing the duration of how lenient the clock leniency check is. (Contains the result of the conversion of gpg_bash_lib_input_slow_clock_lenient_up_to_seconds to a pretty format.) 326 | * example content: 30 minutes 327 | 328 | ===== gpg_bash_lib_output_goodsig_status ===== 329 | * possible values: true (GOODSIG, key and signature valid) or false (BADSIG, EXPSIG, EXPKEYSIG, REVKEYSIG or ERRSIG). 330 | * recommendation: Check if its value is true. Abort otherwise. 331 | * example content: true 332 | * example usage: 333 |
334 | if [ ! "$gpg_bash_lib_output_goodsig_status" = "true" ]; then
335 |    echo 'Key or signature error (BADSIG, EXPSIG, EXPKEYSIG, REVKEYSIG or ERRSIG)!' >&2
336 |    exit 1
337 | fi
338 | 
339 | 340 | ===== gpg_bash_lib_output_validsig_status ===== 341 | * possible values: true (successful verification) or false (unsuccessful verification). 342 | * recommendation: Check if its value is true. Abort otherwise. 343 | * example content: true 344 | * example usage: 345 |
346 | if [ ! "$gpg_bash_lib_output_validsig_status" = "true" ]; then
347 |    echo 'Signature verification failed!' >&2
348 |    exit 1
349 | fi
350 | 
351 | 352 | ===== gpg_bash_lib_output_fingerprint_in_hex ===== 353 | * possible values: The fingerprint of the key that signed the file in hex or "" in case of unsuccessful verification. 354 | * recommendation: May or may not be useful to show this value in your script (in verbose mode). Since we expect a separate folder that contains the only keys that will be accepted (see variable gpg_bash_lib_input_key_import_dir), it seems unnecessary to check for the fingerprint. 355 | * example content: F38633B0A3F06A55CC0076C81081641AC4D57DB9 356 | 357 | ===== gpg_bash_lib_output_current_unixtime ===== 358 | * possible values: integer, unixtime at time of running this library. 359 | 360 | ===== gpg_bash_lib_output_current_time ===== 361 | * possible values: A textual string, the output of "$(date --utc "+%B %d %H:%M:%S UTC %Y")" at time of running this library. 362 | * example content: March 01 17:59:38 UTC 2015 363 | 364 | ===== gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime ===== 365 | * possible values: An integer, that represents the Relative Signature Creation Time. See the example of gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty below to understand what it is doing. Can be used when gpg_bash_lib_output_freshness_detail is slow or lenient. 366 | 367 | ===== gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty ===== 368 | * possible values: A textual string, gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime converted to a pretty format. Can be used when gpg_bash_lib_output_freshness_detail is slow or lenient. 369 | * example usage: 370 |
371 | if [ "$gpg_bash_lib_output_freshness_detail" = "slow" ] || [ "$gpg_bash_lib_output_freshness_detail" = "lenient" ]; then
372 |    echo "Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty before current time."
373 | fi
374 | 
375 | 376 | ===== gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime ===== 377 | * possible values: An integer, that represents the Relative Signature Creation Time. See the example of gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty below to understand what it is doing. Can be used if gpg_bash_lib_output_freshness_detail is current or outdated.. 378 | 379 | ===== gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty ===== 380 | * possible values: A textual string, gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime converted to a pretty format. Can be used if gpg_bash_lib_output_freshness_detail is current or outdated.. 381 | * example usage: 382 |
383 | if [ "$gpg_bash_lib_output_freshness_detail" = "current" ] || [ "$gpg_bash_lib_output_freshness_detail" = "outdated" ]; then
384 |    echo "Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty ago."
385 | fi
386 | 
387 | 388 | ===== gpg_bash_lib_output_in_future_in_seconds ===== 389 | * possible values: In case of gpg_bash_lib_output_freshness_detail is outdated, it contains an estimation how many seconds the clock might be fast. 390 | 391 | ===== gpg_bash_lib_output_in_future_pretty_output ===== 392 | * possible values: A textual string, gpg_bash_lib_output_in_future_in_seconds converted to a pretty format. 393 | * example use: 394 |
395 | echo "gpg_bash_lib_output_in_future_pretty_output: $gpg_bash_lib_output_in_future_pretty_output"
396 | 
397 | 398 | ===== gpg_bash_lib_output_freshness_status ===== 399 | * possible values: true (fresh) or false (not fresh). 400 | * example use: 401 |
402 | if [ "$gpg_bash_lib_output_freshness_status" = "true" ]; then
403 |    echo "Signature is current."
404 | else
405 |    echo "Signature NOT current." >&2
406 |    exit 1
407 | fi
408 | 
409 | 410 | ===== gpg_bash_lib_output_freshness_detail ===== 411 | * description: A string, that contains the result of the comparison of the 412 | local clock (unixtime) with the signature creation date (unixtime). The example 413 | below will explain this better. 414 | * possible values: 415 | ** lenient (Signature is not yet valid, still within accepted range.) 416 | ** slow (Signature is not yet valid.) 417 | ** current (Signature is current.) 418 | ** outdated (Signature is no longer valid (outdated).) 419 | * recommended action: Reject files, if the signature freshness is apparently 420 | slow, because that would indicate there either something is very wrong with 421 | the signature or with the local system clock, or if the signature freshness 422 | apparently outdated, because then there could be an indefinite freeze or 423 | rollback (downgrade) attack in place. Accept if the signature freshness is 424 | apparently current or lenient. In the latter case, explain that state to 425 | the user. Use a snippet similar to the example below. 426 | * example usage: 427 |
428 |    case "$gpg_bash_lib_output_freshness_detail" in
429 |       "lenient")
430 |          signature_creation_msg="Your clock might be slow.
431 | According to your system clock, signature was created $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty before current time.
432 | You can probably ignore this, because it still is within range. (Okay up to $gpg_bash_lib_output_maximum_age_pretty_output before.)"
433 |          ## ...
434 |          ;;
435 |       "slow")
436 |          signature_creation_msg="Your clock might be slow.
437 | According to your system clock, signature was created $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty before current time."
438 |          ## ...
439 |          ;;
440 |       "outdated")
441 |          signature_creation_msg="Signature looks quite old already.
442 | Either,
443 | - your clock might be fast (at least $gpg_bash_lib_output_in_future_pretty_output fast). $clock_hint
444 | - there is really no newer signature yet. Signature is really older than $gpg_bash_lib_output_maximum_age_pretty_output. already. (Older than $gpg_bash_lib_output_in_future_pretty_output already.)
445 | - this is a $0 bug
446 | - this is an attack"
447 |          ## ...
448 |          ;;
449 |       "current")
450 |          signature_creation_msg="According to your system clock, signatures was created $gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty ago."
451 |          ## ...
452 |          ;;
453 |       *)
454 |          echo "gpg_bash_lib_output_freshness_detail is neither lenient, nor slow, nor outdated, nor current, it is: $gpg_bash_lib_output_freshness_detail" >&2
455 |          exit 125
456 |          ;;
457 |    esac
458 | 
459 | 460 | ===== gpg_bash_lib_output_freshness_msg ===== 461 | * possible values: A textual string, that contains diagnostic output, that puts gpg_bash_lib_output_freshness_detail into more details, developers speech, that may or may not be useful to show in your script (when in verbose mode). 462 | 463 | ===== gpg_bash_lib_output_maximum_age_pretty_output ===== 464 | * possible values: A textual string, gpg_bash_lib_input_maximum_age_in_seconds converted into a pretty format. 465 | 466 | ===== gpg_bash_lib_output_alright_status ===== 467 | * possible values: "", true (if all checks succeeded) or false (if at least one check failed, such as if gpg_bash_lib_input_file_name_enforce was set to true, but verification of the name of the file failed or if the signature was not considered fresh). 468 | * example usage: 469 |
470 | if [ ! "$gpg_bash_lib_output_alright_status" = "true" ]; then
471 |    ## ...
472 |    exit 1
473 | fi
474 | 
475 | 476 | === File Name Verification === 477 | 478 | To verify the names of files, i.e. to verify the file@name OpenPGP Notation, see also variable gpg_bash_lib_input_file_name_enforce above. 479 | 480 | To create a signature, that contains this OpenPGP notation, you might like to use something like the following command and and/or function. 481 | 482 |
sign_cmd() {
483 |    ## GPG signatures do not authenticate filenames by default, therefore add
484 |    ## the name of the file as a OpenPGP notation so at least users or scripts
485 |    ## that look at OpenPGP notations have a chance to detect if file names
486 |    ## have been tampered with. See also:
487 |    ## https://github.com/adrelanos/gpg-bash-lib
488 |    gpg --detach-sign --armor --yes --set-notation "file@name"="$(basename "$1")" "$1"
489 | }
490 | And for verification. 491 | 492 |
verify_cmd() {
493 |    gpg --verify-options show-notations --verify "$1"
494 | }
495 | === Security Tips === 496 | 497 | ==== Signature Creation Date Storage ==== 498 | 499 | To aid detection of indefinite freeze and rollback (downgrade) attacks, consider storing the Signature Creation Date (see variables gpg_bash_lib_output_signed_on_unixtime and/or gpg_bash_lib_output_signed_on_date) in a file, so you can compare them next time you download a supposedly newer signature. If the newly downloaded signature is older than the last known one, then maybe something is wrong. 500 | 501 | ==== Signature Creation Date Preseeding ==== 502 | 503 | The above tip will not work for initial signature downloads. Therefore consider preseeding a sane initial value. 504 | 505 | ==== Abstract it! ==== 506 | 507 | Like the two above tips? We should abstract that code as well. Interested to implement it into gpg-bash-lib? 508 | 509 | ==== Signature Freshness Updating ==== 510 | 511 | If you are the one providing the signatures, if there are no new releases, often recreate and reupload them to refresh the signature creation date. 512 | 513 | === Library Conventions === 514 | 515 | To avoid conflicts with variables or function names, which your script might have defined earlier, the following conventions have been applied. 516 | 517 | * Function names start with gpg_bash_lib_function_. 518 | * Variable names found out by the library start with gpg_bash_lib_output_. 519 | * Variable names that may be input by the user start with gpg_bash_lib_output_. 520 | * Variable names that are only internally used start with gpg_bash_lib_internal_. 521 | 522 | === Goodies === 523 | 524 | ==== SIGNAL Friendliness ==== 525 | 526 | Any operations that could take longer, such as the gpg --verify operation, are executed using bash's wait builtin. To explain this better, see the following pseudo code, it is the style that this library is using. 527 | 528 |
529 | gpg ... &
530 | gpg_bash_lib_internal_gpg_verify_pid="$!"
531 | wait "$gpg_bash_lib_internal_gpg_verify_pid" || { gpg_bash_lib_output_gpg_verify_exit_code="$?" ; true; };
532 | 
533 | 534 | This has the advantage, that your script can still react to any eventual trap's listening for example for signal SIGTERM. 535 | 536 | = Known Issues = 537 | 538 | * Multiple signatures in a single signature file are not well supported yet. 539 | * When there are multiple signatures in a single signature file, the signature will be accepted as valid, when at least one key from the signing key folder (see variable gpg_bash_lib_input_key_import_dir above) made a good signature. Feedback welcome on situations where there are multiple mixed good and bad signatures. 540 | * [https://phabricator.whonix.org/maniphest/?statuses=open%2Creview&allProjects=PHID-PROJ-y7ggndpa2rbgbboyhoqp#R Issue Tracker] 541 | 542 | = Alternatives = 543 | 544 | * Writing your own custom code. 545 | * Please add any not listed here. 546 | 547 | = Forks, Patches, Testers, Comments, etc. = 548 | 549 | Welcome. 550 | 551 | = Author = 552 | 553 | * Patrick Schleizer 554 | * e-mail: adrelanos@whonix.org 555 | * [https://www.whonix.org/wiki/Patrick_Schleizer gpg]: 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA 556 | * twitter: https://twitter.com/adrelanos 557 | * twitter: https://twitter.com/Whonix 558 | * [https://www.whonix.org/wiki/Donate Donate] 559 | 560 | = License = 561 | 562 | GPLv3+ 563 | -------------------------------------------------------------------------------- /README_generic.md: -------------------------------------------------------------------------------- 1 | # gpg bash library # 2 | 3 | Abstracts file verification into common functions. Allows detecting of stale 4 | files, i.e. detection downgrade or indefinite freeze attacks by implementing 5 | a valid-until like mechanism. 6 | 7 | Internally parses gpg's --status-file output. 8 | 9 | For better security. 10 | 11 | ## How to install `gpg-bash-lib` using apt-get ## 12 | 13 | 1\. Download the APT Signing Key. 14 | 15 | ``` 16 | wget https://www.kicksecure.com/keys/derivative.asc 17 | ``` 18 | 19 | Users can [check the Signing Key](https://www.kicksecure.com/wiki/Signing_Key) for better security. 20 | 21 | 2\. Add the APT Signing Key. 22 | 23 | ``` 24 | sudo cp ~/derivative.asc /usr/share/keyrings/derivative.asc 25 | ``` 26 | 27 | 3\. Add the derivative repository. 28 | 29 | ``` 30 | echo "deb [signed-by=/usr/share/keyrings/derivative.asc] https://deb.kicksecure.com bookworm main contrib non-free" | sudo tee /etc/apt/sources.list.d/derivative.list 31 | ``` 32 | 33 | 4\. Update your package lists. 34 | 35 | ``` 36 | sudo apt-get update 37 | ``` 38 | 39 | 5\. Install `gpg-bash-lib`. 40 | 41 | ``` 42 | sudo apt-get install gpg-bash-lib 43 | ``` 44 | 45 | ## How to Build deb Package from Source Code ## 46 | 47 | Can be build using standard Debian package build tools such as: 48 | 49 | ``` 50 | dpkg-buildpackage -b 51 | ``` 52 | 53 | See instructions. 54 | 55 | NOTE: Replace `generic-package` with the actual name of this package `gpg-bash-lib`. 56 | 57 | * **A)** [easy](https://www.kicksecure.com/wiki/Dev/Build_Documentation/generic-package/easy), _OR_ 58 | * **B)** [including verifying software signatures](https://www.kicksecure.com/wiki/Dev/Build_Documentation/generic-package) 59 | 60 | ## Contact ## 61 | 62 | * [Free Forum Support](https://forums.kicksecure.com) 63 | * [Premium Support](https://www.kicksecure.com/wiki/Premium_Support) 64 | 65 | ## Donate ## 66 | 67 | `gpg-bash-lib` requires [donations](https://www.kicksecure.com/wiki/Donate) to stay alive! 68 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | gpg-bash-lib (3:4.8-1) unstable; urgency=medium 2 | 3 | * New upstream version (local package). 4 | 5 | -- Patrick Schleizer Wed, 21 May 2025 13:55:30 +0000 6 | 7 | gpg-bash-lib (3:4.7-1) unstable; urgency=medium 8 | 9 | * New upstream version (local package). 10 | 11 | -- Patrick Schleizer Thu, 23 Jan 2025 16:19:49 +0000 12 | 13 | gpg-bash-lib (3:4.6-1) unstable; urgency=medium 14 | 15 | * New upstream version (local package). 16 | 17 | -- Patrick Schleizer Tue, 31 Dec 2024 18:32:56 +0000 18 | 19 | gpg-bash-lib (3:4.5-1) unstable; urgency=medium 20 | 21 | * New upstream version (local package). 22 | 23 | -- Patrick Schleizer Sat, 11 Nov 2023 20:15:05 +0000 24 | 25 | gpg-bash-lib (3:4.4-1) unstable; urgency=medium 26 | 27 | * New upstream version (local package). 28 | 29 | -- Patrick Schleizer Mon, 17 Jul 2023 15:34:11 +0000 30 | 31 | gpg-bash-lib (3:4.3-1) unstable; urgency=medium 32 | 33 | * New upstream version (local package). 34 | 35 | -- Patrick Schleizer Wed, 21 Jun 2023 10:03:31 +0000 36 | 37 | gpg-bash-lib (3:4.2-1) unstable; urgency=medium 38 | 39 | * New upstream version (local package). 40 | 41 | -- Patrick Schleizer Wed, 21 Jun 2023 09:15:42 +0000 42 | 43 | gpg-bash-lib (3:4.1-1) unstable; urgency=medium 44 | 45 | * New upstream version (local package). 46 | 47 | -- Patrick Schleizer Fri, 16 Jun 2023 10:52:33 +0000 48 | 49 | gpg-bash-lib (3:4.0-1) unstable; urgency=medium 50 | 51 | * New upstream version (local package). 52 | 53 | -- Patrick Schleizer Thu, 15 Jun 2023 17:00:35 +0000 54 | 55 | gpg-bash-lib (3:3.9-1) unstable; urgency=medium 56 | 57 | * New upstream version (local package). 58 | 59 | -- Patrick Schleizer Wed, 14 Jun 2023 09:56:16 +0000 60 | 61 | gpg-bash-lib (3:3.8-1) unstable; urgency=medium 62 | 63 | * New upstream version (local package). 64 | 65 | -- Patrick Schleizer Mon, 12 Jun 2023 17:51:06 +0000 66 | 67 | gpg-bash-lib (3:3.7-1) unstable; urgency=medium 68 | 69 | * New upstream version (local package). 70 | 71 | -- Patrick Schleizer Mon, 12 Jun 2023 15:17:08 +0000 72 | 73 | gpg-bash-lib (3:3.6-1) unstable; urgency=medium 74 | 75 | * New upstream version (local package). 76 | 77 | -- Patrick Schleizer Sat, 18 Jun 2022 08:52:19 +0000 78 | 79 | gpg-bash-lib (3:3.5-1) unstable; urgency=medium 80 | 81 | * New upstream version (local package). 82 | 83 | -- Patrick Schleizer Wed, 08 Jun 2022 14:29:49 +0000 84 | 85 | gpg-bash-lib (3:3.4-1) unstable; urgency=medium 86 | 87 | * New upstream version (local package). 88 | 89 | -- Patrick Schleizer Wed, 25 May 2022 10:05:46 +0000 90 | 91 | gpg-bash-lib (3:3.3-1) unstable; urgency=medium 92 | 93 | * New upstream version (local package). 94 | 95 | -- Patrick Schleizer Sat, 11 Sep 2021 22:41:42 +0000 96 | 97 | gpg-bash-lib (3:3.2-1) unstable; urgency=medium 98 | 99 | * New upstream version (local package). 100 | 101 | -- Patrick Schleizer Thu, 05 Aug 2021 20:41:45 +0000 102 | 103 | gpg-bash-lib (3:3.1-1) unstable; urgency=medium 104 | 105 | * New upstream version (local package). 106 | 107 | -- Patrick Schleizer Tue, 01 Jun 2021 11:33:27 +0000 108 | 109 | gpg-bash-lib (3:3.0-1) unstable; urgency=medium 110 | 111 | * New upstream version (local package). 112 | 113 | -- Patrick Schleizer Wed, 17 Mar 2021 15:26:31 +0000 114 | 115 | gpg-bash-lib (3:2.9-1) unstable; urgency=medium 116 | 117 | * New upstream version (local package). 118 | 119 | -- Patrick Schleizer Sat, 06 Feb 2021 11:28:30 +0000 120 | 121 | gpg-bash-lib (3:2.8-1) unstable; urgency=medium 122 | 123 | * New upstream version (local package). 124 | 125 | -- Patrick Schleizer Wed, 29 Jul 2020 16:02:41 +0000 126 | 127 | gpg-bash-lib (3:2.7-1) unstable; urgency=medium 128 | 129 | * New upstream version (local package). 130 | 131 | -- Patrick Schleizer Thu, 16 Apr 2020 12:31:18 +0000 132 | 133 | gpg-bash-lib (3:2.6-1) unstable; urgency=medium 134 | 135 | * New upstream version (local package). 136 | 137 | -- Patrick Schleizer Thu, 02 Apr 2020 11:43:44 +0000 138 | 139 | gpg-bash-lib (3:2.5-1) unstable; urgency=medium 140 | 141 | * New upstream version (local package). 142 | 143 | -- Patrick Schleizer Wed, 01 Apr 2020 14:36:54 +0000 144 | 145 | gpg-bash-lib (3:2.4-1) unstable; urgency=medium 146 | 147 | * New upstream version (local package). 148 | 149 | -- Patrick Schleizer Thu, 01 Aug 2019 11:38:35 +0000 150 | 151 | gpg-bash-lib (3:2.3-1) unstable; urgency=medium 152 | 153 | * New upstream version (local package). 154 | 155 | -- Patrick Schleizer Sat, 08 Jun 2019 11:11:05 +0000 156 | 157 | gpg-bash-lib (3:2.2-1) unstable; urgency=medium 158 | 159 | * New upstream version (local package). 160 | 161 | -- Patrick Schleizer Fri, 24 May 2019 20:39:39 +0000 162 | 163 | gpg-bash-lib (3:2.1-1) unstable; urgency=medium 164 | 165 | * New upstream version (local package). 166 | 167 | -- Patrick Schleizer Fri, 03 May 2019 11:23:59 +0000 168 | 169 | gpg-bash-lib (3:2.0-1) unstable; urgency=medium 170 | 171 | * New upstream version (local package). 172 | 173 | -- Patrick Schleizer Sat, 06 Apr 2019 12:03:41 +0000 174 | 175 | gpg-bash-lib (3:1.9-1) unstable; urgency=medium 176 | 177 | * New upstream version (local package). 178 | 179 | -- Patrick Schleizer Fri, 29 Mar 2019 09:53:07 +0000 180 | 181 | gpg-bash-lib (3:1.8-1) unstable; urgency=medium 182 | 183 | * New upstream version (local package). 184 | 185 | -- Patrick Schleizer Tue, 12 Mar 2019 11:26:22 +0000 186 | 187 | gpg-bash-lib (3:1.7-1) unstable; urgency=medium 188 | 189 | * New upstream version (local package). 190 | 191 | -- Patrick Schleizer Mon, 27 Aug 2018 16:38:23 +0000 192 | 193 | gpg-bash-lib (3:1.6-1) unstable; urgency=medium 194 | 195 | * New upstream version (local package). 196 | 197 | -- Patrick Schleizer Tue, 17 Jul 2018 11:26:49 +0000 198 | 199 | gpg-bash-lib (3:1.5-1) unstable; urgency=medium 200 | 201 | * New upstream version (local package). 202 | 203 | -- Patrick Schleizer Thu, 01 Feb 2018 15:03:59 +0000 204 | 205 | gpg-bash-lib (3:1.4-1) unstable; urgency=medium 206 | 207 | * New upstream version (local package). 208 | 209 | -- Patrick Schleizer Fri, 17 Feb 2017 13:58:20 +0000 210 | 211 | gpg-bash-lib (3:1.3-1) unstable; urgency=medium 212 | 213 | * New upstream version (local package). 214 | 215 | -- Patrick Schleizer Sun, 15 Jan 2017 15:30:20 +0000 216 | 217 | gpg-bash-lib (3:1.2-1) unstable; urgency=medium 218 | 219 | * New upstream version (local package). 220 | 221 | -- Patrick Schleizer Sat, 10 Dec 2016 02:09:54 +0000 222 | 223 | gpg-bash-lib (3:1.1-1) unstable; urgency=medium 224 | 225 | * New upstream version (local package). 226 | 227 | -- Patrick Schleizer Thu, 07 Apr 2016 22:54:36 +0000 228 | 229 | gpg-bash-lib (3:1.0-1) unstable; urgency=medium 230 | 231 | * New upstream version (local package). 232 | 233 | -- Patrick Schleizer Tue, 25 Aug 2015 14:07:59 +0000 234 | 235 | gpg-bash-lib (3:0.9-1) unstable; urgency=low 236 | 237 | * New upstream version (local package). 238 | 239 | -- Patrick Schleizer Wed, 03 Jun 2015 14:59:40 +0000 240 | 241 | gpg-bash-lib (3:0.8-1) unstable; urgency=low 242 | 243 | * New upstream version (local package). 244 | 245 | -- Patrick Schleizer Thu, 30 Apr 2015 17:56:17 +0000 246 | 247 | gpg-bash-lib (3:0.7-1) unstable; urgency=low 248 | 249 | * New upstream version (local package). 250 | 251 | -- Patrick Schleizer Wed, 15 Apr 2015 20:23:44 +0000 252 | 253 | gpg-bash-lib (3:0.6-1) unstable; urgency=low 254 | 255 | * New upstream version (local package). 256 | 257 | -- Patrick Schleizer Tue, 07 Apr 2015 17:41:41 +0000 258 | 259 | gpg-bash-lib (3:0.5-1) unstable; urgency=low 260 | 261 | * New upstream version (local package). 262 | 263 | -- Patrick Schleizer Thu, 02 Apr 2015 13:02:44 +0000 264 | 265 | gpg-bash-lib (3:0.4-1) unstable; urgency=low 266 | 267 | * New upstream version (local package). 268 | 269 | -- Patrick Schleizer Tue, 24 Mar 2015 17:29:11 +0000 270 | 271 | gpg-bash-lib (3:0.3-1) unstable; urgency=low 272 | 273 | * New upstream version. 274 | 275 | -- Patrick Schleizer Wed, 04 Feb 2015 00:51:48 +0000 276 | 277 | gpg-bash-lib (3:0.2-1) unstable; urgency=low 278 | 279 | * New upstream version. 280 | 281 | -- Patrick Schleizer Sun, 17 Aug 2014 20:44:58 +0000 282 | 283 | gpg-bash-lib (3:0.1-2) unstable; urgency=low 284 | 285 | * Initial release. 286 | 287 | -- Patrick Schleizer Sun, 17 Aug 2014 17:55:59 +0000 288 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 2 | ## See the file COPYING for copying conditions. 3 | 4 | Source: gpg-bash-lib 5 | Section: libs 6 | Priority: optional 7 | Maintainer: Patrick Schleizer 8 | Build-Depends: debhelper (>= 13), debhelper-compat (= 13) 9 | Homepage: https://github.com/Kicksecure/gpg-bash-lib 10 | Vcs-Browser: https://github.com/Kicksecure/gpg-bash-lib 11 | Vcs-Git: https://github.com/Kicksecure/gpg-bash-lib.git 12 | Standards-Version: 4.6.2 13 | Rules-Requires-Root: no 14 | 15 | Package: gpg-bash-lib 16 | Architecture: all 17 | Depends: ${misc:Depends} 18 | Description: gpg bash library 19 | Abstracts file verification into common functions. Allows detecting of stale 20 | files, i.e. detection downgrade or indefinite freeze attacks by implementing 21 | a valid-until like mechanism. 22 | . 23 | Internally parses gpg's --status-file output. 24 | . 25 | For better security. 26 | -------------------------------------------------------------------------------- /debian/gpg-bash-lib.install: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020 - 2025 ENCRYPTED SUPPORT LLC 2 | ## See the file COPYING for copying conditions. 3 | 4 | ## This file was generated using genmkfile 'make debinstfile'. 5 | 6 | usr/* 7 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | #export DH_VERBOSE=1 7 | 8 | %: 9 | dh $@ 10 | 11 | override_dh_installchangelogs: 12 | dh_installchangelogs changelog.upstream upstream 13 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /debian/source/lintian-overrides: -------------------------------------------------------------------------------- 1 | ## https://phabricator.whonix.org/T277 2 | debian-watch-does-not-check-openpgp-signature 3 | -------------------------------------------------------------------------------- /debian/watch: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 2 | ## See the file COPYING for copying conditions. 3 | 4 | version=4 5 | opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/gpg-bash-lib-$1\.tar\.gz/ \ 6 | https://github.com/Whonix/gpg-bash-lib/tags .*/v?(\d\S+)\.tar\.gz 7 | -------------------------------------------------------------------------------- /make-helper-overrides.bsh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2023 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | ## TODO 7 | genmkfile_lintian_post_opts+=" --suppress-tags openpgp-file-has-implementation-specific-extension " 8 | -------------------------------------------------------------------------------- /usr/libexec/gpg-bash-lib/modules.d/50_common: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | gpg_bash_lib_function_error_handler() { 7 | gpg_bash_lib_output_error_handler_last_failed_exit_code="$?" 8 | gpg_bash_lib_output_error_handler_message="$0 script bug 9 | Please report this bug! 10 | BASH_COMMAND: $BASH_COMMAND 11 | exit_code: $gpg_bash_lib_output_error_handler_last_failed_exit_code" 12 | gpg_bash_lib_output_failure_status="true" 13 | gpg_bash_lib_function_diagnostic_message 14 | gpg_bash_lib_output_error_handler_message="\ 15 | $gpg_bash_lib_output_error_handler_message 16 | ----- 17 | gpg_bash_lib_output_diagnostic_message: 18 | $gpg_bash_lib_output_diagnostic_message" 19 | if [ ! "$gpg_bash_lib_input_error_handler_extra" = "" ]; then 20 | eval $gpg_bash_lib_input_error_handler_extra 21 | fi 22 | exit 1 23 | } 24 | 25 | gpg_bash_lib_function_extract_trap_cmd() { 26 | ## Thanks to Richard Hansen - http://stackoverflow.com/a/7287873/2605155 27 | printf '%s\n' "$3" 28 | } 29 | 30 | gpg_bash_lib_function_init() { 31 | ## Cannot be inside a function, because errtrace might not be set, i.e. 32 | ## the function may not have inherited the trap, so the existing trap could not 33 | ## be detected from within a function. 34 | ## Thanks to Richard Hansen - http://stackoverflow.com/a/7287873/2605155 35 | gpg_bash_lib_internal_existing_trap="$(eval "gpg_bash_lib_function_extract_trap_cmd $(trap -p ERR)")" 36 | 37 | if test -o pipefail ; then 38 | true "$FUNCNAME: pipefail is enabled, not enabling it." 39 | gpg_bash_lib_internal_disable_pipefail="false" 40 | else 41 | true "$FUNCNAME: pipefail is disabled, enabling it." 42 | gpg_bash_lib_internal_disable_pipefail="true" 43 | set -o pipefail 44 | fi 45 | if test -o errtrace ; then 46 | true "$FUNCNAME: errtrace is enabled, disabling it." 47 | gpg_bash_lib_internal_enable_errtrace="true" 48 | set +o errtrace 49 | else 50 | true "$FUNCNAME: errtrace is disabled, not enabling it." 51 | gpg_bash_lib_internal_enable_errtrace="false" 52 | fi 53 | 54 | ## Not doing this. 55 | ## Even though we might have disabled errtrace if it was enabled, 56 | ## it could still be in effect until the end of this function. 57 | #trap "gpg_bash_lib_function_error_handler" ERR 58 | } 59 | 60 | gpg_bash_lib_function_variables() { 61 | trap "gpg_bash_lib_function_error_handler" ERR 62 | 63 | [ -n "$gpg_bash_lib_input_temp_folder" ] || gpg_bash_lib_input_temp_folder="$(mktemp --directory)" 64 | gpg_bash_lib_output_failure_status="false" 65 | gpg_bash_lib_output_diagnostic_message="" 66 | gpg_bash_lib_internal_gpg_verify_status_fd_file="$gpg_bash_lib_input_temp_folder/gpg_bash_lib_internal_gpg_verify_status_fd_file" 67 | gpg_bash_lib_internal_gpg_verify_output_file="$gpg_bash_lib_input_temp_folder/gpg_bash_lib_internal_gpg_verify_output_file" 68 | gpg_bash_lib_output_gpg_import_output="" 69 | gpg_bash_lib_output_gpg_verify_exit_code="" 70 | gpg_bash_lib_output_gpg_verify_output="" 71 | gpg_bash_lib_output_gpg_verify_status_fd_output="" 72 | gpg_bash_lib_output_signed_on_unixtime="" 73 | gpg_bash_lib_output_signed_on_date="" 74 | gpg_bash_lib_output_file_name_tampering="" 75 | unset gpg_bash_lib_output_notation 76 | declare -A -g gpg_bash_lib_output_notation 77 | gpg_bash_lib_output_slow_clock_lenient_up_to_pretty_output="" 78 | gpg_bash_lib_output_goodsig_status="false" 79 | gpg_bash_lib_output_validsig_status="false" 80 | gpg_bash_lib_output_fingerprint_in_hex="" 81 | gpg_bash_lib_output_current_unixtime="" 82 | gpg_bash_lib_output_current_time="" 83 | gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime="" 84 | gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty="" 85 | gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime="" 86 | gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty="" 87 | gpg_bash_lib_output_in_future_in_seconds="" 88 | gpg_bash_lib_output_in_future_pretty_output="" 89 | gpg_bash_lib_output_freshness_status="" 90 | gpg_bash_lib_output_freshness_detail="" 91 | gpg_bash_lib_output_freshness_msg="" 92 | gpg_bash_lib_output_maximum_age_pretty_output="" 93 | gpg_bash_lib_output_alright_status="" 94 | [ -n "$gpg_bash_lib_input_verify_timeout_after" ] || gpg_bash_lib_input_verify_timeout_after="10" 95 | [ -n "$gpg_bash_lib_input_verify_kill_after" ] || gpg_bash_lib_input_verify_kill_after="10" 96 | 97 | rm --recursive --force "$gpg_bash_lib_input_temp_folder" 98 | mkdir --parents "$gpg_bash_lib_input_temp_folder" 99 | chmod --recursive 700 "$gpg_bash_lib_input_temp_folder" 100 | test -d "$gpg_bash_lib_input_temp_folder" 101 | } 102 | 103 | gpg_bash_lib_function_sanity_tests() { 104 | trap "gpg_bash_lib_function_error_handler" ERR 105 | command -v date >/dev/null 106 | command -v gpg >/dev/null 107 | command -v mktemp >/dev/null 108 | } 109 | 110 | gpg_bash_lib_function_key_file_to_first_primary_fingerprint() { 111 | trap "gpg_bash_lib_function_error_handler" ERR 112 | 113 | ## example command: 114 | ## 115 | ## gpg --batch --no-options --homedir /home/user/.cache/tb/gpgtmpdir --with-colons --fixed-list-mode --with-fingerprint /usr/share/torbrowser-updater-keys.d/tbb-team.asc 116 | ## 117 | ## example output: 118 | ## 119 | ## gpg: WARNING: no command supplied. Trying to guess what you mean ... 120 | ## ... 121 | ## 122 | ## Therefore using '--import-options show-only'. 123 | 124 | ## example command: 125 | ## 126 | ## gpg --batch --no-options --homedir /home/user/.cache/tb/gpgtmpdir --with-colons --fixed-list-mode --with-fingerprint --import --import-options show-only /usr/share/torbrowser-updater-keys.d/tbb-team.asc 127 | ## 128 | ## example output: 129 | ## 130 | ## gpg: key 4E2C6E8793298290: 1 duplicate signature removed 131 | ## gpg: key 4E2C6E8793298290: 236 signatures not checked due to missing keys 132 | ## gpg: key 4E2C6E8793298290: 1 signature reordered 133 | ## ... 134 | ## 135 | ## Therefore using '--import-options show-only,import-minimal'. 136 | 137 | ## example command: 138 | ## 139 | ## gpg --batch --no-options --homedir /home/user/.cache/tb/gpgtmpdir --with-colons --fixed-list-mode --with-fingerprint --import --import-options show-only,import-minimal --trust-model direct /usr/share/torbrowser-updater-keys.d/tbb-team.asc 140 | ## 141 | ## example output: 142 | ## 143 | ## pub:u:4096:1:4E2C6E8793298290:1418637242:1598268349::u:::cSC::::::23::0: 144 | ## fpr:::::::::EF6E286DDA85EA2A4BA7DE684E2C6E8793298290: 145 | ## uid:u::::1440588357::50CE13CA9C3B3D27C0071489BB58D4B898131885::Tor Browser Developers (signing key) ::::::::::0: 146 | ## sub:e:4096:1:7017ADCEF65C2036:1418637307:1503660203:::::s::::::23: 147 | ## fpr:::::::::5242013F02AFC851B1C736B87017ADCEF65C2036: 148 | ## sub:e:4096:1:2E1AC68ED40814E0:1418637398:1503660390:::::s::::::23: 149 | ## fpr:::::::::BA1EE421BBB45263180E1FC72E1AC68ED40814E0: 150 | ## sub:r:4096:1:2D000988589839A3:1418637546::::::s::::::23: 151 | ## fpr:::::::::05FA44253F6C19A8B7F518D42D000988589839A3: 152 | ## sub:e:4096:1:D1483FA6C3C07136:1472037984:1535109984:::::s::::::23: 153 | ## fpr:::::::::A4300A6BC93C0877A4451486D1483FA6C3C07136: 154 | ## sub:u:4096:1:EB774491D9FF06E2:1527369844:1599945844:::::s::::::23: 155 | ## fpr:::::::::110775B5D101FB36BC6C911BEB774491D9FF06E2: 156 | 157 | local gpg_bash_lib_internal_key_fingerprint_output gpg_bash_lib_internal_first_three 158 | local gpg_bash_lib_internal_fingerprint_without_collons gpg_bash_lib_internal_key_file_path 159 | local gpg_bash_lib_internal_fingerprint_final 160 | gpg_bash_lib_internal_key_file_path="$1" 161 | gpg_bash_lib_internal_key_fingerprint_output="$( \ 162 | timeout \ 163 | --kill-after="$gpg_bash_lib_input_verify_kill_after" "$gpg_bash_lib_input_verify_timeout_after" \ 164 | gpg \ 165 | --batch \ 166 | --no-options \ 167 | --homedir "$gpg_bash_lib_input_temp_folder" \ 168 | --with-colons \ 169 | --fixed-list-mode \ 170 | --with-fingerprint \ 171 | --import-options show-only,import-minimal \ 172 | --import \ 173 | "$gpg_bash_lib_internal_key_file_path" \ 174 | )" 175 | while read -r -d $'\n' gpg_bash_lib_internal_line; do 176 | gpg_bash_lib_internal_first_three="${gpg_bash_lib_internal_line:0:3}" 177 | if [ ! "$gpg_bash_lib_internal_first_three" = "fpr" ]; then 178 | continue 179 | fi 180 | ## Example gpg_bash_lib_internal_line: 181 | ## fpr:::::::::916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA: 182 | gpg_bash_lib_internal_fingerprint_without_collons="${gpg_bash_lib_internal_line//:/}" 183 | ## Example gpg_bash_lib_internal_fingerprint_without_collons: 184 | ## fpr916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA 185 | gpg_bash_lib_internal_fingerprint_final="${gpg_bash_lib_internal_fingerprint_without_collons/fpr/}" 186 | ## Example gpg_bash_lib_internal_fingerprint_final: 187 | ## 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA 188 | break 189 | done < <( echo "$gpg_bash_lib_internal_key_fingerprint_output" ) 190 | echo "$gpg_bash_lib_internal_fingerprint_final" 191 | } 192 | 193 | gpg_bash_lib_function_alright_maybe() { 194 | trap "gpg_bash_lib_function_error_handler" ERR 195 | if [ "$gpg_bash_lib_output_alright_status" = "false" ]; then 196 | return 0 197 | fi 198 | if [ ! "$gpg_bash_lib_output_goodsig_status" = "true" ]; then 199 | gpg_bash_lib_output_alright_status="false" 200 | return 0 201 | fi 202 | if [ ! "$gpg_bash_lib_output_validsig_status" = "true" ]; then 203 | gpg_bash_lib_output_alright_status="false" 204 | return 0 205 | fi 206 | gpg_bash_lib_output_alright_status="true" 207 | } 208 | 209 | gpg_bash_lib_function_import_keys_to_temp_dir() { 210 | trap "gpg_bash_lib_function_error_handler" ERR 211 | 212 | test -d "$gpg_bash_lib_input_key_import_dir" 213 | 214 | if shopt -q nullglob ; then 215 | gpg_bash_lib_internal_disable_nullglob="false" 216 | else 217 | gpg_bash_lib_internal_disable_nullglob="true" 218 | shopt -s nullglob 219 | fi 220 | if shopt -q dotglob ; then 221 | gpg_bash_lib_internal_disable_dotglob="false" 222 | else 223 | gpg_bash_lib_internal_disable_dotglob="true" 224 | shopt -s dotglob 225 | fi 226 | 227 | local gpg_bash_lib_internal_key 228 | 229 | for gpg_bash_lib_internal_key in "$gpg_bash_lib_input_key_import_dir/"*; do 230 | local gpg_bash_lib_internal_key_file_name 231 | gpg_bash_lib_internal_key_file_name="$(basename "$gpg_bash_lib_internal_key")" 232 | if [ "$gpg_bash_lib_internal_key_file_name" = "placeholder" ]; then 233 | continue 234 | fi 235 | ## Using --ignore-time-conflict, because otherwise 236 | ## check "gpg --import"'s exit code would exit with a non-zero return code 237 | ## if key import failed (such as code 1, see example below). 238 | ## Example: 239 | ## gpg: key 63FEE659 was created 119604046 seconds in the future (time warp or clock problem) 240 | ## Therefore we ignore time conflicts, because a clock sanity check will be done later. 241 | gpg_bash_lib_output_gpg_import_output="$( \ 242 | gpg \ 243 | --batch \ 244 | --no-options \ 245 | --ignore-time-conflict \ 246 | --homedir "$gpg_bash_lib_input_temp_folder" \ 247 | --import "$gpg_bash_lib_internal_key" \ 248 | 2>&1 \ 249 | )" 250 | gpg_bash_lib_internal_primary_key_fingerprint="$(gpg_bash_lib_function_key_file_to_first_primary_fingerprint "$gpg_bash_lib_internal_key")" 251 | echo "$gpg_bash_lib_internal_primary_key_fingerprint:6:" | \ 252 | gpg \ 253 | --batch \ 254 | --no-options \ 255 | --ignore-time-conflict \ 256 | --homedir "$gpg_bash_lib_input_temp_folder" \ 257 | --import-ownertrust \ 258 | 1>/dev/null \ 259 | 2>/dev/null 260 | done 261 | 262 | if [ "$gpg_bash_lib_internal_disable_nullglob" = "true" ]; then 263 | shopt -u nullglob 264 | fi 265 | if [ "$gpg_bash_lib_internal_disable_dotglob" = "true" ]; then 266 | shopt -u dotglob 267 | fi 268 | } 269 | 270 | gpg_bash_lib_function_verify() { 271 | trap "gpg_bash_lib_function_error_handler" ERR 272 | 273 | rm --force "$gpg_bash_lib_internal_gpg_verify_status_fd_file" 274 | 275 | test -f "$gpg_bash_lib_input_data_file" 276 | test -f "$gpg_bash_lib_input_sig_file" 277 | 278 | ## Up to 30 minutes lenient about slow clocks by default. 279 | [ -n "$gpg_bash_lib_input_slow_clock_lenient_up_to_seconds" ] || gpg_bash_lib_input_slow_clock_lenient_up_to_seconds="$(( 30 * 60 ))" 280 | gpg_bash_lib_output_slow_clock_lenient_up_to_pretty_output="$(gpg_bash_lib_function_displaytime "$gpg_bash_lib_input_slow_clock_lenient_up_to_seconds")" 281 | 282 | ## One month has 2592000 seconds. 283 | ## (60 [seconds] * 60 [minutes] * 24 [hours] * 30 [days]) 284 | gpg_bash_lib_internal_month_has_seconds="2592000" 285 | [ -n "$gpg_bash_lib_input_maximum_age_in_seconds" ] || gpg_bash_lib_input_maximum_age_in_seconds="$gpg_bash_lib_internal_month_has_seconds" 286 | gpg_bash_lib_output_maximum_age_pretty_output="$(gpg_bash_lib_function_displaytime "$gpg_bash_lib_input_maximum_age_in_seconds")" 287 | 288 | ## {{ Dry Run 289 | 290 | ## Dry run of gpg --fingerprint for more pretty 291 | ## gpg_bash_lib_output_gpg_verify_output that does not contain the trustdb 292 | ## related messages on first run of gpg. 293 | 294 | local gpg_bash_lib_internal_gpg_fingerprint_pid 295 | 296 | timeout \ 297 | --kill-after="$gpg_bash_lib_input_verify_kill_after" "$gpg_bash_lib_input_verify_timeout_after" \ 298 | gpg \ 299 | --batch \ 300 | --no-options \ 301 | --homedir "$gpg_bash_lib_input_temp_folder" \ 302 | --fingerprint \ 303 | >/dev/null \ 304 | 2>&1 \ 305 | & 306 | 307 | gpg_bash_lib_internal_gpg_fingerprint_pid="$!" 308 | if wait "$gpg_bash_lib_internal_gpg_fingerprint_pid" ; then 309 | gpg_bash_lib_output_gpg_fingerprint_exit_code="0" 310 | else 311 | gpg_bash_lib_output_gpg_fingerprint_exit_code="$?" 312 | fi 313 | 314 | if [ ! "$gpg_bash_lib_output_gpg_fingerprint_exit_code" = "0" ]; then 315 | error "Dry run of 'gpg --fingerprint' failed!" 316 | fi 317 | 318 | ## }} 319 | 320 | local gpg_bash_lib_internal_gpg_verify_pid 321 | 322 | timeout \ 323 | --kill-after="$gpg_bash_lib_input_verify_kill_after" "$gpg_bash_lib_input_verify_timeout_after" \ 324 | gpg \ 325 | --batch \ 326 | --no-options \ 327 | --ignore-time-conflict \ 328 | --with-fingerprint \ 329 | --status-file "$gpg_bash_lib_internal_gpg_verify_status_fd_file" \ 330 | --homedir "$gpg_bash_lib_input_temp_folder" \ 331 | --verify-options show-notations \ 332 | --verify "$gpg_bash_lib_input_sig_file" \ 333 | "$gpg_bash_lib_input_data_file" \ 334 | > "$gpg_bash_lib_internal_gpg_verify_output_file" \ 335 | 2>&1 \ 336 | & 337 | 338 | gpg_bash_lib_internal_gpg_verify_pid="$!" 339 | if wait "$gpg_bash_lib_internal_gpg_verify_pid" ; then 340 | gpg_bash_lib_output_gpg_verify_exit_code="0" 341 | else 342 | gpg_bash_lib_output_gpg_verify_exit_code="$?" 343 | fi 344 | 345 | ## `timeout` returns: 346 | ## - 124 if sigterm was sufficient 347 | ## - 137 if needed to use kill. 348 | 349 | gpg_bash_lib_output_gpg_verify_output="$(cat "$gpg_bash_lib_internal_gpg_verify_output_file")" || true 350 | } 351 | 352 | gpg_bash_lib_function_parse_status_file() { 353 | trap "gpg_bash_lib_function_error_handler" ERR 354 | 355 | test -f "$gpg_bash_lib_internal_gpg_verify_status_fd_file" 356 | 357 | gpg_bash_lib_output_gpg_verify_status_fd_output="$(cat "$gpg_bash_lib_internal_gpg_verify_status_fd_file")" 358 | 359 | ## See also: /usr/share/doc/gnupg/DETAILS.gz 360 | 361 | ## Example gpg_bash_lib_internal_gpg_verify_status_fd_file: 362 | ## [GNUPG:] SIG_ID xl52dwvbkcu7YkXw6Zv/PUhexUk 2015-01-15 1421344751 363 | ## [GNUPG:] GOODSIG CB8D50BB77BB3C48 Patrick Schleizer 364 | ## [GNUPG:] NOTATION_NAME issuer-fpr@notations.openpgp.fifthhorseman.net 365 | ## [GNUPG:] NOTATION_DATA 6E979B28A6F37C43BE30AFA1CB8D50BB77BB3C48 366 | ## [GNUPG:] NOTATION_NAME file@name 367 | ## [GNUPG:] NOTATION_DATA a 368 | ## [GNUPG:] VALIDSIG 6E979B28A6F37C43BE30AFA1CB8D50BB77BB3C48 2015-01-15 1421344751 0 4 0 1 10 00 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA 369 | ## [GNUPG:] TRUST_ULTIMATE 370 | 371 | ## Another gpg_bash_lib_internal_gpg_verify_status_fd_file:: 372 | ## [GNUPG:] ERRSIG 9C131AD3713AAEEF 1 10 00 1381635738 9 373 | ## [GNUPG:] NO_PUBKEY 9C131AD3713AAEEF 374 | 375 | ## Another gpg_bash_lib_internal_gpg_verify_status_fd_file:: 376 | ## [GNUPG:] KEYEXPIRED 1607731200 377 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 378 | ## [GNUPG:] KEYEXPIRED 1607731200 379 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 380 | ## [GNUPG:] KEYEXPIRED 1607731200 381 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 382 | ## [GNUPG:] SIG_ID Tk/VeQa7RTYC/8JwlICrAFEi5es 2015-01-27 1422383418 383 | ## [GNUPG:] KEYEXPIRED 1607731200 384 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 385 | ## [GNUPG:] KEYEXPIRED 1607731200 386 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 387 | ## [GNUPG:] EXPKEYSIG 8D6648AA636E1951 auto generated test key for unit test 388 | ## [GNUPG:] NOTATION_NAME file@name 389 | ## [GNUPG:] NOTATION_DATA test-file 390 | ## [GNUPG:] KEYEXPIRED 1607731200 391 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 392 | ## [GNUPG:] KEYEXPIRED 1607731200 393 | ## [GNUPG:] SIGEXPIRED deprecated-use-keyexpired-instead 394 | ## [GNUPG:] VALIDSIG 8A2EEB750FD937F70828D5628D6648AA636E1951 2015-01-27 1422383418 0 4 0 1 2 00 8BC6714D5654D0813BBAB42F818A9682FE742EFD' 395 | 396 | ## KEYEXPIRED -> not useful as per gnupg documentation DETAILS file 397 | ## SIGEXPIRED -> deprecated as per gnupg documentation DETAILS file 398 | 399 | ## Sanity test. 400 | if grep -i "BADSIG\|EXPSIG\|EXPKEYSIG\|REVKEYSIG\|ERRSIG\|NODATA\|UNEXPECTED\|NO_PUBKEY\|NO_SECKEY\|ERROR" "$gpg_bash_lib_internal_gpg_verify_status_fd_file" >/dev/null 2>/dev/null; then 401 | gpg_bash_lib_output_validsig_status="false" 402 | gpg_bash_lib_output_alright_status="false" 403 | return 0 404 | fi 405 | 406 | local gpg_bash_lib_internal_line gpg_bash_lib_internal_trust_ultimate 407 | gpg_bash_lib_internal_trust_ultimate="false" 408 | while read -r -d $'\n' gpg_bash_lib_internal_line; do 409 | true "gpg_bash_lib_internal_line: $gpg_bash_lib_internal_line" 410 | local one two three four five 411 | read -r one two three four five _ <<< "$gpg_bash_lib_internal_line" 412 | true "one: $one | two: $two | three: $three | four: $four | five: $five" 413 | if [ ! "$one" = "[GNUPG:]" ]; then 414 | ## XXX: Are there cases where gnupg exits 0, but status messages still 415 | ## do not start with [GNUPG:]? 416 | error "gpg_bash_lib_internal_line did not start with '[GNUPG:]'!" 417 | fi 418 | if [ "$two" = "GOODSIG" ]; then 419 | gpg_bash_lib_output_goodsig_status="true" 420 | fi 421 | if [ "$two" = "VALIDSIG" ]; then 422 | gpg_bash_lib_output_validsig_status="true" 423 | gpg_bash_lib_output_fingerprint_in_hex="$three" 424 | gpg_bash_lib_output_signed_on_unixtime="$five" 425 | fi 426 | if [ "$two" = "NOTATION_NAME" ]; then 427 | gpg_bash_lib_internal_notation_name="$three" 428 | fi 429 | if [ "$two" = "NOTATION_DATA" ]; then 430 | gpg_bash_lib_output_notation[$gpg_bash_lib_internal_notation_name]="$three" 431 | fi 432 | if [ "$two" = "TRUST_ULTIMATE" ]; then 433 | gpg_bash_lib_internal_trust_ultimate="true" 434 | fi 435 | if printf '%s\n' "$two" | grep -i "TRUST_" >/dev/null 2>/dev/null; then 436 | ## Stop parsing after first signature. Multiple signatures within a 437 | ## a single file are not yet implemented. And would be difficult to 438 | ## implement, because gpg does not provide a separator for multiple 439 | ## signatures, see: 440 | ## https://lists.gnupg.org/pipermail/gnupg-users/2015-March/053253.html 441 | break 442 | fi 443 | done < "$gpg_bash_lib_internal_gpg_verify_status_fd_file" 444 | unset gpg_bash_lib_internal_line 445 | 446 | ## Sanity test. 447 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 448 | if [ ! "$gpg_bash_lib_internal_trust_ultimate" = "true" ]; then 449 | error "gpg_bash_lib_internal_trust_ultimate not set to 'true'!" 450 | fi 451 | fi 452 | 453 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 454 | if [ "$gpg_bash_lib_output_signed_on_unixtime" = "" ]; then 455 | error "gpg_bash_lib_output_signed_on_unixtime is empty!" 456 | fi 457 | fi 458 | 459 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 460 | ## Thanks to: 461 | ## http://mywiki.wooledge.org/BashFAQ/054 462 | if [[ "$gpg_bash_lib_output_signed_on_unixtime" != *[!0-9]* ]]; then 463 | true "'$gpg_bash_lib_output_signed_on_unixtime' is strictly numeric." 464 | else 465 | error "gpg_bash_lib_output_signed_on_unixtime is NOT strictly numeric, it is: $gpg_bash_lib_output_signed_on_unixtime" 466 | fi 467 | fi 468 | 469 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 470 | gpg_bash_lib_output_signed_on_date="$(date --utc --date "@$gpg_bash_lib_output_signed_on_unixtime" "+%B %d %H:%M:%S UTC %Y")" 471 | fi 472 | 473 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 474 | if [ "${gpg_bash_lib_output_notation["file@name"]}" = "" ]; then 475 | true "\${gpg_bash_lib_output_notation["file@name"]} is unset." 476 | gpg_bash_lib_output_file_name_tampering="missing" 477 | if [ "$gpg_bash_lib_input_file_name_enforce" = "true" ]; then 478 | gpg_bash_lib_output_alright_status="false" 479 | fi 480 | else 481 | true "\${gpg_bash_lib_output_notation["file@name"]} is set to: ${gpg_bash_lib_output_notation["file@name"]}" 482 | if [ "$(basename "$gpg_bash_lib_input_data_file")" = "${gpg_bash_lib_output_notation["file@name"]}" ]; then 483 | gpg_bash_lib_output_file_name_tampering="false" 484 | else 485 | gpg_bash_lib_output_file_name_tampering="true" 486 | if [ "$gpg_bash_lib_input_file_name_enforce" = "true" ]; then 487 | gpg_bash_lib_output_alright_status="false" 488 | fi 489 | fi 490 | fi 491 | else 492 | gpg_bash_lib_output_file_name_tampering="missing" 493 | gpg_bash_lib_output_alright_status="false" 494 | fi 495 | } 496 | 497 | gpg_bash_lib_function_process() { 498 | trap "gpg_bash_lib_function_error_handler" ERR 499 | 500 | gpg_bash_lib_output_current_unixtime="$(date +%s)" 501 | gpg_bash_lib_output_current_time="$(date --utc "+%B %d %H:%M:%S UTC %Y")" 502 | 503 | gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime="$(( $gpg_bash_lib_output_signed_on_unixtime - $gpg_bash_lib_output_current_unixtime ))" 504 | gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty="$(gpg_bash_lib_function_displaytime "$gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime")" 505 | 506 | gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime="$(( $gpg_bash_lib_output_current_unixtime - $gpg_bash_lib_output_signed_on_unixtime ))" 507 | gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty="$(gpg_bash_lib_function_displaytime "$gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime")" 508 | 509 | gpg_bash_lib_output_in_future_in_seconds="$(( $gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime - $gpg_bash_lib_input_maximum_age_in_seconds ))" 510 | gpg_bash_lib_output_in_future_pretty_output="$(gpg_bash_lib_function_displaytime "$gpg_bash_lib_output_in_future_in_seconds")" 511 | 512 | if [ "$gpg_bash_lib_output_current_unixtime" -le "$gpg_bash_lib_output_signed_on_unixtime" ]; then 513 | if [ "$gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime" -lt "$gpg_bash_lib_input_slow_clock_lenient_up_to_seconds" ]; then 514 | gpg_bash_lib_output_freshness_status="true" 515 | gpg_bash_lib_output_freshness_detail="lenient" 516 | gpg_bash_lib_output_freshness_msg="\ 517 | - Freshness: Signature is not yet valid. 518 | - valid-max: Signatures are valid up to $gpg_bash_lib_output_maximum_age_pretty_output. 519 | - Signature Creation Date: $gpg_bash_lib_output_signed_on_date 520 | - Current System Date : $gpg_bash_lib_output_current_time 521 | - Local System Clock: Your clock might be slow. (Could be at least $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty slow.) 522 | - Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty before current time. 523 | - Leniency: Ignoring this, because it still is within range. 524 | Valid up to gpg_bash_lib_output_slow_clock_lenient_up_to_pretty_output $gpg_bash_lib_output_slow_clock_lenient_up_to_pretty_output before." 525 | gpg_bash_lib_function_alright_maybe 526 | return 0 527 | else 528 | gpg_bash_lib_output_freshness_status="false" 529 | gpg_bash_lib_output_freshness_detail="slow" 530 | gpg_bash_lib_output_freshness_msg="\ 531 | - Freshness: Signature is not yet valid. 532 | - valid-max: Signatures are valid up to $gpg_bash_lib_output_maximum_age_pretty_output. 533 | - Signature Creation Date: $gpg_bash_lib_output_signed_on_date 534 | - Current System Date : $gpg_bash_lib_output_current_time 535 | - Local System Clock: Your clock might be slow. (Could be at least $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty slow.) 536 | - Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_signed_on_unixtime_minus_current_unixtime_pretty before current time." 537 | gpg_bash_lib_output_alright_status="false" 538 | return 0 539 | fi 540 | elif [ "$gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime" -ge "$gpg_bash_lib_input_maximum_age_in_seconds" ]; then 541 | gpg_bash_lib_output_freshness_status="false" 542 | gpg_bash_lib_output_freshness_detail="outdated" 543 | gpg_bash_lib_output_freshness_msg="\ 544 | - Freshness: Signature is no longer valid (outdated). 545 | - valid-max: Signatures are valid up to $gpg_bash_lib_output_maximum_age_pretty_output. 546 | - Signature Creation Date: $gpg_bash_lib_output_signed_on_date 547 | - Current System Date : $gpg_bash_lib_output_current_time 548 | - Local System Clock: Your clock might be fast. (Could be at least $gpg_bash_lib_output_in_future_pretty_output fast.) 549 | - Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty ago. 550 | - Extra: It might have been forgotten to refresh the signature (invalid since $gpg_bash_lib_output_in_future_pretty_output)." 551 | gpg_bash_lib_output_alright_status="false" 552 | return 0 553 | else 554 | gpg_bash_lib_output_freshness_status="true" 555 | gpg_bash_lib_output_freshness_detail="current" 556 | gpg_bash_lib_output_freshness_msg="\ 557 | - Freshness: Signature is current. 558 | - valid-max: Signatures are valid up to $gpg_bash_lib_output_maximum_age_pretty_output. 559 | - Signature Creation Date: $gpg_bash_lib_output_signed_on_date 560 | - Current System Date : $gpg_bash_lib_output_current_time 561 | - Local System Clock: Your clock seems okay. 562 | - Relative Signature Creation Time: According to your system clock, signature was created $gpg_bash_lib_output_current_unixtime_minus_signed_on_unixtime_pretty ago." 563 | gpg_bash_lib_function_alright_maybe 564 | return 0 565 | fi 566 | } 567 | 568 | gpg_bash_lib_function_diagnostic_message() { 569 | trap "gpg_bash_lib_function_error_handler" ERR 570 | 571 | gpg_bash_lib_output_diagnostic_message="\ 572 | gpg_bash_lib_internal_gpg_verify_status_fd_file: $gpg_bash_lib_internal_gpg_verify_status_fd_file 573 | gpg_bash_lib_internal_gpg_verify_output_file: $gpg_bash_lib_internal_gpg_verify_output_file 574 | gpg_bash_lib_output_gpg_import_output: 575 | $gpg_bash_lib_output_gpg_import_output 576 | gpg_bash_lib_output_gpg_verify_output: 577 | $gpg_bash_lib_output_gpg_verify_output 578 | gpg_bash_lib_output_gpg_verify_status_fd_output: 579 | $gpg_bash_lib_output_gpg_verify_status_fd_output" 580 | } 581 | 582 | gpg_bash_lib_function_cleanup() { 583 | trap "gpg_bash_lib_function_error_handler" ERR 584 | 585 | if [ "$gpg_bash_lib_input_cleanup" = "true" ]; then 586 | if [ -e "$gpg_bash_lib_internal_gpg_verify_status_fd_file" ]; then 587 | rm --force "$gpg_bash_lib_internal_gpg_verify_status_fd_file" 588 | fi 589 | if [ -d "$gpg_bash_lib_input_temp_folder" ]; then 590 | rm --force --recursive "$gpg_bash_lib_input_temp_folder" 591 | fi 592 | fi 593 | } 594 | 595 | gpg_bash_lib_function_deinit() { 596 | trap "gpg_bash_lib_function_error_handler" ERR 597 | 598 | if [ "$gpg_bash_lib_internal_disable_pipefail" = "true" ]; then 599 | true "$FUNCNAME: pipefail has been enabled, disabling it for deinit." 600 | set +o pipefail 601 | else 602 | true "$FUNCNAME: pipefail was enabled, leaving it as is for deinit." 603 | fi 604 | 605 | if [ "$gpg_bash_lib_internal_enable_errtrace" = "true" ]; then 606 | true "$FUNCNAME: errtrace has been disabled, enabling it for deinit." 607 | set -o errtrace 608 | else 609 | true "$FUNCNAME: errtrace was disabled, leaving it as is for deinit." 610 | fi 611 | 612 | true "$FUNCNAME: restoring previously existing trap." 613 | trap "$gpg_bash_lib_internal_existing_trap" ERR 614 | } 615 | 616 | gpg_bash_lib_function_end() { 617 | gpg_bash_lib_function_diagnostic_message 618 | gpg_bash_lib_function_cleanup 619 | gpg_bash_lib_function_deinit 620 | } 621 | 622 | gpg_bash_lib_function_main_verify() { 623 | gpg_bash_lib_function_init 624 | gpg_bash_lib_function_sanity_tests 625 | gpg_bash_lib_function_variables 626 | gpg_bash_lib_function_import_keys_to_temp_dir 627 | gpg_bash_lib_function_verify 628 | if [ ! "$gpg_bash_lib_output_gpg_verify_exit_code" = "0" ]; then 629 | gpg_bash_lib_function_end 630 | return 0 631 | fi 632 | gpg_bash_lib_function_parse_status_file 633 | if [ ! "$gpg_bash_lib_output_validsig_status" = "true" ]; then 634 | gpg_bash_lib_function_end 635 | return 0 636 | fi 637 | gpg_bash_lib_function_process 638 | gpg_bash_lib_function_end 639 | } 640 | -------------------------------------------------------------------------------- /usr/libexec/gpg-bash-lib/modules.d/50_helper: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | gpg_bash_lib_function_displaytime_helper() { 7 | trap "gpg_bash_lib_function_error_handler" ERR 8 | if [ "$1" = "1" ]; then 9 | echo " " 10 | fi 11 | } 12 | 13 | gpg_bash_lib_function_displaytime() { 14 | trap "gpg_bash_lib_function_error_handler" ERR 15 | ## Thanks to Stephane Gimenez! 16 | ## http://unix.stackexchange.com/a/27014/49297 17 | ## Modified by Patrick Schleizer. 18 | local T D H M S X 19 | T="$1" 20 | D="$((T/60/60/24))" 21 | H="$((T/60/60%24))" 22 | M="$((T/60%60))" 23 | S="$((T%60))" 24 | X="0" 25 | [[ "$D" -gt "0" ]] && printf "$(gpg_bash_lib_function_displaytime_helper "$X")%d days" "$D" && X="1" || true 26 | [[ "$H" -gt "0" ]] && printf "$(gpg_bash_lib_function_displaytime_helper "$X")%d hours" "$H" && X="1" || true 27 | [[ "$M" -gt "0" ]] && printf "$(gpg_bash_lib_function_displaytime_helper "$X")%d minutes" "$M" && X="1" || true 28 | [[ "$S" -gt "0" ]] && printf "$(gpg_bash_lib_function_displaytime_helper "$X")%d seconds" "$S" && X="1" || true 29 | #[[ "$D" -gt "0" || "$H" -gt "0" || "$M" -gt "0" || "$S" -gt "0" ]] && printf 'and ' 30 | true 31 | } 32 | -------------------------------------------------------------------------------- /usr/libexec/gpg-bash-lib/source_all: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | if [ "$gpg_bash_lib_input_script_source_dir" = "" ]; then 7 | if [ -d "./usr/libexec/gpg-bash-lib/modules.d" ]; then 8 | gpg_bash_lib_input_script_source_dir="./usr/libexec/gpg-bash-lib/modules.d" 9 | elif [ -d "/usr/libexec/gpg-bash-lib/modules.d" ]; then 10 | gpg_bash_lib_input_script_source_dir="/usr/libexec/gpg-bash-lib/modules.d" 11 | else 12 | error "ERROR: $0: variable gpg_bash_lib_input_script_source_dir is unset and could not be auto detected!" 13 | return 0 14 | fi 15 | else 16 | if [ ! -d "$gpg_bash_lib_input_script_source_dir" ]; then 17 | error "ERROR: $0: variable gpg_bash_lib_input_script_source_dir set to $gpg_bash_lib_input_script_source_dir but folder does not exist!" 18 | return 0 19 | fi 20 | fi 21 | 22 | for gpg_bash_lib_internal_script_source_file in "$gpg_bash_lib_input_script_source_dir/"*; do 23 | if [ -x "$gpg_bash_lib_internal_script_source_file" ]; then 24 | ## If the last character is a ~, ignore that file, 25 | ## because it was created by some editor, 26 | ## which creates backup files. 27 | if [ "${gpg_bash_lib_internal_script_source_file: -1}" = "~" ]; then 28 | true "Skipping $gpg_bash_lib_internal_script_source_file, because backup file." 29 | continue 30 | fi 31 | ## Skipping files such as .dpkg-old and .dpkg-dist. 32 | if printf '%s\n' "$gpg_bash_lib_internal_script_source_file" | grep ".dpkg-" >/dev/null 2>/dev/null; then 33 | true "Skipping $gpg_bash_lib_internal_script_source_file, because .dpkg file." 34 | continue 35 | fi 36 | bash -n "$gpg_bash_lib_internal_script_source_file" 37 | source "$gpg_bash_lib_internal_script_source_file" 38 | else 39 | true "Skipping $gpg_bash_lib_internal_script_source_file, because not executable." 40 | fi 41 | done 42 | -------------------------------------------------------------------------------- /usr/share/doc/gpg-bash-lib/examples/get-bitcoin-keys/bitcoind_signing_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kicksecure/gpg-bash-lib/84642ce3b5db14ff988fdef4c3384d655cfdb9d7/usr/share/doc/gpg-bash-lib/examples/get-bitcoin-keys/bitcoind_signing_graph.png -------------------------------------------------------------------------------- /usr/share/doc/gpg-bash-lib/examples/one: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | your_script_begin() { 7 | echo "$FUNCNAME: ..." 8 | } 9 | 10 | verification() { 11 | echo "$FUNCNAME: BEGIN" 12 | gpg_bash_lib_input_key_import_dir="/usr/share/gpg-bash-lib/misc/gpg-test-pub-key.d" 13 | gpg_bash_lib_input_file_name_enforce="true" 14 | gpg_bash_lib_input_cleanup="true" 15 | gpg_bash_lib_input_data_file="/usr/share/gpg-bash-lib/misc/test-files/test-file" 16 | gpg_bash_lib_input_sig_file="/usr/share/gpg-bash-lib/misc/test-files/test-file.asc" 17 | 18 | source "/usr/libexec/gpg-bash-lib/source_all" 19 | 20 | gpg_bash_lib_function_main_verify 21 | 22 | echo "$FUNCNAME: END" 23 | } 24 | 25 | your_script_output() { 26 | echo "$FUNCNAME: BEGIN" 27 | echo "\ 28 | gpg_bash_lib_output_failure_status: $gpg_bash_lib_output_failure_status 29 | gpg_bash_lib_output_gpg_verify_exit_code: $gpg_bash_lib_output_gpg_verify_exit_code 30 | gpg_bash_lib_output_validsig_status: $gpg_bash_lib_output_validsig_status 31 | gpg_bash_lib_output_fingerprint_in_hex: $gpg_bash_lib_output_fingerprint_in_hex 32 | gpg_bash_lib_output_signed_on_unixtime: $gpg_bash_lib_output_signed_on_unixtime 33 | gpg_bash_lib_output_signed_on_date: $gpg_bash_lib_output_signed_on_date 34 | gpg_bash_lib_output_notation[$"file@name"]: ${gpg_bash_lib_output_notation[$"file@name"]} 35 | gpg_bash_lib_output_file_name_tampering: $gpg_bash_lib_output_file_name_tampering 36 | gpg_bash_lib_output_freshness_status: $gpg_bash_lib_output_freshness_status 37 | gpg_bash_lib_output_freshness_detail: $gpg_bash_lib_output_freshness_detail 38 | gpg_bash_lib_output_freshness_msg: 39 | $gpg_bash_lib_output_freshness_msg 40 | gpg_bash_lib_output_alright_status: $gpg_bash_lib_output_alright_status" 41 | echo "$FUNCNAME: END" 42 | } 43 | 44 | your_script_begin 45 | verification 46 | your_script_output 47 | -------------------------------------------------------------------------------- /usr/share/doc/gpg-bash-lib/examples/one_annotated: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | ## Do some stuff in your script. Such as downloading files, you wish to verify. 7 | your_script_begin() { 8 | echo "$FUNCNAME: ..." 9 | } 10 | 11 | ## The actual verification function. Let gpg-bash-lib do the heavy lifting. 12 | verification() { 13 | echo "$FUNCNAME: BEGIN" 14 | 15 | ## Set a few variables, that gpg-bash-lib will read. 16 | gpg_bash_lib_input_key_import_dir="/usr/share/gpg-bash-lib/misc/gpg-test-pub-key.d" 17 | gpg_bash_lib_input_file_name_enforce="true" 18 | gpg_bash_lib_input_cleanup="true" 19 | gpg_bash_lib_input_data_file="/usr/share/gpg-bash-lib/misc/test-files/test-file" 20 | gpg_bash_lib_input_sig_file="/usr/share/gpg-bash-lib/misc/test-files/test-file.asc" 21 | 22 | ## Source gpg-bash-lib, so functions provided by it become available to your 23 | ## script. You could also do the sourcing at any earlier point at your 24 | ## convenience. 25 | source "/usr/libexec/gpg-bash-lib/source_all" 26 | 27 | ## Run gpg-bash-lib to let it do the verification for you. 28 | gpg_bash_lib_function_main_verify 29 | 30 | echo "$FUNCNAME: END" 31 | } 32 | 33 | your_script_output() { 34 | echo "$FUNCNAME: BEGIN" 35 | 36 | ## This is an example on how you can access variables, that gpg-bash-lib has 37 | ## set for you. There are more variables available. Those are listed in 38 | ## the documentation. 39 | 40 | echo "\ 41 | gpg_bash_lib_output_failure_status: $gpg_bash_lib_output_failure_status 42 | gpg_bash_lib_output_gpg_verify_exit_code: $gpg_bash_lib_output_gpg_verify_exit_code 43 | gpg_bash_lib_output_validsig_status: $gpg_bash_lib_output_validsig_status 44 | gpg_bash_lib_output_fingerprint_in_hex: $gpg_bash_lib_output_fingerprint_in_hex 45 | gpg_bash_lib_output_signed_on_unixtime: $gpg_bash_lib_output_signed_on_unixtime 46 | gpg_bash_lib_output_signed_on_date: $gpg_bash_lib_output_signed_on_date 47 | gpg_bash_lib_output_notation[$"file@name"]: ${gpg_bash_lib_output_notation[$"file@name"]} 48 | gpg_bash_lib_output_file_name_tampering: $gpg_bash_lib_output_file_name_tampering 49 | gpg_bash_lib_output_freshness_status: $gpg_bash_lib_output_freshness_status 50 | gpg_bash_lib_output_freshness_detail: $gpg_bash_lib_output_freshness_detail 51 | gpg_bash_lib_output_freshness_msg: 52 | $gpg_bash_lib_output_freshness_msg 53 | gpg_bash_lib_output_alright_status: $gpg_bash_lib_output_alright_status" 54 | 55 | echo "$FUNCNAME: END" 56 | } 57 | 58 | your_script_begin 59 | verification 60 | your_script_output 61 | -------------------------------------------------------------------------------- /usr/share/doc/gpg-bash-lib/examples/verify_bitcoind: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## See the file COPYING for copying conditions. 4 | 5 | # This is an example showing how gpg-bash can be used to validate the signatures of the Bitcoin Core source code. 6 | # This script assumes that you have already downloaded trusted public keys and saved them to $bitcoind_keys_folder 7 | # getting trustworthy gpg keys are thus outside the scope of this script (for testing purposes some keys are provided as 8 | # a convenience but you should find independent ways of verifying them, dont trust the keys included here blindly). 9 | # You can specify keys that you trust (that must verify) and in addition to these specify a number of additional keys 10 | # that must also verify. You can also include keys 11 | 12 | # Settings 13 | bitcoind_version='22.0' 14 | bitcoind_folder="/usr/share/gpg-bash-lib/examples/bitcoind-${bitcoind_version}" 15 | bitcoind_keys_folder='/usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d' 16 | bitcoind_SHA256_file="${bitcoind_folder}/SHA256SUMS" 17 | bitcoind_sig_file="${bitcoind_folder}/SHA256SUMS.asc" 18 | 19 | # Key trust settings 20 | # The verification will fail unless all keys listed in $bitcoind_trusted_key_hashes check out 21 | # The script will ignore verifying keys listed in $bitcoind_untrusted_key_hashes 22 | # From the remaining keys (all keys - trusted keys - untrusted keys) at least $bitcoind_min_confirm number 23 | # of keys needs to check out 24 | bitcoind_trusted_key_hashes=('152812300785C96444D3334D17565732E08E5E41' 'D1DBF2C4B96F2DEBF4C16654410108112E7EA81F' 'CFB16E21C950F67FA95E558F2EEB9F5CC09526C1') 25 | bitcoind_untrusted_key_hashes=('0CCBAAFD76A2ECE2CCD3141DE2FFD5B1D88CA97D') 26 | bitcoind_min_confirm=4 27 | 28 | 29 | # Output deciding variables (not settings) 30 | declare -a trusted_used=() 31 | declare -a confirmed_used=() 32 | trusted=0 33 | confirmed=0 34 | total=0 35 | 36 | 37 | # Downloads a file if it does not already exist, exits if the download fails 38 | # Usage: 39 | # download URL FOLDER FILENAME 40 | download() { 41 | # Download source code (unless it already exists) 42 | if [ ! -f "$2"/"$3" ]; then 43 | 44 | # Check that the download succeeded 45 | if ! wget -q --https-only "$1" --directory-prefix "$2"/; then 46 | echo " Could not download $1" 47 | exit 1 48 | else 49 | echo " Downloaded $2/$3" 50 | fi 51 | else 52 | echo " Using existing $2/$3" 53 | fi 54 | } 55 | 56 | 57 | # Checks if a value exists in array 58 | # Usage: 59 | # containsElement $value "${array[@]}" 60 | # https://stackoverflow.com/a/8574392 61 | containsElement () { 62 | local e match="$1" 63 | shift 64 | for e; do [[ "$e" == "$match" ]] && return 0; done 65 | return 1 66 | } 67 | 68 | 69 | ## Download source code 70 | bitcoind_begin() { 71 | echo "${FUNCNAME[0]}: BEGIN" 72 | 73 | # Create folder for the bitcoind files 74 | mkdir --parents $bitcoind_folder 75 | chmod --recursive 700 $bitcoind_folder 76 | test -d $bitcoind_folder 77 | 78 | echo "Downloading source files" 79 | 80 | download https://bitcoincore.org/bin/bitcoin-core-${bitcoind_version}/bitcoin-${bitcoind_version}-x86_64-linux-gnu.tar.gz \ 81 | $bitcoind_folder \ 82 | bitcoin-${bitcoind_version}-x86_64-linux-gnu.tar.gz 83 | 84 | download https://bitcoincore.org/bin/bitcoin-core-${bitcoind_version}/SHA256SUMS \ 85 | $bitcoind_folder \ 86 | SHA256SUMS 87 | 88 | download https://bitcoincore.org/bin/bitcoin-core-${bitcoind_version}/SHA256SUMS.asc \ 89 | $bitcoind_folder \ 90 | SHA256SUMS.asc 91 | 92 | echo "Verifying archive checksum" 93 | ( 94 | cd $bitcoind_folder || exit 1 95 | if ! sha256sum --status --ignore-missing --check SHA256SUMS; then 96 | echo " File integrity check failed" >&2 97 | exit 1 98 | else 99 | echo " Checksum OK" 100 | fi 101 | ) 102 | 103 | source "/usr/libexec/gpg-bash-lib/source_all" 104 | 105 | echo "${FUNCNAME[0]}: END" 106 | } 107 | 108 | 109 | ## Split the .asc file into the individual signatures and verify each 110 | bitcoind_verification() { 111 | echo "${FUNCNAME[0]}: BEGIN" 112 | 113 | sig="" 114 | started=true 115 | i=0 116 | while read -r line; do 117 | if [ "$line" = "-----BEGIN PGP SIGNATURE-----" ]; then 118 | started=true 119 | elif [ "$line" = "-----END PGP SIGNATURE-----" ]; then 120 | started=false 121 | # add ending 122 | sig="${sig}${line} 123 | " 124 | verify_signature $i "$sig" 125 | sig="" 126 | i=$((i+1)) 127 | fi 128 | if [ "$started" = true ]; then 129 | sig="${sig}${line} 130 | " 131 | fi 132 | done < $bitcoind_sig_file 133 | 134 | echo "${FUNCNAME[0]}: END" 135 | } 136 | 137 | 138 | # shellcheck disable=SC2034 139 | verify_signature() { 140 | echo "${FUNCNAME[0]}: BEGIN" 141 | 142 | # Save the output in a temporary signature file containing only one signature 143 | tmp_signature_file=$(mktemp /tmp/verify_bitcoind.XXXXXX) 144 | echo "$2" > "$tmp_signature_file" 145 | 146 | ## Set up gpg-bash 147 | gpg_bash_lib_input_key_import_dir=$bitcoind_keys_folder 148 | gpg_bash_lib_input_file_name_enforce="false" 149 | gpg_bash_lib_input_cleanup="true" 150 | gpg_bash_lib_input_data_file=$bitcoind_SHA256_file # We are actually not verifying the archive but the only the SHA256SUMS file here 151 | gpg_bash_lib_input_sig_file=$tmp_signature_file 152 | 153 | ## Run gpg-bash to let it do the verification for you. 154 | gpg_bash_lib_function_main_verify 155 | 156 | rm "$tmp_signature_file" 157 | 158 | bitcoind_check_output 159 | 160 | echo "${FUNCNAME[0]}: END" 161 | } 162 | 163 | 164 | bitcoind_check_output() { 165 | echo "${FUNCNAME[0]}: BEGIN" 166 | 167 | # Check if it is among our untrusted keys, if it is we just move on and dont count it either towards a failure or success: 168 | # shellcheck disable=SC2154 169 | if containsElement "$gpg_bash_lib_output_fingerprint_in_hex" "${bitcoind_untrusted_key_hashes[@]}"; then 170 | echo "Ignoring untrusted key." 171 | else 172 | 173 | # Check if the signature was validated 174 | if [ "$gpg_bash_lib_output_validsig_status" = "true" ]; then 175 | echo "Signature by key $gpg_bash_lib_output_fingerprint_in_hex was validated OK" 176 | 177 | # Check if it is one of our trusted keys: 178 | if containsElement "$gpg_bash_lib_output_fingerprint_in_hex" "${bitcoind_trusted_key_hashes[@]}"; then 179 | 180 | # Check that one key is not used to sign multiple times 181 | if ! containsElement "$gpg_bash_lib_output_fingerprint_in_hex" "${trusted_used[@]}"; then 182 | echo "One of the trusted keys was verified." 183 | trusted_used+=("$gpg_bash_lib_output_fingerprint_in_hex") 184 | trusted=$((trusted+1)) 185 | else 186 | echo "Verification failed: One of the trusted keys was used to sign multiple times." 187 | exit 1 188 | fi 189 | else 190 | 191 | # Check that one key is not used to sign multiple times 192 | if ! containsElement "$gpg_bash_lib_output_fingerprint_in_hex" "${confirmed_used[@]}"; then 193 | echo "One of the normal keys was verified." 194 | confirmed_used+=("$gpg_bash_lib_output_fingerprint_in_hex") 195 | confirmed=$((confirmed+1)) 196 | else 197 | echo "Verification failed: One of the trusted keys was used to sign multiple times." 198 | exit 1 199 | fi 200 | fi 201 | else 202 | echo "Signature by key $gpg_bash_lib_output_fingerprint_in_hex could not be validated" 203 | fi 204 | fi 205 | total=$((total+1)) 206 | echo "${FUNCNAME[0]}: END" 207 | } 208 | 209 | 210 | bitcoind_decide() { 211 | 212 | # Check each of the specified trusted key hashes 213 | for hash in "${bitcoind_trusted_key_hashes[@]}" 214 | do 215 | # And make sure that it exists in the array containing the verified hashes 216 | if ! containsElement "$hash" "${trusted_used[@]}"; then 217 | echo "Verification failed: One of the trusted signers keys ($hash) was not among the verified keys" 218 | exit 1 219 | fi 220 | done 221 | 222 | if [ "$confirmed" -ge "$bitcoind_min_confirm" ]; then 223 | 224 | not_verified=$((total-confirmed-trusted)) 225 | 226 | # Loop through the trusted keys and verify that each of them were actually used in the verification 227 | echo "Verification successful" 228 | echo " $((confirmed+trusted))/$total signatures validated ($not_verified signatures could not be verified)" 229 | echo " Found valid signatures from all $trusted trusted keys" 230 | echo " In addition $confirmed valid signatures was found (minimum $bitcoind_min_confirm required)" 231 | exit 0 232 | else 233 | echo "Verification failed: Could only confirm $confirmed signatures ($bitcoind_min_confirm required)" 234 | exit 1 235 | fi 236 | } 237 | 238 | # Run the script 239 | bitcoind_begin 240 | bitcoind_verification 241 | bitcoind_decide 242 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/0AD83877C1F0CD1EE9BD660AD7CC770B81FD22A8.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 39 | rqEJY/UCTz56bzIi739Ehfe6QgrHN9w/n+s= 40 | =pE0b 41 | -----END PGP PUBLIC KEY BLOCK----- 42 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/152812300785C96444D3334D17565732E08E5E41.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | mQINBFT4snkBEACx90Wf5XLo1Xv09p81eaOXc+8bbkSYzqx3ThDNUPRzjYpex9A9 4 | 8FxfBenAykD3EgYuBTco4cbn7Dw11ppyXUw0VjWaagnnAVGxt3SDeY3ADwPss6xg 5 | 78FZXxT06xSHZXq1X6pOqhwTAnx3VGx+tR/A2DCsX0vHE6IVThZqyUq2Ei2C0Chc 6 | od8y6JZ1CGNzlRkEgL9A0Zp0If6Uq4tXFxnLL6PtiS1b9V5rNfCSC7l99kIkG5oy 7 | +SPsGRwVqTE2kqtuzkt9qVn6v8KKoZr0BY4IO3KMfJJ4eidOkB+OZK9REEQguDvv 8 | tJfkF2HcMYa1efvQObyvVIfS5gxs7+kcSJxgDVZI5YxRV1OOfI7+w3EW3G+bPBQF 9 | gSBwEaLbD+udr9lDZ4NZc7vTeoZtYVNZ+EQtG+6I9GzxJwEgO5LIwZ3//vh/R4iy 10 | z9W91r7TrlkHUuOGg1hXMCI9sRa65NJtP4BWD0xO07zDKj0JHzeyKwgxB/ixZF2V 11 | kc8EzJSKzRfr+638BMXONcf6NW8n6qIlJT2U2qIwiixjM8AUujGKb8DEgU1vIAn9 12 | 7esOhceOtU/6iLuJrlK+TzMe97NoZCtt6ktmiAp8fu6l9uk3mr8JYLzIMtK+Asf4 13 | np5YLizABwbt9gEretnGpHrdKMN88mPYwsLjjCh9wiM0bHZNL52JQRkt3QARAQAB 14 | tDNBbmRyZXcgQ2hvdyAoT2ZmaWNpYWwgTmV3IEtleSkgPGFjaG93MTAxQGdtYWls 15 | LmNvbT6JAlYEEwEIAEACGwMFCwkIBwMFFQoJCAsEFgIBAAIeAQIXgAIZARYhBBUo 16 | EjAHhclkRNMzTRdWVzLgjl5BBQJiHghqBQkPBolxAAoJEBdWVzLgjl5BLawQAKnI 17 | GSjaAqIERGHg+ueTP2lJsU0yTAdwdy1T6Bye/KiQ29L/UdGkItzdDNMFTwvq3/yS 18 | aYtL1ocTrb7xZXzh3nmwmCfFfAIIauQ8dfzcxeLEt9qVY8OF2B9M75JU/eainv0Y 19 | aWQgpNsWw1I3TpmbnZLY5vtK2vyncgqRpt1Wu6pADFiBpI2jhDoTUYqdP5qDWNPj 20 | fy4wbu1Ae/AnTLW4OkU5JAJNwR3RTAtNHzT5p5IiwXbe6bvnMJag2bztRjCYF5ZI 21 | pt1FUaboJsVv/JG1IF70bxmlA9nCNJlj0WIj/56egiAHy1M4awCBBrN6gsgx0AFx 22 | //Ty5K7gQ0oBr0kCukbJq1lFprBL82bFgK63E4zrZjrBxauZWQMNS1ZBwZip/H3l 23 | q83FRELU7oarKxAA3DRjDzF3yKDInKYyyntE9bNGtwyEGDtJbTdVRD3L6dNwdkYD 24 | 25VNllpfs4IMpI5PcaZSSpZCN2oW0SkRg1HuadXm50kgCP07Vdz3MBO2qij6jA8S 25 | 1AXYF5Ti79NPA37Ysqkw1vjX71wkrud896wp2LPOXcYTsNlQxaFaN2arOMm1wO5W 26 | hi1O+NyaWgaVLAZ3jvWGB7rKGcHO0u/2Thg7d0Wt2W65usb2h540tBrXoeQhgKCT 27 | zCb63dUBX7fJdqZqIAilkFVE8sTiOgj0k81iQc+WiQIcBBABAgAGBQJanx26AAoJ 28 | ENMAEW4ch1o9OE0QAImTRE13m50jSwBJmbgfvI4FbF6RZumhZdZ4JpgVIL2hPF4m 29 | TzmOeQc9LiJE22Jy6V0mPbRBTM+lMbQoMNJkNfGRBzYtSdd0JNXilkBRiGwWxbzt 30 | vwVap3qP2ew+CXGE89QxR+QpX1AC4yWBr5YeQsNFw2UtS3cCvT3FaCMMexag9dBd 31 | mKxzAAd7vc4qS36MxKO9kejesojymoYVebmxIPHLwy+IkvBBhiRUerBJ7TVBkspd 32 | cjMMONI4xR+isE8QHvkYe3a1l223V8mwXXYUW1A+R+fnNJi7/yRR0OkOKU3czpyV 33 | hHN9/ddKplTAR7FJJvHvrw4nEYXCj9rwDOT+HjKvU/mj2UFpKLyBQ+gqBheju3V+ 34 | We3uoK5XylDRqZR6pIHiMu8EisG7kJzXKLaNH31V4CW/Vc/kCfnjaT+sV1ABrsdY 35 | NkCsUw7RESfxPBlUxMh0eSgJh3jUqZat/UGhW6ae2/JfUPcRqB31KYqlQM0VoOUd 36 | 0Y/gA04m0yM5d4xVDbJxbBFWw+w4RDO92gxfrrW96SDpnEH8mlQpUUzWH/+C34gK 37 | +Sf/FuEDZBDrGOL6KoBjFMbRZ16bVMJm9zm/ZUYIWtYORjhzYaR8AzZs0V4YgJkE 38 | RYmoeGnkne6YUNsCz/Wfsl0WSvSsJ//R4QQUaaX2cKEnelWZ44MmcI0iREj7iQIz 39 | BBMBCgAdFiEE7ZvfetalXiMuhFJCV/+b28wwEAkFAlqgIYkACgkQV/+b28wwEAl2 40 | FBAApWM4mBpeaVYa2KRovhu0huF9S7lmfzluUqg4BDHQ8/q4xgHFWd6ZNuPwVK0+ 41 | 9PVGMqiq4WqnbqACgLR/+FM+9sXZ9PTyqPnF2wj9ey7k1wa/3zwT0nZuODrnp2mm 42 | HfpxcNgFqayeNV+L3bGxpcK+WI5iKqO0qkW8DhXuz8BUm71sPKgX6rBpXS3k6yR1 43 | hfI+gkjbQwkcTCtU+u8RN0eV4bWWo0dkRuoqXjtshyIBLhDVZ170aSJvY8X5uOYa 44 | 34n+/0CQYQqAfHUA+tH3PDPZs5K5zo0EAR7csYGLJM1Ze8LTFovtfgfYx0uOa3F6 45 | eeZitrOYR+owLw3mzxb+qCr3ZHZpy3IYGGklMjdAxxT0cI9H1Cej76z7x90p6FHl 46 | ewXotl6mVmSHujyxci+H7t+hGiaYRzkdqEcSeCuI8DBApCyBuBbWmACfCAEWFL50 47 | kI8l9AEm7+4ZKVcVnBSYJNuwNw3dwuxZayXHjNlY9RH4WS1f/j0iDQaVOf+WCp8k 48 | /pCmLKtcZ3t73M6ZILfB3Fw8i6EvcEEo/9ltk9RJwTNq3Ld8Xt14kATgzFkiAnk1 49 | 4/rFp7/kXVieNcNzJXyIn8LpsJa1bDIARKwtiG8d9d8/zMTX8jv2O93fg/rW17zN 50 | xb32HNpACtsSS1Je97oP8dO/q1aV7zuQcUY4KKGCZicj6e+JAjMEEwEIAB0WIQTE 51 | Kv98YbPkShRUzTVXr3YtszUzIgUCWqF1+AAKCRBXr3YtszUzIiYaD/9MweVIHS4c 52 | qaENniCoEISt57Hbs/QpaNjf5kDGiPGWk4KDzG8P+k4FZvJOnJNHxOiDZCHK+byJ 53 | f9yHOmLT/L1DeEPvH9sWI0PEET1IGnQxIofleVvzLgv54c7oFE6OBQX17VV/mMBr 54 | Ge6yqqaEqq9AzaTELqEKOWQezopv/k7OhW9twWkrco7fxcohfhU++eZPyBfGJG1n 55 | 5dQbRKvklcoecJn/jn7yCDE51WHaOLU8w29ovjFBvcrSGB1/YZSbe7bY3lyjhNod 56 | ZIYbghaeTzpkYfW1HIDo44TlHwiGdx8SxI1K2RmSJ32Oihxar9XP370wUPQoBczS 57 | CSqwfTNYi2moZQIS+/UOdUk+/K1KmvK+hzcAv2obtOFGfiN3Kr/2QocaBuifDPsK 58 | UbM5moJV8ZiWdDrtQ279k0qrU9by1eL4efA/3D4/4UbDFo6d9kPO2FWO8PGJuzsW 59 | ciY5uv2YZg8BxvVXlXalkGWLw/qPVGYj5/TVvlQXp0WtqTi/Or5dmTc+ZfDNZmSH 60 | aqJ2P5xjUGKbhoRJLvs8+dYLZJzwW6oP6nXILl9Cy/tUgb8FHSYanVnIDG4YrzUJ 61 | 3iVMCPQX6OCvg1Ku98DYQ3QPV4qRVjmU6yFOQaO9qEIXoESNuc0XIhAISZqPjRHO 62 | KnLkjdyDHQ9L4QSwZqhVxO90f7Ik/vTjIokEMwQSAQgAHRYhBORjqT9fMRfu3mxz 63 | Fr0ClCQh9IifBQJcBRZgAAoJEL0ClCQh9IifkTggAKfcQxU5EIvjRH5QYDs6vGlz 64 | P60lTXb+LYop9AVEcR+F3i+PxfTBEHsIBqiPC5thO8vnjXkSM04mHArt4XjMGBMz 65 | I7162CHeDrJX1y4rk0skyNx/T2tdMNJAZQ27oncVkmWr4Mv/8O1krGU+zCjaC73H 66 | nNXufvTvda8Xo9ItXQWqWR8m5WvIL+5zRB+LnpldMp636cEJwTyihZaSne+k4LBA 67 | pQBdJxKW4m6uGgQC1wtyp6s1Pt+rJo4MU7uhlangs+J2p2/Fr8s2B/CCdiTRq/IY 68 | 2Gj6W99b906+9yuEFJ1JvciQwqqCqutRLam0/StCpmYI0Flv2uuUrulI1DLJX2jc 69 | 9gb8QkaQWkj97/ct/JJo0aBKbuxBfI+2vCWT4P/3ssrON4MN6kQfk8E7tTxTQnjK 70 | es7GHGr1Yu6b4doxeHeirT1qIHSforZxHC4d51niFLCW4IIsfLSHJVIsN6DKfTVI 71 | z1//y54YNfdHJzmabQQZjuSjukrmrSoleXHvL/wP6BjgJWWOfhsWZaJtYkx2Mrkg 72 | uQDYSHgyw7ReckQ+8thBpMGDP9LMSXPOVTR2xKIao7vcVJk5w2pavxPh7Jd+ScgB 73 | O2Bae+P7gY596tQdL1Q2XEZzWNHFQp5iUZ6KLmHTIPU/S41NoetGIkDml5b1K0d6 74 | G5qN5478ClVeW4tX8ELVPYu/BfrFtA1mCczcMvaoXwfDMHO+BRTbYqd3DANoHo58 75 | /JisRt46ZvacUpJecGeAX9agaMtFe6ZqmSOW3Lb1XRvtGfCgxxzi1HbTbQxcV4rD 76 | r7m0bpN8ujEQlfC+oQVWlVyPFigU/vKiwGB9khbz7bru/hu0qCP1oEqudxwWPSSP 77 | Y8McSKzeKOgHYRGOBpXxXR41+Q/SOI++wI1oQCneDvx6PHABxwIkVvSkjTLKMZEE 78 | y29zkalCEGKmx8qZBusOWPxc4Wtc4jiqxVquKrL96h2AxIyxH0Gu85nJBOe9Hhjx 79 | we84WpcNaOMPSFo5o6CWSjr+sn0xTmG5epzq/kDxfaA65cjuVhyIKE4z9L4/aXre 80 | xzazKSoQIgSVkt16F6edg1v3PPg8jzpe/D1SmM7evBpoLNc0qAhWJ5kXqMo1Bcae 81 | IHoztYxAAkhIQ8lhoom2lJ0nRAgU68ueh2/47UzeKt4RsZsqXn2MoLXMmC0anqNd 82 | d0Fi0e1W23XSIwT5P27cD7f68+oswfjIIwCdLMY2OYBfayv69tw4v/GRWS+aALj+ 83 | UQKn2v6+nJRTUrU5ts1U4ncMsAcUaCztm8bQXNK2hrxFVHGJiX57GnNvfy9tRubL 84 | Ku+lCxV76oEkzOSlJtd7hqvF8XPiLm52RnHOTcDfljxl3RWRrNQPZtcJQmQjCBSJ 85 | AjMEEAEKAB0WIQTR2/LEuW8t6/TBZlRBAQgRLn6oHwUCXPp2QAAKCRBBAQgRLn6o 86 | H0f8D/9FXmXVhh9HomwMrE7/+B6qOLxCIiAjT3hnGhjBPuw/TusApt1ry6x8m5xY 87 | rID0K4Ez39vc2I3XPdtg4vuXuiHsXVOJNOh3KgKp2azVypDgpN5ONlztbX0oA9eA 88 | fUmphx5lBL4S5tAMV7+kQSv2OnxXYrFRBF6/2kwM5/WfVUZ5M/O5ckFFXzTRqNSW 89 | pd+4OIoUj9yin/tyr9KelK6X0GaKhUE2z85L6TWUPkTAdCXyT3Wt5np5iUr/fTlz 90 | lCVThSEC6SIqtHZ8y+meTVfNJAF8yuLjYuMDSPliZ07XvFDbnWT2LNp+IAW4rEEp 91 | wSmiUymSSliTQZ1zqlPXJpcl7TiV9qyI5Lwpo6TXobZycQ96AHKKEfSc5oWFHD9r 92 | rSrGk2pG89Zy7M2+ZjOzY3f/zI6juzm0HIiEPnJdGw9mDUid1lWtAnsGM856iEuU 93 | 9GhGqFhz1+TVBPG5zprIJ1j1UVgCM59Rh/FzGt/FTj0SiyZLW+G4t7bLlVrp1wq2 94 | /oVYGo7+SJBEm1Tne6CKvkPUZgs16eMPzZDmpDTv/9hD2IEaDJQrbe+xrIOWDcb6 95 | oA8JB650jMeeQq4VMCt6iUeM8MRZb8ZlKOlEZND7esSZ+Fb4MIDZBEGSW1XyGDi+ 96 | AYrQUxQvYFGQWDVD7pwcjA0bbRdh2UA4YeZY4KYc6agoJj+GgYkCMwQQAQgAHRYh 97 | BDLuXEw/oVzK20ar5SnUvLZBb1PsBQJdApNBAAoJECnUvLZBb1Psj3gQAJeylIQn 98 | 7XKP8hojd2yayQREP+SHnX1+ygybNbW47oNzoLp2bbSwECtAf1UOzN5eNRidhiZJ 99 | UQp/bQHzuou6L9PUj0uDQlj88eVcX756wueXs1KLJ7IgnUC+pbJl/ASWAxqzdErN 100 | YIsfqvsC3o0zxYl5mE5YipP9DKLLs0jc1Ma5VUaT967pZ7nm2XuwpgCEzOftw5y0 101 | i0J+kE8puQ5usE+/vbwNtsOGqEU4GvaVnG9Czu7RyzbqCE81NsJzMeFUArAduba3 102 | aic6m6suA4Q+szIb+26TskFD+wIqvSFN9sAi+PYR9ocYQVUlg1+NJHwEyavqn304 103 | 48jCXHKlnjgZ+l4FvAiqUDQib8lURjAEbB3K+Q0QS1bSRgPKfbsVWSlX2jDCylxj 104 | IT2BcR49Mzl9snbnJuLQfnxrkNQussDxrEZYRl3BP/3rBGy5fazByvRINFWTSexa 105 | 4HTAUf4tyVW2PivReDm0ou9GHy14BcqyyOZ7qvstJkPrl6S4PXR1kiLQmpcNo/5z 106 | U4/JsndDVPxjpJgrnR6LdWwSDGOrHfVBApoAitsCOKsSfjyNjN4NC1lTtRKayFZg 107 | xa+vn2hjpBp5CGLebhXCEMy1x8jrk3y2l1yRTwg5SPg2cNDlTBQhTOUSf4FYENDX 108 | KcUMJ7xaUNhGtS0D3qKjat6eQv0w6tCQG/dSiQGzBBABCAAdFiEEWQtykmla/6W2 109 | csuy4T/BRc0/QwQFAmIsiwMACgkQ4T/BRc0/QwRoPgv/bSKD5P4mZOTzvP/H8JFG 110 | oSpLIjL9XYPPwDLTF11DYvQZ4ZvpB0PF1VMUpQ79G9QX5ovLtKKACCKJMSpI4gjN 111 | MK/xYEWbTvuDwUQqOEHQkgjbCqLkcoJbugaxHUo6UzD1hpo9I444Yril9HYhAoGN 112 | terIHltlQMPzYKJw8NkABZReI3Pq/G5NtGvbIG6AoQ1DnjKHsNjHVxw+fSzaN/hE 113 | M8vH9kHItSzDfV9mzytUsP1If83k5yq3IPMB2lpweCYVaH5LSav4TA1zdK1IAtcn 114 | h+4gqjIulLyYM3yIdvVMEnE10XzhFip+xv6yO2kYPKArkudzXGgf+oRiZBrt3Pf9 115 | ZLErJMPFM32YpepMEKyiazbR98t0nbLDLs7VlSdb6nB8IPH8cTSvHNJBagfUmeQR 116 | dCnj53KfdVif1R8OZyBNgIAT+CCAcZXXtFU2jQNkvs+4UzhmGQ80UJLHZr/T1ewQ 117 | pbMfPqeyJ6J4LScfZJlab/+BdMYcemJGg0QMa3tXaEgKtCpBbmRyZXcgQ2hvdyA8 118 | YWNob3cxMDEtZ2l0aHViQGFjaG93MTAxLmNvbT6JAlQEEwEIAD4CGwMFCwkIBwMF 119 | FQoJCAsFFgIDAQACHgECF4AWIQQVKBIwB4XJZETTM00XVlcy4I5eQQUCYh4IewUJ 120 | DwaJcQAKCRAXVlcy4I5eQTHxD/9vYI/6d4AsnAQjh9kHuvE2A2x0wESQ39JtNgLS 121 | dRKQ4QmEuT4CoO0sJQ94Ax3dRey8+Ca9lAk6vUBGxVeK9Vr/ya1bIfD/osnUhvBe 122 | pRwYWvdPXMh3/wb6uzeDXPbOcU4evQfJSIsaGZ/s9P2Mmk6PRgZuX1yPRdslDVCg 123 | p2rACo46iBvRqK/dHFLBensB5K5KhHuykAEHD8u1jGVtm1NPKKA6aZADKhO98OX5 124 | PpGJBMwHnpTr/sfBETChSQAjov7nRPy7ZLca9nJzwSGH1UiLGGPv6PGpeY57JOFS 125 | FxxhKso1NmY9yXKH9lHC3rxCR4t0mFGkVvoPSCC9QJMCsgzCtqNU+WYVkzYft92E 126 | C2y3ZF3yFZU9kHNJWh2qfjXbD22CPbnxHMh842hE1txvd42v3uV08crdnUa/4oqc 127 | MeByzwAJ7aU7R7b4ecwkMYoe/ZOhYkLVTAiQ1aTt/nDLKQvkqv1CYy0NGxL5cWzA 128 | l65kVHD6cAkDrFhYt5u4BgvANKf9V/US2n+VrIWdc25AL65rDLfIxr6KTivG7GLI 129 | u3PqR6vsk7oiFr1T9eyReFcF4AldqfFbD6881KlBKG+u4qIaFzSK0LQATsSiecuO 130 | 2pKTGPH+Q7AXp89u9fJ3c5VMhJoTlD7eY/NePmqXQh7h/xfoUeCdZoTA4jW3c8D2 131 | w6mhWIkEMwQSAQgAHRYhBORjqT9fMRfu3mxzFr0ClCQh9IifBQJcBRZ3AAoJEL0C 132 | lCQh9IifD0Yf/RiUOBTJKDwIajCWCKZOZQzAQUNtX/Bd+Vk6mghFTl23IikAZhRb 133 | BpwbxGFme9IBpzuLkEZG9YNoMKVSsUvyHgM6FVYhOL0hymfl6xgg7CNfz14Sqq1t 134 | Y9/D82wsklWWjCpQ/egtdwWFBC1yr1HxQCLSqKJ5AtTCFIyWhNRWgraNl2mIirFf 135 | yVOEVPFtESVNkKahfRMJHqtQ5UAnG5rsVrf0edtQ5NbGGhq/y1NRDzXe2lO/t/7J 136 | VLUu+lE53Be2u85H2QnHw8RpEaPL61hOgw9UOeOEXnGLHE8gsk5fEJ/LT7EHYYEI 137 | 263VrkMZ5+GZh8gV8p7a77nJdFCnktm1zvenRxamvNyaAYYGGvZQYLCI0xjuYyut 138 | TcCCthIHje1MyxyKzCJBMSXTyrGSTNgxi+Bq14EXizzUppIE/TobYXQxONOmlM9G 139 | B39/u8Ihtei9FeneC5nGUxaexk5vDlm72Xt1YN7GON/mVrk+QLG3N8QJKxmsgVEE 140 | F7QfcHz+7DNDM6Ubp/eo77B64pFBnSRSPgXHAxZ39jOt1WDjjQH5mD8mhmfDGcX0 141 | X3ramvX8Desmy/4TTCpaUAwXl/LhsREvFBF3xyFfydKE6FltWCMFJj5FuD17eGzy 142 | jbzQuPujjuawFkVqQp3K5cTIILTdff8bGHeZe98wxeR3OwBrbGwaVCmfbefO3HQL 143 | SSRT+bMWUJ69ZOAIru5iUZOV2QSvLgQfUtwyi4ElMq+pCgqAvf0mpIddcZVMwWzS 144 | wB1KNw/KGZkRjJKtKY6nu/uWR2zCCPow4+xwh4eh4NlkZD+3zBSu3EZ4TZzRQj/U 145 | 1jeyH900ixMIOf8QCpqbXuhJ/cKhn22Cw3n/NyDqvTA5wlDG+ESa6PWkSQvIe41k 146 | 54auU5hoHKbfEUmIAyofYzthd/46fvM12pSeRhBfsOEMesr4Ow3DmFWIZ149hAQM 147 | 3jybDLwfFVM4qfHOMMxwsZyGLNvT8X73dpeuabeQZnFVPsGkouFt3IhslNGFR0Q5 148 | yDXSAh3hk9h1uVAjcekxwUL9n9j+g82g36vFRR/9PstUlqMHvtE4sM2wtpoBRqNY 149 | R0HolRJsfU+cdtW5lbVHMKxs1ssU6jDOWy7XLZkjcYeg8RL1rBeO72Cx/+QDOQEt 150 | d/iDJd0hq4eqQOYipzPnzDG36+fCsGb9ROw0JE65JdrvNius06MIXWLMtM54E91T 151 | bjepBqIk7L2WYrExeH3POedonc4PVsd+N7Ye2ZNkFxh+cgQGCuO06p3qLP5uV1zp 152 | RfdjWv2+mTHhL3acb1g2Ly9TnMw2Tqbsln3hHnPd6L9NFUUnXVZDGDrDePK4DTQ0 153 | xE7DgPybwkM29PhAu8Bzp8wfwNpUbeXYwp+JAjMEEAEKAB0WIQTR2/LEuW8t6/TB 154 | ZlRBAQgRLn6oHwUCXPp2QgAKCRBBAQgRLn6oH2hoEACOP2G0v1MFihWuzVSB1H6W 155 | qtzLOOH19kuaklRvuOAqGvK8F8FhF48KVd4HH8xSCjR6jghqinyls43Uk7R1IlLM 156 | fKI/7a/3YJApSnlw0sbSwFDSbV4A3/26eL/zUutptcvZbrRwXk04lMASqr42Esix 157 | QN3/F7ieDxOCIAeJx0jOv8g4zLBEzFiqVyp90YIjnBSTLYsHQ+QWCFRipCMVHoc9 158 | SgN4/fq0z5lPWTyjz56TbvhK9kLl1qJ3d4A6Hkec2oeAK33QAOYb/9Bt9k3oXo0a 159 | fVoXVt2d+aDFaNnBzbLFjhiNA2tGGPjIWL8Mdu1+0j4Q1rTxufwkcgourOua+v6W 160 | WxuKgfbkR5lojqvw6t6/8iBiflwj6U2mrcHEymPWNIEtnlJRbEzDpvoqlIokZqto 161 | IHryF3MzDueXBDJN2cQFDztGW2amEpBjcIi3Zi6eU94U8B0rywKCpw4rEV4S81/L 162 | gqfpn+b+/eR46h2yv70+lUzfTL/5MKeeriIhM+a42CKeZG5WNHceknz7/6hzJpew 163 | xjHznCBsyhXd7VZ4wKomgEOt28Q76+D1srbNAVX+PLZbLf5chfoLcDuKt4LmEOSh 164 | 73rFIZDG7tMb10BhuyaniEbXhXmkCQiBG+gZ/XIiFN1g/lOIpU6H4qrN84kpgMU5 165 | fywnkCMuHhWdhXWPl7pWYokCMwQQAQgAHRYhBDLuXEw/oVzK20ar5SnUvLZBb1Ps 166 | BQJdApNCAAoJECnUvLZBb1PsipYP/imx4d/yEgphmSYuiqFRXs1l6cBWA0NhLf9S 167 | iKo9gshJxJR0nXZQU7P8ulDiSi9cjUwXTfyC+aj5pgMPxptTyLMyHxyYkCZo1fAU 168 | aSfQRvk6WfpmC3Os88hcaUN+p6LJsLTvKQFKWg9pUZhfwrlFPigmyDlypsrIhhU/ 169 | 8SVES47O7Pv7EVhHGmjPmLvq0qa2O/AVAN+tM1tM8g1wViEBcrQjVTm/h6bzb1y0 170 | TGyMqh1yt86LaLifvxWxuCtAzPKR857SPKYmjOmVeinKR9+HQAyhPSSfIZBA5Bf3 171 | cDiVbvR920it9LPmVsFyhOxQnNpm6Ba5ggZbNeKXAJ/CFf3RcGTY5CXcI68vtf/L 172 | AxzucqN3DbpxDdShlDTtKZ5qm1VzZvHIt9zAxa3T3tPwLPhRqtNQ5M8m0732URoM 173 | YCPvFKhxh1qT29m/mZ5CShZ1WoP+QMl/SyPLP668As3KavBcrEdlzy3zwpIkx/w3 174 | VLnovCLXT//7dlNdZZmoSsIJn/1pF+CXRHoHfaQ/DqM/EyNs/PG3BeVbeQCrPBef 175 | 1mOf/y/VGJaQPp36RbW76FB3SGZE2ii2O1003pmBS77oOOqm8psshjlV0mAbc5u3 176 | AuF37Yvjw2+HS/vxyA2OeblY4WbODMtqlJbtbroaQ7KjK8wKFuUClHnq68oihAEv 177 | QWkiizvhtClBbmRyZXcgQ2hvdyA8YWNob3cxMDEtbGlzdHNAYWNob3cxMDEuY29t 178 | PokCVAQTAQgAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBBUoEjAHhclk 179 | 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 413 | w4m2o2hRROiV3nTh+fGRZEPP4rjanMIaKA== 414 | =OpHt 415 | -----END PGP PUBLIC KEY BLOCK----- 416 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/28F5900B1BB5D1A4B6B6D1A9ED357015286A333D.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 107 | pjc/06iI1r+A93XMRcY5IIps9SRInOpGT8f0 108 | =tOut 109 | -----END PGP PUBLIC KEY BLOCK----- 110 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/590B7292695AFFA5B672CBB2E13FC145CD3F4304.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 115 | WLYnJRd1fLTnc1E= 116 | =dR55 117 | -----END PGP PUBLIC KEY BLOCK----- 118 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/637DB1E23370F84AFF88CCE03152347D07DA627C.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 140 | =CuWk 141 | -----END PGP PUBLIC KEY BLOCK----- 142 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/6E01EEC9656903B0542B8F1003DB6322267C373B.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | mQINBFrpUN8BEADcjP1oWBZF27u4sG/TXvtwUnJ18Un9J6CoduQubSjfqSdpeD7K 4 | 5LiVX2bAYzYTyN0yfzZzY7v33T0xlJLVBfeuEjNibqq6ijCTVi5pLKCD8aD9cYET 5 | 8AJ7SEt+lGU9fbr50836xmeGFuPHaVWNScReiGE9CyQHtu4xyhGgeUJRS/0wyw3h 6 | ymDJzR19pg5dI1l0P8h4LR11pUcjddyIxIHB6gTARvUAG/bVk3G+wlIUZWvbuNnz 7 | re7U0AV1VjP61zl2Byz1MU406HOaszifQ+ajs3mUJfXmJqaA/8tVITTsuaYt2oaz 8 | e6gBycMuQL/hIOyRYFwggpRvNlFCiUtq2Mu0Eg1wHdOeHTJuK7xdC8vSW4B/Va2o 9 | b2vBh0RaNHYP3oTaEom5DoOl9DRyPt6hjFuQFW8cfEHO7/stadQQ5tnGrRRK+oiK 10 | VEOlfUIOGG6HMHpqhVq2mN3b/EXuMrxIxV/lROGKY6schTh45eb4Qdu6Z4f7QCle 11 | U3rMKAMeul0TInq/nMPFjnzlUpyXMmHzaiV+HlU2ZWl4HgFeLBLgT4FPECjZgMLS 12 | FuwfgAHWwQLdOOMFNzx1JhIk864o5zg7oSYHhpc6DK2mtjHWc/G5WX8xSJz2fcEK 13 | 8whG++hb2vW33tg+rzZ4qwHJb0v+3lmd04lmn/BtrlRAMnzvoLlA/MneIQARAQAB 14 | tCBPbGl2ZXIgR3VnZ2VyIDxndWdnZXJAZ21haWwuY29tPokCTwQTAQgALAUCWulQ 15 | 3wkQjkJWWT8XdyACGwMFCR4TOAACGQEECwcJAwUVCAoCAwQWAAECABcWIQT0/HDw 16 | cxAChCTvwgqOQlZZPxd3IMZHD/94ke7ziWvo7ub52lPh36hZyLFZBq/sSozb5Le0 17 | OJBZu6V3ETzh0M3XQGAuygJcHLk300egBOyPOQNYdzH+4e8WTkNtaHFodYoqX5Ls 18 | goZ5l+IDUaCDJrrjS77nf4HzOd1ibIh4cgIPOG9Q86WQoj7eUXgpRIiPf8inzZhP 19 | GW0Cfil2DJnTmNLxfSSGCz3N6/sYLiklOlQkD8DCDKk5QNVrXISpQXmtLL2exxsW 20 | kzUrq16t2AZqbHu/Zm2zyn07YzgSYGwDWWOiXve2g7gP6P0uqVIOqizYvzDm7YF+ 21 | wcqxjoa0zQ3jIOnphkXtpfX9cVPA60vmP92KrQpM0eIl8MSBK4yYWd5nqDUzRrKv 22 | ate4d4kppc0erGv3U5Nr/kYEWUH7UdU5fLZTkZLU3MZZA+TOiFSDwjJdDFrnn34b 23 | GtjL6MGx6BUs6+227fUriMPt5csjjVcH+QA9u3ZUIl3EgzO45TXaawaNJeRbynZx 24 | QtMpEYYX/ICIhP6Ddfb304A6zPIZVUUzQsafZOPQrNB1TQRLpRw/CtLXwNTxDErM 25 | CbCs8RLvmN9Pac5p196cx4N3ZIYpu1HufbSC8XbfKf5CoWv65d7zG3ZFxR4ks/gg 26 | t+QvYPoA0Y1y4c9nHGuN4F+9SpRXOkt/AXRG65HC1Ewe4x1xagP3aCYDDp2RNWO5 27 | YjL2VrkBDQRdi0shAQgAvJbbR7MB5QKeRpZYyTjAthZCiBEPLgPFHTT3vUhN7ZMd 28 | 5BhCKijHCAM46MlJHzvvuEe3Zu/hkBdiIXG2rNZ0s0SjngnAZ8ztCJrFWhYSd69u 29 | yBUrEVmwofLsSxSBgHmsEShqnRj2NwLX5CTiwiEvYQvCUi8pbKs5YEPNwB/d4XND 30 | w/ng+acyhr0sQW8V8XNJjrV34vX86ey84YsZS5x6wX50WMkHS/zmFmYb0ehEHT3g 31 | OhzYBdT6v6OlJ9FZTJND+cr3+50TDCaoVlMZAHjvkYckP2Wo58dHksZUJ2Vxqsu2 32 | RGc/aWlK3m16C1pCqL7lN5DGRflgr2sll7ucNF+99wARAQABiQI8BBgBCgAmFiEE 33 | 9Pxw8HMQAoQk78IKjkJWWT8XdyAFAl2LSyECGyAFCQPCZwAACgkQjkJWWT8XdyCd 34 | FhAAtmV/xbSiO/C+5g+zKWuqvLzZr0bylcrNKLM2iGRZe+cAi040Y8h0eCEON3hf 35 | H8Jm8zUV3DBE51aAgem8WwuZhqNiHry7lW3YWwzbJ/SLQ1DYj/tbx7hoNGidwIPw 36 | ww/6jinyxeKxy9L8o9wopYbHazCPryCfwJIZ7oPtJhWGvnLTdgEUs3FPY5/1WXRt 37 | ZVTH/KXNmC35t2KSd6RbUBmpFH7WdpySL7oJT37tHSVcLyL05XQa+PVMUAbJ1Xpd 38 | HgB/9sQYtV7cvBgYK+0ATdpU//4e2Th/5ANgm4nBO3u5fZgmKp/Q5KDingOZQZNv 39 | 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 288 | tCPBj+WmRYB3NA/yxrOcSuDI 289 | =TIKr 290 | -----END PGP PUBLIC KEY BLOCK----- 291 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/74E2DEF5D77260B98BC19438099BAD163C70FBFA.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 50 | lMoSDHzuZx84 51 | =nU59 52 | -----END PGP PUBLIC KEY BLOCK----- 53 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/82921A4B88FD454B7EB8CE3C796C4109063D4EAF.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 50 | =ZJd6 51 | -----END PGP PUBLIC KEY BLOCK----- 52 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/9D3CC86A72F8494342EA5FD10A41BDC3F4FAFF1C.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 50 | ENTiNoMY7E4n9JJWe4GHGOhK4Mv7JU0PWw== 51 | =xvch 52 | -----END PGP PUBLIC KEY BLOCK----- 53 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/9DEAE0DC7063249FB05474681E4AED62986CD25D.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 76 | =d2GD 77 | -----END PGP PUBLIC KEY BLOCK----- 78 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/CFB16E21C950F67FA95E558F2EEB9F5CC09526C1.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 105 | =1fEC 106 | -----END PGP PUBLIC KEY BLOCK----- 107 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/bitcoind-pub-keys.d/D1DBF2C4B96F2DEBF4C16654410108112E7EA81F.gpg: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 101 | =khSe 102 | -----END PGP PUBLIC KEY BLOCK----- 103 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/gpg-test-pub-key.d/pubring.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kicksecure/gpg-bash-lib/84642ce3b5db14ff988fdef4c3384d655cfdb9d7/usr/share/gpg-bash-lib/misc/gpg-test-pub-key.d/pubring.gpg -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/test-files/test-file: -------------------------------------------------------------------------------- 1 | test 2 | 3 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/misc/test-files/test-file.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNATURE----- 2 | Version: GnuPG v1.4.12 (GNU/Linux) 3 | 4 | iQI4BAABAgAiBQJUwsCoGxSAAAAAAAkACWZpbGVAbmFtZXRlc3QtZmlsZQAKCRD9 5 | CotBcd/k5AwYD/98I+X+tL9ew+mQEoP7vQiofylvRCg/kkXZ/qF/BuBeti7qVL11 6 | gdDYzMzEmxzWiOu12+XPY8Tc1mBrXqMC7BtV/WRfsvBpp33YAJFvJEDoK/GfSdv6 7 | KPpHxbaTs4j+ka1ce94kK1jDduQuCynZ2P5u+LJY/D+WMEziwkSC4fub9rlVuhhd 8 | GessiDKKAWbd9BH/JDgPFz78AkvIIgoddFtnQEWymOyON39uw7jGaXtIQPzn3OXc 9 | oIm0ZWbNvfGTTctuKHtGew6wgqn1prjoX2u05R4dVfHPxw1gGWBC0nOSlAXzcque 10 | pcHj4TVV++kMtmGzyDs76dce89uTnFyboux2fsklN0gzppwn7yltM7GNCSIvDHEj 11 | nIk7SpBJ7D+eE6BwfrKIa9WfkkDZnZGkP0hnKe3kelc3nQdwleZ1a/FAFAKvBD/B 12 | h4Sof21QHqgpUx3/m69ri98u+ATycSjdDyvXyrCXuyYWIC9SMwX8CvFMF8/dkWcb 13 | RYqIwHiLyMjNzaovT88sH0aP2oM1tT3oRwaHuj3ga4rYzgnMcHQ9aKpv7H4ZXvQz 14 | 0vMSPd9pfxo7Lz2iy685cLgI42oaktUD5SadmrVqMBWVB/qUeXur3NA6wcuo6I65 15 | FFkoFOr3Gmf3EAXXMR56YEFx8UvwPsrSCkcPPL7ikNAnYq3wWbqGec7JJQ== 16 | =knux 17 | -----END PGP SIGNATURE----- 18 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/unit-tests/traps_and_shopts: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | ## {{{ test functions 7 | 8 | gpg_bash_lib_function_unit_test_check_error_handler() { 9 | gpg_bash_lib_unit_test_current_trap="$(trap -p ERR)" 10 | true "gpg_bash_lib_unit_test_existing_trap_original: $gpg_bash_lib_unit_test_existing_trap_original" 11 | true "gpg_bash_lib_unit_test_existing_trap_by_gpg_bash_lib: $gpg_bash_lib_unit_test_existing_trap_by_gpg_bash_lib" 12 | true "gpg_bash_lib_unit_test_current_trap : $gpg_bash_lib_unit_test_current_trap" 13 | if [ ! "$gpg_bash_lib_unit_test_existing_trap_original" = "$gpg_bash_lib_unit_test_current_trap" ]; then 14 | echo "ERROR #1 !" >&2 15 | exit 1 16 | fi 17 | if [ ! "$gpg_bash_lib_unit_test_existing_trap_by_gpg_bash_lib" = "$gpg_bash_lib_unit_test_current_trap" ]; then 18 | echo "ERROR #2 !" >&2 19 | exit 1 20 | fi 21 | } 22 | 23 | ## }}} 24 | 25 | ## {{{ setup 26 | 27 | gpg_bash_lib_function_unit_test_error_handler() { 28 | echo "$FUNCNAME ERROR #0 !" >&2 29 | exit 1 30 | } 31 | 32 | trap "gpg_bash_lib_function_unit_test_error_handler" ERR 33 | gpg_bash_lib_unit_test_existing_trap_original="$(trap -p ERR)" 34 | 35 | set -o errtrace 36 | 37 | gpg_bash_lib_mydir="$( cd "$( dirname "$0" )" && pwd )" 38 | cd "$gpg_bash_lib_mydir" 39 | cd ../../../../ 40 | 41 | ## }}} 42 | 43 | ## {{{ test 1 44 | 45 | source "./usr/libexec/gpg-bash-lib/source_all" 46 | 47 | trap "gpg_bash_lib_function_unit_test_error_handler" ERR 48 | gpg_bash_lib_unit_test_existing_trap_by_gpg_bash_lib="$(trap -p ERR)" 49 | 50 | gpg_bash_lib_function_init 51 | 52 | gpg_bash_lib_function_deinit 53 | 54 | gpg_bash_lib_function_unit_test_check_error_handler 55 | 56 | ## pipefail was not set before, it should not be set now. 57 | 58 | if test -o pipefail ; then 59 | echo "ERROR #4!" >&2 60 | exit 1 61 | fi 62 | 63 | ## }}} 64 | 65 | ## {{{ test 2 66 | 67 | set -o pipefail 68 | set -o errtrace 69 | 70 | source "./usr/libexec/gpg-bash-lib/source_all" 71 | 72 | gpg_bash_lib_function_init 73 | 74 | gpg_bash_lib_function_deinit 75 | 76 | gpg_bash_lib_unit_test_current_trap="$(trap -p ERR)" 77 | 78 | gpg_bash_lib_function_unit_test_check_error_handler 79 | 80 | ## errtrace, pipefail was set before, it should be set now. 81 | 82 | if ! test -o errtrace ; then 83 | echo "ERROR #5 !" >&2 84 | exit 1 85 | fi 86 | 87 | if ! test -o pipefail ; then 88 | echo "ERROR #6 !" >&2 89 | exit 1 90 | fi 91 | 92 | ## }}} 93 | 94 | gpg_bash_lib_function_unit_test_custom_error_handler() { 95 | true "$FUNCNAME: functional" 96 | } 97 | 98 | gpg_bash_lib_input_error_handler_extra="gpg_bash_lib_function_unit_test_custom_error_handler ; return 0" 99 | 100 | gpg_bash_lib_function_error_handler 101 | 102 | true "SUCCESS!" 103 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/unit-tests/verification: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | set -e 7 | set -o pipefail 8 | set -o errtrace 9 | 10 | gpg_bash_lib_mydir="$( cd "$( dirname "$0" )" && pwd )" 11 | cd "$gpg_bash_lib_mydir" 12 | cd ../../../../ 13 | 14 | source "./usr/libexec/gpg-bash-lib/source_all" 15 | 16 | trap "gpg_bash_lib_function_error_handler" ERR 17 | set +e 18 | 19 | gpg_bash_lib_function_unit_test_sanity_tests() { 20 | if ! command -v faketime >/dev/null ; then 21 | echo "ERROR $0: faketime not installed!" >&2 22 | exit 2 23 | fi 24 | } 25 | 26 | gpg_bash_lib_function_unit_test_genkey() { 27 | gpg_bash_lib_unit_test_homedir="$(mktemp --directory)" 28 | rm --recursive --force "$gpg_bash_lib_unit_test_homedir/gpg" 29 | mkdir --parents "$gpg_bash_lib_unit_test_homedir/gpg" 30 | chmod --recursive 700 "$gpg_bash_lib_unit_test_homedir/gpg" 31 | test -d "$gpg_bash_lib_unit_test_homedir/gpg" 32 | 33 | ## It is just a locally used test key that is discarded after testing, 34 | ## so we can use a weak key to speed up key generation. 35 | echo " 36 | Key-Type: RSA 37 | Key-Length: 1024 38 | Subkey-Type: RSA 39 | Subkey-Length: 1024 40 | Name-Real: auto generated test key for unit test 41 | Name-Email: unit@test.key 42 | Expire-Date: 2020-12-12 43 | Preferences: SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed 44 | " | faketime -f "-61d" \ 45 | gpg \ 46 | --no-options \ 47 | --no-emit-version \ 48 | --no-comments \ 49 | --display-charset utf-8 \ 50 | --personal-digest-preferences SHA512 \ 51 | --cert-digest-algo SHA512 \ 52 | --default-preference-list "SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed" \ 53 | --keyserver-options no-honor-keyserver-url \ 54 | --fixed-list-mode \ 55 | --keyid-format 0xlong \ 56 | --list-options show-uid-validity \ 57 | --sig-notation issuer-fpr@notations.openpgp.fifthhorseman.net=%g \ 58 | --no-default-keyring \ 59 | --homedir "$gpg_bash_lib_unit_test_homedir/gpg" \ 60 | --batch \ 61 | --passphrase "" \ 62 | --pinentry-mode loopback \ 63 | --gen-key 64 | } 65 | 66 | gpg_bash_lib_function_unit_test_testrun_common() { 67 | echo "------------------------------------------------------------" 68 | 69 | rm --force "$gpg_bash_lib_unit_test_homedir/test-file" 70 | rm --force "$gpg_bash_lib_unit_test_homedir/test-file.asc" 71 | 72 | echo "test" > "$gpg_bash_lib_unit_test_homedir/test-file" 73 | test -f "$gpg_bash_lib_unit_test_homedir/test-file" 74 | 75 | faketime -f "$gpg_bash_lib_unit_test_faketime" \ 76 | gpg \ 77 | --armor \ 78 | --no-options \ 79 | --homedir "$gpg_bash_lib_unit_test_homedir/gpg" \ 80 | --passphrase "" \ 81 | --pinentry-mode loopback \ 82 | --set-notation "file@name"="$(basename "$gpg_bash_lib_unit_test_homedir/test-file")" \ 83 | --detach-sign "$gpg_bash_lib_unit_test_homedir/test-file" 84 | 85 | ## Convert keybox kbx file into keyring gpg file. 86 | gpg \ 87 | --no-options \ 88 | --homedir $gpg_bash_lib_unit_test_homedir/gpg \ 89 | --export \ 90 | > "$gpg_bash_lib_unit_test_homedir/gpg/pubring.gpg" 91 | 92 | gpg_bash_lib_input_temp_folder="$(mktemp --directory)" 93 | gpg_bash_lib_input_key_import_dir="$(mktemp --directory)" 94 | cp "$gpg_bash_lib_unit_test_homedir/gpg/pubring.gpg" "$gpg_bash_lib_input_key_import_dir/" 95 | gpg_bash_lib_input_file_name_enforce="true" 96 | gpg_bash_lib_input_cleanup="true" 97 | gpg_bash_lib_input_data_file="$gpg_bash_lib_unit_test_homedir/test-file" 98 | gpg_bash_lib_input_sig_file="$gpg_bash_lib_unit_test_homedir/test-file.asc" 99 | ## gpg_bash_lib_input_error_handler_extra='error_handler "$gpg_bash_lib_output_error_handler_message"' 100 | 101 | gpg_bash_lib_function_main_verify 102 | 103 | echo "\ 104 | gpg_bash_lib_output_failure_status: $gpg_bash_lib_output_failure_status 105 | gpg_bash_lib_output_gpg_verify_exit_code: $gpg_bash_lib_output_gpg_verify_exit_code 106 | gpg_bash_lib_output_goodsig_status: $gpg_bash_lib_output_goodsig_status 107 | gpg_bash_lib_output_validsig_status: $gpg_bash_lib_output_validsig_status 108 | gpg_bash_lib_output_fingerprint_in_hex: $gpg_bash_lib_output_fingerprint_in_hex 109 | gpg_bash_lib_output_signed_on_unixtime: $gpg_bash_lib_output_signed_on_unixtime 110 | gpg_bash_lib_output_signed_on_date: $gpg_bash_lib_output_signed_on_date 111 | gpg_bash_lib_output_notation[$"file@name"]: ${gpg_bash_lib_output_notation[$"file@name"]} 112 | gpg_bash_lib_output_file_name_tampering: $gpg_bash_lib_output_file_name_tampering 113 | gpg_bash_lib_output_freshness_status: $gpg_bash_lib_output_freshness_status 114 | gpg_bash_lib_output_freshness_detail: $gpg_bash_lib_output_freshness_detail 115 | gpg_bash_lib_output_freshness_msg: 116 | $gpg_bash_lib_output_freshness_msg 117 | gpg_bash_lib_output_alright_status: $gpg_bash_lib_output_alright_status" 118 | 119 | echo "-----" 120 | 121 | if [ ! "$gpg_bash_lib_output_freshness_detail" = "$gpg_bash_lib_unit_test_expected_freshness_detail_result" ]; then 122 | echo "\ 123 | gpg_bash_lib_unit_test_faketime: $gpg_bash_lib_unit_test_faketime 124 | gpg_bash_lib_unit_test_expected_freshness_detail_result: $gpg_bash_lib_unit_test_expected_freshness_detail_result 125 | ----- 126 | ERROR!" 2>&1 127 | exit 1 128 | fi 129 | echo "\ 130 | gpg_bash_lib_unit_test_faketime: $gpg_bash_lib_unit_test_faketime 131 | gpg_bash_lib_unit_test_expected_freshness_detail_result: $gpg_bash_lib_unit_test_expected_freshness_detail_result 132 | ----- 133 | PASS!" 134 | } 135 | 136 | gpg_bash_lib_function_unit_test_testrun_1() { 137 | gpg_bash_lib_unit_test_faketime="-2d" 138 | gpg_bash_lib_unit_test_expected_freshness_detail_result="current" 139 | gpg_bash_lib_function_unit_test_testrun_common 140 | } 141 | 142 | gpg_bash_lib_function_unit_test_testrun_2() { 143 | gpg_bash_lib_unit_test_faketime="+15m" 144 | gpg_bash_lib_unit_test_expected_freshness_detail_result="lenient" 145 | gpg_bash_lib_function_unit_test_testrun_common 146 | } 147 | 148 | gpg_bash_lib_function_unit_test_testrun_3() { 149 | gpg_bash_lib_unit_test_faketime="-31d" 150 | gpg_bash_lib_unit_test_expected_freshness_detail_result="outdated" 151 | gpg_bash_lib_function_unit_test_testrun_common 152 | } 153 | 154 | gpg_bash_lib_function_unit_test_testrun_4() { 155 | gpg_bash_lib_unit_test_faketime="+31d" 156 | gpg_bash_lib_unit_test_expected_freshness_detail_result="slow" 157 | gpg_bash_lib_function_unit_test_testrun_common 158 | } 159 | 160 | #gpg_bash_lib_input_error_handler_extra='error_handler "$gpg_bash_lib_output_error_handler_message"' 161 | #non-existent 162 | 163 | gpg_bash_lib_function_unit_test_sanity_tests 164 | gpg_bash_lib_function_unit_test_genkey 165 | gpg_bash_lib_function_unit_test_testrun_1 166 | gpg_bash_lib_function_unit_test_testrun_2 167 | gpg_bash_lib_function_unit_test_testrun_3 168 | gpg_bash_lib_function_unit_test_testrun_4 169 | -------------------------------------------------------------------------------- /usr/share/gpg-bash-lib/unit_test: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright (C) 2012 - 2025 ENCRYPTED SUPPORT LLC 4 | ## See the file COPYING for copying conditions. 5 | 6 | set -e 7 | set -o pipefail 8 | set -o errtrace 9 | 10 | gpg_bash_lib_mydir="$( cd "$( dirname "$0" )" && pwd )" 11 | cd "$gpg_bash_lib_mydir" 12 | cd ../../../ 13 | 14 | if test -o xtrace ; then 15 | ## TODO: fix 16 | #bash -x usr/share/gpg-bash-lib/unit-tests/traps_and_shopts 17 | bash -x usr/share/gpg-bash-lib/unit-tests/verification 18 | else 19 | usr/share/gpg-bash-lib/unit-tests/traps_and_shopts 20 | usr/share/gpg-bash-lib/unit-tests/verification 21 | fi 22 | --------------------------------------------------------------------------------