/[pkg-mixmaster]/trunk/Mix/Src/pgpdata.c
ViewVC logotype

Diff of /trunk/Mix/Src/pgpdata.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 97 by weaselp, Wed Jul 10 01:10:55 2002 UTC revision 98 by rabbi, Mon Jul 22 17:54:48 2002 UTC
# Line 6  Line 6 
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"
# Line 20  Line 20 
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:
# Line 27  int pgp_keylen(int symalgo) Line 34  int pgp_keylen(int symalgo)
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    
# Line 73  int skcrypt(BUFFER *data, int skalgo, BU Line 99  int skcrypt(BUFFER *data, int skalgo, BU
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:
# Line 265  static int getski(BUFFER *p, BUFFER *pas Line 297  static int getski(BUFFER *p, BUFFER *pas
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);
# Line 285  static void makeski(BUFFER *secret, BUFF Line 317  static void makeski(BUFFER *secret, BUFF
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);
# Line 390  int pgp_getkey(int mode, int algo, int * Line 422  int pgp_getkey(int mode, int algo, int *
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();
# Line 501  int pgp_getkey(int mode, int algo, int * Line 534  int pgp_getkey(int mode, int algo, int *
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;
# Line 749  int pgp_rsakeygen(int bits, BUFFER *user Line 784  int pgp_rsakeygen(int bits, BUFFER *user
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    }    }

Legend:
Removed from v.97  
changed lines
  Added in v.98

  ViewVC Help
Powered by ViewVC 1.1.5