/* *paddedmsg:02||non-zeropadbytes||00||msg
*/ staticint
pad_eme_pkcs1_v15(uint8 *data, int data_len, int res_len, uint8 **res_p)
{
uint8 *buf,
*p; int pad_len = res_len - 2 - data_len;
if (pad_len < 8) return PXE_BUG;
buf = palloc(res_len);
buf[0] = 0x02;
if (!pg_strong_random(buf + 1, pad_len))
{
pfree(buf); return PXE_NO_RANDOM;
}
/* pad must not contain zero bytes */
p = buf + 1; while (p < buf + 1 + pad_len)
{ if (*p == 0)
{ if (!pg_strong_random(p, 1))
{
px_memset(buf, 0, res_len);
pfree(buf); return PXE_NO_RANDOM;
}
} if (*p != 0)
p++;
}
int
pgp_write_pubenc_sesskey(PGP_Context *ctx, PushFilter *dst)
{ int res;
PGP_PubKey *pk = ctx->pub_key;
uint8 ver = 3;
PushFilter *pkt = NULL;
uint8 algo;
if (pk == NULL)
{
px_debug("no pubkey?\n"); return PXE_BUG;
}
algo = pk->algo;
/* *nowwritepacket
*/
res = pgp_create_pkt_writer(dst, PGP_PKT_PUBENCRYPTED_SESSKEY, &pkt); if (res < 0) goto err;
res = pushf_write(pkt, &ver, 1); if (res < 0) goto err;
res = pushf_write(pkt, pk->key_id, 8); if (res < 0) goto err;
res = pushf_write(pkt, &algo, 1); if (res < 0) goto err;
switch (algo)
{ case PGP_PUB_ELG_ENCRYPT:
res = encrypt_and_write_elgamal(ctx, pk, pkt); break; case PGP_PUB_RSA_ENCRYPT: case PGP_PUB_RSA_ENCRYPT_SIGN:
res = encrypt_and_write_rsa(ctx, pk, pkt); break;
} if (res < 0) goto err;
/* *done,signalpacketend
*/
res = pushf_flush(pkt);
err: if (pkt)
pushf_free(pkt);
return res;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.