| 6 |
details. |
details. |
| 7 |
|
|
| 8 |
OpenPGP data |
OpenPGP data |
| 9 |
$Id: pgpdata.c,v 1.6 2002/07/10 01:10:55 weaselp Exp $ */ |
$Id: pgpdata.c,v 1.7 2002/07/22 17:54:48 rabbi Exp $ */ |
| 10 |
|
|
| 11 |
|
|
| 12 |
#include "mix3.h" |
#include "mix3.h" |
| 20 |
int pgp_keylen(int symalgo) |
int pgp_keylen(int symalgo) |
| 21 |
{ |
{ |
| 22 |
switch (symalgo) { |
switch (symalgo) { |
| 23 |
|
#ifdef USE_AES |
| 24 |
|
case PGP_K_AES256: |
| 25 |
|
return (32); |
| 26 |
|
case PGP_K_AES192: |
| 27 |
|
return (24); |
| 28 |
|
case PGP_K_AES128: |
| 29 |
|
#endif |
| 30 |
case PGP_K_IDEA: |
case PGP_K_IDEA: |
| 31 |
case PGP_K_CAST5: |
case PGP_K_CAST5: |
| 32 |
case PGP_K_BF: |
case PGP_K_BF: |
| 34 |
case PGP_K_3DES: |
case PGP_K_3DES: |
| 35 |
return (24); |
return (24); |
| 36 |
default: |
default: |
| 37 |
return (-1); |
return (0); |
| 38 |
|
} |
| 39 |
|
} |
| 40 |
|
|
| 41 |
|
int pgp_blocklen(int symalgo) |
| 42 |
|
{ |
| 43 |
|
switch (symalgo) { |
| 44 |
|
#ifdef USE_AES |
| 45 |
|
case PGP_K_AES256: |
| 46 |
|
case PGP_K_AES192: |
| 47 |
|
case PGP_K_AES128: |
| 48 |
|
return (16); |
| 49 |
|
#endif |
| 50 |
|
case PGP_K_IDEA: |
| 51 |
|
case PGP_K_CAST5: |
| 52 |
|
case PGP_K_BF: |
| 53 |
|
case PGP_K_3DES: |
| 54 |
|
return (8); |
| 55 |
|
default: |
| 56 |
|
return (16); |
| 57 |
} |
} |
| 58 |
} |
} |
| 59 |
|
|
| 99 |
case PGP_K_IDEA: |
case PGP_K_IDEA: |
| 100 |
return (buf_ideacrypt(data, key, iv, enc)); |
return (buf_ideacrypt(data, key, iv, enc)); |
| 101 |
#endif |
#endif |
| 102 |
|
#ifdef USE_AES |
| 103 |
|
case PGP_K_AES128: |
| 104 |
|
case PGP_K_AES192: |
| 105 |
|
case PGP_K_AES256: |
| 106 |
|
return (buf_aescrypt(data, key, iv, enc)); |
| 107 |
|
#endif |
| 108 |
case PGP_K_3DES: |
case PGP_K_3DES: |
| 109 |
return (buf_3descrypt(data, key, iv, enc)); |
return (buf_3descrypt(data, key, iv, enc)); |
| 110 |
case PGP_K_BF: |
case PGP_K_BF: |
| 297 |
break; |
break; |
| 298 |
} |
} |
| 299 |
|
|
| 300 |
buf_get(p, iv, 8); |
buf_get(p, iv, pgp_blocklen(skalgo)); |
| 301 |
|
|
| 302 |
end: |
end: |
| 303 |
buf_free(salt); |
buf_free(salt); |
| 317 |
} else { |
} else { |
| 318 |
buf_appendc(out, 255); |
buf_appendc(out, 255); |
| 319 |
pgp_makesk(out, key, PGP_K_CAST5, 3, PGP_H_SHA1, pass); |
pgp_makesk(out, key, PGP_K_CAST5, 3, PGP_H_SHA1, pass); |
| 320 |
buf_setrnd(iv, 8); |
buf_setrnd(iv, pgp_blocklen(PGP_K_CAST5)); |
| 321 |
buf_cat(out, iv); |
buf_cat(out, iv); |
| 322 |
skcrypt(secret, PGP_K_CAST5, key, iv, 1); |
skcrypt(secret, PGP_K_CAST5, key, iv, 1); |
| 323 |
buf_cat(out, secret); |
buf_cat(out, secret); |
| 422 |
int thisalgo, version, skalgo; |
int thisalgo, version, skalgo; |
| 423 |
int needsym = 0, symfound = 0; |
int needsym = 0, symfound = 0; |
| 424 |
BUFFER *p1, *iv, *sk, *i, *thiskeyid; |
BUFFER *p1, *iv, *sk, *i, *thiskeyid; |
| 425 |
|
int ivlen; |
| 426 |
int csstart; |
int csstart; |
| 427 |
|
|
| 428 |
p1 = buf_new(); |
p1 = buf_new(); |
| 534 |
switch (version) { |
switch (version) { |
| 535 |
case 2: |
case 2: |
| 536 |
case 3: |
case 3: |
| 537 |
|
ivlen = pgp_blocklen(skalgo); |
| 538 |
for (j = 0; j < pgp_numsecmpi(thisalgo); j++) { |
for (j = 0; j < pgp_numsecmpi(thisalgo); j++) { |
| 539 |
unsigned char lastb[8]; |
unsigned char lastb[16]; |
| 540 |
if (mpi_get(p1, i) == -1) { |
if (mpi_get(p1, i) == -1) { |
| 541 |
keytype = -1; |
keytype = -1; |
| 542 |
goto end; |
goto end; |
| 543 |
} |
} |
| 544 |
if (j) |
assert(ivlen <= 16); |
| 545 |
{buf_clear(iv); buf_append(iv, lastb, 8);} // memcpy(iv->data, lastb, 8); |
memcpy(lastb, i->data+i->length-ivlen, ivlen); |
|
memcpy(lastb, i->data+i->length-8, 8); |
|
| 546 |
skcrypt(i, skalgo, sk, iv, DECRYPT); |
skcrypt(i, skalgo, sk, iv, DECRYPT); |
| 547 |
|
buf_clear(iv); |
| 548 |
|
buf_append(iv, lastb, ivlen); |
| 549 |
mpi_put(key, i); |
mpi_put(key, i); |
| 550 |
} |
} |
| 551 |
break; |
break; |
| 784 |
if (pass != NULL && pass->length > 0 && remail != 2) { |
if (pass != NULL && pass->length > 0 && remail != 2) { |
| 785 |
skalgo = PGP_K_IDEA; |
skalgo = PGP_K_IDEA; |
| 786 |
digest_md5(pass, dk); |
digest_md5(pass, dk); |
| 787 |
buf_setrnd(iv, 8); |
buf_setrnd(iv, pgp_blocklen(skalgo)); |
| 788 |
buf_appendc(skey, skalgo); |
buf_appendc(skey, skalgo); |
| 789 |
buf_cat(skey, iv); |
buf_cat(skey, iv); |
| 790 |
} |
} |