*/
struct gcm_padlock_aes_ctx GCM_CTX(struct padlock_ctx);
-static void padlock_aes_encrypt(void *_ctx,
- unsigned length, uint8_t * dst,
+static void padlock_aes_encrypt(const void *_ctx,
+ size_t length, uint8_t * dst,
const uint8_t * src)
{
- struct padlock_ctx *ctx = _ctx;
+ struct padlock_ctx *ctx = (void*)_ctx;
struct padlock_cipher_data *pce;
pce = ALIGN16(&ctx->expanded_key);
- padlock_ecb_encrypt(dst, src, pce, length);
+ if (length > 0)
+ padlock_ecb_encrypt(dst, src, pce, length);
}
-static void padlock_aes_set_encrypt_key(struct padlock_ctx *_ctx,
- unsigned length,
+static void padlock_aes128_set_encrypt_key(struct padlock_ctx *_ctx,
const uint8_t * key)
{
struct padlock_ctx *ctx = _ctx;
ctx->enc = 1;
- padlock_aes_cipher_setkey(_ctx, key, length);
+ padlock_aes_cipher_setkey(_ctx, key, 16);
+}
+
+static void padlock_aes256_set_encrypt_key(struct padlock_ctx *_ctx,
+ const uint8_t * key)
+{
+ struct padlock_ctx *ctx = _ctx;
+ ctx->enc = 1;
+
+ padlock_aes_cipher_setkey(_ctx, key, 32);
}
static void aes_gcm_deinit(void *_ctx)
}
static int
-aes_gcm_cipher_setkey(void *_ctx, const void *userkey, size_t keysize)
+aes_gcm_cipher_setkey(void *_ctx, const void *key, size_t keysize)
{
struct gcm_padlock_aes_ctx *ctx = _ctx;
- GCM_SET_KEY(ctx, padlock_aes_set_encrypt_key, padlock_aes_encrypt,
- keysize, userkey);
+ if (keysize == 16) {
+ GCM_SET_KEY(ctx, padlock_aes128_set_encrypt_key, padlock_aes_encrypt,
+ key);
+ } else if (keysize == 32) {
+ GCM_SET_KEY(ctx, padlock_aes256_set_encrypt_key, padlock_aes_encrypt,
+ key);
+ } else abort();
return 0;
}
GCM_DIGEST(ctx, padlock_aes_encrypt, tagsize, tag);
}
+#include "aes-gcm-aead.h"
+
const gnutls_crypto_cipher_st _gnutls_aes_gcm_padlock = {
.init = aes_gcm_cipher_init,
.setkey = aes_gcm_cipher_setkey,
.setiv = aes_gcm_setiv,
.encrypt = aes_gcm_encrypt,
.decrypt = aes_gcm_decrypt,
+ .aead_encrypt = aes_gcm_aead_encrypt,
+ .aead_decrypt = aes_gcm_aead_decrypt,
.deinit = aes_gcm_deinit,
.tag = aes_gcm_tag,
.auth = aes_gcm_auth,