/** * cdk_pkt_write: * @out: the output stream handle * @pkt: the packet itself * * Write the contents of @pkt into the @out stream. * Return 0 on success. **/ cdk_error_t cdk_pkt_write (cdk_stream_t out, cdk_packet_t pkt) { cdk_error_t rc; if (!out || !pkt) return CDK_Inv_Value; _cdk_log_debug ("write packet pkttype=%d\n", pkt->pkttype); switch (pkt->pkttype) { case CDK_PKT_LITERAL: rc = write_literal (out, pkt->pkt.literal, pkt->old_ctb); break; case CDK_PKT_ONEPASS_SIG: rc = write_onepass_sig (out, pkt->pkt.onepass_sig); break; case CDK_PKT_MDC: rc = write_mdc (out, pkt->pkt.mdc); break; case CDK_PKT_PUBKEY_ENC: rc = write_pubkey_enc (out, pkt->pkt.pubkey_enc, pkt->old_ctb); break; case CDK_PKT_SIGNATURE: rc = write_signature (out, pkt->pkt.signature, pkt->old_ctb); break; case CDK_PKT_PUBLIC_KEY: rc = write_public_key (out, pkt->pkt.public_key, 0, pkt->old_ctb); break; case CDK_PKT_PUBLIC_SUBKEY: rc = write_public_key (out, pkt->pkt.public_key, 1, pkt->old_ctb); break; case CDK_PKT_COMPRESSED: rc = write_compressed (out, pkt->pkt.compressed); break; case CDK_PKT_SECRET_KEY: rc = write_secret_key (out, pkt->pkt.secret_key, 0, pkt->old_ctb); break; case CDK_PKT_SECRET_SUBKEY: rc = write_secret_key (out, pkt->pkt.secret_key, 1, pkt->old_ctb); break; case CDK_PKT_USER_ID: case CDK_PKT_ATTRIBUTE: rc = write_user_id (out, pkt->pkt.user_id, pkt->old_ctb, pkt->pkttype); break; default: rc = CDK_Inv_Packet; break; } if (DEBUG_PKT) _cdk_log_debug ("write_packet rc=%d pkttype=%d\n", rc, pkt->pkttype); return rc; }
/* * Write pubkey-enc packets from the list of PKs to OUT. */ static int write_pubkey_enc_from_list (ctrl_t ctrl, PK_LIST pk_list, DEK *dek, iobuf_t out) { if (opt.throw_keyids && (PGP7 || PGP8)) { log_info(_("option '%s' may not be used in %s mode\n"), "--throw-keyids", gnupg_compliance_option_string (opt.compliance)); compliance_failure(); } for ( ; pk_list; pk_list = pk_list->next ) { PKT_public_key *pk = pk_list->pk; int throw_keyid = (opt.throw_keyids || (pk_list->flags&1)); int rc = write_pubkey_enc (ctrl, pk, throw_keyid, dek, out); if (rc) return rc; } return 0; }