An SDK of token-gated time-encrypted IPFS-based content-sharing app based on pay-per-view having 2 APIs send and get, that takes time, list of receivers and content as input and open contents after paying in valid time frame and uses Merkel-tree based time server for encryption.
The project is provides the following services: a) Time-based Encryption: This implies that the sender can exercise access control in terms of the time during which the receiver of the content can view the content. The Merkel binary hash Tree storing the time in 28 bits as leaf nodes is used to deploy a time server for time-based encryption. b) Content upload on IPFS: The sender can upload any content which can be a text, video, image or link to a Huddle meeting on the IPFS. The encrypted Content ID obtained after uploading is returned to the user. The user also gives the list of recievers. The CID is encrypted using the public key of the recievers and time-based encryption and is pushed on the FVM blockchain mapped with the reciever's address. c) Pay-per-View: On the receiving end, the user can get access to the CID/path only in the stipulated time frame after making the payment. d) Secretive transfer of text RSA cryptography is used for encrypting messages making sure that no unauthorized person reads the text.
In Time-Sensitive Encryption (TSE), a key, known as a Time Instant Key (TIK), is broadcasted by a Time Server at the start of each time unit. When sending a message, the sender can choose a specific time period, and the recipient can only decrypt the message if they have a TIK that corresponds to a time within that period. Our approach extends TSE to the public-key and identity-based settings, where the receivers have private keys, public keys or identities and the decryption process requires the use of private key and a valid TIK.
RSA library of python used for encryption.
FVEM Smart contract/Actor has been deployed using FVEM hardhat kit on Hyperspace testnets. The Actor has following functions: IPFS : Takes ciphertexr of the content ID/path and reciever, pushes the CID in mapping with reciever's address and returns boolean get-user: takes the user ID and returns address get-user-key: takes the user ID and returns the public key set-useraddress: takes the customer ID, his wallet address and public key and performs the mapping. transfer: transfer of balance to view the recieved content( the user gives the CID he wants to view at his own will) view : Returns the encrypted content ID/path
Postman used to make APIs for SDK