@@ -988,8 +988,12 @@ init_encrypted_dst(pgp_write_handler_t *handler, pgp_dest_t *dst, pgp_dest_t *wr
988
988
bool singlepass = true ;
989
989
unsigned pkeycount = 0 ;
990
990
unsigned skeycount = 0 ;
991
- unsigned keylen;
992
- rnp_result_t ret = RNP_ERROR_GENERIC;
991
+ #if defined(ENABLE_CRYPTO_REFRESH)
992
+ bool use_v6_pkesk = false ;
993
+ bool use_v6_skesk = false ;
994
+ #endif
995
+ unsigned keylen;
996
+ rnp_result_t ret = RNP_ERROR_GENERIC;
993
997
994
998
keylen = pgp_key_size (handler->ctx ->ealg );
995
999
if (!keylen) {
@@ -1039,16 +1043,15 @@ init_encrypted_dst(pgp_write_handler_t *handler, pgp_dest_t *dst, pgp_dest_t *wr
1039
1043
skeycount = handler->ctx ->passwords .size ();
1040
1044
1041
1045
#if defined(ENABLE_CRYPTO_REFRESH)
1042
- /* in the case of PKESK (pkeycount > 0) and all keys are PKESKv6/SEIPDv2 capable, upgrade
1043
- * to AEADv2 */
1044
- if (handler->ctx ->enable_pkesk_v6 && handler-> ctx -> pkeskv6_capable () && pkeycount > 0 ) {
1045
- param-> auth_type = rnp::AuthType::AEADv2 ;
1046
- }
1046
+ /* We use v6 PKESK/SKESK with v2 SEIPD if all recipients support it
1047
+ and the variables enable_pkesk_v6 and enable_skesk_v6 are set. */
1048
+ if (handler->ctx ->aalg != PGP_AEAD_NONE ) {
1049
+ use_v6_pkesk = handler-> ctx -> enable_pkesk_v6 && handler-> ctx -> pkeskv6_capable () ;
1050
+ use_v6_skesk = handler-> ctx -> enable_skesk_v6 ;
1047
1051
1048
- /* Use SEIPDv2 for SKESK if enabled and preconditions are met */
1049
- if (handler->ctx ->enable_skesk_v6 && handler->ctx ->aalg != PGP_AEAD_NONE &&
1050
- skeycount > 0 ) {
1051
- param->auth_type = rnp::AuthType::AEADv2;
1052
+ if ((use_v6_pkesk || !pkeycount) && (use_v6_skesk || !skeycount)) {
1053
+ param->auth_type = rnp::AuthType::AEADv2;
1054
+ }
1052
1055
}
1053
1056
#endif
1054
1057
param->aalg = handler->ctx ->aalg ;
0 commit comments