All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.quorum.tessera.encryption.Encryptor Maven / Gradle / Ivy

Go to download

Tessera is a stateless Java system that is used to enable the encryption, decryption, and distribution of private transactions for Quorum.

There is a newer version: 24.4.2
Show newest version
package com.quorum.tessera.encryption;

/**
 * The API provided to the application that all implementation of this API module should extend
 *
 * 

Provides all function relating to encrypting and decrypting messages using public/private and * symmetric keys. */ public interface Encryptor { /** * Compute the shared key from a public/private key combination The keys must be from different * keysets. Providing the public key for the corresponding private key (and vice versa) results in * an error * *

The shared key for a public/private key combo is the same as if the private/public * corresponding keys were provided. i.e. public1/private2 == private1/public2 * * @param publicKey A public key from the first keyset * @param privateKey A private key from the second keyset * @return The shared key for this key pair. */ SharedKey computeSharedKey(PublicKey publicKey, PrivateKey privateKey); /** * Encrypt a payload directly using the given public/private key pair for the sender/recipient * * @param message The payload to be encrypted * @param nonce A unique nonce for this public/private pair * @param publicKey The key from either sender or recipient * @param privateKey The other key from either sender or recipient * @return The encrypted payload */ byte[] seal(byte[] message, Nonce nonce, PublicKey publicKey, PrivateKey privateKey); /** * Decrypt a payload directly using the given public/private key pair for the sender/recipient * * @param cipherText The payload to be encrypted * @param nonce A unique nonce for this public/private pair * @param publicKey The key from either sender or recipient * @param privateKey The other key from either sender or recipient * @return The encrypted payload */ byte[] open(byte[] cipherText, Nonce nonce, PublicKey publicKey, PrivateKey privateKey); /** * Encrypt a payload using the given public/private key pair for the sender/recipient * * @param message The payload to be encrypted * @param nonce A unique nonce for this public/private pair * @param sharedKey The shared key between the sender and recipient of the payload * @return The encrypted payload */ byte[] sealAfterPrecomputation(byte[] message, Nonce nonce, SharedKey sharedKey); default byte[] sealAfterPrecomputation(byte[] message, Nonce nonce, MasterKey masterKey) { SharedKey sharedKey = SharedKey.from(masterKey.getKeyBytes()); return sealAfterPrecomputation(message, nonce, sharedKey); } /** * Decrypts a payload using the shared key between the sender and recipient * * @param cipherText The encrypted payload * @param nonce The nonce that was used to encrypt this payload * @param sharedKey The shared key for the sender and recipient * @return The decrypted payload */ byte[] openAfterPrecomputation(byte[] cipherText, Nonce nonce, SharedKey sharedKey); /** * Generates a new random nonce of the correct size * * @return a {@link Nonce} containing random data to be used as a nonce */ Nonce randomNonce(); /** * Generates a new public and private keypair * * @return A pair of public and private keys */ KeyPair generateNewKeys(); /** * Creates a single standalone key * * @return The randomly generated key */ SharedKey createSingleKey(); /** * Create a randomly generated {@link MasterKey} * * @return a random {@link MasterKey} */ default MasterKey createMasterKey() { SharedKey sharedKey = createSingleKey(); return MasterKey.from(sharedKey.getKeyBytes()); } /** * Decrypts a payload using the given {@link MasterKey} * * @param cipherText the ciphertext to decrypt * @param cipherTextNonce the nonce that was used to encrypt the payload * @param masterKey the key used to encrypt the payload * @return the decrypted payload * @see Encryptor#openAfterPrecomputation(byte[], Nonce, SharedKey) */ default byte[] openAfterPrecomputation( byte[] cipherText, Nonce cipherTextNonce, MasterKey masterKey) { SharedKey sharedKey = SharedKey.from(masterKey.getKeyBytes()); return openAfterPrecomputation(cipherText, cipherTextNonce, sharedKey); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy