~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/boringssl/src/crypto/cipher/internal.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
 
 * All rights reserved.
3
 
 *
4
 
 * This package is an SSL implementation written
5
 
 * by Eric Young (eay@cryptsoft.com).
6
 
 * The implementation was written so as to conform with Netscapes SSL.
7
 
 *
8
 
 * This library is free for commercial and non-commercial use as long as
9
 
 * the following conditions are aheared to.  The following conditions
10
 
 * apply to all code found in this distribution, be it the RC4, RSA,
11
 
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
12
 
 * included with this distribution is covered by the same copyright terms
13
 
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
 
 *
15
 
 * Copyright remains Eric Young's, and as such any Copyright notices in
16
 
 * the code are not to be removed.
17
 
 * If this package is used in a product, Eric Young should be given attribution
18
 
 * as the author of the parts of the library used.
19
 
 * This can be in the form of a textual message at program startup or
20
 
 * in documentation (online or textual) provided with the package.
21
 
 *
22
 
 * Redistribution and use in source and binary forms, with or without
23
 
 * modification, are permitted provided that the following conditions
24
 
 * are met:
25
 
 * 1. Redistributions of source code must retain the copyright
26
 
 *    notice, this list of conditions and the following disclaimer.
27
 
 * 2. Redistributions in binary form must reproduce the above copyright
28
 
 *    notice, this list of conditions and the following disclaimer in the
29
 
 *    documentation and/or other materials provided with the distribution.
30
 
 * 3. All advertising materials mentioning features or use of this software
31
 
 *    must display the following acknowledgement:
32
 
 *    "This product includes cryptographic software written by
33
 
 *     Eric Young (eay@cryptsoft.com)"
34
 
 *    The word 'cryptographic' can be left out if the rouines from the library
35
 
 *    being used are not cryptographic related :-).
36
 
 * 4. If you include any Windows specific code (or a derivative thereof) from
37
 
 *    the apps directory (application code) you must include an acknowledgement:
38
 
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
 
 *
40
 
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
 
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
 
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
 
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
 
 * SUCH DAMAGE.
51
 
 *
52
 
 * The licence and distribution terms for any publically available version or
53
 
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
54
 
 * copied and put under another distribution licence
55
 
 * [including the GNU Public Licence.] */
56
 
 
57
 
#ifndef OPENSSL_HEADER_CIPHER_INTERNAL_H
58
 
#define OPENSSL_HEADER_CIPHER_INTERNAL_H
59
 
 
60
 
#include <openssl/base.h>
61
 
 
62
 
#include <openssl/aead.h>
63
 
 
64
 
#if defined(__cplusplus)
65
 
extern "C" {
66
 
#endif
67
 
 
68
 
 
69
 
/* EVP_CIPH_MODE_MASK contains the bits of |flags| that represent the mode. */
70
 
#define EVP_CIPH_MODE_MASK 0x3f
71
 
 
72
 
 
73
 
/* EVP_AEAD represents a specific AEAD algorithm. */
74
 
struct evp_aead_st {
75
 
  uint8_t key_len;
76
 
  uint8_t nonce_len;
77
 
  uint8_t overhead;
78
 
  uint8_t max_tag_len;
79
 
 
80
 
  /* init initialises an |EVP_AEAD_CTX|. If this call returns zero then
81
 
   * |cleanup| will not be called for that context. */
82
 
  int (*init)(EVP_AEAD_CTX *, const uint8_t *key, size_t key_len,
83
 
              size_t tag_len);
84
 
  int (*init_with_direction)(EVP_AEAD_CTX *, const uint8_t *key, size_t key_len,
85
 
                             size_t tag_len, enum evp_aead_direction_t dir);
86
 
  void (*cleanup)(EVP_AEAD_CTX *);
87
 
 
88
 
  int (*seal)(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
89
 
              size_t max_out_len, const uint8_t *nonce, size_t nonce_len,
90
 
              const uint8_t *in, size_t in_len, const uint8_t *ad,
91
 
              size_t ad_len);
92
 
 
93
 
  int (*open)(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
94
 
              size_t max_out_len, const uint8_t *nonce, size_t nonce_len,
95
 
              const uint8_t *in, size_t in_len, const uint8_t *ad,
96
 
              size_t ad_len);
97
 
 
98
 
  int (*get_rc4_state)(const EVP_AEAD_CTX *ctx, const RC4_KEY **out_key);
99
 
};
100
 
 
101
 
 
102
 
/* EVP_tls_cbc_get_padding determines the padding from the decrypted, TLS, CBC
103
 
 * record in |in|. This decrypted record should not include any "decrypted"
104
 
 * explicit IV. It sets |*out_len| to the length with the padding removed or
105
 
 * |in_len| if invalid.
106
 
 *
107
 
 * block_size: the block size of the cipher used to encrypt the record.
108
 
 * returns:
109
 
 *   0: (in non-constant time) if the record is publicly invalid.
110
 
 *   1: if the padding was valid
111
 
 *  -1: otherwise. */
112
 
int EVP_tls_cbc_remove_padding(unsigned *out_len,
113
 
                               const uint8_t *in, unsigned in_len,
114
 
                               unsigned block_size, unsigned mac_size);
115
 
 
116
 
/* EVP_tls_cbc_copy_mac copies |md_size| bytes from the end of the first
117
 
 * |in_len| bytes of |in| to |out| in constant time (independent of the concrete
118
 
 * value of |in_len|, which may vary within a 256-byte window). |in| must point
119
 
 * to a buffer of |orig_len| bytes.
120
 
 *
121
 
 * On entry:
122
 
 *   orig_len >= in_len >= md_size
123
 
 *   md_size <= EVP_MAX_MD_SIZE */
124
 
void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
125
 
                          const uint8_t *in, unsigned in_len,
126
 
                          unsigned orig_len);
127
 
 
128
 
/* EVP_tls_cbc_record_digest_supported returns 1 iff |md| is a hash function
129
 
 * which EVP_tls_cbc_digest_record supports. */
130
 
int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
131
 
 
132
 
/* EVP_tls_cbc_digest_record computes the MAC of a decrypted, padded TLS
133
 
 * record.
134
 
 *
135
 
 *   md: the hash function used in the HMAC.
136
 
 *     EVP_tls_cbc_record_digest_supported must return true for this hash.
137
 
 *   md_out: the digest output. At most EVP_MAX_MD_SIZE bytes will be written.
138
 
 *   md_out_size: the number of output bytes is written here.
139
 
 *   header: the 13-byte, TLS record header.
140
 
 *   data: the record data itself
141
 
 *   data_plus_mac_size: the secret, reported length of the data and MAC
142
 
 *     once the padding has been removed.
143
 
 *   data_plus_mac_plus_padding_size: the public length of the whole
144
 
 *     record, including padding.
145
 
 *
146
 
 * On entry: by virtue of having been through one of the remove_padding
147
 
 * functions, above, we know that data_plus_mac_size is large enough to contain
148
 
 * a padding byte and MAC. (If the padding was invalid, it might contain the
149
 
 * padding too. ) */
150
 
int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
151
 
                              size_t *md_out_size, const uint8_t header[13],
152
 
                              const uint8_t *data, size_t data_plus_mac_size,
153
 
                              size_t data_plus_mac_plus_padding_size,
154
 
                              const uint8_t *mac_secret,
155
 
                              unsigned mac_secret_length);
156
 
 
157
 
#if defined(__cplusplus)
158
 
} /* extern C */
159
 
#endif
160
 
 
161
 
#endif /* OPENSSL_HEADER_CIPHER_INTERNAL_H */