Added salts

This commit is contained in:
Sean Bowe 2015-12-05 15:35:22 -07:00
parent 8c0b89753c
commit 0231f494f6
2 changed files with 26 additions and 1 deletions

View File

@ -14,6 +14,7 @@ public:
std::shared_ptr<digest_variable<FieldT>> padding_var; std::shared_ptr<digest_variable<FieldT>> padding_var;
std::vector<std::shared_ptr<digest_variable<FieldT>>> key; // dimension*dimension*8 bit key std::vector<std::shared_ptr<digest_variable<FieldT>>> key; // dimension*dimension*8 bit key
std::vector<pb_variable_array<FieldT>> salts;
std::vector<std::shared_ptr<block_variable<FieldT>>> key_blocks; std::vector<std::shared_ptr<block_variable<FieldT>>> key_blocks;
sodoku_encryption_key(protoboard<FieldT> &pb, sodoku_encryption_key(protoboard<FieldT> &pb,

View File

@ -11,10 +11,13 @@ sodoku_encryption_key<FieldT>::sodoku_encryption_key(protoboard<FieldT> &pb,
padding_var.reset(new digest_variable<FieldT>(pb, 256, "padding")); padding_var.reset(new digest_variable<FieldT>(pb, 256, "padding"));
key.resize(num_key_digests); key.resize(num_key_digests);
salts.resize(num_key_digests);
//key_blocks.resize(num_key_digests); //key_blocks.resize(num_key_digests);
for (unsigned int i = 0; i < num_key_digests; i++) { for (unsigned int i = 0; i < num_key_digests; i++) {
key[i].reset(new digest_variable<FieldT>(pb, 256, "key[i]")); key[i].reset(new digest_variable<FieldT>(pb, 256, "key[i]"));
salts[i].allocate(pb, 8, "key salt");
/* /*
key_blocks[i].reset(new block_variable<FieldT>(pb, { key_blocks[i].reset(new block_variable<FieldT>(pb, {
seed_key->bits, seed_key->bits,
@ -42,15 +45,36 @@ void sodoku_encryption_key<FieldT>::generate_r1cs_constraints()
for (unsigned int i = 0; i < num_key_digests; i++) { for (unsigned int i = 0; i < num_key_digests; i++) {
key[i]->generate_r1cs_constraints(); key[i]->generate_r1cs_constraints();
auto s = convertIntToVector(i);
for (unsigned int j = 0; j < 8; j++) {
this->pb.add_r1cs_constraint(
r1cs_constraint<FieldT>(
{ salts[i][j] },
{ 1 },
{ s[j] ? 1 : 0 }),
"constrain_salts");
}
} }
} }
template<typename FieldT> template<typename FieldT>
void sodoku_encryption_key<FieldT>::generate_r1cs_witness() void sodoku_encryption_key<FieldT>::generate_r1cs_witness()
{ {
unsigned int num_key_digests = div_ceil(dimension * dimension * 8, 256);
for (unsigned int i = 0; i < 256; i++) { for (unsigned int i = 0; i < 256; i++) {
this->pb.val(padding_var->bits[i]) = sha256_padding[i] ? 1 : 0; this->pb.val(padding_var->bits[i]) = sha256_padding[i] ? 1 : 0;
} }
for (unsigned int i = 0; i < num_key_digests; i++) {
auto s = convertIntToVector(i);
for (unsigned int j = 0; j < 8; j++) {
this->pb.val(salts[i][j]) = s[j] ? 1 : 0;
}
}
} }
template<typename FieldT> template<typename FieldT>