PolarSSL v1.2.7
Data Structures | Macros | Functions
gcm.h File Reference

Galois/Counter mode for AES. More...

#include "aes.h"
#include <stdint.h>
Include dependency graph for gcm.h:

Go to the source code of this file.

Data Structures

struct  gcm_context
 GCM context structure. More...

Macros

#define GCM_ENCRYPT   1
#define GCM_DECRYPT   0
#define POLARSSL_ERR_GCM_AUTH_FAILED   -0x0012
 Authenticated decryption failed.
#define POLARSSL_ERR_GCM_BAD_INPUT   -0x0014
 Bad input parameters to function.

Functions

int gcm_init (gcm_context *ctx, const unsigned char *key, unsigned int keysize)
 GCM initialization (encryption)
int gcm_crypt_and_tag (gcm_context *ctx, int mode, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, size_t tag_len, unsigned char *tag)
 GCM buffer encryption/decryption using AES.
int gcm_auth_decrypt (gcm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *tag, size_t tag_len, const unsigned char *input, unsigned char *output)
 GCM buffer authenticated decryption using AES.
int gcm_self_test (int verbose)
 Checkup routine.

Detailed Description

Galois/Counter mode for AES.

Copyright (C) 2006-2012, Brainspark B.V.

This file is part of PolarSSL (http://www.polarssl.org) Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>

All rights reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Definition in file gcm.h.


Macro Definition Documentation

#define GCM_DECRYPT   0

Definition at line 40 of file gcm.h.

#define GCM_ENCRYPT   1

Definition at line 39 of file gcm.h.

#define POLARSSL_ERR_GCM_AUTH_FAILED   -0x0012

Authenticated decryption failed.

Definition at line 42 of file gcm.h.

#define POLARSSL_ERR_GCM_BAD_INPUT   -0x0014

Bad input parameters to function.

Definition at line 43 of file gcm.h.


Function Documentation

int gcm_auth_decrypt ( gcm_context ctx,
size_t  length,
const unsigned char *  iv,
size_t  iv_len,
const unsigned char *  add,
size_t  add_len,
const unsigned char *  tag,
size_t  tag_len,
const unsigned char *  input,
unsigned char *  output 
)

GCM buffer authenticated decryption using AES.

Note:
On decryption, the output buffer cannot be the same as input buffer. If buffers overlap, the output buffer must trail at least 8 bytes behind the input buffer.
Parameters:
ctxGCM context
lengthlength of the input data
ivinitialization vector
iv_lenlength of IV
addadditional data
add_lenlength of additional data
tagbuffer holding the tag
tag_lenlength of the tag
inputbuffer holding the input data
outputbuffer for holding the output data
Returns:
0 if successful and authenticated, POLARSSL_ERR_GCM_AUTH_FAILED if tag does not match
int gcm_crypt_and_tag ( gcm_context ctx,
int  mode,
size_t  length,
const unsigned char *  iv,
size_t  iv_len,
const unsigned char *  add,
size_t  add_len,
const unsigned char *  input,
unsigned char *  output,
size_t  tag_len,
unsigned char *  tag 
)

GCM buffer encryption/decryption using AES.

Note:
On encryption, the output buffer can be the same as the input buffer. On decryption, the output buffer cannot be the same as input buffer. If buffers overlap, the output buffer must trail at least 8 bytes behind the input buffer.
Parameters:
ctxGCM context
modeGCM_ENCRYPT or GCM_DECRYPT
lengthlength of the input data
ivinitialization vector
iv_lenlength of IV
addadditional data
add_lenlength of additional data
inputbuffer holding the input data
outputbuffer for holding the output data
tag_lenlength of the tag to generate
tagbuffer for holding the tag
Returns:
0 if successful
int gcm_init ( gcm_context ctx,
const unsigned char *  key,
unsigned int  keysize 
)

GCM initialization (encryption)

Parameters:
ctxGCM context to be initialized
keyencryption key
keysizemust be 128, 192 or 256
Returns:
0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH
int gcm_self_test ( int  verbose)

Checkup routine.

Returns:
0 if successful, or 1 if the test failed