Added salts
This commit is contained in:
parent
8c0b89753c
commit
0231f494f6
|
@ -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,
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue