summaryrefslogtreecommitdiffstats
path: root/crypto/modes
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2011-02-07 18:05:27 +0000
committerDr. Stephen Henson <steve@openssl.org>2011-02-07 18:05:27 +0000
commitfd3dbc1dbf416995089ff9eb1ac99b5cf0beffd7 (patch)
treef7014381377762857b2b484a028de85f5aefc9a9 /crypto/modes
parentd45087c672bd24467e6aea4ef05dbe6a5c420d5a (diff)
Add CRYPTO_gcm128_tag() function to retrieve the tag.
Diffstat (limited to 'crypto/modes')
-rw-r--r--crypto/modes/gcm128.c6
-rw-r--r--crypto/modes/modes.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/crypto/modes/gcm128.c b/crypto/modes/gcm128.c
index 2de858c282..a9e9a34d3f 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 f4aac29938..1af06efbfb 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);