diff --git a/crypto/modes/gcm128.c b/crypto/modes/gcm128.c index 2de858c28..a9e9a34d3 100644 --- a/crypto/modes/gcm128.c +++ b/crypto/modes/gcm128.c @@ -1337,6 +1337,12 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag, return -1; } +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len) +{ + CRYPTO_gcm128_finish(ctx, NULL, 0); + memcpy(tag, ctx->Xi.c, len); +} + GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block) { GCM128_CONTEXT *ret; diff --git a/crypto/modes/modes.h b/crypto/modes/modes.h index f4aac2993..1af06efbf 100644 --- a/crypto/modes/modes.h +++ b/crypto/modes/modes.h @@ -102,4 +102,5 @@ void CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, size_t len, ctr128_f stream); int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag, size_t len); +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);