(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/demos/maurice/example4.c

    1: /* NOCW */
    2: /*
    3:         Please read the README file for condition of use, before
    4:         using this software.
    5: 
    6:         Maurice Gittens  <mgittens@gits.nl>   January 1997
    7: 
    8: */
    9: 
   10: #include <stdio.h>
   11: #include <unistd.h>
   12: #include <fcntl.h>
   13: #include <sys/stat.h>
   14: #include <openssl/evp.h>
   15: 
   16: #define STDIN           0
   17: #define STDOUT          1
   18: #define BUFLEN           512 
   19: 
   20: static const char *usage = "Usage: example4 [-d]\n";
   21: 
   22: void do_encode(void);
   23: void do_decode(void);
   24: 
   25: int main(int argc, char *argv[])
   26: {
   27:         if ((argc == 1))       
   28:         {
   29:                 do_encode();
   30:         }      
   31:         else if ((argc == 2) && !strcmp(argv[1],"-d"))
   32:         {
   33:                 do_decode();
   34:         }
   35:         else
   36:         {
   37:                 fprintf(stderr,"%s", usage);
   38:                 exit(1);
   39:         }
   40: 
   41:         return 0;              
   42: }
   43: 
   44: void do_encode()
   45: {
   46:         char buf[BUFLEN];
   47:         char ebuf[BUFLEN+24];
   48:         unsigned int ebuflen;
   49:         EVP_ENCODE_CTX ectx;
   50:         
   51:         EVP_EncodeInit(&ectx);
   52: 
   53:         while(1)
   54:         {
   55:                 int readlen = read(STDIN, buf, sizeof(buf));
   56:         
   57:                 if (readlen <= 0)
   58:                 {
   59:                         if (!readlen)
   60:                            break;
   61:                         else
   62:                         {
   63:                                 perror("read");
   64:                                 exit(1);
   65:                         }
   66:                 }
   67: 
   68:                 EVP_EncodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
   69: 
   70:                 write(STDOUT, ebuf, ebuflen);
   71:         }
   72: 
   73:         EVP_EncodeFinal(&ectx, ebuf, &ebuflen); 
   74: 
   75:         write(STDOUT, ebuf, ebuflen);
   76: }
   77: 
   78: void do_decode()
   79: {
   80:         char buf[BUFLEN];
   81:         char ebuf[BUFLEN+24];
   82:         unsigned int ebuflen;
   83:         EVP_ENCODE_CTX ectx;
   84:         
   85:         EVP_DecodeInit(&ectx);
   86: 
   87:         while(1)
   88:         {
   89:                 int readlen = read(STDIN, buf, sizeof(buf));
   90:                 int rc;       
   91:         
   92:                 if (readlen <= 0)
   93:                 {
   94:                         if (!readlen)
   95:                            break;
   96:                         else
   97:                         {
   98:                                 perror("read");
   99:                                 exit(1);
  100:                         }
  101:                 }
  102: 
  103:                 rc = EVP_DecodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
  104:                 if (rc <= 0)
  105:                 {
  106:                         if (!rc)
  107:                         {
  108:                                 write(STDOUT, ebuf, ebuflen);
  109:                                 break;
  110:                         }
  111: 
  112:                         fprintf(stderr, "Error: decoding message\n");
  113:                         return;
  114:                 }
  115: 
  116:                 write(STDOUT, ebuf, ebuflen);
  117:         }
  118: 
  119:         EVP_DecodeFinal(&ectx, ebuf, &ebuflen); 
  120: 
  121:         write(STDOUT, ebuf, ebuflen); 
  122: }
  123: 
Syntax (Markdown)