mina-attestations
Version:
Private Attestations on Mina
58 lines • 2.04 kB
JavaScript
/**
* 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