summaryrefslogtreecommitdiffstats
path: root/tools/passwd_gen.c
blob: da162894026d80613d5e075eefb104684b954614 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <u-boot/sha256.h>
#include <string.h>

int main(int argc, char **argv)
{
	char combined[256];
	char sha[32];
	char password[32];
	int i;
	char cset[] =
	    "abcdefghijk#mnopqrstuvwxyzABCDEFGHIJKLMN-PQRSTUVWXYZ@!23456789_*";
	long long pass;
	if (argc != 3) {
		printf("must have exactly 2 args\n");
		printf("usage:   %s secret serialnum\n", argv[0]);
		printf("example:  %s password12345 16777216\n", argv[0]);
		printf(" would generate the password for device sernum 16777216 if the secret is password12345\n");
		exit(1);
	}
	strcpy(combined, argv[1]);
	strcat(combined, argv[2]);
	sha256_csum_wd(combined, strlen(combined), sha, 1024);
	memcpy(&pass, sha, sizeof(pass));
	for (i = 0; i < 8; i++) {
		password[i] = cset[(pass >> (6 * i)) & 0x3f];
	}
	password[8] = 0;
	printf("password:%s\n", password);
}