| 6 |
details. |
details. |
| 7 |
|
|
| 8 |
OpenPGP data |
OpenPGP data |
| 9 |
$Id: pgpdata.c,v 1.8 2002/08/03 17:08:02 weaselp Exp $ */ |
$Id: pgpdata.c,v 1.10 2002/08/15 16:52:12 weaselp Exp $ */ |
| 10 |
|
|
| 11 |
|
|
| 12 |
#include "mix3.h" |
#include "mix3.h" |
| 73 |
|
|
| 74 |
int mpi_bitcount(BUFFER *mpi) |
int mpi_bitcount(BUFFER *mpi) |
| 75 |
{ |
{ |
| 76 |
int i; |
int i, l; |
| 77 |
int l = mpi->length * 8; |
while (!mpi->data[0] && mpi->length) // remove leading zeros from mpi |
| 78 |
|
memmove(mpi->data, mpi->data+1, --mpi->length); |
| 79 |
|
l = mpi->length * 8; |
| 80 |
for (i = 7; i >= 0; i--) |
for (i = 7; i >= 0; i--) |
| 81 |
if (((mpi->data[0] >> i) & 1) == 1) { |
if (((mpi->data[0] >> i) & 1) == 1) { |
| 82 |
l -= 7 - i; |
l -= 7 - i; |
| 262 |
BUFFER *iv) |
BUFFER *iv) |
| 263 |
{ |
{ |
| 264 |
BUFFER *b; |
BUFFER *b; |
| 265 |
|
int ivlen = iv->length; |
| 266 |
|
|
| 267 |
b = buf_new(); |
b = buf_new(); |
| 268 |
buf_prepare(b, BN_num_bytes(i)); |
buf_prepare(b, BN_num_bytes(i)); |
| 269 |
b->length = BN_bn2bin(i, b->data); |
b->length = BN_bn2bin(i, b->data); |
| 270 |
buf_appendi(o, mpi_bitcount(b)); |
buf_appendi(o, mpi_bitcount(b)); |
| 271 |
if (key && key->length) |
if (key && key->length) { |
| 272 |
skcrypt(b, ska, key, iv, ENCRYPT); |
skcrypt(b, ska, key, iv, ENCRYPT); |
| 273 |
|
buf_clear(iv); |
| 274 |
|
buf_append(iv, b->data+b->length-ivlen, ivlen); |
| 275 |
|
} |
| 276 |
buf_cat(o, b); |
buf_cat(o, b); |
| 277 |
buf_free(b); |
buf_free(b); |
| 278 |
} |
} |
| 464 |
len = buf_getl(p1); |
len = buf_getl(p1); |
| 465 |
type = buf_getc(p1); |
type = buf_getc(p1); |
| 466 |
if (len) |
if (len) |
| 467 |
buf_get(p1, i, len); |
buf_get(p1, i, len-1); /* len-1 - exclude type */ |
| 468 |
else |
else |
| 469 |
buf_clear(i); |
buf_clear(i); |
| 470 |
if (type == PGP_SUB_PSYMMETRIC) |
if (type == PGP_SUB_PSYMMETRIC) |