Example program to test AES-GCM functionality. Used for a workshop

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

gcm.h File Reference

gcm.h File Reference

Galois/Counter mode for 128-bit block ciphers. More...

Go to the source code of this file.

Data Structures

struct  gcm_context
 GCM context structure. More...

Functions

int gcm_init (gcm_context *ctx, cipher_id_t cipher, 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 a block cipher.
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 a block cipher.
int gcm_starts (gcm_context *ctx, int mode, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len)
 Generic GCM stream start function.
int gcm_update (gcm_context *ctx, size_t length, const unsigned char *input, unsigned char *output)
 Generic GCM update function.
int gcm_finish (gcm_context *ctx, unsigned char *tag, size_t tag_len)
 Generic GCM finalisation function.
void gcm_free (gcm_context *ctx)
 Free a GCM context and underlying cipher sub-context.
int gcm_self_test (int verbose)
 Checkup routine.

Detailed Description

Galois/Counter mode for 128-bit block ciphers.

Copyright (C) 2006-2013, 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.


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 a block cipher.

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

Definition at line 441 of file gcm.c.

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 a block cipher.

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

Definition at line 415 of file gcm.c.

int gcm_finish ( gcm_context ctx,
unsigned char *  tag,
size_t  tag_len 
)

Generic GCM finalisation function.

Wraps up the GCM stream and generates the tag. The tag can have a maximum length of 16 bytes.

Parameters:
ctxGCM context
tagbuffer for holding the tag (may be NULL if tag_len is 0)
tag_lenlength of the tag to generate
Returns:
0 if successful or POLARSSL_ERR_GCM_BAD_INPUT

Definition at line 379 of file gcm.c.

void gcm_free ( gcm_context ctx )

Free a GCM context and underlying cipher sub-context.

Parameters:
ctxGCM context to free

Definition at line 477 of file gcm.c.

int gcm_init ( gcm_context ctx,
cipher_id_t  cipher,
const unsigned char *  key,
unsigned int  keysize 
)

GCM initialization (encryption)

Parameters:
ctxGCM context to be initialized
ciphercipher to use (a 128-bit block cipher)
keyencryption key
keysizemust be 128, 192 or 256
Returns:
0 if successful, or a cipher specific error code

Definition at line 147 of file gcm.c.

int gcm_self_test ( int  verbose )

Checkup routine.

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

Definition at line 714 of file gcm.c.

int gcm_starts ( gcm_context ctx,
int  mode,
const unsigned char *  iv,
size_t  iv_len,
const unsigned char *  add,
size_t  add_len 
)

Generic GCM stream start function.

Parameters:
ctxGCM context
modeGCM_ENCRYPT or GCM_DECRYPT
ivinitialization vector
iv_lenlength of IV
addadditional data (or NULL if length is 0)
add_lenlength of additional data
Returns:
0 if successful

Definition at line 254 of file gcm.c.

int gcm_update ( gcm_context ctx,
size_t  length,
const unsigned char *  input,
unsigned char *  output 
)

Generic GCM update function.

Encrypts/decrypts using the given GCM context. Expects input to be a multiple of 16 bytes! Only the last call before gcm_finish() can be less than 16 bytes!

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
inputbuffer holding the input data
outputbuffer for holding the output data
Returns:
0 if successful or POLARSSL_ERR_GCM_BAD_INPUT

Definition at line 328 of file gcm.c.