HQC harness¶
Test encapsulation¶
Attention
Testing encapsulation requires a reference implementation to decapsulate the ciphertexts, as encapsulation is a non-deterministic operation. We are working on integrating one so this function is only for testing the encapsulation/decapsulation invariant for now.
The naming convention for the encapsulation function is:
CC_HQC_<paramset>_encaps
Where paramset
is one of: 128
, 192
, 256
.
The harness function must have the following signature:
- int HQC_encaps(
- uint8_t *ct,
- size_t ct_size,
- uint8_t *ss,
- size_t ss_size,
- const uint8_t *pk,
- size_t pk_size,
Encapsulates with HQC.
- Parameters:
ct – [Out] An allocated buffer to return the resulting ciphertext.
ct_size – [In] The size in bytes of
ct
.ss – [Out] An allocated buffer to return the resulting shared secret.
ss_size – [In] The size in bytes of
ss
.pk – [In] The public key to encapsulate to.
pk_size – [In] The size in bytes of
pk
.
- Returns:
A status value.
- Return values:
1 – OK.
0 – An error occurred.
Test decapsulation¶
The naming convention for the decapsulation function is:
CC_HQC_<paramset>_decaps
Where paramset
is one of: 128
, 192
, 256
.
The harness function must have the following signature:
- int HQC_decaps(
- uint8_t *ss,
- size_t ss_size,
- const uint8_t *sk,
- size_t sk_size,
- const uint8_t *ct,
- size_t ct_size,
Decapsulates a shared secret with HQC.
- Parameters:
ss – [Out] An allocated buffer to return the resulting shared secret.
ss_size – [In] The size in bytes of
ss
.sk – [In] The secret key to use for decapsulation.
sk_size – [In] The size in bytes of
sk
.ct – [In] The ciphertext.
ct_size – [In] The size in bytes of
ct
.
- Returns:
A status value.
- Return values:
1 – OK.
0 – An error occurred.
Test encapsulation/decapsulation invariant¶
Encapsulating to a public key then decapsulating with the corresponding secret key should always yield the same share secret. To test this invariant, create the following function and a harness for both encapsulation and decapsulation, as detailed above.
CC_HQC_<paramset>_invariant
Where paramset
is one of: 128
, 192
, 256
.
The function is a stub to indicate crypto-condor to test the invariant, no operations are actually performed with it.
-
void HQC_invariant(void)¶
For example:
int CC_HQC_128_encaps(...) {
...
}
int CC_HQC_128_decaps(...) {
...
}
void CC_HQC_128_invariant() {};