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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

pk.h File Reference

pk.h File Reference

Public Key abstraction layer. More...

Go to the source code of this file.

Data Structures

struct  pk_debug_item
 Item to send to the debug module. More...
struct  pk_info_t
 Public key information and operations. More...
struct  pk_context
 Public key container. More...

Typedefs

typedef int(* pk_rsa_alt_decrypt_func )(void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
 Types for RSA-alt abstraction.

Enumerations

enum  pk_type_t
 

Public key types.

More...
enum  pk_debug_type
 

Types for interfacing with the debug module.

More...

Functions

const pk_info_tpk_info_from_type (pk_type_t pk_type)
 Return information associated with the given PK type.
void pk_init (pk_context *ctx)
 Initialize a pk_context (as NONE)
void pk_free (pk_context *ctx)
 Free a pk_context.
int pk_init_ctx (pk_context *ctx, const pk_info_t *info)
 Initialize a PK context with the information given and allocates the type-specific PK subcontext.
int pk_init_ctx_rsa_alt (pk_context *ctx, void *key, pk_rsa_alt_decrypt_func decrypt_func, pk_rsa_alt_sign_func sign_func, pk_rsa_alt_key_len_func key_len_func)
 Initialize an RSA-alt context.
size_t pk_get_size (const pk_context *ctx)
 Get the size in bits of the underlying key.
static size_t pk_get_len (const pk_context *ctx)
 Get the length in bytes of the underlying key.
int pk_can_do (pk_context *ctx, pk_type_t type)
 Tell if a context can do the operation given by type.
int pk_verify (pk_context *ctx, md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)
 Verify signature.
int pk_sign (pk_context *ctx, md_type_t md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t *sig_len, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Make signature.
int pk_decrypt (pk_context *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Decrypt message.
int pk_encrypt (pk_context *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Encrypt message.
int pk_debug (const pk_context *ctx, pk_debug_item *items)
 Export debug information.
const char * pk_get_name (const pk_context *ctx)
 Access the type name.
pk_type_t pk_get_type (const pk_context *ctx)
 Get the key type.
int pk_parse_key (pk_context *ctx, const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen)
 Parse a private key.
int pk_parse_public_key (pk_context *ctx, const unsigned char *key, size_t keylen)
 Parse a public key.
int pk_parse_keyfile (pk_context *ctx, const char *path, const char *password)
 Load and parse a private key.
int pk_parse_public_keyfile (pk_context *ctx, const char *path)
 Load and parse a public key.
int pk_write_key_der (pk_context *ctx, unsigned char *buf, size_t size)
 Write a private key to a PKCS#1 or SEC1 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
int pk_write_pubkey_der (pk_context *ctx, unsigned char *buf, size_t size)
 Write a public key to a SubjectPublicKeyInfo DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
int pk_write_pubkey_pem (pk_context *ctx, unsigned char *buf, size_t size)
 Write a public key to a PEM string.
int pk_write_key_pem (pk_context *ctx, unsigned char *buf, size_t size)
 Write a private key to a PKCS#1 or SEC1 PEM string.
int pk_parse_subpubkey (unsigned char **p, const unsigned char *end, pk_context *pk)
 Parse a SubjectPublicKeyInfo DER structure.
int pk_write_pubkey (unsigned char **p, unsigned char *start, const pk_context *key)
 Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer.

Detailed Description

Public Key abstraction layer.

Public Key abstraction layer: wrapper functions.

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 pk.h.


Typedef Documentation

typedef int(* pk_rsa_alt_decrypt_func)(void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)

Types for RSA-alt abstraction.

Definition at line 191 of file pk.h.


Enumeration Type Documentation

Types for interfacing with the debug module.

Definition at line 107 of file pk.h.

enum pk_type_t

Public key types.

Definition at line 95 of file pk.h.


Function Documentation

int pk_can_do ( pk_context ctx,
pk_type_t  type 
)

Tell if a context can do the operation given by type.

Parameters:
ctxContext to test
typeTarget type
Returns:
0 if context can't do the operations, 1 otherwise.

Definition at line 147 of file pk.c.

int pk_debug ( const pk_context ctx,
pk_debug_item items 
)

Export debug information.

Parameters:
ctxContext to use
itemsPlace to write debug items
Returns:
0 on success or POLARSSL_ERR_PK_BAD_INPUT_DATA

Definition at line 260 of file pk.c.

int pk_decrypt ( pk_context ctx,
const unsigned char *  input,
size_t  ilen,
unsigned char *  output,
size_t *  olen,
size_t  osize,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Decrypt message.

Parameters:
ctxPK context to use
inputInput to decrypt
ilenInput size
outputDecrypted output
olenDecrypted message length
osizeSize of the output buffer
f_rngRNG function
p_rngRNG parameter
Returns:
0 on success, or a specific error code.

Definition at line 213 of file pk.c.

int pk_encrypt ( pk_context ctx,
const unsigned char *  input,
size_t  ilen,
unsigned char *  output,
size_t *  olen,
size_t  osize,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Encrypt message.

Parameters:
ctxPK context to use
inputMessage to encrypt
ilenMessage size
outputEncrypted output
olenEncrypted output length
osizeSize of the output buffer
f_rngRNG function
p_rngRNG parameter
Returns:
0 on success, or a specific error code.

Definition at line 231 of file pk.c.

void pk_free ( pk_context ctx )

Free a pk_context.

Definition at line 62 of file pk.c.

static size_t pk_get_len ( const pk_context ctx ) [static]

Get the length in bytes of the underlying key.

Parameters:
ctxContext to use
Returns:
Key length in bytes, or 0 on error

Definition at line 269 of file pk.h.

const char* pk_get_name ( const pk_context ctx )

Access the type name.

Parameters:
ctxContext to use
Returns:
Type name on success, or "invalid PK"

Definition at line 275 of file pk.c.

size_t pk_get_size ( const pk_context ctx )

Get the size in bits of the underlying key.

Parameters:
ctxContext to use
Returns:
Key size in bits, or 0 on error

Definition at line 249 of file pk.c.

pk_type_t pk_get_type ( const pk_context ctx )

Get the key type.

Parameters:
ctxContext to use
Returns:
Type on success, or POLARSSL_PK_NONE

Definition at line 286 of file pk.c.

const pk_info_t* pk_info_from_type ( pk_type_t  pk_type )

Return information associated with the given PK type.

Parameters:
pk_typePK type to search for.
Returns:
The PK info associated with the type or NULL if not found.

Definition at line 76 of file pk.c.

void pk_init ( pk_context ctx )

Initialize a pk_context (as NONE)

Definition at line 50 of file pk.c.

int pk_init_ctx ( pk_context ctx,
const pk_info_t info 
)

Initialize a PK context with the information given and allocates the type-specific PK subcontext.

Parameters:
ctxContext to initialize. Must be empty (type NONE).
infoInformation to use
Returns:
0 on success, POLARSSL_ERR_PK_BAD_INPUT_DATA on invalid input, POLARSSL_ERR_PK_MALLOC_FAILED on allocation failure.
Note:
For contexts holding an RSA-alt key, use pk_init_ctx_rsa_alt() instead.

Definition at line 102 of file pk.c.

int pk_init_ctx_rsa_alt ( pk_context ctx,
void *  key,
pk_rsa_alt_decrypt_func  decrypt_func,
pk_rsa_alt_sign_func  sign_func,
pk_rsa_alt_key_len_func  key_len_func 
)

Initialize an RSA-alt context.

Parameters:
ctxContext to initialize. Must be empty (type NONE).
keyRSA key pointer
decrypt_funcDecryption function
sign_funcSigning function
key_len_funcFunction returning key length in bytes
Returns:
0 on success, or POLARSSL_ERR_PK_BAD_INPUT_DATA if the context wasn't already initialized as RSA_ALT.
Note:
This function replaces pk_init_ctx() for RSA-alt.

Definition at line 118 of file pk.c.

int pk_parse_key ( pk_context ctx,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  pwd,
size_t  pwdlen 
)

Parse a private key.

Parameters:
ctxkey to be initialized
keyinput buffer
keylensize of the buffer
pwdpassword for decryption (optional)
pwdlensize of the password
Note:
On entry, ctx must be empty, either freshly initialised with pk_init() or reset with pk_free(). If you need a specific key type, check the result with pk_can_do().
The key is also checked for correctness.
Returns:
0 if successful, or a specific PK or PEM error code

Definition at line 1044 of file pkparse.c.

int pk_parse_keyfile ( pk_context ctx,
const char *  path,
const char *  password 
)

Load and parse a private key.

Parameters:
ctxkey to be initialized
pathfilename to read the private key from
passwordpassword to decrypt the file (can be NULL)
Note:
On entry, ctx must be empty, either freshly initialised with pk_init() or reset with pk_free(). If you need a specific key type, check the result with pk_can_do().
The key is also checked for correctness.
Returns:
0 if successful, or a specific PK or PEM error code

Definition at line 111 of file pkparse.c.

int pk_parse_public_key ( pk_context ctx,
const unsigned char *  key,
size_t  keylen 
)

Parse a public key.

Parameters:
ctxkey to be initialized
keyinput buffer
keylensize of the buffer
Note:
On entry, ctx must be empty, either freshly initialised with pk_init() or reset with pk_free(). If you need a specific key type, check the result with pk_can_do().
The key is also checked for correctness.
Returns:
0 if successful, or a specific PK or PEM error code

Definition at line 1211 of file pkparse.c.

int pk_parse_public_keyfile ( pk_context ctx,
const char *  path 
)

Load and parse a public key.

Parameters:
ctxkey to be initialized
pathfilename to read the private key from
Note:
On entry, ctx must be empty, either freshly initialised with pk_init() or reset with pk_free(). If you need a specific key type, check the result with pk_can_do().
The key is also checked for correctness.
Returns:
0 if successful, or a specific PK or PEM error code

Definition at line 136 of file pkparse.c.

int pk_parse_subpubkey ( unsigned char **  p,
const unsigned char *  end,
pk_context pk 
)

Parse a SubjectPublicKeyInfo DER structure.

Parameters:
pthe position in the ASN.1 data
endend of the buffer
pkthe key to fill
Returns:
0 if successful, or a specific PK error code

Definition at line 569 of file pkparse.c.

int pk_sign ( pk_context ctx,
md_type_t  md_alg,
const unsigned char *  hash,
size_t  hash_len,
unsigned char *  sig,
size_t *  sig_len,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Make signature.

Parameters:
ctxPK context to use
md_algHash algorithm used (see notes)
hashHash of the message to sign
hash_lenHash length or 0 (see notes)
sigPlace to write the signature
sig_lenNumber of bytes written
f_rngRNG function
p_rngRNG parameter
Returns:
0 on success, or a specific error code.
Note:
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.
md_alg may be POLARSSL_MD_NONE, only if hash_len != 0

Definition at line 194 of file pk.c.

int pk_verify ( pk_context ctx,
md_type_t  md_alg,
const unsigned char *  hash,
size_t  hash_len,
const unsigned char *  sig,
size_t  sig_len 
)

Verify signature.

Parameters:
ctxPK context to use
md_algHash algorithm used (see notes)
hashHash of the message to sign
hash_lenHash length or 0 (see notes)
sigSignature to verify
sig_lenSignature length
Returns:
0 on success (signature is valid), POLARSSL_ERR_PK_SIG_LEN_MISMATCH if the signature is valid but its actual length is less than sig_len, or a specific error code.
Note:
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.
md_alg may be POLARSSL_MD_NONE, only if hash_len != 0

Definition at line 176 of file pk.c.

int pk_write_key_der ( pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a private key to a PKCS#1 or SEC1 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.

Parameters:
ctxprivate to write away
bufbuffer to write to
sizesize of the buffer
Returns:
length of data written if successful, or a specific error code

Definition at line 201 of file pkwrite.c.

int pk_write_key_pem ( pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a private key to a PKCS#1 or SEC1 PEM string.

Parameters:
ctxprivate to write away
bufbuffer to write to
sizesize of the buffer
Returns:
0 successful, or a specific error code

Definition at line 319 of file pkwrite.c.

int pk_write_pubkey ( unsigned char **  p,
unsigned char *  start,
const pk_context key 
)

Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer.

Parameters:
preference to current position pointer
startstart of the buffer (for bounds-checking)
keypublic key to write away
Returns:
the length written or a negative error code

Definition at line 132 of file pkwrite.c.

int pk_write_pubkey_der ( pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a public key to a SubjectPublicKeyInfo DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.

Parameters:
ctxpublic key to write away
bufbuffer to write to
sizesize of the buffer
Returns:
length of data written if successful, or a specific error code

Definition at line 153 of file pkwrite.c.

int pk_write_pubkey_pem ( pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a public key to a PEM string.

Parameters:
ctxpublic key to write away
bufbuffer to write to
sizesize of the buffer
Returns:
0 successful, or a specific error code

Definition at line 297 of file pkwrite.c.