Make all *_impl provide ctx_new and ctx_free functions
This commit is contained in:
parent
fa489d2b4b
commit
e9bcc64e62
18
auth.c
18
auth.c
@ -50,18 +50,16 @@ struct lc_auth_ctx *
|
|||||||
lc_auth_ctx_new(const struct lc_auth_impl *impl)
|
lc_auth_ctx_new(const struct lc_auth_impl *impl)
|
||||||
{
|
{
|
||||||
struct lc_auth_ctx *ctx;
|
struct lc_auth_ctx *ctx;
|
||||||
void *arg;
|
|
||||||
|
|
||||||
ctx = malloc(sizeof(*ctx));
|
ctx = malloc(sizeof(*ctx));
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (impl->argsz > 0) {
|
if (impl->ctx_new != NULL) {
|
||||||
arg = malloc(impl->argsz);
|
ctx->arg = impl->ctx_new(NULL);
|
||||||
if (arg == NULL) {
|
if (ctx->arg == NULL) {
|
||||||
free(ctx);
|
free(ctx);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ctx->arg = arg;
|
|
||||||
} else
|
} else
|
||||||
ctx->arg = NULL;
|
ctx->arg = NULL;
|
||||||
ctx->impl = impl;
|
ctx->impl = impl;
|
||||||
@ -72,7 +70,11 @@ lc_auth_ctx_new(const struct lc_auth_impl *impl)
|
|||||||
void
|
void
|
||||||
lc_auth_ctx_free(struct lc_auth_ctx *ctx)
|
lc_auth_ctx_free(struct lc_auth_ctx *ctx)
|
||||||
{
|
{
|
||||||
if (ctx != NULL)
|
if (ctx != NULL && ctx->impl != NULL && ctx->impl->ctx_free != NULL)
|
||||||
free(ctx->arg);
|
ctx->impl->ctx_free(ctx);
|
||||||
free(ctx);
|
else {
|
||||||
|
if (ctx != NULL)
|
||||||
|
free(ctx->arg);
|
||||||
|
free(ctx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
11
auth.h
11
auth.h
@ -19,13 +19,14 @@
|
|||||||
|
|
||||||
|
|
||||||
struct lc_auth_impl {
|
struct lc_auth_impl {
|
||||||
int (*init)(void *, const uint8_t *, size_t);
|
int (*init)(void *, const uint8_t *, size_t);
|
||||||
int (*update)(void *, const uint8_t *, size_t);
|
int (*update)(void *, const uint8_t *, size_t);
|
||||||
int (*final)(void *, uint8_t *, size_t *);
|
int (*final)(void *, uint8_t *, size_t *);
|
||||||
int (*auth)(const uint8_t *, size_t, uint8_t *, size_t *,
|
int (*auth)(const uint8_t *, size_t, uint8_t *, size_t *,
|
||||||
const uint8_t *, size_t);
|
const uint8_t *, size_t);
|
||||||
|
|
||||||
size_t argsz;
|
void *(*ctx_new)(const void *);
|
||||||
|
void (*ctx_free)(void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lc_auth_ctx {
|
struct lc_auth_ctx {
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "lilcrypto.h"
|
#include "lilcrypto.h"
|
||||||
#include "auth.h"
|
#include "auth.h"
|
||||||
#include "auth_poly1305.h"
|
#include "auth_poly1305.h"
|
||||||
@ -151,6 +153,11 @@ poly1305_auth(const uint8_t *key, size_t keylen, uint8_t *out, size_t *outlen,
|
|||||||
poly1305_final(&ctx, out, outlen);
|
poly1305_final(&ctx, out, outlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
poly1305_ctx_new(const void *arg)
|
||||||
|
{
|
||||||
|
return malloc(sizeof(struct poly1305_ctx));
|
||||||
|
}
|
||||||
|
|
||||||
static struct lc_auth_impl poly1305_impl = {
|
static struct lc_auth_impl poly1305_impl = {
|
||||||
.init = &poly1305_init,
|
.init = &poly1305_init,
|
||||||
@ -158,7 +165,8 @@ static struct lc_auth_impl poly1305_impl = {
|
|||||||
.final = &poly1305_final,
|
.final = &poly1305_final,
|
||||||
.auth = &poly1305_auth,
|
.auth = &poly1305_auth,
|
||||||
|
|
||||||
.argsz = sizeof(struct poly1305_ctx),
|
.ctx_new = &poly1305_ctx_new,
|
||||||
|
.ctx_free = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct lc_auth_impl *
|
const struct lc_auth_impl *
|
||||||
|
18
cipher.c
18
cipher.c
@ -82,18 +82,16 @@ struct lc_cipher_ctx *
|
|||||||
lc_cipher_ctx_new(const struct lc_cipher_impl *impl)
|
lc_cipher_ctx_new(const struct lc_cipher_impl *impl)
|
||||||
{
|
{
|
||||||
struct lc_cipher_ctx *ctx;
|
struct lc_cipher_ctx *ctx;
|
||||||
void *arg;
|
|
||||||
|
|
||||||
ctx = malloc(sizeof(*ctx));
|
ctx = malloc(sizeof(*ctx));
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (impl->argsz > 0) {
|
if (impl->ctx_new != NULL) {
|
||||||
arg = malloc(impl->argsz);
|
ctx->arg = impl->ctx_new(NULL);
|
||||||
if (arg == NULL) {
|
if (ctx->arg == NULL) {
|
||||||
free(ctx);
|
free(ctx);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ctx->arg = arg;
|
|
||||||
} else
|
} else
|
||||||
ctx->arg = NULL;
|
ctx->arg = NULL;
|
||||||
ctx->impl = impl;
|
ctx->impl = impl;
|
||||||
@ -104,7 +102,11 @@ lc_cipher_ctx_new(const struct lc_cipher_impl *impl)
|
|||||||
void
|
void
|
||||||
lc_cipher_ctx_free(struct lc_cipher_ctx *ctx)
|
lc_cipher_ctx_free(struct lc_cipher_ctx *ctx)
|
||||||
{
|
{
|
||||||
if (ctx != NULL)
|
if (ctx != NULL && ctx->impl != NULL && ctx->impl->ctx_free != NULL)
|
||||||
free(ctx->arg);
|
ctx->impl->ctx_free(ctx);
|
||||||
free(ctx);
|
else {
|
||||||
|
if (ctx != NULL)
|
||||||
|
free(ctx->arg);
|
||||||
|
free(ctx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
19
cipher.h
19
cipher.h
@ -19,23 +19,24 @@
|
|||||||
|
|
||||||
|
|
||||||
struct lc_cipher_impl {
|
struct lc_cipher_impl {
|
||||||
int (*encrypt_init)(void *, const uint8_t *, size_t,
|
int (*encrypt_init)(void *, const uint8_t *, size_t,
|
||||||
const uint8_t *, size_t);
|
const uint8_t *, size_t);
|
||||||
int (*encrypt_update)(void *, uint8_t *, size_t *, const uint8_t *,
|
int (*encrypt_update)(void *, uint8_t *, size_t *, const uint8_t *,
|
||||||
size_t);
|
size_t);
|
||||||
int (*encrypt_final)(void *, uint8_t *, size_t *);
|
int (*encrypt_final)(void *, uint8_t *, size_t *);
|
||||||
int (*encrypt)(const uint8_t *, size_t, const uint8_t *, size_t,
|
int (*encrypt)(const uint8_t *, size_t, const uint8_t *, size_t,
|
||||||
uint8_t *, size_t *, const uint8_t *, size_t);
|
uint8_t *, size_t *, const uint8_t *, size_t);
|
||||||
|
|
||||||
int (*decrypt_init)(void *, const uint8_t *, size_t,
|
int (*decrypt_init)(void *, const uint8_t *, size_t,
|
||||||
const uint8_t *, size_t);
|
const uint8_t *, size_t);
|
||||||
int (*decrypt_update)(void *, uint8_t *, size_t *, const uint8_t *,
|
int (*decrypt_update)(void *, uint8_t *, size_t *, const uint8_t *,
|
||||||
size_t);
|
size_t);
|
||||||
int (*decrypt_final)(void *, uint8_t *, size_t *);
|
int (*decrypt_final)(void *, uint8_t *, size_t *);
|
||||||
int (*decrypt)(const uint8_t *, size_t, const uint8_t *, size_t,
|
int (*decrypt)(const uint8_t *, size_t, const uint8_t *, size_t,
|
||||||
uint8_t *, size_t *, const uint8_t *, size_t);
|
uint8_t *, size_t *, const uint8_t *, size_t);
|
||||||
|
|
||||||
size_t argsz;
|
void *(*ctx_new)(const void *);
|
||||||
|
void (*ctx_free)(void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lc_cipher_ctx {
|
struct lc_cipher_ctx {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "lilcrypto.h"
|
#include "lilcrypto.h"
|
||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
@ -177,6 +178,12 @@ chacha20_x(const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
chacha20_ctx_new(const void *arg)
|
||||||
|
{
|
||||||
|
return malloc(sizeof(struct chacha20_ctx));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct lc_cipher_impl chacha20_impl = {
|
static struct lc_cipher_impl chacha20_impl = {
|
||||||
.encrypt_init = &chacha20_x_init,
|
.encrypt_init = &chacha20_x_init,
|
||||||
@ -189,7 +196,8 @@ static struct lc_cipher_impl chacha20_impl = {
|
|||||||
.decrypt_final = &chacha20_x_final,
|
.decrypt_final = &chacha20_x_final,
|
||||||
.decrypt = &chacha20_x,
|
.decrypt = &chacha20_x,
|
||||||
|
|
||||||
.argsz = sizeof(struct chacha20_ctx),
|
.ctx_new = &chacha20_ctx_new,
|
||||||
|
.ctx_free = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct lc_cipher_impl *
|
const struct lc_cipher_impl *
|
||||||
|
Loading…
Reference in New Issue
Block a user