root/diary/bufop.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. decryptds
  2. encryptds
  3. nopds

   1 /*
   2 ** Copyright (c) 2024 Amelia Campbell
   3 **
   4 ** Redistribution and use in source and binary forms, with or without
   5 ** modification, are permitted provided that the following conditions are
   6 ** met: 
   7 **
   8 **  1. Redistributions of source code must retain the above copyright
   9 **     notice, this list of conditions and the following disclaimer.
  10 **  2. Redistributions in binary form must reproduce the above copyright
  11 **     notice, this list of conditions and the following disclaimer in the
  12 **     documentation and/or other materials provided with the
  13 **     distribution.
  14 **  3. Neither the name of the copyright holder nor the names of its
  15 **     contributors may be used to endorse or promote products derived
  16 **     from this software without specific prior written permission.
  17 **
  18 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  19 ** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  20 ** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  21 ** PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  22 ** HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  24 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29 */
  30 
  31 #include <stdio.h>
  32 #include <string.h>
  33 #include <stdlib.h>
  34 #include <openssl/evp.h>
  35 
  36 #include <shared/macro.h>
  37 #include <shared/term.h>
  38 
  39 #include "encrypt.h"
  40 #include "bufop.h"
  41 
  42 /* XXX: tied to encryption format */
  43 #define BUFSZ (4096 - AES_TAG - AES_IV)
  44 
  45 unsigned char bufi[BUFSZ];
  46 unsigned char bufo[BUFSZ];
  47 
  48 void decryptds(FILE *in, FILE *out)
  49     {
  50     struct ciphertext c;
  51     size_t read;
  52     do
  53         {
  54         if (!fread(c.tag, AES_TAG, 1, in))
  55             fatal("insufficient data for aes tag (bad data?)\n");
  56         if (!fread(c.iv,  AES_IV , 1, in))
  57             fatal("insufficient data for aes iv (bad data?)\n");
  58         c.c = bufi;
  59         read = fread(c.c, 1, BUFSZ, in);
  60         ddecrypt(c.c, read, c.tag, c.iv,
  61                  (unsigned char *)password, MAXPASS, bufo);
  62         fwrite(bufo, read, 1, out);
  63         } while (read == BUFSZ);
  64     }
  65 
  66 
  67 void encryptds(FILE *in, FILE *out)
  68     {
  69     struct ciphertext c;
  70     size_t read;
  71     do
  72         {
  73         read = fread(bufi, 1, BUFSZ, in);
  74         c.c = bufo;
  75         dencrypt(bufi, read, (unsigned char *)password, MAXPASS,
  76                  c.c, c.tag, c.iv);
  77         fwrite(c.tag, AES_TAG, 1, out);
  78         fwrite(c.iv,  AES_IV,  1, out);
  79         fwrite(c.c,   read,    1, out);
  80         } while (read == BUFSZ);
  81     }
  82 
  83 
  84 void nopds(FILE *in, FILE *out)
  85     {
  86     size_t read;
  87     do
  88         {
  89         read = fread(bufi, 1, BUFSZ, in);
  90         fwrite(bufi, read, 1, out);
  91         } while (read == BUFSZ);
  92     }

/* [previous][next][first][last][top][bottom][index][help] */