The TACo Access Control SDK allows you to use threshold encryption & decryption in your application.
In just a few minutes you will able to:
Define decryption conditions – these are predefined rules or criteria that must be fulfilled before the encrypted data can be decrypted.
Encrypt data & assign decryption conditions – when you encrypt data, you not only secure it but also tie the decryption process to the conditions you defined.
Threshold-decrypt data – once the decryption conditions are met and validated by a threshold of TACo nodes, decryption can occur.
1. Installation
Install taco , taco-auth, and ethers with your favorite package manager:
To run the code examples below, you will need the ritualId encryption parameter. In production, your wallet address (encryptor) will also have to be allow-listed for this specific ritual. Please reach out to us here to receive a ritualId and allow-list access.
Additionally, we have publicly available testnet rituals for use when developing your apps.
In this example, we will use our tapir testnet, where you can freely use ritualId = 6; A read-only connection to Polygon Amoy is required due to DKG Coordination contracts being stored there. The signerProvider is required to authenticate the Encryptor.
import{ initialize, encrypt, conditions, domains }from'@nucypher/taco';import{ ethers }from"ethers";// We have to initialize the TACo library firstawaitinitialize();// Define decryption conditionconstownsNFT=newconditions.predefined.erc721.ERC721Ownership({ contractAddress:'0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77', parameters: [3591], chain:11155111,// sepolia});constsignerProvider=newethers.providers.Web3Provider(window.ethereum);constpolygonProvider=newethers.providers.JsonRpcProvider("https://polygon-amoy.drpc.org");constmessage="my secret message";constritualId=6// encrypt dataconstmessageKit=awaitencrypt( polygonProvider,domains.TESTNET, message, ownsNFT, ritualId,signerProvider.getSigner() );
4. Decrypt the data
Now we just have to pass the messageKit to the intended data consumer:
Since ownsNFT condition refers to an NFT owned by the data consumer, decrypt call will prompt the recipient to sign a message and prove the ownership of the caller's wallet.
Next steps
Learn more about using TACo in a sandboxed environment in the Testnets section.
Example applications
The following samples showcase integrations with React-based web apps, and serve as an 'end-to-end' reference for creating conditions-based encryption & decryption:
import { conditions, decrypt, domains, initialize } from '@nucypher/taco';
import { EIP4361AuthProvider, USER_ADDRESS_PARAM_DEFAULT } from '@nucypher/taco-auth';
import { ethers } from "ethers";
// We have to initialize the TACo library first
await initialize();
const web3Provider = new ethers.providers.Web3Provider(window.ethereum);
const conditionContext =
conditions.context.ConditionContext.fromMessageKit(messageKit);
// auth provider when condition contains ":userAddress" context variable
// the decryptor user must provide a signature to prove ownership of their wallet address
const authProvider = new EIP4361AuthProvider(
web3Provider,
web3Provider.getSigner(),
);
conditionContext.addAuthProvider(USER_ADDRESS_PARAM_DEFAULT, authProvider);
const decryptedMessage = await decrypt(
web3Provider,
domains.TESTNET,
messageKit,
conditionContext,
);