comparison nss/lib/softoken/padbuf.c @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #include "blapit.h"
5 #include "secport.h"
6 #include "secerr.h"
7
8 /*
9 * Prepare a buffer for any padded CBC encryption algorithm, growing to the
10 * appropriate boundary and filling with the appropriate padding.
11 * blockSize must be a power of 2.
12 *
13 * NOTE: If arena is non-NULL, we re-allocate from there, otherwise
14 * we assume (and use) XP memory (re)allocation.
15 */
16 unsigned char *
17 CBC_PadBuffer(PLArenaPool *arena, unsigned char *inbuf, unsigned int inlen,
18 unsigned int *outlen, int blockSize)
19 {
20 unsigned char *outbuf;
21 unsigned int des_len;
22 unsigned int i;
23 unsigned char des_pad_len;
24
25 /*
26 * We need from 1 to blockSize bytes -- we *always* grow.
27 * The extra bytes contain the value of the length of the padding:
28 * if we have 2 bytes of padding, then the padding is "0x02, 0x02".
29 */
30 des_len = (inlen + blockSize) & ~(blockSize - 1);
31
32 if (arena != NULL) {
33 outbuf = (unsigned char*)PORT_ArenaGrow (arena, inbuf, inlen, des_len);
34 } else {
35 outbuf = (unsigned char*)PORT_Realloc (inbuf, des_len);
36 }
37
38 if (outbuf == NULL) {
39 PORT_SetError (SEC_ERROR_NO_MEMORY);
40 return NULL;
41 }
42
43 des_pad_len = des_len - inlen;
44 for (i = inlen; i < des_len; i++)
45 outbuf[i] = des_pad_len;
46
47 *outlen = des_len;
48 return outbuf;
49 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)