xref: /illumos-gate/usr/src/boot/libsa/crypto/digest.c (revision 22028508)
1a103f15bSToomas Soome 
2a103f15bSToomas Soome #include <sys/cdefs.h>
3a103f15bSToomas Soome #include <stand.h>
4a103f15bSToomas Soome #include <sys/sha1.h>
5a103f15bSToomas Soome 
6a103f15bSToomas Soome #include <bootstrap.h>
7a103f15bSToomas Soome 
806469a5cSToomas Soome void
sha1(void * data,size_t size,uint8_t * result)9a103f15bSToomas Soome sha1(void *data, size_t size, uint8_t *result)
10a103f15bSToomas Soome {
11a103f15bSToomas Soome 	SHA1_CTX sha1_ctx;
12a103f15bSToomas Soome 
13a103f15bSToomas Soome 	SHA1Init(&sha1_ctx);
14a103f15bSToomas Soome 	SHA1Update(&sha1_ctx, data, size);
15a103f15bSToomas Soome 	SHA1Final(result, &sha1_ctx);
16a103f15bSToomas Soome }
17a103f15bSToomas Soome 
18a103f15bSToomas Soome static int
command_sha1(int argc,char ** argv)19a103f15bSToomas Soome command_sha1(int argc, char **argv)
20a103f15bSToomas Soome {
21a103f15bSToomas Soome 	void *ptr;
22a103f15bSToomas Soome 	size_t size, i;
23a103f15bSToomas Soome 	uint8_t resultbuf[SHA1_DIGEST_LENGTH];
24a103f15bSToomas Soome 
25a103f15bSToomas Soome 	/*
26a103f15bSToomas Soome 	 * usage: address size
27a103f15bSToomas Soome 	 */
28a103f15bSToomas Soome 	if (argc != 3) {
29a103f15bSToomas Soome 		command_errmsg = "usage: address size";
30a103f15bSToomas Soome 		return (CMD_ERROR);
31a103f15bSToomas Soome 	}
32a103f15bSToomas Soome 
33a103f15bSToomas Soome 	ptr = (void *)(uintptr_t)strtol(argv[1], NULL, 0);
34a103f15bSToomas Soome 	size = strtol(argv[2], NULL, 0);
3506469a5cSToomas Soome 	sha1(ptr, size, resultbuf);
36a103f15bSToomas Soome 
37a103f15bSToomas Soome 	for (i = 0; i < SHA1_DIGEST_LENGTH; i++)
38a103f15bSToomas Soome 		printf("%02x", resultbuf[i]);
39a103f15bSToomas Soome 	printf("\n");
40a103f15bSToomas Soome 	return (CMD_OK);
41a103f15bSToomas Soome }
42a103f15bSToomas Soome 
43a103f15bSToomas Soome COMMAND_SET(sha1, "sha1", "print the sha1 checksum", command_sha1);
44