ssi.nostr.decryptSync()

Callback type of decrypt.

Syntax

 window.ssi.nostr.decryptSync(
	ciphertext, // string
	options, // object
	callback, // object
)

Parameters

ciphertext

string. The cipher text to decrypt.

options

object. Direction about decryption detail.

pubkey(optional)

string. The conversation partner’s public key. If type is "nip04" or "nip44", then this is required.

type

NostrDecryptType. The encryption spec. e.g., "nip04", "nip44".

version(optional)

string. The version to define encryption algorithms if the type is "nip44".

callback

object. A reference to a function that should be called in the near future, when the result is returned. The callback function is passed two arguments — 1. Error object if failed otherwise null, 2. The resulting plaintext.

error

Error.

plaintext

string.

Return value

None (undefined).

Examples

Decryption in NIP-44

See also the spec.

const callback = (error, plaintext) => {
  if (error) {
    throw new Error("Failed to decrypt")
  }

  console.log(plaintext)
}
window.ssi.nostr.decryptSync(
  "AkeXqSWNnU7VrlEUHnnGIs9rqXwHLFVxCsfQTRLbERVWh6fWJqfaRw/BC+cFgtfzPSle1csyfdJ+qf/xaCVmVQ2tXPQg6jw9EHwZxNUwz1EJYZStRo6uCXRnvXraMrPfd4Gx046tHyJ+KJIKUGXOFlWtyni+H+Kr151jvxt0PW5O48AMTxfos3/GxY/EF0yWwsJ8JG82JBEDrmzAz4ph8iXbJg==",
  {
    type: "nip44",
    pubkey: "3327e31cfbef92d143c699e1559e207d977639303d81bb132d9541bff99af3b4"
  },
  callback
)

// callback result
// "The computer can be used as a tool to liberate and protect people, rather than to control them."

In the WebExtension on Firefox

When you care about security and privacy, combining Sync method with Xray Vision can help prevent eavesdropping via postMessage and prototype chain pollution, with some trade-offs. See also “Share objects with page scripts”.

// In content-script

function nip44Decrypt(pubkey, ciphertext) {
  return new window.Promise((resolve, reject) => {
    window.wrappedJSObject.ssi.nostr.decryptSync(
      ciphertext,
      cloneInto(
        {
          type: "nip44",
          pubkey,
        },
        window
      ),
      exportFunction((error, plaintext) => {
        if (error) {
          reject(error)
        }
        resolve(plaintext)
      }, window)
    )
    XPCNativeWrapper(window.wrappedJSObject.ssi)
  })
}
window.wrappedJSObject.nostr.nip44.decrypt = exportFunction(nip44Decrypt, window)


// In page-script

const plaintext = await window.nostr.nip44.decrypt(pubkey, ciphertext)

Note

This documentation is derived from window.ssi.type.ts in gecko-dev-for-ssi.