goto out;
                }
 
+               if (speed[i].klen)
+                       crypto_hash_setkey(tfm, tvmem[0], speed[i].klen);
+
                printk(KERN_INFO "test%3u "
                       "(%5u byte blocks,%5u bytes per update,%4u updates): ",
                       i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
                test_hash_speed("rmd320", sec, generic_hash_speed_template);
                if (mode > 300 && mode < 400) break;
 
+       case 318:
+               test_hash_speed("ghash-generic", sec, hash_speed_template_16);
+               if (mode > 300 && mode < 400) break;
+
        case 399:
                break;
 
 
 struct hash_speed {
        unsigned int blen;      /* buffer length */
        unsigned int plen;      /* per-update length */
+       unsigned int klen;      /* key length */
 };
 
 /*
        {  .blen = 0,   .plen = 0, }
 };
 
+static struct hash_speed hash_speed_template_16[] = {
+       { .blen = 16,   .plen = 16,     .klen = 16, },
+       { .blen = 64,   .plen = 16,     .klen = 16, },
+       { .blen = 64,   .plen = 64,     .klen = 16, },
+       { .blen = 256,  .plen = 16,     .klen = 16, },
+       { .blen = 256,  .plen = 64,     .klen = 16, },
+       { .blen = 256,  .plen = 256,    .klen = 16, },
+       { .blen = 1024, .plen = 16,     .klen = 16, },
+       { .blen = 1024, .plen = 256,    .klen = 16, },
+       { .blen = 1024, .plen = 1024,   .klen = 16, },
+       { .blen = 2048, .plen = 16,     .klen = 16, },
+       { .blen = 2048, .plen = 256,    .klen = 16, },
+       { .blen = 2048, .plen = 1024,   .klen = 16, },
+       { .blen = 2048, .plen = 2048,   .klen = 16, },
+       { .blen = 4096, .plen = 16,     .klen = 16, },
+       { .blen = 4096, .plen = 256,    .klen = 16, },
+       { .blen = 4096, .plen = 1024,   .klen = 16, },
+       { .blen = 4096, .plen = 4096,   .klen = 16, },
+       { .blen = 8192, .plen = 16,     .klen = 16, },
+       { .blen = 8192, .plen = 256,    .klen = 16, },
+       { .blen = 8192, .plen = 1024,   .klen = 16, },
+       { .blen = 8192, .plen = 4096,   .klen = 16, },
+       { .blen = 8192, .plen = 8192,   .klen = 16, },
+
+       /* End marker */
+       {  .blen = 0,   .plen = 0,      .klen = 0, }
+};
+
 #endif /* _CRYPTO_TCRYPT_H */