mw_cipher.h File Reference
`#include <glib.h>`
`#include "mw_common.h"`

Go to the source code of this file.

## Data Structures

struct | mwCipher
| A cipher. More...
struct | mwCipherInstance
| An instance of a cipher. More...

## Typedefs

typedef struct mwCipherInstance *(* | mwCipherInstantiator) (struct mwCipher *cipher, struct mwChannel *chan)
| Obtain an instance of a given cipher, which can be used for the processing of a single channel.
typedef int(* | mwCipherProcessor) (struct mwCipherInstance *ci, struct mwOpaque *data)
| Process (encrypt or decrypt, depending) the given data.

## Enumerations

enum | mwCipherType { mwCipher_RC2_40 = 0x0000 , mwCipher_RC2_128 = 0x0001 }
| Common cipher types. More...

## Functions

void | mwCipher_free (struct mwCipher *cipher)
| destroy a cipher
const char * | mwCipher_getDesc (struct mwCipher *cipher)
const char * | mwCipher_getName (struct mwCipher *cipher)
struct mwSession * | mwCipher_getSession (struct mwCipher *cipher)
guint16 | mwCipher_getType (struct mwCipher *cipher)
struct mwCipher * | mwCipher_new_RC2_128 (struct mwSession *s)
struct mwCipher * | mwCipher_new_RC2_40 (struct mwSession *s)
struct mwCipherInstance * | mwCipher_newInstance (struct mwCipher *cipher, struct mwChannel *channel)
struct mwEncryptItem * | mwCipherInstance_accept (struct mwCipherInstance *ci)
| Accept a cipher offered to our channel.
void | mwCipherInstance_accepted (struct mwCipherInstance *ci, struct mwEncryptItem *item)
| Indicates an offered cipher has been accepted.
int | mwCipherInstance_decrypt (struct mwCipherInstance *ci, struct mwOpaque *data)
| decrypt data
int | mwCipherInstance_encrypt (struct mwCipherInstance *ci, struct mwOpaque *data)
| encrypt data
void | mwCipherInstance_free (struct mwCipherInstance *ci)
| destroy a cipher instance
struct mwChannel * | mwCipherInstance_getChannel (struct mwCipherInstance *ci)
| reference the channel a cipher instance is attached to
struct mwCipher * | mwCipherInstance_getCipher (struct mwCipherInstance *ci)
| reference the parent cipher of an instance
struct mwEncryptItem * | mwCipherInstance_offer (struct mwCipherInstance *ci)
| Offer a cipher.
void | mwCipherInstance_offered (struct mwCipherInstance *ci, struct mwEncryptItem *item)
| Indicates a cipher has been offered to our channel.
void | mwDecrypt (const guchar *key, gsize keylen, guchar *iv, struct mwOpaque *in, struct mwOpaque *out)
| Decrypt data using an expanded form of the given key.
void | mwDecryptExpanded (const int *ekey, guchar *iv, struct mwOpaque *in, struct mwOpaque *out)
| Decrypt data using an already expanded key.
void | mwEncrypt (const guchar *key, gsize keylen, guchar *iv, struct mwOpaque *in, struct mwOpaque *out)
| Encrypt data using an expanded form of the given key.
void | mwEncryptExpanded (const int *ekey, guchar *iv, struct mwOpaque *in, struct mwOpaque *out)
| Encrypt data using an already-expanded key.
void | mwIV_init (guchar *iv)
| Setup an Initialization Vector.
void | mwKeyExpand (int *ekey, const guchar *key, gsize keylen)
| Expand a variable-length key into a 128-byte key (represented as an an array of 64 ints)
void | mwKeyRandom (guchar *key, gsize keylen)
| generate some pseudo-random bytes
void | mwMpi_calculateDHShared (struct mwMpi *shared_key, struct mwMpi *remote_key, struct mwMpi *private_key)
| sets the shared key value based on the remote and private keys, using the Sametime Prime and Base
void | mwMpi_export (struct mwMpi *i, struct mwOpaque *o)
| Export a value into an opaque.
void | mwMpi_free (struct mwMpi *i)
| destroy an mpi value
void | mwMpi_import (struct mwMpi *i, struct mwOpaque *o)
| Import a value from an opaque.
struct mwMpi * | mwMpi_new (void)
| prepare a new mpi value
void | mwMpi_randDHKeypair (struct mwMpi *private_key, struct mwMpi *public_key)
| sets private to a randomly generated value, and calculates public using the Sametime Prime and Base
void | mwMpi_setDHBase (struct mwMpi *i)
| set a big integer to the Sametime Base value
void | mwMpi_setDHPrime (struct mwMpi *i)
| set a big integer to the Sametime Prime value

## Typedef Documentation

## mwCipherInstantiator

typedef struct mwCipherInstance *(* mwCipherInstantiator) (struct mwCipher *cipher, struct mwChannel *chan)

Obtain an instance of a given cipher, which can be used for the processing of a single channel.

## mwCipherProcessor

typedef int(* mwCipherProcessor) (struct mwCipherInstance *ci, struct mwOpaque *data)

Process (encrypt or decrypt, depending) the given data.

The passed buffer may be freed in processing and be replaced with a freshly allocated buffer. The post-processed buffer must in turn be freed after use

## Enumeration Type Documentation

## mwCipherType

enum mwCipherType

Common cipher types.

Enumerator
mwCipher_RC2_40 |
mwCipher_RC2_128 |

## Function Documentation

## mwCipher_free()

void mwCipher_free | ( | struct mwCipher * | cipher | ) |

destroy a cipher

## mwCipher_getDesc()

const char * mwCipher_getDesc | ( | struct mwCipher * | cipher | ) |

## mwCipher_getName()

