Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,6 @@ public void setEncryptKey(String encryptKey) {

public void setEncryptKeyFromPath(String encryptKeyPath) {
this.encryptKey = EncryptUtils.getEncryptKeyFromPath(encryptKeyPath);
EncryptUtils.encryptParam = EncryptUtils.getEncryptParameter();
EncryptUtils.normalKeyStr = EncryptUtils.getNormalKeyStr();
}

public int getGroupSizeInByte() {
Expand Down
120 changes: 58 additions & 62 deletions java/tsfile/src/main/java/org/apache/tsfile/encrypt/EncryptUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class EncryptUtils {
Expand All @@ -40,9 +41,20 @@ public class EncryptUtils {

private static final String encryptClassPrefix = "org.apache.tsfile.encrypt.";

public static String normalKeyStr = getNormalKeyStr();
private static volatile String normalKeyStr;

public static EncryptParameter encryptParam = getEncryptParameter();
private static volatile EncryptParameter encryptParam;

public static String getNormalKeyStr() {
if (normalKeyStr == null) {
synchronized (EncryptUtils.class) {
if (normalKeyStr == null) {
normalKeyStr = getNormalKeyStr(TSFileDescriptor.getInstance().getConfig());
}
}
}
return normalKeyStr;
}

public static String getEncryptClass(String encryptType) {
String classNameRegex = "^(\\p{Alpha}\\w*)(\\.\\p{Alpha}\\w+)+$";
Expand Down Expand Up @@ -76,7 +88,11 @@ public static String getEncryptKeyFromPath(String path) {
sb.append("\n").append(line);
}
}
return sb.toString();
String str = sb.toString();
if (str.isEmpty()) {
return defaultKey;
}
return str;
} catch (IOException e) {
throw new EncryptException("Read main encrypt key error", e);
}
Expand Down Expand Up @@ -106,78 +122,57 @@ public static String byteArrayToHexString(byte[] bytes) {
return sb.toString();
}

public static String getNormalKeyStr() {
public static String getNormalKeyStr(TSFileConfig conf) {
final MessageDigest md;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("IoTDB is the best".getBytes());
md.update(TSFileDescriptor.getInstance().getConfig().getEncryptKey().getBytes());
byte[] data_key = Arrays.copyOfRange(md.digest(), 0, 16);
data_key =
IEncryptor.getEncryptor(
TSFileDescriptor.getInstance().getConfig().getEncryptType(),
TSFileDescriptor.getInstance().getConfig().getEncryptKey().getBytes())
.encrypt(data_key);

StringBuilder valueStr = new StringBuilder();

for (byte b : data_key) {
valueStr.append(b).append(",");
}

valueStr.deleteCharAt(valueStr.length() - 1);
String str = valueStr.toString();

return str;
} catch (Exception e) {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new EncryptException(
"SHA-256 function not found while using SHA-256 to generate data key", e);
"SHA-256 algorithm not found while using SHA-256 to generate data key", e);
}
}

public static String getNormalKeyStr(TSFileConfig conf) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
byte[] data_key = Arrays.copyOfRange(md.digest(), 0, 16);
data_key =
IEncryptor.getEncryptor(conf.getEncryptType(), conf.getEncryptKey().getBytes())
.encrypt(data_key);
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
byte[] data_key = Arrays.copyOfRange(md.digest(), 0, 16);
data_key =
IEncryptor.getEncryptor(conf.getEncryptType(), conf.getEncryptKey().getBytes())
.encrypt(data_key);

StringBuilder valueStr = new StringBuilder();
StringBuilder valueStr = new StringBuilder();

for (byte b : data_key) {
valueStr.append(b).append(",");
}

valueStr.deleteCharAt(valueStr.length() - 1);
String str = valueStr.toString();

return str;
} catch (Exception e) {
throw new EncryptException(
"SHA-256 function not found while using SHA-256 to generate data key", e);
for (byte b : data_key) {
valueStr.append(b).append(",");
}

valueStr.deleteCharAt(valueStr.length() - 1);
return valueStr.toString();
}

public static EncryptParameter getEncryptParameter() {
return getEncryptParameter(TSFileDescriptor.getInstance().getConfig());
if (encryptParam == null) {
synchronized (EncryptUtils.class) {
if (encryptParam == null) {
encryptParam = getEncryptParameter(TSFileDescriptor.getInstance().getConfig());
}
}
}
return encryptParam;
}

public static EncryptParameter getEncryptParameter(TSFileConfig conf) {
String encryptType;
byte[] dataEncryptKey;
if (conf.getEncryptFlag()) {
encryptType = conf.getEncryptType();
final MessageDigest md;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
} catch (Exception e) {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new EncryptException(
"SHA-256 function not found while using SHA-256 to generate data key", e);
"SHA-256 algorithm not found while using SHA-256 to generate data key", e);
}
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
} else {
encryptType = "org.apache.tsfile.encrypt.UNENCRYPTED";
dataEncryptKey = null;
Expand Down Expand Up @@ -214,15 +209,16 @@ public static IEncrypt getEncrypt(TSFileConfig conf) {
byte[] dataEncryptKey;
if (conf.getEncryptFlag()) {
encryptType = conf.getEncryptType();
final MessageDigest md;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
} catch (Exception e) {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new EncryptException(
"SHA-256 function not found while using SHA-256 to generate data key", e);
"SHA-256 algorithm not found while using SHA-256 to generate data key", e);
}
md.update("IoTDB is the best".getBytes());
md.update(conf.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
} else {
encryptType = "org.apache.tsfile.encrypt.UNENCRYPTED";
dataEncryptKey = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ public EncryptParameter getEncryptParam(LongConsumer ioSizeRecorder) throws IOEx
readFileMetadata(ioSizeRecorder);
return tsFileMetaData.getEncryptParam();
}
return EncryptUtils.encryptParam;
return EncryptUtils.getEncryptParameter();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class UnClosedTsFileReader extends TsFileSequenceReader {
// ioSizeRecorder can be null
public UnClosedTsFileReader(String file, LongConsumer ioSizeRecorder) throws IOException {
super(file, false, ioSizeRecorder);
encryptParam = EncryptUtils.encryptParam;
encryptParam = EncryptUtils.getEncryptParameter();
}

// ioSizeRecorder can be null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public Chunk(
this.chunkData = buffer;
this.deleteIntervalList = deleteIntervalList;
this.chunkStatistic = chunkStatistic;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public Chunk(
Expand All @@ -93,7 +93,7 @@ public Chunk(
public Chunk(ChunkHeader header, ByteBuffer buffer) {
this.chunkHeader = header;
this.chunkData = buffer;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public Chunk(ChunkHeader header, ByteBuffer buffer, EncryptParameter encryptParam) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public LazyLoadPageData(byte[] data, int offset, IUnCompressor unCompressor) {
this.chunkData = data;
this.pageDataOffset = offset;
this.unCompressor = unCompressor;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public LazyLoadPageData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import java.io.File;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -193,18 +194,19 @@ protected TsFileWriter(TsFileIOWriter fileWriter, Schema schema, TSFileConfig co
if (config.getEncryptFlag()) {
encryptLevel = "2";
encryptType = config.getEncryptType();
final MessageDigest md;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("IoTDB is the best".getBytes());
md.update(config.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
encryptKey =
IEncryptor.getEncryptor(config.getEncryptType(), config.getEncryptKey().getBytes())
.encrypt(dataEncryptKey);
} catch (Exception e) {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new EncryptException(
"SHA-256 function not found while using SHA-256 to generate data key", e);
"SHA-256 algorithm not found while using SHA-256 to generate data key", e);
}
md.update("IoTDB is the best".getBytes());
md.update(config.getEncryptKey().getBytes());
dataEncryptKey = Arrays.copyOfRange(md.digest(), 0, 16);
encryptKey =
IEncryptor.getEncryptor(config.getEncryptType(), config.getEncryptKey().getBytes())
.encrypt(dataEncryptKey);
} else {
encryptLevel = "0";
encryptType = "org.apache.tsfile.encrypt.UNENCRYPTED";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public AlignedChunkGroupWriterImpl(IDeviceID deviceId) {
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder());
TSDataType timeType = TSFileDescriptor.getInstance().getConfig().getTimeSeriesDataType();
Encoder encoder = TSEncodingBuilder.getEncodingBuilder(tsEncoding).getEncoder(timeType);
this.encryprParam = EncryptUtils.encryptParam;
this.encryprParam = EncryptUtils.getEncryptParameter();
timeChunkWriter =
new TimeChunkWriter(
timeMeasurementId, compressionType, tsEncoding, encoder, this.encryprParam);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ protected AlignedChunkWriterImpl() {}

// TestOnly
public AlignedChunkWriterImpl(VectorMeasurementSchema schema) {
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
timeChunkWriter =
new TimeChunkWriter(
schema.getMeasurementName(),
Expand Down Expand Up @@ -127,7 +127,7 @@ public AlignedChunkWriterImpl(VectorMeasurementSchema schema, EncryptParameter e
*/
public AlignedChunkWriterImpl(
IMeasurementSchema timeSchema, List<IMeasurementSchema> valueSchemaList) {
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
timeChunkWriter =
new TimeChunkWriter(
timeSchema.getMeasurementName(),
Expand Down Expand Up @@ -189,7 +189,7 @@ public AlignedChunkWriterImpl(
* @param schemaList value schema list
*/
public AlignedChunkWriterImpl(List<IMeasurementSchema> schemaList) {
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
TSEncoding timeEncoding =
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder());
TSDataType timeType = TSFileDescriptor.getInstance().getConfig().getTimeSeriesDataType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public class ChunkWriterImpl implements IChunkWriter {
public ChunkWriterImpl(IMeasurementSchema schema) {
this.measurementSchema = schema;
this.compressor = ICompressor.getCompressor(schema.getCompressor());
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
this.pageBuffer = new PublicBAOS();

this.pageSizeThreshold = TSFileDescriptor.getInstance().getConfig().getPageSizeInByte();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public class NonAlignedChunkGroupWriterImpl implements IChunkGroupWriter {

public NonAlignedChunkGroupWriterImpl(IDeviceID deviceId) {
this.deviceId = deviceId;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public NonAlignedChunkGroupWriterImpl(IDeviceID deviceId, EncryptParameter encryptParam) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public TimeChunkWriter(
this.measurementId = measurementId;
this.encodingType = encodingType;
this.compressionType = compressionType;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
this.pageBuffer = new PublicBAOS();

this.pageSizeThreshold = TSFileDescriptor.getInstance().getConfig().getPageSizeInByte();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public ValueChunkWriter(
this.encodingType = encodingType;
this.dataType = dataType;
this.compressionType = compressionType;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
this.pageBuffer = new PublicBAOS();
this.pageSizeThreshold = TSFileDescriptor.getInstance().getConfig().getPageSizeInByte();
this.maxNumberOfPointsInPage =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@ public PageWriter(IMeasurementSchema measurementSchema) {
this(measurementSchema.getTimeEncoder(), measurementSchema.getValueEncoder());
this.statistics = Statistics.getStatsByType(measurementSchema.getType());
this.compressor = ICompressor.getCompressor(measurementSchema.getCompressor());
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

private PageWriter(Encoder timeEncoder, Encoder valueEncoder) {
this.timeOut = new PublicBAOS();
this.valueOut = new PublicBAOS();
this.timeEncoder = timeEncoder;
this.valueEncoder = valueEncoder;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public PageWriter(EncryptParameter encryptParam) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public TimePageWriter(Encoder timeEncoder, ICompressor compressor) {
this.timeEncoder = timeEncoder;
this.statistics = new TimeStatistics();
this.compressor = compressor;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public TimePageWriter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public ValuePageWriter(Encoder valueEncoder, ICompressor compressor, TSDataType
this.valueEncoder = valueEncoder;
this.statistics = Statistics.getStatsByType(dataType);
this.compressor = compressor;
this.encryptParam = EncryptUtils.encryptParam;
this.encryptParam = EncryptUtils.getEncryptParameter();
}

public ValuePageWriter(
Expand Down
Loading