File: scramble.c

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (75 lines) | stat: -rw-r--r-- 1,687 bytes parent folder | download | duplicates (3)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "scramble.h"
#include "random.h"
#include "third_party/sha1.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "unit.h"

void
test_scramble()
{
	int salt[SCRAMBLE_SIZE/sizeof(int)];
	for (unsigned i = 0; i < sizeof(salt)/sizeof(int); i++)
		salt[i] = rand();

	char *password = "lechododilikraskaloh";
	unsigned char hash2[SCRAMBLE_SIZE];

	SHA1_CTX ctx;

	SHA1Init(&ctx);
	SHA1Update(&ctx, (unsigned char *) password, strlen(password));
	SHA1Final(hash2, &ctx);

	SHA1Init(&ctx);
	SHA1Update(&ctx, hash2, SCRAMBLE_SIZE);
	SHA1Final(hash2, &ctx);

	char scramble[SCRAMBLE_SIZE];

	scramble_prepare(scramble, salt, password, strlen(password));

	printf("%d\n", scramble_check(scramble, salt, hash2));

	int remote_salt[SCRAMBLE_SIZE/sizeof(int)];
	for(size_t i = 0; i < sizeof(salt)/sizeof(int); ++i)
		remote_salt[i] = rand();

	char new_scramble[SCRAMBLE_SIZE];

	scramble_reencode(new_scramble, scramble, salt, remote_salt, hash2);

	printf("%d\n", scramble_check(new_scramble, remote_salt, hash2));

	password = "wrongpass";
	scramble_prepare(scramble, salt, password, strlen(password));

	printf("%d\n", scramble_check(scramble, salt, hash2) != 0);

	scramble_prepare(scramble, salt, password, 0);

	printf("%d\n", scramble_check(scramble, salt, hash2) != 0);
}

void
test_password_prepare()
{
	char buf[SCRAMBLE_BASE64_SIZE * 2];
	int password[5];
	for (unsigned i = 0; i < sizeof(password)/sizeof(int); i++)
		password[i] = rand();
	password_prepare((char *) password, sizeof(password),
			 buf, sizeof(buf));
	fail_unless(strlen(buf) == SCRAMBLE_BASE64_SIZE);
}

int main()
{
	random_init();

	test_scramble();
	test_password_prepare();

	return 0;
}