projects
/
BearSSL
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Some documentation fixes.
[BearSSL]
/
src
/
aead
/
gcm.c
diff --git
a/src/aead/gcm.c
b/src/aead/gcm.c
index
9cf0f38
..
ede5f08
100644
(file)
--- a/
src/aead/gcm.c
+++ b/
src/aead/gcm.c
@@
-56,6
+56,7
@@
br_gcm_init(br_gcm_context *ctx, const br_block_ctr_class **bctx, br_ghash gh)
{
unsigned char iv[12];
{
unsigned char iv[12];
+ ctx->vtable = &br_gcm_vtable;
ctx->bctx = bctx;
ctx->gh = gh;
ctx->bctx = bctx;
ctx->gh = gh;
@@
-262,9
+263,19
@@
br_gcm_get_tag(br_gcm_context *ctx, void *tag)
(*ctx->bctx)->run(ctx->bctx, ctx->j0_1, ctx->j0_2, tag, 16);
}
(*ctx->bctx)->run(ctx->bctx, ctx->j0_1, ctx->j0_2, tag, 16);
}
+/* see bearssl_aead.h */
+void
+br_gcm_get_tag_trunc(br_gcm_context *ctx, void *tag, size_t len)
+{
+ unsigned char tmp[16];
+
+ br_gcm_get_tag(ctx, tmp);
+ memcpy(tag, tmp, len);
+}
+
/* see bearssl_aead.h */
uint32_t
/* see bearssl_aead.h */
uint32_t
-br_gcm_check_tag
(br_gcm_context *ctx, const void *tag
)
+br_gcm_check_tag
_trunc(br_gcm_context *ctx, const void *tag, size_t len
)
{
unsigned char tmp[16];
size_t u;
{
unsigned char tmp[16];
size_t u;
@@
-272,12
+283,19
@@
br_gcm_check_tag(br_gcm_context *ctx, const void *tag)
br_gcm_get_tag(ctx, tmp);
x = 0;
br_gcm_get_tag(ctx, tmp);
x = 0;
- for (u = 0; u <
sizeof tmp
; u ++) {
+ for (u = 0; u <
len
; u ++) {
x |= tmp[u] ^ ((const unsigned char *)tag)[u];
}
return EQ0(x);
}
x |= tmp[u] ^ ((const unsigned char *)tag)[u];
}
return EQ0(x);
}
+/* see bearssl_aead.h */
+uint32_t
+br_gcm_check_tag(br_gcm_context *ctx, const void *tag)
+{
+ return br_gcm_check_tag_trunc(ctx, tag, 16);
+}
+
/* see bearssl_aead.h */
const br_aead_class br_gcm_vtable = {
16,
/* see bearssl_aead.h */
const br_aead_class br_gcm_vtable = {
16,
@@
-292,5
+310,9
@@
const br_aead_class br_gcm_vtable = {
(void (*)(const br_aead_class **, void *))
&br_gcm_get_tag,
(uint32_t (*)(const br_aead_class **, const void *))
(void (*)(const br_aead_class **, void *))
&br_gcm_get_tag,
(uint32_t (*)(const br_aead_class **, const void *))
- &br_gcm_check_tag
+ &br_gcm_check_tag,
+ (void (*)(const br_aead_class **, void *, size_t))
+ &br_gcm_get_tag_trunc,
+ (uint32_t (*)(const br_aead_class **, const void *, size_t))
+ &br_gcm_check_tag_trunc
};
};