Skip to content

Commit 496f467

Browse files
committed
🥣 Add serialization methods to provable HumanIDv1
1 parent 88cfc98 commit 496f467

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

‎mina/HumanIDv1.ts

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { uint8ArrayBEtoBigInt } from "@kimlikdao/lib/util/çevir";
12
import {
23
Field,
34
MerkleWitness,
@@ -11,13 +12,38 @@ import {
1112
state,
1213
} from "o1js";
1314

15+
const readPublicKey = (bytes: Uint8Array) => PublicKey.from({
16+
x: uint8ArrayBEtoBigInt(bytes.subarray(0, 32)),
17+
isOdd: !!bytes[32]
18+
});
19+
20+
const readField = (bytes: Uint8Array) => Field(uint8ArrayBEtoBigInt(bytes.subarray(0, 32)));
21+
22+
const readSignature = (bytes: Uint8Array) => new Signature(
23+
readField(bytes),
24+
readField(bytes.subarray(32))
25+
);
26+
1427
class HumanIDv1 extends Struct({
1528
id: Field,
1629
commitmentR: Field,
1730
sig0: Signature,
1831
sig1: Signature,
1932
sig2: Signature,
20-
}) { }
33+
}) {
34+
/**
35+
* @param bytes Uint8Array of length 256, where each field is written in BE encoding.
36+
*/
37+
static fromBytes(bytes: Uint8Array) {
38+
return new HumanIDv1({
39+
id: readField(bytes),
40+
commitmentR: readField(bytes.subarray(32)),
41+
sig0: readSignature(bytes.subarray(64)),
42+
sig1: readSignature(bytes.subarray(128)),
43+
sig2: readSignature(bytes.subarray(192))
44+
})
45+
}
46+
}
2147

2248
class HumanIDv1Witness extends MerkleWitness(33) { }
2349

@@ -94,5 +120,9 @@ export {
94120
KPassSigners,
95121
PerHumanIDv1Contract,
96122
authenticate,
123+
readField,
124+
readPublicKey,
125+
readSignature,
97126
requireConsistent
98127
};
128+

‎mina/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"scripts": {
3+
"postinstall": "mkdir -p ./node_modules/@kimlikdao && ln -sfn ../../../lib ./node_modules/@kimlikdao/lib",
34
"build": "tsc",
45
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
56
},

0 commit comments

Comments
 (0)