]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'maint'
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 19 Apr 2015 11:42:14 +0000 (13:42 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 19 Apr 2015 11:42:14 +0000 (13:42 +0200)
1  2 
gcrypt.c

diff --combined gcrypt.c
index ad38dcb83c56920a2e40116cccf6d6382fcad0b5,6bb7452c254f550499945226ab96e4bc44c81c66..45a1c67d20da0b6d229180de92be10644a63d082
+++ b/gcrypt.c
@@@ -1,5 -1,5 +1,5 @@@
  /*
 - * Copyright (C) 2011-2013 Andre Noll <maan@systemlinux.org>
 + * Copyright (C) 2011 Andre Noll <maan@tuebingen.mpg.de>
   *
   * Licensed under the GPL v2. For licencing details see COPYING.
   */
@@@ -26,7 -26,7 +26,7 @@@ static void dump_buffer(const char *msg
  {
        int i;
  
 -      fprintf(stderr, "%s (%u bytes): ", msg, len);
 +      fprintf(stderr, "%s (%d bytes): ", msg, len);
        for (i = 0; i < len; i++)
                fprintf(stderr, "%02x ", buf[i]);
        fprintf(stderr, "\n");
@@@ -87,7 -87,7 +87,7 @@@ void init_random_seed_or_die(void
  }
  
  /** S-expression for the public part of an RSA key. */
 -#define RSA_PUBKEY_SEXP  "(public-key (rsa (n %m) (e %m)))"
 +#define RSA_PUBKEY_SEXP "(public-key (rsa (n %m) (e %m)))"
  /** S-expression for a private RSA key. */
  #define RSA_PRIVKEY_SEXP "(private-key (rsa (n %m) (e %m) (d %m) (p %m) (q %m) (u %m)))"
  
@@@ -97,7 -97,7 +97,7 @@@ static void mgf1(unsigned char *seed, s
  {
        gcry_error_t gret;
        gcry_md_hd_t handle;
 -      size_t n;;
 +      size_t n;
        unsigned char *md;
        unsigned char octet_string[4], *rp = result, *end = rp + result_len;
  
@@@ -239,6 -239,7 +239,6 @@@ static int decode_key(const char *key_f
                key[j++] = begin[i];
        }
        key[j] = '\0';
 -      //PARA_CRIT_LOG("key: %s\n", key);
        blob_size = key_size * 2;
        blob = para_malloc(blob_size);
        ret = base64_decode(key, blob, blob_size);
@@@ -274,14 -275,14 +274,14 @@@ enum asn1_types 
  /* bit 6 has value 0 */
  static inline bool is_primitive(unsigned char c)
  {
 -      return ((c & (1<<6)) == 0);
 +      return (c & (1<<6)) == 0;
  }
  
  static inline bool is_primitive_integer(unsigned char c)
  {
        if (!is_primitive(c))
                return false;
 -      return ((c & 0x1f) == ASN1_TYPE_INTEGER);
 +      return (c & 0x1f) == ASN1_TYPE_INTEGER;
  }
  
  /* Bit 8 is zero (and bits 7-1 give the length) */
@@@ -304,7 -305,7 +304,7 @@@ static int find_pubkey_bignum_offset(co
  {
        const unsigned char *p = data, *end = data + len;
  
 -      /* the whole thing istarts with one sequence */
 +      /* the whole thing starts with one sequence */
        if (*p != ASN1_TYPE_SEQUENCE)
                return -E_ASN1_PARSE;
        p++;
@@@ -428,7 -429,7 +428,7 @@@ static int find_privkey_bignum_offset(c
        if (p >= end)
                return -E_ASN1_PARSE;
  
 -      /* Skip next integer  */
 +      /* skip next integer */
        if (*p != ASN1_TYPE_INTEGER)
                return -E_ASN1_PARSE;
        p++;
@@@ -582,6 -583,7 +582,7 @@@ static int get_asn_public_key(const cha
        }
        key = para_malloc(sizeof(*key));
        key->sexp = sexp;
+       key->num_bytes = n_size;
        *result = key;
        ret = n_size;
        PARA_INFO_LOG("successfully read %u bit asn public key\n", n_size * 8);
@@@ -603,7 -605,7 +604,7 @@@ static int get_ssh_public_key(unsigned 
        size_t nr_scanned, erroff, decoded_size;
        gcry_mpi_t e = NULL, n = NULL;
  
 -      PARA_DEBUG_LOG("decoding %d byte  public rsa-ssh key\n", size);
 +      PARA_DEBUG_LOG("decoding %d byte public rsa-ssh key\n", size);
        if (size > INT_MAX / 4)
                return -ERRNO_TO_PARA_ERROR(EOVERFLOW);
        blob = para_malloc(2 * size);
@@@ -911,25 -913,11 +912,25 @@@ struct stream_cipher 
        gcry_cipher_hd_t handle;
  };
  
 -struct stream_cipher *sc_new(const unsigned char *data, int len)
 +struct stream_cipher *sc_new(const unsigned char *data, int len,
 +              bool use_aes)
  {
        gcry_error_t gret;
 -
        struct stream_cipher *sc = para_malloc(sizeof(*sc));
 +
 +      if (use_aes) {
 +              assert(len >= 2 * AES_CRT128_BLOCK_SIZE);
 +              gret = gcry_cipher_open(&sc->handle, GCRY_CIPHER_AES128,
 +                      GCRY_CIPHER_MODE_CTR, 0);
 +              assert(gret == 0);
 +              gret = gcry_cipher_setkey(sc->handle, data,
 +                      AES_CRT128_BLOCK_SIZE);
 +              assert(gret == 0);
 +              gret = gcry_cipher_setctr(sc->handle,
 +                      data + AES_CRT128_BLOCK_SIZE, AES_CRT128_BLOCK_SIZE);
 +              assert(gret == 0);
 +              return sc;
 +      }
        gret = gcry_cipher_open(&sc->handle, GCRY_CIPHER_ARCFOUR,
                GCRY_CIPHER_MODE_STREAM, 0);
        if (gret) {
@@@ -950,6 -938,39 +951,6 @@@ void sc_free(struct stream_cipher *sc
        free(sc);
  }
  
 -int sc_send_bin_buffer(struct stream_cipher_context *scc, char *buf,
 -              size_t size)
 -{
 -      gcry_error_t gret;
 -      int ret;
 -      unsigned char *tmp = para_malloc(size);
 -
 -      assert(size);
 -      gret = gcry_cipher_encrypt(scc->send->handle, tmp, size,
 -              (unsigned char *)buf, size);
 -      assert(gret == 0);
 -      ret = xwrite(scc->fd, (char *)tmp, size);
 -      free(tmp);
 -      return ret;
 -}
 -
 -int sc_recv_bin_buffer(struct stream_cipher_context *scc, char *buf,
 -              size_t size)
 -{
 -      gcry_error_t gret;
 -      ssize_t ret = recv(scc->fd, buf, size, 0);
 -
 -      if (ret < 0)
 -              ret = -ERRNO_TO_PARA_ERROR(errno);
 -      if (ret <= 0)
 -              return ret;
 -      /* perform in-place encryption */
 -      gret = gcry_cipher_encrypt(scc->recv->handle, (unsigned char *)buf, ret,
 -              NULL, 0);
 -      assert(gret == 0);
 -      return ret;
 -}
 -
  void sc_crypt(struct stream_cipher *sc, struct iovec *src, struct iovec *dst)
  {
        gcry_cipher_hd_t handle = sc->handle;