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; | 	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
	
	 Herbert Xu
						Herbert Xu