KeyMatcher, java.io.Serializable, net.sergeych.tools.Bindable, net.sergeych.tools.Hashablepublic class SymmetricKey extends AbstractKey implements java.io.Serializable, net.sergeych.tools.Hashable
getCipher().
The cipher set and HMAC method maight be extended, using this class guaranteees compatibility.
Created by sergeych on 04/06/16.
| Modifier and Type | Class | Description |
|---|---|---|
class |
SymmetricKey.AuthenticationFailed |
Exception raised by the
SymmetricKey.EtaDecryptingStream when HMAC verification failed or other
situations of the kind. |
class |
SymmetricKey.EtaDecryptingStream |
Read and decrypt AE (EtA) stream.
|
class |
SymmetricKey.EtaEncryptingStream |
Encrypts an AE (EtA) stream using Sha256-based HMAC.
|
FINGERPRINT_SHA256, FINGERPRINT_SHA384, keyInfo, TYPE_PRIVATE, TYPE_PRIVATE_PASSWORD, TYPE_PRIVATE_PASSWORD_V2, TYPE_PUBLIC| Constructor | Description |
|---|---|
SymmetricKey() |
Create random symmetric key (AES256, CTR)
|
SymmetricKey(byte[] key) |
|
SymmetricKey(byte[] key,
KeyInfo keyInfo) |
| Modifier and Type | Method | Description |
|---|---|---|
byte[] |
decrypt(byte[] ciphertext) |
|
java.io.InputStream |
decryptStream(java.io.InputStream inputStream) |
|
byte[] |
encrypt(byte[] plaintext) |
|
java.io.OutputStream |
encryptStream(java.io.OutputStream outputStream) |
|
boolean |
equals(java.lang.Object obj) |
|
byte[] |
etaDecrypt(byte[] data) |
Decrypt data using AE (EtA) with SHA256-based HMAC.
|
SymmetricKey.EtaDecryptingStream |
etaDecryptStream(java.io.InputStream in) |
Decrypt some stream on the fly using AE (EtA) and SHA256-based HMAC.
|
byte[] |
etaEncrypt(byte[] data) |
Encrypt data suing AE (EtA) with HMAC based on SHA256.
|
SymmetricKey.EtaEncryptingStream |
etaEncryptStream(java.io.OutputStream out) |
Encrypt some stream on hte fly using AE (EtA) with SHA256-based HMAC.
|
byte[] |
etaSign(byte[] data) |
Rare case: HMAC-signing data without ebcrypting it.
|
static SymmetricKey |
fromPassword(java.lang.String password,
int rounds) |
|
static SymmetricKey |
fromPassword(java.lang.String password,
int rounds,
byte[] salt) |
|
int |
getBitStrength() |
|
protected BlockCipher |
getCipher() |
|
byte[] |
getKey() |
|
int |
getSize() |
|
int |
hashCode() |
|
byte[] |
pack() |
|
void |
setKey(byte[] key) |
|
java.util.Map<java.lang.String,java.lang.Object> |
toHash() |
|
void |
updateFromHash(java.util.Map<java.lang.String,java.lang.Object> hash) |
|
static byte[] |
xor(byte[] src,
int value) |
address, asKeySource, canSign, createAnonymousId, fingerprint, fromBinder, getLongAddress, getPublicKey, getShortAddress, info, isMatchingKey, isMatchingKeyAddress, isPrivate, isPublic, matchAnonymousId, matchTag, matchType, packedInfo, packToBase64String, setTag, setTag, sign, sign, toBinder, toString, unpack, updateDigestWithKeyComponents, updateFrom, verify, verify, verifypublic SymmetricKey()
public SymmetricKey(byte[] key)
public SymmetricKey(byte[] key,
KeyInfo keyInfo)
public static SymmetricKey fromPassword(java.lang.String password, int rounds)
public static SymmetricKey fromPassword(java.lang.String password, int rounds, byte[] salt)
public void setKey(byte[] key)
public byte[] getKey()
public int getBitStrength()
public int getSize()
public java.util.Map<java.lang.String,java.lang.Object> toHash()
throws java.lang.IllegalStateException
toHash in interface net.sergeych.tools.Hashablejava.lang.IllegalStateExceptionpublic void updateFromHash(java.util.Map<java.lang.String,java.lang.Object> hash)
throws net.sergeych.tools.Hashable.Error
updateFromHash in interface net.sergeych.tools.Hashablenet.sergeych.tools.Hashable.Errorprotected BlockCipher getCipher()
public byte[] encrypt(byte[] plaintext)
throws EncryptionError
encrypt in class AbstractKeyEncryptionErrorpublic byte[] decrypt(byte[] ciphertext)
throws EncryptionError
decrypt in class AbstractKeyEncryptionErrorpublic java.io.OutputStream encryptStream(java.io.OutputStream outputStream)
throws java.io.IOException,
EncryptionError
java.io.IOExceptionEncryptionErrorpublic java.io.InputStream decryptStream(java.io.InputStream inputStream)
throws java.io.IOException,
EncryptionError
java.io.IOExceptionEncryptionErrorpublic SymmetricKey.EtaEncryptingStream etaEncryptStream(java.io.OutputStream out) throws java.io.IOException, EncryptionError
SymmetricKey.EtaEncryptingStream.end() or SymmetricKey.EtaEncryptingStream.close() in order to properly finish
AE process. Note, to get the maximum security you should put some random sized random data in
the file. As a variant, write some number N and then N random bytes. Have N also random. When
reading, read N and skip N bytes first. Otherwise, use Boss streams
to write structured data and put some random bytes in the beginning then skip it.out - stream where to put encrypted data.java.io.IOExceptionEncryptionErrorpublic SymmetricKey.EtaDecryptingStream etaDecryptStream(java.io.InputStream in) throws java.io.IOException, EncryptionError
SymmetricKey.AuthenticationFailed will be thrown as need.in - stream to decryptjava.io.IOExceptionEncryptionErrorpublic byte[] etaEncrypt(byte[] data)
throws EncryptionError
Boss to serialize structored data and add random chunk somewhere. Make the
hacker effor hopeless and silly ;) Keeping the right data size reveals some information on
the package contents, just don't.
It uses IV-based CTR encryption, see encrypt(byte[]) for details.
data - to encryptEncryptionErrorpublic byte[] etaSign(byte[] data)
throws EncryptionError
data - to signEncryptionErrorpublic byte[] etaDecrypt(byte[] data)
throws EncryptionError,
SymmetricKey.AuthenticationFailed
data - to decryptEncryptionErrorSymmetricKey.AuthenticationFailed - if the authentication record does not match the data.public static byte[] xor(byte[] src,
int value)
public byte[] pack()
pack in class AbstractKeypublic boolean equals(java.lang.Object obj)
equals in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.Object