-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzkauth.circom
48 lines (34 loc) · 1.09 KB
/
zkauth.circom
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
pragma circom 2.0.0;
include "./circomlib/circuits/sha256/Sha256.circom";
template HashChecker (N) {
// Declaration of signals.
signal input value;
signal input hashToCheck;
signal output out;
component sha256 = Sha256(256);
sha256.in <== value + N;
var hashedValue = sha256.out;
// Constraints.
out <== hashToCheck - hashedValue; // should be 0
out === 0;
signal dummy;
dummy <== value * hashToCheck;
}
//This circuit multiplies in1, in2, and in3.
template ZKAuth () {
//Declaration of signals and components.
signal input password;
signal input passwordHash;
signal input passwordPlusOneHash;
signal output out;
component pwdChecker = HashChecker(0);
component pwdPlusOneChecker = HashChecker(1);
//Statements.
pwdChecker.value <== password;
pwdChecker.hashToCheck <== passwordHash;
pwdPlusOneChecker.value <== password;
pwdPlusOneChecker.hashToCheck <== passwordPlusOneHash;
var result = pwdChecker.out * pwdPlusOneChecker.out; // should be 0
out <== result;
}
component main {public [passwordHash]} = ZKAuth();