mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	crypto: crc32c - Test descriptor context format
This patch adds a test for the requirement that all crc32c algorithms shall store the partial result in the first four bytes of the descriptor context. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
		
							parent
							
								
									b7e8bdadce
								
							
						
					
					
						commit
						8e3ee85e68
					
				
					 1 changed files with 50 additions and 1 deletions
				
			
		| 
						 | 
					@ -1010,6 +1010,55 @@ static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int alg_test_crc32c(const struct alg_test_desc *desc,
 | 
				
			||||||
 | 
								   const char *driver, u32 type, u32 mask)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct crypto_shash *tfm;
 | 
				
			||||||
 | 
						u32 val;
 | 
				
			||||||
 | 
						int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = alg_test_hash(desc, driver, type, mask);
 | 
				
			||||||
 | 
						if (err)
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tfm = crypto_alloc_shash(driver, type, mask);
 | 
				
			||||||
 | 
						if (IS_ERR(tfm)) {
 | 
				
			||||||
 | 
							printk(KERN_ERR "alg: crc32c: Failed to load transform for %s: "
 | 
				
			||||||
 | 
							       "%ld\n", driver, PTR_ERR(tfm));
 | 
				
			||||||
 | 
							err = PTR_ERR(tfm);
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							struct {
 | 
				
			||||||
 | 
								struct shash_desc shash;
 | 
				
			||||||
 | 
								char ctx[crypto_shash_descsize(tfm)];
 | 
				
			||||||
 | 
							} sdesc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							sdesc.shash.tfm = tfm;
 | 
				
			||||||
 | 
							sdesc.shash.flags = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							*(u32 *)sdesc.ctx = le32_to_cpu(420553207);
 | 
				
			||||||
 | 
							err = crypto_shash_final(&sdesc.shash, (u8 *)&val);
 | 
				
			||||||
 | 
							if (err) {
 | 
				
			||||||
 | 
								printk(KERN_ERR "alg: crc32c: Operation failed for "
 | 
				
			||||||
 | 
								       "%s: %d\n", driver, err);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (val != ~420553207) {
 | 
				
			||||||
 | 
								printk(KERN_ERR "alg: crc32c: Test failed for %s: "
 | 
				
			||||||
 | 
								       "%d\n", driver, val);
 | 
				
			||||||
 | 
								err = -EINVAL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} while (0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						crypto_free_shash(tfm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
						return err;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Please keep this list sorted by algorithm name. */
 | 
					/* Please keep this list sorted by algorithm name. */
 | 
				
			||||||
static const struct alg_test_desc alg_test_descs[] = {
 | 
					static const struct alg_test_desc alg_test_descs[] = {
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -1134,7 +1183,7 @@ static const struct alg_test_desc alg_test_descs[] = {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.alg = "crc32c",
 | 
							.alg = "crc32c",
 | 
				
			||||||
		.test = alg_test_hash,
 | 
							.test = alg_test_crc32c,
 | 
				
			||||||
		.suite = {
 | 
							.suite = {
 | 
				
			||||||
			.hash = {
 | 
								.hash = {
 | 
				
			||||||
				.vecs = crc32c_tv_template,
 | 
									.vecs = crc32c_tv_template,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue