forked from mirrors/linux
		
	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; | ||||
| } | ||||
| 
 | ||||
| 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. */ | ||||
| static const struct alg_test_desc alg_test_descs[] = { | ||||
| 	{ | ||||
|  | @ -1134,7 +1183,7 @@ static const struct alg_test_desc alg_test_descs[] = { | |||
| 		} | ||||
| 	}, { | ||||
| 		.alg = "crc32c", | ||||
| 		.test = alg_test_hash, | ||||
| 		.test = alg_test_crc32c, | ||||
| 		.suite = { | ||||
| 			.hash = { | ||||
| 				.vecs = crc32c_tv_template, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Herbert Xu
						Herbert Xu