From afc580b9b0af0072233e9282915424fd55c366d0 Mon Sep 17 00:00:00 2001 From: Pauli Date: Mon, 5 Nov 2018 08:09:41 +1000 Subject: GMAC implementation Remove GMAC demo program because it has been superceded by the EVP MAC one Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/7548) --- test/evp_test.c | 18 +++++++++ test/recipes/30-test_evp_data/evpmac.txt | 69 ++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) (limited to 'test') diff --git a/test/evp_test.c b/test/evp_test.c index 25b10d3314..18b20af5ff 100644 --- a/test/evp_test.c +++ b/test/evp_test.c @@ -838,6 +838,9 @@ typedef struct mac_data_st { /* MAC key */ unsigned char *key; size_t key_len; + /* MAC IV (GMAC) */ + unsigned char *iv; + size_t iv_len; /* Input to MAC */ unsigned char *input; size_t input_len; @@ -925,6 +928,7 @@ static void mac_test_cleanup(EVP_TEST *t) sk_OPENSSL_STRING_pop_free(mdat->controls, openssl_free); OPENSSL_free(mdat->alg); OPENSSL_free(mdat->key); + OPENSSL_free(mdat->iv); OPENSSL_free(mdat->input); OPENSSL_free(mdat->output); } @@ -936,6 +940,8 @@ static int mac_test_parse(EVP_TEST *t, if (strcmp(keyword, "Key") == 0) return parse_bin(value, &mdata->key, &mdata->key_len); + if (strcmp(keyword, "IV") == 0) + return parse_bin(value, &mdata->iv, &mdata->iv_len); if (strcmp(keyword, "Algorithm") == 0) { mdata->alg = OPENSSL_strdup(value); if (!mdata->alg) @@ -1119,6 +1125,18 @@ static int mac_test_run_mac(EVP_TEST *t) goto err; } + if (expected->iv != NULL) { + rv = EVP_MAC_ctrl(ctx, EVP_MAC_CTRL_SET_IV, + expected->iv, expected->iv_len); + if (rv == -2) { + t->err = "MAC_CTRL_INVALID"; + goto err; + } else if (rv <= 0) { + t->err = "MAC_CTRL_ERROR"; + goto err; + } + } + if (!EVP_MAC_init(ctx)) { t->err = "MAC_INIT_ERROR"; goto err; diff --git a/test/recipes/30-test_evp_data/evpmac.txt b/test/recipes/30-test_evp_data/evpmac.txt index 4788626dc8..82a350763f 100644 --- a/test/recipes/30-test_evp_data/evpmac.txt +++ b/test/recipes/30-test_evp_data/evpmac.txt @@ -386,6 +386,75 @@ Key = 89BCD952A8C8AB371AF48AC7D07085D5EFF702E6D62CDC23 Input = FA620C1BBE97319E9A0CF0492121F7A20EB08A6A709DCBD00AAF38E4F99E754E Output = 8F49A1B7D6AA2258 + +Title = GMAC Tests (from NIST) + +MAC = GMAC +Algorithm = AES-128-GCM +Key = 77BE63708971C4E240D1CB79E8D77FEB +IV = E0E00F19FED7BA0136A797F3 +Input = 7A43EC1D9C0A5A78A0B16533A6213CAB +Output = 209FCC8D3675ED938E9C7166709DD946 + +Title = GMAC Tests (from http://www.ieee802.org/1/files/public/docs2011/bn-randall-test-vectors-0511-v1.pdf) + +MAC = GMAC +Algorithm = AES-128-GCM +Key = AD7A2BD03EAC835A6F620FDCB506B345 +IV = 12153524C0895E81B2C28465 +Input = D609B1F056637A0D46DF998D88E5222AB2C2846512153524C0895E8108000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233340001 +Output = F09478A9B09007D06F46E9B6A1DA25DD + +MAC = GMAC +Algorithm = AES-256-GCM +Key = E3C08A8F06C6E3AD95A70557B23F75483CE33021A9C72B7025666204C69C0B72 +IV = 12153524C0895E81B2C28465 +Input = D609B1F056637A0D46DF998D88E5222AB2C2846512153524C0895E8108000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233340001 +Output = 2F0BC5AF409E06D609EA8B7D0FA5EA50 + +MAC = GMAC +Algorithm = AES-128-GCM +Key = 071B113B0CA743FECCCF3D051F737382 +IV = F0761E8DCD3D000176D457ED +Input = E20106D7CD0DF0761E8DCD3D88E5400076D457ED08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A0003 +Output = 0C017BC73B227DFCC9BAFA1C41ACC353 + +MAC = GMAC +Algorithm = AES-256-GCM +Key = 691D3EE909D7F54167FD1CA0B5D769081F2BDE1AEE655FDBAB80BD5295AE6BE7 +IV = F0761E8DCD3D000176D457ED +Input = E20106D7CD0DF0761E8DCD3D88E5400076D457ED08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A0003 +Output = 35217C774BBC31B63166BCF9D4ABED07 + +MAC = GMAC +Algorithm = AES-128-GCM +Key = 013FE00B5F11BE7F866D0CBBC55A7A90 +IV = 7CFDE9F9E33724C68932D612 +Input = 84C5D513D2AAF6E5BBD2727788E523008932D6127CFDE9F9E33724C608000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F0005 +Output = 217867E50C2DAD74C28C3B50ABDF695A + +MAC = GMAC +Algorithm = AES-256-GCM +Key = 83C093B58DE7FFE1C0DA926AC43FB3609AC1C80FEE1B624497EF942E2F79A823 +IV = 7CFDE9F9E33724C68932D612 +Input = 84C5D513D2AAF6E5BBD2727788E523008932D6127CFDE9F9E33724C608000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F0005 +Output = 6EE160E8FAECA4B36C86B234920CA975 + +MAC = GMAC +Algorithm = AES-128-GCM +Key = 88EE087FD95DA9FBF6725AA9D757B0CD +IV = 7AE8E2CA4EC500012E58495C +Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007 +Output = 07922B8EBCF10BB2297588CA4C614523 + +MAC = GMAC +Algorithm = AES-256-GCM +Key = 4C973DBC7364621674F8B5B89E5C15511FCED9216490FB1C1A2CAA0FFE0407E5 +IV = 7AE8E2CA4EC500012E58495C +Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007 +Output = 00BDA1B7E87608BCBF470F12157F4C07 + + Title = Poly1305 Tests (from RFC 7539 and others) MAC = Poly1305 -- cgit v1.2.3