77 lines
2.5 KiB
C
77 lines
2.5 KiB
C
/*
|
|
* Copyright (C) 2007-2012 Apple Inc. All rights reserved.
|
|
*
|
|
* This document is the property of Apple Inc.
|
|
* It is considered confidential and proprietary.
|
|
*
|
|
* This document may not be reproduced or transmitted in any form,
|
|
* in whole or in part, without the express written permission of
|
|
* Apple Inc.
|
|
*/
|
|
#ifndef __DRIVERS_AES_H
|
|
#define __DRIVERS_AES_H
|
|
|
|
#include <sys/types.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
#define AES_CMD_ENC (0x00000000)
|
|
#define AES_CMD_DEC (0x00000001)
|
|
#define AES_CMD_DIR_MASK (0x0000000F)
|
|
#define AES_CMD_ECB (0x00000000)
|
|
#define AES_CMD_CBC (0x00000010)
|
|
#define AES_CMD_MODE_MASK (0x000000F0)
|
|
|
|
#define AES_KEY_TYPE_USER (0x00000000)
|
|
#define AES_KEY_TYPE_UID0 (0x00000100)
|
|
#define AES_KEY_TYPE_GID0 (0x00000200)
|
|
#define AES_KEY_TYPE_GID1 (0x00000201)
|
|
#define AES_KEY_TYPE_MASK (0x00000FFF)
|
|
|
|
#define AES_KEY_SIZE_128 (0x00000000)
|
|
#define AES_KEY_SIZE_192 (0x10000000)
|
|
#define AES_KEY_SIZE_256 (0x20000000)
|
|
#define AES_KEY_SIZE_MASK (0xF0000000)
|
|
|
|
#define AES_BLOCK_SIZE (16)
|
|
|
|
/*
|
|
* aes_crypto_cmd - provides access to AES functions
|
|
*
|
|
* cmd - operation mode: ENC or DEC and EBC or CBC
|
|
* src - source buffer and destination buffer for in place operations
|
|
* dst - desination buffer, or NULL for in place operations
|
|
* len - size in bytes of the operation
|
|
* opts - key type and size
|
|
* key - key buffer or NULL for non USER key types
|
|
* iv - iv buffer or NULL if iv should be all zeros
|
|
*
|
|
* AES operations may return an error if the requested operation depends
|
|
* on hardware resources that are not available.
|
|
*
|
|
* Bad arguments passed to AES operations will result in a panic.
|
|
*/
|
|
int aes_crypto_cmd(u_int32_t cmd, void *src, void *dst, size_t len, u_int32_t opts, const void *key, void *iv);
|
|
|
|
#define aes_cbc_encrypt(src, dst, len, opts, key, iv) \
|
|
aes_crypto_cmd(AES_CMD_ENC | AES_CMD_CBC, src, dst, len, opts, key, iv)
|
|
#define aes_cbc_decrypt(src, dst, len, opts, key, iv) \
|
|
aes_crypto_cmd(AES_CMD_DEC | AES_CMD_CBC, src, dst, len, opts, key, iv)
|
|
|
|
/* exported interface from hardware AES driver */
|
|
int aes_hw_crypto_cmd(u_int32_t cmd, void *src, void *dst, size_t len, u_int32_t opts, const void *key, void *iv);
|
|
|
|
/* old AES hardware driver protocol, not for new platforms */
|
|
enum aes_key_type {
|
|
AES_KEY_TYPE_REGISTER = 0,
|
|
AES_KEY_TYPE_GLOBAL,
|
|
AES_KEY_TYPE_CHIP
|
|
};
|
|
|
|
int AES_CBC_DecryptInPlace(u_int8_t* pAddr, u_int32_t u32Len, u_int32_t keyType, u_int8_t* pKey, u_int8_t* pIv);
|
|
bool AES_CBC_EncryptInPlace(u_int8_t* pAddr, u_int32_t u32Len, u_int32_t keyType, u_int8_t* pKey, u_int8_t* pIv);
|
|
|
|
__END_DECLS
|
|
|
|
#endif /* __DRIVERS_AES_H */
|