UNPKG

mina-attestations

Version:
58 lines 2.04 kB
/** * Native signature credential */ import { Poseidon, PublicKey, Signature } from 'o1js'; import { hashCredential, } from "./credential.js"; import { inferNestedProvable, } from "./nested.js"; import { prefixes } from "./constants.js"; import { ProvableType } from "./o1js-missing.js"; import { deserializeNestedProvableValue } from "./serialize-provable.js"; export { Native, createNative }; const NativeBase = { credentialType: 'native', witness: undefined, witnessType() { return { type: ProvableType.constant('native'), issuer: PublicKey, issuerSignature: Signature, }; }, // verify the signature verify({ issuer, issuerSignature }, credHash) { let ok = issuerSignature.verify(issuer, [credHash]); ok.assertTrue('Invalid signature'); }, async validate({ issuer, issuerSignature }, credHash) { let ok = issuerSignature.verify(issuer, [credHash]); ok.assertTrue('Invalid signature'); }, // issuer == issuer public key issuer({ issuer }) { return Poseidon.hashWithPrefix(prefixes.issuerNative, issuer.toFields()); }, matchesSpec(witness) { return witness.type === 'native'; }, }; function Native(dataType) { return { ...NativeBase, data: inferNestedProvable(dataType) }; } Native.issuer = function (issuer) { return Poseidon.hashWithPrefix(prefixes.issuerNative, issuer.toFields()); }; function createNative(issuerPrivateKey, credentialInput, metadata) { let issuer = issuerPrivateKey.toPublicKey(); let credential = typeof credentialInput === 'string' ? deserializeNestedProvableValue(JSON.parse(credentialInput)) : credentialInput; let credHash = hashCredential(credential); let issuerSignature = Signature.create(issuerPrivateKey, [credHash]); return { version: 'v0', witness: { type: 'native', issuer, issuerSignature }, metadata, credential, }; } //# sourceMappingURL=credential-native.js.map