Skip to content

Commit

Permalink
🥣 Add serialization methods to provable HumanIDv1
Browse files Browse the repository at this point in the history
  • Loading branch information
KimlikDAO-bot committed May 18, 2024
1 parent 88cfc98 commit ac29ded
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib
Submodule lib updated 3 files
+11 −15 birimler/devSunucu.js
+3 −3 mina/mina.js
+6 −3 util/çevir.js
33 changes: 32 additions & 1 deletion mina/HumanIDv1.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { readField, readSignature } from "@kimlikdao/lib/mina/mina";
import { uint8ArrayBEtoBigInt } from "@kimlikdao/lib/util/çevir";
import {
Field,
MerkleWitness,
Expand All @@ -11,13 +13,38 @@ import {
state,
} from "o1js";

const readPublicKey = (bytes: Uint8Array) => PublicKey.from({
x: uint8ArrayBEtoBigInt(bytes.subarray(0, 32)),
isOdd: !!bytes[32]
});

const readField = (bytes: Uint8Array) => Field(uint8ArrayBEtoBigInt(bytes.subarray(0, 32)));

const readSignature = (bytes: Uint8Array) => new Signature(
readField(bytes),
readField(bytes.subarray(32))
);

class HumanIDv1 extends Struct({
id: Field,
commitmentR: Field,
sig0: Signature,
sig1: Signature,
sig2: Signature,
}) { }
}) {
/**
* @param bytes Uint8Array of length 256, where each field is written in BE encoding.
*/
static fromBytes(bytes: Uint8Array) {
return new HumanIDv1({
id: readField(bytes),
commitmentR: readField(bytes.subarray(32)),
sig0: readSignature(bytes.subarray(64)),
sig1: readSignature(bytes.subarray(128)),
sig2: readSignature(bytes.subarray(192))
})
}
}

class HumanIDv1Witness extends MerkleWitness(33) { }

Expand Down Expand Up @@ -94,5 +121,9 @@ export {
KPassSigners,
PerHumanIDv1Contract,
authenticate,
readField,
readPublicKey,
readSignature,
requireConsistent
};

0 comments on commit ac29ded

Please sign in to comment.