/*
- * Copyright (C) 2014 Andreas Steffen
+ * Copyright (C) 2014-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2009-2013 Security Innovation
for (i = 0; i < 5; i++)
{
- trits[i] = octet % 3;
- octet = (octet - trits[i]) / 3;
+ trits[i] = octet % p;
+ octet = (octet - trits[i]) / p;
}
}
/*
- * Copyright (C) 2014 Andreas Steffen
+ * Copyright (C) 2014-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2009-2013 Security Innovation
#include <library.h>
+/**
+ * Define small modulus p = 3 used for trits
+ */
+#define p 3
+
/**
* Each 3 bits in an array of octets is converted to 2 trits in an array
* of trits.
/*
- * Copyright (C) 2014 Andreas Steffen
+ * Copyright (C) 2014-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2009-2013 Security Innovation
/* set constants */
mod_q_mask = this->params->q - 1;
- q_mod_p = this->params->q % 3;
+ q_mod_p = this->params->q % p;
/* unpack the ciphertext */
ntru_octets_2_elements(ciphertext.len, ciphertext.ptr,
--cmprime_len;
for (i = 0; i < cmprime_len; i++)
{
- t1[i] = (t2[i] + 3 * t1[i]) & mod_q_mask;
+ t1[i] = (t2[i] + p * t1[i]) & mod_q_mask;
if (t1[i] >= (this->params->q / 2))
{
t1[i] -= q_mod_p;
}
- Mtrin[i] = (uint8_t)(t1[i] % 3);
+ Mtrin[i] = (uint8_t)(t1[i] % p);
if (Mtrin[i] == 1)
{
++m1;
{
for (i = 0; i < cmprime_len; i++)
{
- t1[i] = (t2[i] + 3 * t1[i]) & mod_q_mask;
+ t1[i] = (t2[i] + p * t1[i]) & mod_q_mask;
if (t1[i] >= (this->params->q / 2))
{
t1[i] -= q_mod_p;
}
- Mtrin[i] = (uint8_t)(t1[i] % 3);
+ Mtrin[i] = (uint8_t)(t1[i] % p);
}
}
for (i = 0; i < cmprime_len; i++)
{
Mtrin[i] -= mask_trits[i];
- if (Mtrin[i] >= 3)
+ if (Mtrin[i] >= p)
{
- Mtrin[i] += 3;
+ Mtrin[i] += p;
}
}
mask->destroy(mask);
/* form f = 1 + pF */
for (i = 0; i < params->N; i++)
{
- t1[i] = (t1[i] * 3) & mod_q_mask;
+ t1[i] = (p * t1[i]) & mod_q_mask;
}
t1[0] = (t1[0] + 1) & mod_q_mask;
for (i = 0; i < params->N; i++)
{
- this->pubkey[i] = (t2[i] * 3) & mod_q_mask;
+ this->pubkey[i] = (p * t2[i]) & mod_q_mask;
}
/* cleanup temporary storage */
/*
- * Copyright (C) 2014 Andreas Steffen
+ * Copyright (C) 2014-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2009-2013 Security Innovation
for (i = 0; i < mprime_len; i++)
{
t2[i] = mask_trits[i] + Mtrin[i];
- if (t2[i] >= 3)
+ if (t2[i] >= p)
{
- t2[i] -= 3;
+ t2[i] -= p;
}
if (t2[i] == 1)
{
for (i = 0; i < mprime_len; i++)
{
t2[i] = mask_trits[i] + Mtrin[i];
- if (t2[i] >= 3)
+ if (t2[i] >= p)
{
- t2[i] -= 3;
+ t2[i] -= p;
}
}
}