~ubuntu-branches/ubuntu/precise/dropbear/precise

« back to all changes in this revision

Viewing changes to libtomcrypt/src/pk/katja/katja_encrypt_key.c

  • Committer: Bazaar Package Importer
  • Author(s): Gerrit Pape
  • Date: 2007-03-02 20:48:18 UTC
  • mfrom: (1.3.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20070302204818-ozmbou2sbyj7dus5
Tags: 0.49-1
* new upstream release, fixes
  * CVE-2007-1099: dropbear dbclient insufficient warning on hostkey
    mismatch (closes: #412899).
  * dbclient uses static "Password:" prompt instead of using the server's
    prompt (closes: #394996).
* debian/control: Suggests: openssh-client, not ssh (closes: #405686);
  Standards-Version: 3.7.2.2.
* debian/README.Debian: ssh -> openssh-server, openssh-client; remove
  'Replacing OpenSSH "sshd" with Dropbear' part, this is simply done by not
  installing the openssh-server package.
* debian/README.runit: runsvstat -> sv status.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
 
2
 *
 
3
 * LibTomCrypt is a library that provides various cryptographic
 
4
 * algorithms in a highly modular and flexible manner.
 
5
 *
 
6
 * The library is free for all purposes without any express
 
7
 * guarantee it works.
 
8
 *
 
9
 * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
 
10
 */
 
11
#include "tomcrypt.h"
 
12
 
 
13
/**
 
14
  @file katja_encrypt_key.c
 
15
  Katja PKCS-style OAEP encryption, Tom St Denis
 
16
*/  
 
17
 
 
18
#ifdef MKAT
 
19
 
 
20
/**
 
21
    (PKCS #1 v2.0) OAEP pad then encrypt
 
22
    @param in          The plaintext
 
23
    @param inlen       The length of the plaintext (octets)
 
24
    @param out         [out] The ciphertext
 
25
    @param outlen      [in/out] The max size and resulting size of the ciphertext
 
26
    @param lparam      The system "lparam" for the encryption
 
27
    @param lparamlen   The length of lparam (octets)
 
28
    @param prng        An active PRNG
 
29
    @param prng_idx    The index of the desired prng
 
30
    @param hash_idx    The index of the desired hash
 
31
    @param key         The Katja key to encrypt to
 
32
    @return CRYPT_OK if successful
 
33
*/    
 
34
int katja_encrypt_key(const unsigned char *in,     unsigned long inlen,
 
35
                          unsigned char *out,    unsigned long *outlen,
 
36
                    const unsigned char *lparam, unsigned long lparamlen,
 
37
                    prng_state *prng, int prng_idx, int hash_idx, katja_key *key)
 
38
{
 
39
  unsigned long modulus_bitlen, modulus_bytelen, x;
 
40
  int           err;
 
41
  
 
42
  LTC_ARGCHK(in     != NULL);
 
43
  LTC_ARGCHK(out    != NULL);
 
44
  LTC_ARGCHK(outlen != NULL);
 
45
  LTC_ARGCHK(key    != NULL);
 
46
  
 
47
  /* valid prng and hash ? */
 
48
  if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) {
 
49
     return err;
 
50
  }
 
51
  if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) {
 
52
     return err;
 
53
  }
 
54
  
 
55
  /* get modulus len in bits */
 
56
  modulus_bitlen = mp_count_bits((key->N));
 
57
 
 
58
  /* payload is upto pq, so we know q is 1/3rd the size of N and therefore pq is 2/3th the size */
 
59
  modulus_bitlen = ((modulus_bitlen << 1) / 3);
 
60
 
 
61
  /* round down to next byte */
 
62
  modulus_bitlen -= (modulus_bitlen & 7) + 8;
 
63
 
 
64
  /* outlen must be at least the size of the modulus */
 
65
  modulus_bytelen = mp_unsigned_bin_size((key->N));
 
66
  if (modulus_bytelen > *outlen) {
 
67
     *outlen = modulus_bytelen;
 
68
     return CRYPT_BUFFER_OVERFLOW;
 
69
  }
 
70
 
 
71
  /* OAEP pad the key */
 
72
  x = *outlen;
 
73
  if ((err = pkcs_1_oaep_encode(in, inlen, lparam, 
 
74
                                lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, 
 
75
                                out, &x)) != CRYPT_OK) {
 
76
     return err;
 
77
  }                          
 
78
 
 
79
  /* Katja exptmod the OAEP pad */
 
80
  return katja_exptmod(out, x, out, outlen, PK_PUBLIC, key);
 
81
}
 
82
 
 
83
#endif /* MRSA */
 
84
 
 
85
/* $Source: /cvs/libtom/libtomcrypt/src/pk/katja/katja_encrypt_key.c,v $ */
 
86
/* $Revision: 1.5 $ */
 
87
/* $Date: 2006/06/16 21:53:41 $ */