import * as $ from "@manahippo/move-to-ts"; import {AptosDataCache, AptosParserRepo, DummyCache, AptosLocalCache} from "@manahippo/move-to-ts"; import {U8, U64, U128} from "@manahippo/move-to-ts"; import {u8, u64, u128} from "@manahippo/move-to-ts"; import {TypeParamDeclType, FieldDeclType} from "@manahippo/move-to-ts"; import {AtomicTypeTag, StructTag, TypeTag, VectorTag, SimpleStructTag} from "@manahippo/move-to-ts"; import {OptionTransaction} from "@manahippo/move-to-ts"; import {HexString, AptosClient, AptosAccount, TxnBuilderTypes, Types} from "aptos"; import * as Error from "./error"; import * as Option from "./option"; import * as Vector from "./vector"; export const packageName = "AptosStdlib"; export const moduleAddress = new HexString("0x1"); export const moduleName = "bls12381"; export const EWRONG_SIZE : U64 = u64("2"); export const EZERO_PUBKEYS : U64 = u64("1"); export const PUBLIC_KEY_NUM_BYTES : U64 = u64("48"); export const RANDOM_PK : U8[] = [u8("138"), u8("83"), u8("231"), u8("174"), u8("82"), u8("112"), u8("227"), u8("231"), u8("101"), u8("205"), u8("138"), u8("64"), u8("50"), u8("194"), u8("231"), u8("124"), u8("111"), u8("126"), u8("135"), u8("164"), u8("78"), u8("187"), u8("133"), u8("191"), u8("40"), u8("164"), u8("215"), u8("134"), u8("85"), u8("101"), u8("105"), u8("143"), u8("151"), u8("83"), u8("70"), u8("113"), u8("66"), u8("98"), u8("249"), u8("228"), u8("124"), u8("111"), u8("62"), u8("13"), u8("93"), u8("149"), u8("22"), u8("96")]; export const RANDOM_SIGNATURE : U8[] = [u8("160"), u8("26"), u8("101"), u8("133"), u8("79"), u8("152"), u8("125"), u8("52"), u8("52"), u8("20"), u8("155"), u8("127"), u8("8"), u8("247"), u8("7"), u8("48"), u8("227"), u8("11"), u8("36"), u8("25"), u8("132"), u8("232"), u8("113"), u8("43"), u8("194"), u8("172"), u8("168"), u8("133"), u8("214"), u8("50"), u8("170"), u8("252"), u8("237"), u8("76"), u8("63"), u8("102"), u8("18"), u8("9"), u8("222"), u8("187"), u8("107"), u8("28"), u8("134"), u8("1"), u8("50"), u8("102"), u8("35"), u8("204"), u8("22"), u8("202"), u8("47"), u8("108"), u8("158"), u8("220"), u8("83"), u8("183"), u8("184"), u8("139"), u8("116"), u8("53"), u8("251"), u8("107"), u8("5"), u8("221"), u8("236"), u8("228"), u8("24"), u8("210"), u8("195"), u8("77"), u8("198"), u8("172"), u8("162"), u8("245"), u8("161"), u8("26"), u8("121"), u8("230"), u8("119"), u8("116"), u8("88"), u8("44"), u8("20"), u8("8"), u8("74"), u8("1"), u8("220"), u8("183"), u8("130"), u8("14"), u8("76"), u8("180"), u8("186"), u8("208"), u8("234"), u8("141")]; export const SIGNATURE_SIZE : U64 = u64("96"); export class AggrOrMultiSignature { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "AggrOrMultiSignature"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static AggrOrMultiSignatureParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : AggrOrMultiSignature { const proto = $.parseStructProto(data, typeTag, repo, AggrOrMultiSignature); return new AggrOrMultiSignature(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "AggrOrMultiSignature", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class AggrPublicKeysWithPoP { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "AggrPublicKeysWithPoP"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static AggrPublicKeysWithPoPParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : AggrPublicKeysWithPoP { const proto = $.parseStructProto(data, typeTag, repo, AggrPublicKeysWithPoP); return new AggrPublicKeysWithPoP(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "AggrPublicKeysWithPoP", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class ProofOfPossession { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "ProofOfPossession"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static ProofOfPossessionParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : ProofOfPossession { const proto = $.parseStructProto(data, typeTag, repo, ProofOfPossession); return new ProofOfPossession(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "ProofOfPossession", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class PublicKey { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "PublicKey"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static PublicKeyParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : PublicKey { const proto = $.parseStructProto(data, typeTag, repo, PublicKey); return new PublicKey(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "PublicKey", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class PublicKeyWithPoP { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "PublicKeyWithPoP"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static PublicKeyWithPoPParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : PublicKeyWithPoP { const proto = $.parseStructProto(data, typeTag, repo, PublicKeyWithPoP); return new PublicKeyWithPoP(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "PublicKeyWithPoP", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class Signature { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = "Signature"; static typeParameters: TypeParamDeclType[] = [ ]; static fields: FieldDeclType[] = [ { name: "bytes", typeTag: new VectorTag(AtomicTypeTag.U8) }]; bytes: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.bytes = proto['bytes'] as U8[]; } static SignatureParser(data:any, typeTag: TypeTag, repo: AptosParserRepo) : Signature { const proto = $.parseStructProto(data, typeTag, repo, Signature); return new Signature(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, "Signature", []); } async loadFullState(app: $.AppType) { this.__app = app; } } export function aggr_or_multi_signature_from_bytes_ ( bytes: U8[], $c: AptosDataCache, ): AggrOrMultiSignature { if (!(Vector.length_(bytes, $c, [AtomicTypeTag.U8])).eq(($.copy(SIGNATURE_SIZE)))) { throw $.abortCode(Error.invalid_argument_($.copy(EWRONG_SIZE), $c)); } return new AggrOrMultiSignature({ bytes: $.copy(bytes) }, new SimpleStructTag(AggrOrMultiSignature)); } export function aggr_or_multi_signature_subgroup_check_ ( signature: AggrOrMultiSignature, $c: AptosDataCache, ): boolean { return signature_subgroup_check_internal_($.copy(signature.bytes), $c); } export function aggr_or_multi_signature_to_bytes_ ( sig: AggrOrMultiSignature, $c: AptosDataCache, ): U8[] { return $.copy(sig.bytes); } export function aggregate_pubkey_to_bytes_ ( apk: AggrPublicKeysWithPoP, $c: AptosDataCache, ): U8[] { return $.copy(apk.bytes); } export function aggregate_pubkeys_ ( public_keys: PublicKeyWithPoP[], $c: AptosDataCache, ): AggrPublicKeysWithPoP { let bytes, success; [bytes, success] = aggregate_pubkeys_internal_($.copy(public_keys), $c); if (!success) { throw $.abortCode(Error.invalid_argument_($.copy(EZERO_PUBKEYS), $c)); } return new AggrPublicKeysWithPoP({ bytes: $.copy(bytes) }, new SimpleStructTag(AggrPublicKeysWithPoP)); } export function aggregate_pubkeys_internal_ ( public_keys: PublicKeyWithPoP[], $c: AptosDataCache, ): [U8[], boolean] { return $.aptos_std_bls12381_aggregate_pubkeys_internal(public_keys, $c); } export function aggregate_signatures_ ( signatures: Signature[], $c: AptosDataCache, ): Option.Option { let temp$1, bytes, success; [bytes, success] = aggregate_signatures_internal_($.copy(signatures), $c); if (success) { temp$1 = Option.some_(new AggrOrMultiSignature({ bytes: $.copy(bytes) }, new SimpleStructTag(AggrOrMultiSignature)), $c, [new SimpleStructTag(AggrOrMultiSignature)]); } else{ temp$1 = Option.none_($c, [new SimpleStructTag(AggrOrMultiSignature)]); } return temp$1; } export function aggregate_signatures_internal_ ( signatures: Signature[], $c: AptosDataCache, ): [U8[], boolean] { return $.aptos_std_bls12381_aggregate_signatures_internal(signatures, $c); } export function proof_of_possession_from_bytes_ ( bytes: U8[], $c: AptosDataCache, ): ProofOfPossession { return new ProofOfPossession({ bytes: $.copy(bytes) }, new SimpleStructTag(ProofOfPossession)); } export function proof_of_possession_to_bytes_ ( pop: ProofOfPossession, $c: AptosDataCache, ): U8[] { return $.copy(pop.bytes); } export function public_key_from_bytes_ ( bytes: U8[], $c: AptosDataCache, ): Option.Option { let temp$1; if (validate_pubkey_internal_($.copy(bytes), $c)) { temp$1 = Option.some_(new PublicKey({ bytes: $.copy(bytes) }, new SimpleStructTag(PublicKey)), $c, [new SimpleStructTag(PublicKey)]); } else{ temp$1 = Option.none_($c, [new SimpleStructTag(PublicKey)]); } return temp$1; } export function public_key_from_bytes_with_pop_ ( pk_bytes: U8[], pop: ProofOfPossession, $c: AptosDataCache, ): Option.Option { let temp$1; if (verify_proof_of_possession_internal_($.copy(pk_bytes), $.copy(pop.bytes), $c)) { temp$1 = Option.some_(new PublicKeyWithPoP({ bytes: $.copy(pk_bytes) }, new SimpleStructTag(PublicKeyWithPoP)), $c, [new SimpleStructTag(PublicKeyWithPoP)]); } else{ temp$1 = Option.none_($c, [new SimpleStructTag(PublicKeyWithPoP)]); } return temp$1; } export function public_key_to_bytes_ ( pk: PublicKey, $c: AptosDataCache, ): U8[] { return $.copy(pk.bytes); } export function public_key_with_pop_to_bytes_ ( pk: PublicKeyWithPoP, $c: AptosDataCache, ): U8[] { return $.copy(pk.bytes); } export function signature_from_bytes_ ( bytes: U8[], $c: AptosDataCache, ): Signature { return new Signature({ bytes: $.copy(bytes) }, new SimpleStructTag(Signature)); } export function signature_subgroup_check_ ( signature: Signature, $c: AptosDataCache, ): boolean { return signature_subgroup_check_internal_($.copy(signature.bytes), $c); } export function signature_subgroup_check_internal_ ( signature: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_signature_subgroup_check_internal(signature, $c); } export function signature_to_bytes_ ( sig: Signature, $c: AptosDataCache, ): U8[] { return $.copy(sig.bytes); } export function validate_pubkey_internal_ ( public_key: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_validate_pubkey_internal(public_key, $c); } export function verify_aggregate_signature_ ( aggr_sig: AggrOrMultiSignature, public_keys: PublicKeyWithPoP[], messages: U8[][], $c: AptosDataCache, ): boolean { return verify_aggregate_signature_internal_($.copy(aggr_sig.bytes), $.copy(public_keys), $.copy(messages), $c); } export function verify_aggregate_signature_internal_ ( aggsig: U8[], public_keys: PublicKeyWithPoP[], messages: U8[][], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_verify_aggregate_signature_internal(aggsig, public_keys, messages, $c); } export function verify_multisignature_ ( multisig: AggrOrMultiSignature, aggr_public_key: AggrPublicKeysWithPoP, message: U8[], $c: AptosDataCache, ): boolean { return verify_multisignature_internal_($.copy(multisig.bytes), $.copy(aggr_public_key.bytes), $.copy(message), $c); } export function verify_multisignature_internal_ ( multisignature: U8[], agg_public_key: U8[], message: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_verify_multisignature_internal(multisignature, agg_public_key, message, $c); } export function verify_normal_signature_ ( signature: Signature, public_key: PublicKey, message: U8[], $c: AptosDataCache, ): boolean { return verify_normal_signature_internal_($.copy(signature.bytes), $.copy(public_key.bytes), $.copy(message), $c); } export function verify_normal_signature_internal_ ( signature: U8[], public_key: U8[], message: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_verify_normal_signature_internal(signature, public_key, message, $c); } export function verify_proof_of_possession_internal_ ( public_key: U8[], proof_of_possesion: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_verify_proof_of_possession_internal(public_key, proof_of_possesion, $c); } export function verify_signature_share_ ( signature_share: Signature, public_key: PublicKeyWithPoP, message: U8[], $c: AptosDataCache, ): boolean { return verify_signature_share_internal_($.copy(signature_share.bytes), $.copy(public_key.bytes), $.copy(message), $c); } export function verify_signature_share_internal_ ( signature_share: U8[], public_key: U8[], message: U8[], $c: AptosDataCache, ): boolean { return $.aptos_std_bls12381_verify_signature_share_internal(signature_share, public_key, message, $c); } export function loadParsers(repo: AptosParserRepo) { repo.addParser("0x1::bls12381::AggrOrMultiSignature", AggrOrMultiSignature.AggrOrMultiSignatureParser); repo.addParser("0x1::bls12381::AggrPublicKeysWithPoP", AggrPublicKeysWithPoP.AggrPublicKeysWithPoPParser); repo.addParser("0x1::bls12381::ProofOfPossession", ProofOfPossession.ProofOfPossessionParser); repo.addParser("0x1::bls12381::PublicKey", PublicKey.PublicKeyParser); repo.addParser("0x1::bls12381::PublicKeyWithPoP", PublicKeyWithPoP.PublicKeyWithPoPParser); repo.addParser("0x1::bls12381::Signature", Signature.SignatureParser); } export class App { constructor( public client: AptosClient, public repo: AptosParserRepo, public cache: AptosLocalCache, ) { } get moduleAddress() {{ return moduleAddress; }} get moduleName() {{ return moduleName; }} get AggrOrMultiSignature() { return AggrOrMultiSignature; } get AggrPublicKeysWithPoP() { return AggrPublicKeysWithPoP; } get ProofOfPossession() { return ProofOfPossession; } get PublicKey() { return PublicKey; } get PublicKeyWithPoP() { return PublicKeyWithPoP; } get Signature() { return Signature; } }