//go:build wasm //:build wasm package signer import ( "git.smesh.lol/smesh/web/common/jsbridge/callback" "unsafe" ) //:wasmimport bridge signer_has_signer func wasmHasSigner() (n int32) //:wasmimport bridge signer_has_mls func wasmHasMLS() (n int32) //:wasmimport bridge signer_get_public_key func wasmGetPublicKey(cbID int32) //:wasmimport bridge signer_sign_event func wasmSignEvent(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_get_shared_secret func wasmGetSharedSecret(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_nip44_decrypt func wasmNip44Decrypt(pkPtr *byte, pkLen int32, pkCap int32, ctPtr *byte, ctLen int32, ctCap int32, cbID int32) //:wasmimport bridge signer_nip44_encrypt func wasmNip44Encrypt(pkPtr *byte, pkLen int32, pkCap int32, ptPtr *byte, ptLen int32, ptCap int32, cbID int32) //:wasmimport bridge signer_is_installed func wasmIsInstalled(cbID int32) //:wasmimport bridge signer_get_vault_status func wasmGetVaultStatus(cbID int32) //:wasmimport bridge signer_create_vault func wasmCreateVault(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_unlock_vault func wasmUnlockVault(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_last_unlock_error func wasmLastUnlockError(cbID int32) //:wasmimport bridge signer_lock_vault func wasmLockVault(cbID int32) //:wasmimport bridge signer_list_identities func wasmListIdentities(cbID int32) //:wasmimport bridge signer_add_identity func wasmAddIdentity(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_nsec_login func wasmNsecLogin(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_switch_identity func wasmSwitchIdentity(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_export_vault func wasmExportVault(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_import_vault func wasmImportVault(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_remove_identity func wasmRemoveIdentity(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_generate_mnemonic func wasmGenerateMnemonic(cbID int32) //:wasmimport bridge signer_validate_mnemonic func wasmValidateMnemonic(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_create_hd_vault func wasmCreateHDVault(pwPtr *byte, pwLen int32, pwCap int32, mnPtr *byte, mnLen int32, mnCap int32, cbID int32) //:wasmimport bridge signer_restore_hd_vault func wasmRestoreHDVault(pwPtr *byte, pwLen int32, pwCap int32, mnPtr *byte, mnLen int32, mnCap int32, lblPtr *byte, lblLen int32, lblCap int32, cbID int32) //:wasmimport bridge signer_derive_identity func wasmDeriveIdentity(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_get_mnemonic func wasmGetMnemonic(cbID int32) //:wasmimport bridge signer_probe_account func wasmProbeAccount(index int32, cbID int32) //:wasmimport bridge signer_is_hd func wasmIsHD(cbID int32) //:wasmimport bridge signer_reset_extension func wasmResetExtension(cbID int32) //:wasmimport bridge signer_nwc_list func wasmNwcList(cbID int32) //:wasmimport bridge signer_nwc_add func wasmNwcAdd(uriPtr *byte, uriLen int32, uriCap int32, aliasPtr *byte, aliasLen int32, aliasCap int32, createdAt int64, cbID int32) //:wasmimport bridge signer_nwc_remove func wasmNwcRemove(ptr *byte, len int32, cap int32, cbID int32) //:wasmimport bridge signer_nwc_build_request func wasmNwcBuildRequest(idPtr *byte, idLen int32, idCap int32, methodPtr *byte, methodLen int32, methodCap int32, paramsPtr *byte, paramsLen int32, paramsCap int32, encPtr *byte, encLen int32, encCap int32, createdAt int64, cbID int32) //:wasmimport bridge signer_nwc_parse_response func wasmNwcParseResponse(idPtr *byte, idLen int32, idCap int32, ctPtr *byte, ctLen int32, ctCap int32, encPtr *byte, encLen int32, encCap int32, cbID int32) //:wasmimport bridge signer_on_state_change func wasmOnStateChange(cbID int32) //:wasmimport bridge signer_ecdh_with_secret func wasmEcdhWithSecret(skPtr *byte, skLen int32, skCap int32, pkPtr *byte, pkLen int32, pkCap int32, cbID int32) //:wasmimport bridge signer_sign_with_secret func wasmSignWithSecret(skPtr *byte, skLen int32, skCap int32, evPtr *byte, evLen int32, evCap int32, cbID int32) //:wasmimport bridge signer_pubkey_from_secret func wasmPubkeyFromSecret(skPtr *byte, skLen int32, skCap int32, cbID int32) func HasSigner() (ok bool) { return wasmHasSigner() != 0 } func HasMLS() (ok bool) { return wasmHasMLS() != 0 } func GetPublicKey(fn func(string)) { wasmGetPublicKey(callback.RegisterSOnce(fn)) } func SignEvent(eventJSON string, fn func(string)) { wasmSignEvent(unsafe.StringData(eventJSON), int32(len(eventJSON)), int32(len(eventJSON)), callback.RegisterSOnce(fn)) } func GetSharedSecret(peerPubkey string, fn func(string)) { wasmGetSharedSecret(unsafe.StringData(peerPubkey), int32(len(peerPubkey)), int32(len(peerPubkey)), callback.RegisterSOnce(fn)) } func Nip44Decrypt(peerPubkey, ciphertext string, fn func(string)) { wasmNip44Decrypt( unsafe.StringData(peerPubkey), int32(len(peerPubkey)), int32(len(peerPubkey)), unsafe.StringData(ciphertext), int32(len(ciphertext)), int32(len(ciphertext)), callback.RegisterSOnce(fn), ) } func Nip44Encrypt(peerPubkey, plaintext string, fn func(string)) { wasmNip44Encrypt( unsafe.StringData(peerPubkey), int32(len(peerPubkey)), int32(len(peerPubkey)), unsafe.StringData(plaintext), int32(len(plaintext)), int32(len(plaintext)), callback.RegisterSOnce(fn), ) } func IsInstalled(fn func(bool)) { wasmIsInstalled(callback.RegisterBOnce(fn)) } func GetVaultStatus(fn func(string)) { wasmGetVaultStatus(callback.RegisterSOnce(fn)) } func CreateVault(password string, fn func(bool)) { wasmCreateVault(unsafe.StringData(password), int32(len(password)), int32(len(password)), callback.RegisterBOnce(fn)) } func UnlockVault(password string, fn func(bool)) { wasmUnlockVault(unsafe.StringData(password), int32(len(password)), int32(len(password)), callback.RegisterBOnce(fn)) } func LastUnlockError(fn func(string)) { wasmLastUnlockError(callback.RegisterSOnce(fn)) } func LockVault(fn func()) { wasmLockVault(callback.Register0Once(fn)) } func ListIdentities(fn func(string)) { wasmListIdentities(callback.RegisterSOnce(fn)) } func AddIdentity(nsec string, fn func(bool)) { wasmAddIdentity(unsafe.StringData(nsec), int32(len(nsec)), int32(len(nsec)), callback.RegisterBOnce(fn)) } func NsecLogin(nsec string, fn func(bool)) { wasmNsecLogin(unsafe.StringData(nsec), int32(len(nsec)), int32(len(nsec)), callback.RegisterBOnce(fn)) } func SwitchIdentity(pubkey string, fn func(bool)) { wasmSwitchIdentity(unsafe.StringData(pubkey), int32(len(pubkey)), int32(len(pubkey)), callback.RegisterBOnce(fn)) } func ExportVault(password string, fn func(string)) { wasmExportVault(unsafe.StringData(password), int32(len(password)), int32(len(password)), callback.RegisterSOnce(fn)) } func ImportVault(data string, fn func(bool)) { wasmImportVault(unsafe.StringData(data), int32(len(data)), int32(len(data)), callback.RegisterBOnce(fn)) } func RemoveIdentity(pubkey string, fn func(bool)) { wasmRemoveIdentity(unsafe.StringData(pubkey), int32(len(pubkey)), int32(len(pubkey)), callback.RegisterBOnce(fn)) } func GenerateMnemonic(fn func(string)) { wasmGenerateMnemonic(callback.RegisterSOnce(fn)) } func ValidateMnemonic(mnemonic string, fn func(bool)) { wasmValidateMnemonic(unsafe.StringData(mnemonic), int32(len(mnemonic)), int32(len(mnemonic)), callback.RegisterBOnce(fn)) } func CreateHDVault(password, mnemonic string, fn func(string)) { wasmCreateHDVault( unsafe.StringData(password), int32(len(password)), int32(len(password)), unsafe.StringData(mnemonic), int32(len(mnemonic)), int32(len(mnemonic)), callback.RegisterSOnce(fn), ) } func RestoreHDVault(password, mnemonic, label string, fn func(bool)) { wasmRestoreHDVault( unsafe.StringData(password), int32(len(password)), int32(len(password)), unsafe.StringData(mnemonic), int32(len(mnemonic)), int32(len(mnemonic)), unsafe.StringData(label), int32(len(label)), int32(len(label)), callback.RegisterBOnce(fn), ) } func DeriveIdentity(accountStr string, fn func(string)) { wasmDeriveIdentity(unsafe.StringData(accountStr), int32(len(accountStr)), int32(len(accountStr)), callback.RegisterSOnce(fn)) } func GetMnemonic(fn func(string)) { wasmGetMnemonic(callback.RegisterSOnce(fn)) } func ProbeAccount(index int32, fn func(string)) { wasmProbeAccount(index, callback.RegisterSOnce(fn)) } func IsHD(fn func(bool)) { wasmIsHD(callback.RegisterBOnce(fn)) } func ResetExtension(fn func(bool)) { wasmResetExtension(callback.RegisterBOnce(fn)) } func NwcList(fn func(string)) { wasmNwcList(callback.RegisterSOnce(fn)) } func NwcAdd(uri, alias string, createdAt int64, fn func(string)) { wasmNwcAdd( unsafe.StringData(uri), int32(len(uri)), int32(len(uri)), unsafe.StringData(alias), int32(len(alias)), int32(len(alias)), createdAt, callback.RegisterSOnce(fn), ) } func NwcRemove(id string, fn func(bool)) { wasmNwcRemove(unsafe.StringData(id), int32(len(id)), int32(len(id)), callback.RegisterBOnce(fn)) } func NwcBuildRequest(id, method, paramsJSON, encryption string, createdAt int64, fn func(string)) { wasmNwcBuildRequest( unsafe.StringData(id), int32(len(id)), int32(len(id)), unsafe.StringData(method), int32(len(method)), int32(len(method)), unsafe.StringData(paramsJSON), int32(len(paramsJSON)), int32(len(paramsJSON)), unsafe.StringData(encryption), int32(len(encryption)), int32(len(encryption)), createdAt, callback.RegisterSOnce(fn), ) } func NwcParseResponse(id, ciphertext, encryption string, fn func(string)) { wasmNwcParseResponse( unsafe.StringData(id), int32(len(id)), int32(len(id)), unsafe.StringData(ciphertext), int32(len(ciphertext)), int32(len(ciphertext)), unsafe.StringData(encryption), int32(len(encryption)), int32(len(encryption)), callback.RegisterSOnce(fn), ) } // OnStateChange registers a persistent (non-once) string callback. // The JS bridge calls it on every state change for the session lifetime. func OnStateChange(fn func(string)) { wasmOnStateChange(callback.RegisterS(fn)) } // EcdhWithSecret: ECDH with a caller-provided secret key (not the vault identity). // secretHex is 64-char hex secret key, peerPubkeyHex is 64-char hex pubkey. // fn receives the shared secret as 64-char hex, or "" on failure. func EcdhWithSecret(secretHex, peerPubkeyHex string, fn func(string)) { wasmEcdhWithSecret( unsafe.StringData(secretHex), int32(len(secretHex)), int32(len(secretHex)), unsafe.StringData(peerPubkeyHex), int32(len(peerPubkeyHex)), int32(len(peerPubkeyHex)), callback.RegisterSOnce(fn), ) } // SignWithSecret: sign an event with a caller-provided secret key. // secretHex is 64-char hex secret key, eventJSON is the unsigned event. // fn receives the signed event JSON, or "" on failure. func SignWithSecret(secretHex, eventJSON string, fn func(string)) { wasmSignWithSecret( unsafe.StringData(secretHex), int32(len(secretHex)), int32(len(secretHex)), unsafe.StringData(eventJSON), int32(len(eventJSON)), int32(len(eventJSON)), callback.RegisterSOnce(fn), ) } // PubkeyFromSecret: derive x-only pubkey from a caller-provided secret key. // secretHex is 64-char hex secret key. // fn receives the pubkey as 64-char hex, or "" on failure. func PubkeyFromSecret(secretHex string, fn func(string)) { wasmPubkeyFromSecret( unsafe.StringData(secretHex), int32(len(secretHex)), int32(len(secretHex)), callback.RegisterSOnce(fn), ) }