package com.kryptnostic.storage.v1.models;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.Lists;
import com.kryptnostic.kodex.v1.serialization.crypto.Encryptable;
public class EncryptableBlocks implements Serializable {
private static final long serialVersionUID = -7306228218357504656L;
private static final String FIELD_BLOCKS = "blocks";
private List<EncryptableBlock> blocks;
public EncryptableBlocks() {
this.blocks = Lists.newArrayList();
}
@JsonCreator
public EncryptableBlocks( @JsonProperty( FIELD_BLOCKS ) List<EncryptableBlock> blocks ) {
this.blocks = blocks;
}
public List<EncryptableBlock> getBlocks() {
return blocks;
}
public int size() {
return blocks.size();
}
/**
* This does not check for block content equality because blocks are encrypted This uses the verification hash,
* which is not guaranteed to be consistent with the document blocks
*/
@Override
public boolean equals( Object o ) {
EncryptableBlocks other = (EncryptableBlocks) o;
return size() == other.size();
}
public static boolean isValid( EncryptableBlock block ) {
return Arrays.equals(
Encryptable.hashFunction.hashBytes( block.getBlock().getContents() ).asBytes(),
block.getVerify() );
}
}