/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef _CAMELLIA_H_
#define _CAMELLIA_H_ 1

#define CAMELLIA_BLOCK_SIZE 16  /* bytes */
#define CAMELLIA_MIN_KEYSIZE 16 /* bytes */
#define CAMELLIA_MAX_KEYSIZE 32 /* bytes */

#define CAMELLIA_MAX_EXPANDEDKEY (34*2) /* 32bit unit */

typedef PRUint32 KEY_TABLE_TYPE[CAMELLIA_MAX_EXPANDEDKEY];

typedef SECStatus CamelliaFunc(CamelliaContext *cx, unsigned char *output,
			       unsigned int *outputLen,
			       unsigned int maxOutputLen,
			       const unsigned char *input,
			       unsigned int inputLen);

typedef SECStatus CamelliaBlockFunc(const PRUint32 *subkey, 
				    unsigned char *output,
				    const unsigned char *input);

/* CamelliaContextStr
 *
 * Values which maintain the state for Camellia encryption/decryption.
 *
 * keysize     - the number of key bits
 * worker      - the encryption/decryption function to use with this context
 * iv          - initialization vector for CBC mode
 * expandedKey - the round keys in 4-byte words
 */
struct CamelliaContextStr
{
    PRUint32  keysize; /* bytes */
    CamelliaFunc  *worker;
    PRUint32      expandedKey[CAMELLIA_MAX_EXPANDEDKEY];
    PRUint8 iv[CAMELLIA_BLOCK_SIZE];
};

#endif /* _CAMELLIA_H_ */
