The sharing condition is that the specified EOA (Externally Owned Account) address can access it. After obtaining user authorization, developers can use a specific EOA address to decrypt the content returned by the interface.
For example, if the developer's address is: 0xfd7daf19b5719623e7378450a2bab4403f240004 (the private key is: 89a1a8c7d5f6ab952e02c5c6a71f48d60fbe06c21ec021374907d93d644b1236: ,the ApiKey is: 581c6c4fa0b54912b00088aa563342a4. Note:This ApiKey is only used for developer testing experience), below is how to use the Lit Protocol's JS-SDK to decrypt the interface information:
Copy npm install @lit-protocol/lit-node-client base64-to-uint8array
Copy import LitJsSdk from '@lit-protocol/lit-node-client';
import * as u8a from "uint8arrays";
import ethers from "ethers";
import siwe from "siwe";
import toUint8Array from 'base64-to-uint8array'
const decryptString = async () => {
const encryptedString = "encrypted information returned by the API";
const encryptedSymmetricKey = "encrypted information returned by the API";
const chain = 'ethereum';
const authSig = await signAuthMessage();
const litNodeClient = new LitJsSdk.LitNodeClient();
await litNodeClient.connect();
const accessControlConditions = [
{
contractAddress: '',
standardContractType: '',
chain,
method: '',
parameters: [
':userAddress',
],
returnValueTest: {
comparator: '=',
value: '0xfd7daf19b5719623e7378450a2bab4403f240004'
}
}
]
// <String> toDecrypt
const toDecrypt = LitJsSdk.uint8arrayToString(toUint8Array(encryptedSymmetricKey), 'base16');
// <Uint8Array(32)> _symmetricKey
const _symmetricKey = await litNodeClient.getEncryptionKey({
accessControlConditions,
toDecrypt,
chain,
authSig
})
// <String> decryptedString
let decryptedString;
const blob = await LitJsSdk.base64StringToBlob(encryptedString);
try {
decryptedString = await LitJsSdk.decryptString(
blob,
_symmetricKey
);
} catch (e) {
console.log(e);
}
console.info("decryptedString:", decryptedString);
}
/**
* Get auth signature using siwe
* @returns
*/
const signAuthMessage = async () => {
// Replace this with you private key
const privKey = "89a1a8c7d5f6ab952e02c5c6a71f48d60fbe06c21ec021374907d93d644b1236";
const privKeyBuffer = u8a.fromString(privKey, "base16");
const wallet = new ethers.Wallet(privKeyBuffer);
const domain = "localhost";
const origin = "https://localhost/login";
const statement =
"This is a test statement. You can put anything you want here.";
const siweMessage = new siwe.SiweMessage({
domain,
address: wallet.address,
statement,
uri: origin,
version: "1",
chainId: "1",
});
const messageToSign = siweMessage.prepareMessage();
const signature = await wallet.signMessage(messageToSign);
console.log("signature", signature);
const recoveredAddress = ethers.utils.verifyMessage(messageToSign, signature);
const authSig = {
sig: signature,
derivedVia: "web3.eth.personal.sign",
signedMessage: messageToSign,
address: recoveredAddress,
};
return authSig;
}
decryptString();