Author: doogie
Date: Tue Jun 24 00:23:23 2014
New Revision: 1604968
URL: http://svn.apache.org/r1604968
Log:
Change encrypt=true fields to no longer have a pre-pended salt value.
This is done by just setting the length of salt bytes to 0, but still
having a length byte prepended.
Add a feature to allow for certain fields to actually have a salt
prefix. This is enabled by setting encrypt=salt in the entity
definition.
This change is slightly incompatible with existing code. Old database
values will continue to be decrypted correctly. However, newly
encrypted values will no longer have a salt prepended, while originally
they would. This shouldn't be a problem in practice.
This change, along with the previous commit, finally allow for direct
lookup of encrypted values. However, already stored values will not be
found. To fix those, each database row will have to be read in by
ofbiz, then immediately written back out.
This is part two to completely fix OFBIZ-5959:
Person.socialSecurityNumber can't be used for findByAnd.
Modified:
ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
ofbiz/trunk/framework/entity/entitydef/entitymodel_test.xml
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityCryptoTestSuite.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java
ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
Modified: ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Tue Jun 24 00:23:23 2014
@@ -135,7 +135,15 @@ under the License.
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="col-name" type="xs:string"/>
<xs:attribute name="type" type="xs:string" use="required"/>
- <xs:attribute name="encrypt" default="false" type="boolean"/>
+ <xs:attribute name="encrypt" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ <xs:enumeration value="salt"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
<xs:attribute name="enable-audit-log" default="false" type="boolean">
<xs:annotation>
<xs:documentation>
Modified: ofbiz/trunk/framework/entity/entitydef/entitymodel_test.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/entitydef/entitymodel_test.xml?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/entitydef/entitymodel_test.xml (original)
+++ ofbiz/trunk/framework/entity/entitydef/entitymodel_test.xml Tue Jun 24
00:23:23 2014
@@ -197,6 +197,7 @@ under the License.
<field name="testingCryptoTypeId" type="id-ne"/>
<field name="unencryptedValue" type="description"/>
<field name="encryptedValue" type="description" encrypt="true"/>
+ <field name="saltedEncryptedValue" type="description" encrypt="salt"/>
<prim-key field="testingCryptoId"/>
</entity>
<view-entity entity-name="TestingCryptoRawView"
@@ -209,5 +210,10 @@ under the License.
<complex-alias-field entity-alias="TC" field="encryptedValue"/>
</complex-alias>
</alias>
+ <alias name="rawSaltedEncryptedValue">
+ <complex-alias operator="+">
+ <complex-alias-field entity-alias="TC" field="saltedEncryptedValue"/>
+ </complex-alias>
+ </alias>
</view-entity>
</entitymodel>
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java Tue Jun 24
00:23:23 2014
@@ -33,6 +33,7 @@ import org.ofbiz.entity.datasource.Gener
import org.ofbiz.entity.eca.EntityEcaHandler;
import org.ofbiz.entity.model.DynamicViewEntity;
import org.ofbiz.entity.model.ModelEntity;
+import org.ofbiz.entity.model.ModelField;
import org.ofbiz.entity.model.ModelFieldType;
import org.ofbiz.entity.model.ModelFieldTypeReader;
import org.ofbiz.entity.model.ModelGroupReader;
@@ -264,8 +265,11 @@ public interface Delegator {
public void encryptFields(List<? extends GenericEntity> entities) throws
GenericEntityException;
+ @Deprecated
public Object encryptFieldValue(String entityName, Object fieldValue)
throws EntityCryptoException;
+ public Object encryptFieldValue(String entityName,
ModelField.EncryptMethod encryptMethod, Object fieldValue) throws
EntityCryptoException;
+
/**
* Finds GenericValues by the conditions specified in the EntityCondition
* object, the the EntityCondition javadoc for more details. NOTE 20080502:
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java Tue
Jun 24 00:23:23 2014
@@ -2644,13 +2644,14 @@ public class GenericDelegator implements
Iterator<ModelField> i = model.getFieldsIterator();
while (i.hasNext()) {
ModelField field = i.next();
- if (field.getEncrypt()) {
+ ModelField.EncryptMethod encryptMethod = field.getEncryptMethod();
+ if (encryptMethod.isEncrypted()) {
Object obj = entity.get(field.getName());
if (obj != null) {
if (obj instanceof String && UtilValidate.isEmpty(obj)) {
continue;
}
- entity.dangerousSetNoCheckButFast(field,
this.encryptFieldValue(entityName, obj));
+ entity.dangerousSetNoCheckButFast(field,
this.encryptFieldValue(entityName, encryptMethod, obj));
}
}
}
@@ -2660,12 +2661,21 @@ public class GenericDelegator implements
* @see org.ofbiz.entity.Delegator#encryptFieldValue(java.lang.String,
java.lang.Object)
*/
@Override
+ @Deprecated
public Object encryptFieldValue(String entityName, Object fieldValue)
throws EntityCryptoException {
+ return encryptFieldValue(entityName, null, fieldValue);
+ }
+
+ @Override
+ public Object encryptFieldValue(String entityName,
ModelField.EncryptMethod encryptMethod, Object fieldValue) throws
EntityCryptoException {
+ if (encryptMethod == null) {
+ encryptMethod = ModelField.EncryptMethod.TRUE;
+ }
if (fieldValue != null) {
if (fieldValue instanceof String &&
UtilValidate.isEmpty(fieldValue)) {
return fieldValue;
}
- return this.crypto.encrypt(entityName, fieldValue);
+ return this.crypto.encrypt(entityName, encryptMethod, fieldValue);
}
return fieldValue;
}
@@ -2693,7 +2703,8 @@ public class GenericDelegator implements
Iterator<ModelField> i = model.getFieldsIterator();
while (i.hasNext()) {
ModelField field = i.next();
- if (field.getEncrypt()) {
+ ModelField.EncryptMethod encryptMethod = field.getEncryptMethod();
+ if (encryptMethod.isEncrypted()) {
String keyName = entityName;
if (model instanceof ModelViewEntity) {
ModelViewEntity modelView = (ModelViewEntity) model;
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java Tue
Jun 24 00:23:23 2014
@@ -1335,7 +1335,7 @@ public class GenericEntity implements Ma
for (String curKey: new TreeSet<String>(fields.keySet())) {
Object curValue = fields.get(curKey);
ModelField field = this.getModelEntity().getField(curKey);
- if (field.getEncrypt() && curValue instanceof String) {
+ if (field.getEncryptMethod().isEncrypted() && curValue instanceof
String) {
String encryptField = (String) curValue;
// the encryptField may not actually be UTF8, it could be any
// random encoding; just treat it as a series of raw bytes.
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java
Tue Jun 24 00:23:23 2014
@@ -171,9 +171,9 @@ public class EntityExpr extends EntityCo
} else {
return;
}
- if (modelField != null && modelField.getEncrypt()) {
+ if (modelField != null && modelField.getEncryptMethod().isEncrypted())
{
try {
- this.rhs =
delegator.encryptFieldValue(modelEntity.getEntityName(), this.rhs);
+ this.rhs =
delegator.encryptFieldValue(modelEntity.getEntityName(),
modelField.getEncryptMethod(), this.rhs);
} catch (EntityCryptoException e) {
Debug.logWarning(e, "Error encrypting field [" +
modelEntity.getEntityName() + "." + modelField.getName() + "] with value: " +
this.rhs, module);
}
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
Tue Jun 24 00:23:23 2014
@@ -355,7 +355,7 @@ public class ModelEntity implements Comp
enableAuditLog =
"true".equals(fieldElement.getAttribute("enable-audit-log"));
}
newField = ModelField.create(this, description,
existingField.getName(), type, colName, existingField.getColValue(),
existingField.getFieldSet(),
- existingField.getIsNotNull(), existingField.getIsPk(),
existingField.getEncrypt(), existingField.getIsAutoCreatedInternal(),
+ existingField.getIsNotNull(), existingField.getIsPk(),
existingField.getEncryptMethod(), existingField.getIsAutoCreatedInternal(),
enableAuditLog, existingField.getValidators());
}
// add to the entity as a new field
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java Tue
Jun 24 00:23:23 2014
@@ -24,6 +24,7 @@ import java.util.Iterator;
import java.util.List;
import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.entity.jdbc.DatabaseUtil;
import org.w3c.dom.Document;
@@ -36,6 +37,27 @@ import org.w3c.dom.Element;
@ThreadSafe
@SuppressWarnings("serial")
public final class ModelField extends ModelChild {
+ public static final String module = ModelField.class.getName();
+
+ public enum EncryptMethod {
+ FALSE {
+ public boolean isEncrypted() {
+ return false;
+ }
+ },
+ TRUE {
+ public boolean isEncrypted() {
+ return true;
+ }
+ },
+ SALT {
+ public boolean isEncrypted() {
+ return true;
+ }
+ };
+
+ public abstract boolean isEncrypted();
+ }
/**
* Returns a new <code>ModelField</code> instance, initialized with the
specified values.
@@ -67,6 +89,10 @@ public final class ModelField extends Mo
* @param validators The validators for this field.
*/
public static ModelField create(ModelEntity modelEntity, String
description, String name, String type, String colName, String colValue, String
fieldSet, boolean isNotNull, boolean isPk, boolean encrypt, boolean
isAutoCreatedInternal, boolean enableAuditLog, List<String> validators) {
+ return create(modelEntity, description, name, type, colName, colValue,
fieldSet, isNotNull, isPk, encrypt ? EncryptMethod.TRUE : EncryptMethod.FALSE,
isAutoCreatedInternal, enableAuditLog, validators);
+ }
+
+ public static ModelField create(ModelEntity modelEntity, String
description, String name, String type, String colName, String colValue, String
fieldSet, boolean isNotNull, boolean isPk, EncryptMethod encrypt, boolean
isAutoCreatedInternal, boolean enableAuditLog, List<String> validators) {
// TODO: Validate parameters.
if (description == null) {
description = "";
@@ -121,7 +147,11 @@ public final class ModelField extends Mo
if (isPk) {
isNotNull = true;
}
- boolean encrypt = "true".equals(fieldElement.getAttribute("encrypt"));
+ EncryptMethod encrypt =
EncryptMethod.valueOf(fieldElement.getAttribute("encrypt").toUpperCase());
+ if (encrypt == null) {
+ Debug.logWarning("invalid encrypt value: %s", module,
fieldElement.getAttribute("encrypt"));
+ encrypt = EncryptMethod.FALSE;
+ }
boolean enableAuditLog =
"true".equals(fieldElement.getAttribute("enable-audit-log"));
List<String>validators = Collections.emptyList();
List<? extends Element> elementList =
UtilXml.childElementList(fieldElement, "validate");
@@ -151,7 +181,7 @@ public final class ModelField extends Mo
String description = "";
String colValue = "";
String fieldSet = "";
- boolean encrypt = false;
+ EncryptMethod encrypt = EncryptMethod.FALSE;
boolean enableAuditLog = false;
return new ModelField(modelEntity, description, name, type, colName,
colValue, fieldSet, isNotNull, isPk, encrypt, false, enableAuditLog,
Collections.<String>emptyList());
}
@@ -175,7 +205,7 @@ public final class ModelField extends Mo
/** boolean which specifies whether or not the Field is a Primary Key */
private final boolean isPk;
- private final boolean encrypt;
+ private final EncryptMethod encrypt;
private final boolean isNotNull;
private final boolean isAutoCreatedInternal;
private final boolean enableAuditLog;
@@ -186,7 +216,7 @@ public final class ModelField extends Mo
/** validators to be called when an update is done */
private final List<String> validators;
- private ModelField(ModelEntity modelEntity, String description, String
name, String type, String colName, String colValue, String fieldSet, boolean
isNotNull, boolean isPk, boolean encrypt, boolean isAutoCreatedInternal,
boolean enableAuditLog, List<String> validators) {
+ private ModelField(ModelEntity modelEntity, String description, String
name, String type, String colName, String colValue, String fieldSet, boolean
isNotNull, boolean isPk, EncryptMethod encrypt, boolean isAutoCreatedInternal,
boolean enableAuditLog, List<String> validators) {
super(modelEntity, description);
this.name = name;
this.type = type;
@@ -231,7 +261,12 @@ public final class ModelField extends Mo
}
/** Returns <code>true</code> if this field is encrypted. */
+ @Deprecated
public boolean getEncrypt() {
+ return this.encrypt.isEncrypted();
+ }
+
+ public EncryptMethod getEncryptMethod() {
return this.encrypt;
}
@@ -267,8 +302,8 @@ public final class ModelField extends Mo
root.setAttribute("col-name", this.getColName());
}
root.setAttribute("type", this.getType());
- if (this.getEncrypt()) {
- root.setAttribute("encrypt", "true");
+ if (this.getEncryptMethod().isEncrypted()) {
+ root.setAttribute("encrypt",
this.getEncryptMethod().toString().toLowerCase());
}
if (this.getIsNotNull()) {
root.setAttribute("not-null", "true");
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
Tue Jun 24 00:23:23 2014
@@ -431,7 +431,7 @@ public class ModelViewEntity extends Mod
String fieldSet = "";
boolean isNotNull = false;
boolean isPk = false;
- boolean encrypt = false;
+ ModelField.EncryptMethod encryptMethod =
ModelField.EncryptMethod.FALSE;
boolean isAutoCreatedInternal = false;
boolean enableAuditLog = false;
List<String> validators = null;
@@ -458,7 +458,7 @@ public class ModelViewEntity extends Mod
} else {
isPk = aliasedField.getIsPk();
}
- encrypt = aliasedField.getEncrypt();
+ encryptMethod = aliasedField.getEncryptMethod();
type = aliasedField.getType();
validators = aliasedField.getValidators();
colValue = alias.entityAlias + "." +
SqlJdbcUtil.filterColName(aliasedField.getColName());
@@ -492,7 +492,7 @@ public class ModelViewEntity extends Mod
colValue = prefix + colValue + ")";
}
}
- ModelField field = ModelField.create(this, description, name,
type, colName, colValue, fieldSet, isNotNull, isPk, encrypt,
isAutoCreatedInternal, enableAuditLog, validators);
+ ModelField field = ModelField.create(this, description, name,
type, colName, colValue, fieldSet, isNotNull, isPk, encryptMethod,
isAutoCreatedInternal, enableAuditLog, validators);
// if this is a groupBy field, add it to the groupBys list
if (alias.groupBy || groupByFields.contains(alias.name)) {
this.groupBys.add(field);
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityCryptoTestSuite.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityCryptoTestSuite.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityCryptoTestSuite.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityCryptoTestSuite.java
Tue Jun 24 00:23:23 2014
@@ -38,24 +38,32 @@ public class EntityCryptoTestSuite exten
GenericValue entity = delegator.findOne("TestingCrypto",
UtilMisc.toMap("testingCryptoId", "1"), false);
assertNull(entity.getString("unencryptedValue"));
assertNull(entity.getString("encryptedValue"));
+ assertNull(entity.getString("saltedEncryptedValue"));
GenericValue view = delegator.findOne("TestingCryptoRawView",
UtilMisc.toMap("testingCryptoId", "1"), false);
assertNull(view.getString("unencryptedValue"));
assertNull(view.getString("encryptedValue"));
+ assertNull(view.getString("saltedEncryptedValue"));
assertNull(view.getString("rawEncryptedValue"));
+ assertNull(view.getString("rawSaltedEncryptedValue"));
// Verify that encryption is taking place
entity.setString("unencryptedValue", nanoTime);
entity.setString("encryptedValue", nanoTime);
+ entity.setString("saltedEncryptedValue", nanoTime);
entity.store();
view.refresh();
assertEquals(nanoTime, view.getString("unencryptedValue"));
assertEquals(nanoTime, view.getString("encryptedValue"));
-
+ assertEquals(nanoTime, view.getString("saltedEncryptedValue"));
String initialValue = view.getString("rawEncryptedValue");
+ String initialSaltedValue = view.getString("rawSaltedEncryptedValue");
assertFalse(nanoTime.equals(initialValue));
+ assertFalse(nanoTime.equals(initialSaltedValue));
+ assertFalse(initialValue.equals(initialSaltedValue));
// Verify that the same value stored repeatedly gives different raw
encrypted values.
entity.setString("encryptedValue", nanoTime);
+ entity.setString("saltedEncryptedValue", nanoTime);
entity.store();
entity.refresh(); // this is a bug; store() ends up setting the
encrypted value *into* the entity
assertEquals(nanoTime, entity.getString("unencryptedValue"));
@@ -64,9 +72,28 @@ public class EntityCryptoTestSuite exten
view.refresh();
assertEquals(nanoTime, view.getString("unencryptedValue"));
assertEquals(nanoTime, view.getString("encryptedValue"));
+ assertEquals(nanoTime, view.getString("saltedEncryptedValue"));
String updatedValue = view.getString("rawEncryptedValue");
+ String updatedSaltedValue = view.getString("rawSaltedEncryptedValue");
+
assertFalse(nanoTime.equals(updatedValue));
- assertFalse(initialValue.equals(updatedValue));
+ assertFalse(nanoTime.equals(updatedSaltedValue));
+ assertFalse(updatedValue.equals(updatedSaltedValue));
+ assertEquals(initialValue, updatedValue);
+ assertFalse(initialSaltedValue.equals(updatedSaltedValue));
+ }
+
+ public void testCryptoLookup() throws Exception {
+ String nanoTime = "" + System.nanoTime();
+
+ delegator.removeByAnd("TestingCrypto",
UtilMisc.toMap("testingCryptoTypeId", "LOOKUP"));
+ delegator.create("TestingCrypto", UtilMisc.toMap("testingCryptoId",
"lookup-null", "testingCryptoTypeId", "LOOKUP"));
+ delegator.create("TestingCrypto", UtilMisc.toMap("testingCryptoId",
"lookup-value", "testingCryptoTypeId", "LOOKUP", "encryptedValue", nanoTime,
"saltedEncryptedValue", nanoTime));
+
+ assertEquals(1, delegator.findByAnd("TestingCrypto",
UtilMisc.toMap("testingCryptoTypeId", "LOOKUP", "encryptedValue", null), null,
false).size());
+ assertEquals(1, delegator.findByAnd("TestingCrypto",
UtilMisc.toMap("testingCryptoTypeId", "LOOKUP", "saltedEncryptedValue", null),
null, false).size());
+ assertEquals(1, delegator.findByAnd("TestingCrypto",
UtilMisc.toMap("testingCryptoTypeId", "LOOKUP", "encryptedValue", nanoTime),
null, false).size());
+ assertEquals(0, delegator.findByAnd("TestingCrypto",
UtilMisc.toMap("testingCryptoTypeId", "LOOKUP", "saltedEncryptedValue",
nanoTime), null, false).size());
}
}
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java
Tue Jun 24 00:23:23 2014
@@ -40,6 +40,7 @@ import org.ofbiz.entity.EntityCryptoExce
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.transaction.TransactionUtil;
+import org.ofbiz.entity.model.ModelField.EncryptMethod;
public final class EntityCrypto {
@@ -65,7 +66,13 @@ public final class EntityCrypto {
}
/** Encrypts an Object into an encrypted hex encoded String */
+ @Deprecated
public String encrypt(String keyName, Object obj) throws
EntityCryptoException {
+ return encrypt(keyName, EncryptMethod.TRUE, obj);
+ }
+
+ /** Encrypts an Object into an encrypted hex encoded String */
+ public String encrypt(String keyName, EncryptMethod encryptMethod, Object
obj) throws EntityCryptoException {
try {
SecretKey key = this.findKey(keyName, handlers[0]);
if (key == null) {
@@ -91,7 +98,7 @@ public final class EntityCrypto {
}
}
}
- return handlers[0].encryptValue(key, UtilObject.getBytes(obj));
+ return handlers[0].encryptValue(encryptMethod, key,
UtilObject.getBytes(obj));
} catch (GeneralException e) {
throw new EntityCryptoException(e);
}
@@ -212,7 +219,7 @@ public final class EntityCrypto {
protected abstract String encodeKey(SecretKey key) throws
GeneralException;
protected abstract byte[] decryptValue(SecretKey key, String
encryptedString) throws GeneralException;
- protected abstract String encryptValue(SecretKey key, byte[] objBytes)
throws GeneralException;
+ protected abstract String encryptValue(EncryptMethod encryptMethod,
SecretKey key, byte[] objBytes) throws GeneralException;
}
protected static abstract class LegacyStorageHandler extends
StorageHandler {
@@ -232,7 +239,7 @@ public final class EntityCrypto {
}
@Override
- protected String encryptValue(SecretKey key, byte[] objBytes) throws
GeneralException {
+ protected String encryptValue(EncryptMethod encryptMethod, SecretKey
key, byte[] objBytes) throws GeneralException {
return StringUtil.toHexString(DesCrypt.encrypt(key, objBytes));
}
};
@@ -306,11 +313,19 @@ public final class EntityCrypto {
}
@Override
- protected String encryptValue(SecretKey key, byte[] objBytes) throws
GeneralException {
- Random random = new Random();
- // random length 5-16
- byte[] saltBytes = new byte[5 + random.nextInt(11)];
- random.nextBytes(saltBytes);
+ protected String encryptValue(EncryptMethod encryptMethod, SecretKey
key, byte[] objBytes) throws GeneralException {
+ byte[] saltBytes;
+ switch (encryptMethod) {
+ case SALT:
+ Random random = new Random();
+ // random length 5-16
+ saltBytes = new byte[5 + random.nextInt(11)];
+ random.nextBytes(saltBytes);
+ break;
+ default:
+ saltBytes = new byte[0];
+ break;
+ }
byte[] allBytes = new byte[1 + saltBytes.length + objBytes.length];
allBytes[0] = (byte) saltBytes.length;
System.arraycopy(saltBytes, 0, allBytes, 1, saltBytes.length);
Modified:
ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java?rev=1604968&r1=1604967&r2=1604968&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
(original)
+++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
Tue Jun 24 00:23:23 2014
@@ -711,7 +711,8 @@ public class WebToolsServices {
javaNameMap.put("type", (field.getType()) != null
? field.getType() : null);
javaNameMap.put("javaType", (field.getType() !=
null && type != null) ? type.getJavaType() : "Undefined");
javaNameMap.put("sqlType", (type != null &&
type.getSqlType() != null) ? type.getSqlType() : "Undefined");
- javaNameMap.put("encrypted", field.getEncrypt());
+ javaNameMap.put("encrypted",
field.getEncryptMethod().isEncrypted());
+ javaNameMap.put("encryptMethod",
field.getEncryptMethod());
javaNameList.add(javaNameMap);
}