Package org.refcodes.security.alt.chaos
Class ChaosOptionsBuilder
java.lang.Object
org.refcodes.security.alt.chaos.ChaosOptionsBuilder
- All Implemented Interfaces:
org.refcodes.mixin.EncodedAccessor
,ChaosOptions
The
ChaosOptionsBuilder
provides means to create a
ChaosOptions
instance.-
Nested Class Summary
Nested classes/interfaces inherited from interface org.refcodes.mixin.EncodedAccessor
org.refcodes.mixin.EncodedAccessor.EncodedBuilder<B extends org.refcodes.mixin.EncodedAccessor.EncodedBuilder<B>>, org.refcodes.mixin.EncodedAccessor.EncodedMutator, org.refcodes.mixin.EncodedAccessor.EncodedProperty
-
Field Summary
Fields inherited from interface org.refcodes.security.alt.chaos.ChaosOptions
ENCODED_LENGTH, OPTIONS_BIT_MUTATE_S, OPTIONS_BIT_RND_PREFIX, OPTIONS_BIT_SALTED, OPTIONS_BIT_XOR_NEXT, OPTIONS_BYTES, PREFIX_SIZE_BYZES
-
Constructor Summary
ConstructorDescriptionChaosOptionsBuilder
(boolean isMutateS, boolean isXorNext, boolean isSalted) Constructs theChaosOptionsBuilder
with the given values.ChaosOptionsBuilder
(boolean isMutateS, boolean isXorNext, boolean isSalted, short aRndPrefixSize) Constructs theChaosOptionsBuilder
with the given values.ChaosOptionsBuilder
(byte[] aEncoded) Instantiates theChaosOptions
by reversing the result of theChaosOptions.getEncoded()
operation where the byte array contains the values of the options. -
Method Summary
Modifier and TypeMethodDescriptionstatic ChaosOptionsBuilder.Builder
builder()
Creates builder to buildChaosOptionsBuilder
.boolean
Returns true if all the passed object is of typeChaosOptions
and all the attributes from theChaosOptions
are equal to this instance's attributes (as ofChaosOptions.isMutateS()
,ChaosOptions.isXorNext()
andChaosOptions.isSalted()
).short
Sets the number of random bytes to be prefixed upon a PREFIX operation of decrypted (raw) data when encrypting with the accordingly configuredChaosKey
: Prefixing with random bytes will cause the same (succeeding) decrypted (raw) data to be encrypted differently even when using the sameChaosKey
configuration.int
hashCode()
boolean
Determines whether a MUTATION operation of theChaosKey
's S value is to be applied with the previous byte value (before its encryption or zero 0 in case of the first value being processed), S then varies by +127 to -128 by each iteration: Nearly equal encrypted datasets will differ chaotically beginning with the the first occurrence of a different byte.boolean
isSalted()
Determines whether an additional SALTING operation with an additional salting (random)ChaosKey
is to be applied: The saltingChaosKey
's encoded bytes representation (as ofChaosKey.getEncoded()
) is prefixed to the actual data which in a first pass is encoded with the this very saltingChaosKey
.boolean
Determines whether an XOR obfuscation of the next byte value to be encrypted is to be applied with the previous byte value (before its encryption or zero 0 in case of the first value being processed).toString()
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.refcodes.security.alt.chaos.ChaosOptions
getEncoded, hasRndPrefix, isFixedLength
-
Constructor Details
-
ChaosOptionsBuilder
public ChaosOptionsBuilder(byte[] aEncoded) Instantiates theChaosOptions
by reversing the result of theChaosOptions.getEncoded()
operation where the byte array contains the values of the options. The values use a big endian representation. The byte array being passed is to be of the size as returned byChaosOptions.getEncodedLength()
. The meaning of the bits in the encoded byte are defined as inChaosOptions.OPTIONS_BIT_MUTATE_S
,ChaosOptions.OPTIONS_BIT_XOR_NEXT
andChaosOptions.OPTIONS_BIT_SALTED
.- Parameters:
aEncoded
- The encoded representation of the options.
-
ChaosOptionsBuilder
public ChaosOptionsBuilder(boolean isMutateS, boolean isXorNext, boolean isSalted) Constructs theChaosOptionsBuilder
with the given values.- Parameters:
isMutateS
- Enables or disables theisMutateS()
option.isXorNext
- Enables or disables theisXorNext()
option.isSalted
- Enables or disables theisSalted()
option.
-
ChaosOptionsBuilder
public ChaosOptionsBuilder(boolean isMutateS, boolean isXorNext, boolean isSalted, short aRndPrefixSize) Constructs theChaosOptionsBuilder
with the given values.- Parameters:
isMutateS
- Enables or disables theisMutateS()
option.isXorNext
- Enables or disables theisXorNext()
option.isSalted
- Enables or disables theisSalted()
option.aRndPrefixSize
- The number of bytes to prefix with random bytes.
-
-
Method Details
-
isXorNext
public boolean isXorNext()Determines whether an XOR obfuscation of the next byte value to be encrypted is to be applied with the previous byte value (before its encryption or zero 0 in case of the first value being processed). XOR does not seem to be too effective obfuscating similar encrypted data with the sameChaosKey
, though for low capability devices it can be handy to add that little extra obfuscation to make it hard to interpolate between two similar but different messages. Disclaimer: Using this option "stand alone" in aChaosKey
not in combination withChaosOptions.isSalted()
either in thisChaosKey
or in combination with anotherChaosKey
not completely closes the "comparison" attack vector (see "https://www.metacodes.pro/funcodes/blog/chaos-based_encryption_revisited")- Specified by:
isXorNext
in interfaceChaosOptions
- Returns:
- True in case XOR obfuscation is to be established.
-
isMutateS
public boolean isMutateS()Determines whether a MUTATION operation of theChaosKey
's S value is to be applied with the previous byte value (before its encryption or zero 0 in case of the first value being processed), S then varies by +127 to -128 by each iteration: Nearly equal encrypted datasets will differ chaotically beginning with the the first occurrence of a different byte. Disclaimer: Using this option "stand alone" in aChaosKey
not in combination withChaosOptions.isSalted()
either in thisChaosKey
or in combination with anotherChaosKey
not completely closes the "comparison" attack vector (see "https://www.metacodes.pro/funcodes/blog/chaos-based_encryption_revisited")- Specified by:
isMutateS
in interfaceChaosOptions
- Returns:
- True in case ADD obfuscation is to be established.
-
isSalted
public boolean isSalted()Determines whether an additional SALTING operation with an additional salting (random)ChaosKey
is to be applied: The saltingChaosKey
's encoded bytes representation (as ofChaosKey.getEncoded()
) is prefixed to the actual data which in a first pass is encoded with the this very saltingChaosKey
. The saltingChaosKey
encoded bytes representation as well as the succeeding initially encoded (salted) data then is encoded with the actual encryptionChaosKey
, ensuring that the prefixed saltingChaosKey
bytes are encoded. Decryption then is applied in reverse order. Currently only theChaosEncryptionOutputStream
and theChaosDecryptionInputStream
support salting! TheChaosEncrypter
andChaosDecrypter
ignore this option!- Specified by:
isSalted
in interfaceChaosOptions
- Returns:
- True in case SALTING is to be established.
-
getRndPrefixSize
public short getRndPrefixSize()Sets the number of random bytes to be prefixed upon a PREFIX operation of decrypted (raw) data when encrypting with the accordingly configuredChaosKey
: Prefixing with random bytes will cause the same (succeeding) decrypted (raw) data to be encrypted differently even when using the sameChaosKey
configuration. Valid values range from {1..256} representable by one byte as of {0x00..0xFF}. Disclaimer: Using this option "stand alone" in aChaosKey
not in combination withChaosOptions.isSalted()
either in thisChaosKey
or in combination with anotherChaosKey
not close by any means the "comparison" attack vector (see "https://www.metacodes.pro/funcodes/blog/chaos-based_encryption_revisited")- Specified by:
getRndPrefixSize
in interfaceChaosOptions
- Returns:
- The number of bytes for establishing the PREFIX functionality, 0 if no prefixing is to be applied at all.
-
toString
-
hashCode
public int hashCode() -
equals
Returns true if all the passed object is of typeChaosOptions
and all the attributes from theChaosOptions
are equal to this instance's attributes (as ofChaosOptions.isMutateS()
,ChaosOptions.isXorNext()
andChaosOptions.isSalted()
).- Specified by:
equals
in interfaceChaosOptions
- Overrides:
equals
in classObject
- Parameters:
obj
- the object to compare with for equality.- Returns:
- true, if equal
-
builder
Creates builder to buildChaosOptionsBuilder
.- Returns:
- created builder
-