const char * mwCipher_getName | ( | struct mwCipher * | cipher | ) |

## mwCipher_getSession()

struct mwSession * mwCipher_getSession | ( | struct mwCipher * | cipher | ) |

## mwCipher_getType()

guint16 mwCipher_getType | ( | struct mwCipher * | cipher | ) |

## mwCipher_new_RC2_128()

struct mwCipher * mwCipher_new_RC2_128 | ( | struct mwSession * | s | ) |

## mwCipher_new_RC2_40()

struct mwCipher * mwCipher_new_RC2_40 | ( | struct mwSession * | s | ) |

## mwCipher_newInstance()

struct mwCipherInstance * mwCipher_newInstance | ( | struct mwCipher * | cipher,
|  | struct mwChannel * | channel
| ) |  |

## mwCipherInstance_accept()

struct mwEncryptItem * mwCipherInstance_accept | ( | struct mwCipherInstance * | ci | ) |

Accept a cipher offered to our channel.

## mwCipherInstance_accepted()

void mwCipherInstance_accepted | ( | struct mwCipherInstance * | ci,
|  | struct mwEncryptItem * | item
| ) |  |

Indicates an offered cipher has been accepted.

## mwCipherInstance_decrypt()

int mwCipherInstance_decrypt | ( | struct mwCipherInstance * | ci,
|  | struct mwOpaque * | data
| ) |  |

decrypt data

## mwCipherInstance_encrypt()

int mwCipherInstance_encrypt | ( | struct mwCipherInstance * | ci,
|  | struct mwOpaque * | data
| ) |  |

encrypt data

## mwCipherInstance_free()

void mwCipherInstance_free | ( | struct mwCipherInstance * | ci | ) |

destroy a cipher instance

## mwCipherInstance_getChannel()

struct mwChannel * mwCipherInstance_getChannel | ( | struct mwCipherInstance * | ci | ) |

reference the channel a cipher instance is attached to

## mwCipherInstance_getCipher()

struct mwCipher * mwCipherInstance_getCipher | ( | struct mwCipherInstance * | ci | ) |

reference the parent cipher of an instance

## mwCipherInstance_offer()

struct mwEncryptItem * mwCipherInstance_offer | ( | struct mwCipherInstance * | ci | ) |

Offer a cipher.

## mwCipherInstance_offered()

void mwCipherInstance_offered | ( | struct mwCipherInstance * | ci,
|  | struct mwEncryptItem * | item
| ) |  |

Indicates a cipher has been offered to our channel.

## mwDecrypt()

void mwDecrypt | ( | const guchar * | key,
|  | gsize | keylen,
|  | guchar * | iv,
|  | struct mwOpaque * | in,
|  | struct mwOpaque * | out
| ) |  |

Decrypt data using an expanded form of the given key.

## mwDecryptExpanded()

void mwDecryptExpanded | ( | const int * | ekey,
|  | guchar * | iv,
|  | struct mwOpaque * | in,
|  | struct mwOpaque * | out
| ) |  |

Decrypt data using an already expanded key.

## mwEncrypt()

void mwEncrypt | ( | const guchar * | key,
|  | gsize | keylen,
|  | guchar * | iv,
|  | struct mwOpaque * | in,
|  | struct mwOpaque * | out
| ) |  |

Encrypt data using an expanded form of the given key.

## mwEncryptExpanded()

void mwEncryptExpanded | ( | const int * | ekey,
|  | guchar * | iv,
|  | struct mwOpaque * | in,
|  | struct mwOpaque * | out
| ) |  |

Encrypt data using an already-expanded key.

## mwIV_init()

void mwIV_init | ( | guchar * | iv | ) |

Setup an Initialization Vector.

IV must be at least 8 bytes

## mwKeyExpand()

void mwKeyExpand | ( | int * | ekey,
|  | const guchar * | key,
|  | gsize | keylen
| ) |  |

Expand a variable-length key into a 128-byte key (represented as an an array of 64 ints)

## mwKeyRandom()

void mwKeyRandom | ( | guchar * | key,
|  | gsize | keylen
| ) |  |

generate some pseudo-random bytes

# Cipher Functions

These functions are reused where encryption is necessary outside of a channel (eg. session authentication)

Parameters

  keylen | count of bytes to write into key
  key | buffer to write keys into

## mwMpi_calculateDHShared()

void mwMpi_calculateDHShared | ( | struct mwMpi * | shared_key,
|  | struct mwMpi * | remote_key,
|  | struct mwMpi * | private_key
| ) |  |

sets the shared key value based on the remote and private keys, using the Sametime Prime and Base

## mwMpi_export()

void mwMpi_export | ( | struct mwMpi * | i,
|  | struct mwOpaque * | o
| ) |  |

Export a value into an opaque.

## mwMpi_free()

void mwMpi_free | ( | struct mwMpi * | i | ) |

destroy an mpi value

## mwMpi_import()

void mwMpi_import | ( | struct mwMpi * | i,
|  | struct mwOpaque * | o
| ) |  |

Import a value from an opaque.

## mwMpi_new()

struct mwMpi * mwMpi_new | ( | void |  | ) |

prepare a new mpi value

## mwMpi_randDHKeypair()

void mwMpi_randDHKeypair | ( | struct mwMpi * | private_key,
|  | struct mwMpi * | public_key
| ) |  |

sets private to a randomly generated value, and calculates public using the Sametime Prime and Base

## mwMpi_setDHBase()

void mwMpi_setDHBase | ( | struct mwMpi * | i | ) |

set a big integer to the Sametime Base value

## mwMpi_setDHPrime()

void mwMpi_setDHPrime | ( | struct mwMpi * | i | ) |

set a big integer to the Sametime Prime value