Interface CryptoSupport
-
@ProviderType public interface CryptoSupport
TheCryptoSupportprovides a simple API to encrypt and decrypt binary and string data.This interface is not intended to be implemented by consumers. To use the API get the service from the service registry under the name "com.adobe.granite.crypto.CryptoSupport".
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringNAMEName of the Encryption/Decryption service which may be used securily store sensitive data.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description java.security.KeyPaircreateKeyPair(java.lang.String algorithm)Generates a key pair.byte[]decrypt(byte[] cipherText)Decrypts the givencipherTextdata into plain text.byte[]decrypt(byte[] key, byte[] cipherText)Decrypts the givencipherTextdata into plain text.byte[]encrypt(byte[] plainText)Encrypts the givenplainTextdata into a cipher text.byte[]encrypt(byte[] key, byte[] plainText)Encrypts the givenplainTextdata into a cipher text.byte[]hmac_sha256(byte[] text)Generate HMAC bytes given some text.byte[]hmac_sha256(byte[] key, byte[] text)Generate HMAC bytes given a key and some text.booleanisProtected(java.lang.String text)Returnstrueif the given string is to be considered protected by theprotect(String)method and can be converted to plain text by calling theunprotect(String)method.voidnextRandomBytes(byte[] bytes)Fill the byte buffer with securely-generated pseudo-random bytes.java.lang.Stringprotect(byte[] key, java.lang.String plainText)Encrypts the givenplainTextdata into a cipher text.java.lang.Stringprotect(java.lang.String plainText)Encrypts the givenplainTextdata into a cipher text.byte[]sign(byte[] text, java.security.PrivateKey privateKey, java.lang.String algorithm)Sign some data using the given private keyjava.security.cert.Certificatesign(java.security.cert.Certificate issuerCertificate, java.security.KeyPair keyPair, javax.security.auth.x500.X500Principal subject, long before, long after)Sign aCertificateeither using a provided issuer certificate or using theCertificatesubject as issuer (self signed).java.lang.Stringunprotect(byte[] key, java.lang.String cipherText)Unprotects the given string such that the resulting plain text string if given to theprotect(byte[], String)returns the protected string given to this method.java.lang.Stringunprotect(java.lang.String cipherText)Unprotects the given string such that the resulting plain text string if given to theprotect(String)returns the protected string given to this method.byte[]unwrapKey(byte[] wrappedKeyData)Unwraps the givenwrappedKeyusing a symmetric key wrap algorithm.byte[]unwrapKey(byte[] kek, byte[] wrappedKeyData)Unwraps the givenwrappedKeyusing a symmetric key wrap algorithm.booleanverify(byte[] text, byte[] signedText, java.security.PublicKey publicKey, java.lang.String algorithm)Perform a signature verification with the given public key.byte[]wrapKey(byte[] keyData)Wraps the givenkeyDatausing a symmetric key wrap algorithm.byte[]wrapKey(byte[] kek, byte[] keyData)Wraps the givenkeyDatausing a symmetric key wrap algorithm.
-
-
-
Field Detail
-
NAME
static final java.lang.String NAME
Name of the Encryption/Decryption service which may be used securily store sensitive data.- See Also:
- Constant Field Values
-
-
Method Detail
-
encrypt
byte[] encrypt(byte[] plainText) throws CryptoExceptionEncrypts the givenplainTextdata into a cipher text.Note that this method and the
decrypt(byte[])method provide full round trip support:decrypt(encrypt(plainText)).equals(plainText) == true
Please note, that calling this method twice on the same
plainTextdoes not return the same cipher text:encrypt(plainText).equals(encrypt(plainText)) == false
- Parameters:
plainText- The plain text data to encrypt- Returns:
- The encrypted data
- Throws:
CryptoException- If any problem occurrs encrypting the plain text data. TheThrowable.getCause()method may provide additional information on the encryption failure.
-
decrypt
byte[] decrypt(byte[] cipherText) throws CryptoExceptionDecrypts the givencipherTextdata into plain text.Note that this method and the
encrypt(byte[])method provide full round trip support:decrypt(encrypt(plainText)).equals(plainText) == true
- Parameters:
cipherText- The encrypted data to decrypt- Returns:
- The plain text data
- Throws:
CryptoException- If any problem occurrs decrypting the cipher text. TheThrowable.getCause()method may provide additional information on the decryption failure.
-
encrypt
byte[] encrypt(byte[] key, byte[] plainText) throws CryptoExceptionEncrypts the givenplainTextdata into a cipher text.Note that this method and the
decrypt(byte [], byte[])method provide full round trip support:decrypt(encrypt(key,plainText)).equals(key,plainText) == true
Please note that the implementation will not clear the byte[] key.
Please note, that calling this method twice on the same
plainTextdoes not return the same cipher text:encrypt(key, plainText).equals(encrypt(key, plainText)) == false
- Parameters:
key- The bytes used to seed the algorithm. This must be a non-null, non empty array of bytes. If the array is larger than 512 elements, only the first 512 entries are used.plainText- The plain text data to encrypt- Returns:
- The encrypted data
- Throws:
CryptoException- If any problem occurrs encrypting the plain text data. TheThrowable.getCause()method may provide additional information on the encryption failure.- Since:
- 1.2
-
decrypt
byte[] decrypt(byte[] key, byte[] cipherText) throws CryptoExceptionDecrypts the givencipherTextdata into plain text.Please note that the implementation will not clear the byte[] key.
Note that this method and the
encrypt(byte [], byte[])method provide full round trip support:decrypt(encrypt(key, plainText)).equals(key, plainText) == true
- Parameters:
key- The bytes used to seed the algorithm. This must be a non-null, non empty array of bytes. If the array is larger than 512 elements, only the first 512 entries are used.cipherText- The encrypted data to decrypt- Returns:
- The plain text data
- Throws:
CryptoException- If any problem occurrs decrypting the cipher text. TheThrowable.getCause()method may provide additional information on the decryption failure.- Since:
- 1.2
-
isProtected
boolean isProtected(java.lang.String text)
Returnstrueif the given string is to be considered protected by theprotect(String)method and can be converted to plain text by calling theunprotect(String)method.- Parameters:
text- the string to test for protection- Returns:
trueif the given string is to be considered protected by theprotect(String)method and can be converted to plain text by calling theunprotect(String)method
-
protect
java.lang.String protect(java.lang.String plainText) throws CryptoExceptionEncrypts the givenplainTextdata into a cipher text.This method is like
encrypt(byte[])but for character data.Note that this method and the
unprotect(String)method provide full round trip support:unprotect(protect(plainText)).equals(plainText) == true
Please note, that calling this method twice on the same
plainTextdoes not return the same cipher text:protect(plainText).equals(protect(plainText)) == false
- Parameters:
plainText- The plain text data to encrypt- Returns:
- The encrypted data
- Throws:
CryptoException- If any problem occurrs encrypting the plain text data. TheThrowable.getCause()method may provide additional information on the encryption failure.
-
unprotect
java.lang.String unprotect(java.lang.String cipherText) throws CryptoExceptionUnprotects the given string such that the resulting plain text string if given to theprotect(String)returns the protected string given to this method.Note that this method and the
protect(String)method provide full round trip support:unprotect(protect(plainText)).equals(plainText) == true
- Parameters:
cipherText- The encrypted data to decrypt- Returns:
- The plain text data
- Throws:
CryptoException- If any problem occurrs decrypting the cipher text. TheThrowable.getCause()method may provide additional information on the decryption failure. Particularly this exception may be thrown if thecipherTexthas obviously not been protected by theprotect(String)method andisProtected(String)would returnfalse.
-
protect
java.lang.String protect(byte[] key, java.lang.String plainText) throws CryptoExceptionEncrypts the givenplainTextdata into a cipher text.This method is like
encrypt(byte[], byte[])but for character data.Please note that the implementation will not clear the byte[] key.
Note that this method and the
unprotect(byte[], String)method provide full round trip support:unprotect(protect(key, plainText)).equals(key, plainText) == true
Please note, that calling this method twice on the same
plainTextdoes not return the same cipher text:protect(key, plainText).equals(protect(key, plainText)) == false
- Parameters:
key- The bytes used to seed the algorithm. This must be a non-null, non empty array of bytes. If the array is larger than 512 elements, only the first 512 entries are used.plainText- The plain text data to encrypt- Returns:
- The encrypted data
- Throws:
CryptoException- If any problem occurrs encrypting the plain text data. TheThrowable.getCause()method may provide additional information on the encryption failure.- Since:
- 1.2
-
unprotect
java.lang.String unprotect(byte[] key, java.lang.String cipherText) throws CryptoExceptionUnprotects the given string such that the resulting plain text string if given to theprotect(byte[], String)returns the protected string given to this method.Please note that the implementation will not clear the byte[] key.
Note that this method and the
protect(byte[], String)method provide full round trip support:unprotect(protect(key, plainText)).equals(key, plainText) == true
- Parameters:
key- The bytes used to seed the algorithm. This must be a non-null, non empty array of bytes. If the array is larger than 512 elements, only the first 512 entries are used.cipherText- The encrypted data to decrypt- Returns:
- The plain text data
- Throws:
CryptoException- If any problem occurrs decrypting the cipher text. TheThrowable.getCause()method may provide additional information on the decryption failure. Particularly this exception may be thrown if thecipherTexthas obviously not been protected by theprotect(String)method andisProtected(String)would returnfalse.- Since:
- 1.2
-
wrapKey
byte[] wrapKey(byte[] kek, byte[] keyData) throws CryptoExceptionWraps the givenkeyDatausing a symmetric key wrap algorithm.Note that this method and the
unwrapKey(byte[], byte[])method provide full round trip support:unwrapKey(wrapKey(kek,keyData)).equals(kek,keyData) == true
Please note that the implementation will not clear the byte[] key.
Please note, that unlike for encryption methods, calling this method twice with the same
keyDatamay return the same cipher text.- Parameters:
kek- the key-encryption key used to seed the key wrap algorithm. This must be a non-null, non empty array of bytes. Refer to the implementation for supported algorithm and key lengths.keyData- The key data to be wrapped. This must ve a non-null, non empty array of bytes. Refer to the implementation for limitations regarding the size.- Returns:
- The wrapped key data
- Throws:
CryptoException- If any problem occurs wrapping the key data. TheThrowable.getCause()method may provide additional information on the wrapping failure.- Since:
- 1.5
-
wrapKey
byte[] wrapKey(byte[] keyData) throws CryptoExceptionWraps the givenkeyDatausing a symmetric key wrap algorithm.Note that the kek the key-encryption key used to seed the key wrap algorithm is selected by the implementation.
Note that this method and the
unwrapKey(byte[])method provide full round trip support:unwrapKey(wrapKey(keyData)).equals(keyData) == true
Please note that the implementation will not clear the byte[] key.
Please note, that unlike for encryption methods, calling this method twice with the same
keyDatamay return the same cipher text.- Parameters:
keyData- The key data to be wrapped. This must ve a non-null, non empty array of bytes. Refer to the implementation for limitations regarding the size.- Returns:
- The wrapped key data
- Throws:
CryptoException- If any problem occurs wrapping the key data. TheThrowable.getCause()method may provide additional information on the wrapping failure.- Since:
- 1.5
-
unwrapKey
byte[] unwrapKey(byte[] kek, byte[] wrappedKeyData) throws CryptoExceptionUnwraps the givenwrappedKeyusing a symmetric key wrap algorithm.Note that this method and the
wrapKey(byte[], byte[])method provide full round trip support:unwrapKey(wrapKey(kek,keyData)).equals(kek,keyData) == true
Please note that the implementation will not clear the byte[] key.
- Parameters:
kek- the key-encryption key used to seed the key wrap algorithm. This must be a non-null, non empty array of bytes. Refer to the implementation for supported algorithm and key lengths.wrappedKeyData- The key data to be wrapped. This must ve a non-null, non empty array of bytes. Refer to the implementation for limitations regarding the size.- Returns:
- The wrapped key data
- Throws:
CryptoException- If any problem occurs wrapping the key data. TheThrowable.getCause()method may provide additional information on the wrapping failure.- Since:
- 1.5
-
unwrapKey
byte[] unwrapKey(byte[] wrappedKeyData) throws CryptoExceptionUnwraps the givenwrappedKeyusing a symmetric key wrap algorithm.Note that the kek the key-encryption key used to seed the key wrap algorithm is selected by the implementation.
Note that this method and the
wrapKey(byte[])method provide full round trip support:unwrapKey(wrapKey(keyData)).equals(keyData) == true
Please note that the implementation will not clear the byte[] key.
- Parameters:
wrappedKeyData- The key data to be wrapped. This must ve a non-null, non empty array of bytes. Refer to the implementation for limitations regarding the size.- Returns:
- The wrapped key data
- Throws:
CryptoException- If any problem occurs wrapping the key data. TheThrowable.getCause()method may provide additional information on the wrapping failure.- Since:
- 1.5
-
nextRandomBytes
void nextRandomBytes(byte[] bytes) throws CryptoExceptionFill the byte buffer with securely-generated pseudo-random bytes.- Parameters:
bytes- Buffer to fill with random bytes.- Throws:
CryptoException- If any problem occurrs calculating the random data. TheThrowable.getCause()method may provide additional information on the failure.- Since:
- 1.1, Crypto Support 0.4
-
hmac_sha256
byte[] hmac_sha256(byte[] key, byte[] text) throws CryptoExceptionGenerate HMAC bytes given a key and some text. In other, perhaps less cryptographically correct words, generates and returns a hash of 'text' encrypted by 'keyBytes'.The implementation is expected to implement the keyed hashing function using SHA-256 as the hash algorithm. See RFC 2104 for the HMAC specification.
Please note that the implementation will not clear the byte[] key.
If a string of character is to be hashed, it is suggested but not required to convert the String to a byte array using UTF-8.
- Parameters:
key- The bytes used to seed the algorithm. This must be a non-null, non empty array of bytes. If the array is larger than 512 elements, only the first 512 entries are used.text- The clear text to apply the hash algorithm to.- Returns:
- The hash code.
- Throws:
CryptoException- If any problem occurrs calculating the hash code of the text. TheThrowable.getCause()method may provide additional information on the failure.java.lang.IllegalArgumentException- if thekeyortextisnullor an empty array.- Since:
- 1.1, Crypto Support 0.4
-
hmac_sha256
byte[] hmac_sha256(byte[] text) throws CryptoExceptionGenerate HMAC bytes given some text. In other, perhaps less cryptographically correct words, generates and returns a hash of 'text' encrypted by 'keyBytes'.The implementation is expected to implement the keyed hashing function using SHA-256 as the hash algorithm. See RFC 2104 for the HMAC specification.
If a string of character is to be hashed, it is suggested but not required to convert the String to a byte array using UTF-8.
- Parameters:
text- The clear text to apply the hash algorithm to.- Returns:
- The hash code.
- Throws:
CryptoException- If any problem occurrs calculating the hash code of the text. TheThrowable.getCause()method may provide additional information on the failure.java.lang.IllegalArgumentException- if thekeyortextisnullor an empty array.- Since:
- 1.2
-
createKeyPair
java.security.KeyPair createKeyPair(java.lang.String algorithm) throws CryptoExceptionGenerates a key pair. This will generate a new key pair every time it is called.- Parameters:
algorithm- the standard string name of the algorithm- Returns:
- the generated key pair
- Throws:
CryptoException- If any problem occurs creating the key pair. TheThrowable.getCause()method may provide additional information on the encryption failure.java.lang.IllegalArgumentException- if thealgorithmisnullor incorrect.- Since:
- 1.3
-
sign
java.security.cert.Certificate sign(java.security.cert.Certificate issuerCertificate, java.security.KeyPair keyPair, javax.security.auth.x500.X500Principal subject, long before, long after) throws CryptoExceptionSign aCertificateeither using a provided issuer certificate or using theCertificatesubject as issuer (self signed).- Parameters:
issuerCertificate- theCertificateof the issuer ornullto self-sign the certificate.keyPair- the key pair containing the certificate subjectPublicKeyand the issuerPrivateKeykey.subject- the subject of the certificate to be issuedbefore- thenotBeforeUTC timestamp for the certificate validity periodafter- thenotAfterUTC timestamp for the certificate validity period- Returns:
- the signed
Certificate - Throws:
CryptoException- if any problem occurs when signing- Since:
- 1.4
-
sign
byte[] sign(byte[] text, java.security.PrivateKey privateKey, java.lang.String algorithm) throws CryptoExceptionSign some data using the given private keyPlease note that the implementation will not clear the private key.
- Parameters:
text- the clear text to signprivateKey- the private key used to sign the clear textalgorithm- the standard string name of the algorithm- Returns:
- the signedText
- Throws:
CryptoException- If any problem occurs signing the clear text. TheThrowable.getCause()method may provide additional information on the encryption failure.java.lang.IllegalArgumentException- if thealgorithmorprivateKeyisnullor incorrect.- Since:
- 1.3
-
verify
boolean verify(byte[] text, byte[] signedText, java.security.PublicKey publicKey, java.lang.String algorithm) throws CryptoExceptionPerform a signature verification with the given public key.Please note that the implementation will not clear the public key.
- Parameters:
text- The clear text which has been signedsignedText- the signed text to be verifiedpublicKey- the public key used to verify the signaturealgorithm- the standard string name of the algorithm- Returns:
trueif the alleged signature (signedText) is the actual signature of the specified data (text)- Throws:
CryptoException- If any problem occurs verifying the signed text. TheThrowable.getCause()method may provide additional information on the encryption failure.java.lang.IllegalArgumentException- if thealgorithmorpublicKeyisnullor incorrect.- Since:
- 1.3
-
-