@@ -66,36 +66,64 @@ macro_rules! basic_bytes {
6666/// HQC encapsulation key (public key).
6767#[ derive( Clone ) ]
6868pub struct EncapsulationKey < P : HqcParams > {
69- bytes : Vec < u8 > ,
70- _marker : PhantomData < P > ,
69+ pub ( crate ) bytes : Vec < u8 > ,
70+ pub ( crate ) _marker : PhantomData < P > ,
7171}
7272
7373/// HQC decapsulation key (secret key).
7474#[ derive( Clone ) ]
7575pub struct DecapsulationKey < P : HqcParams > {
76- bytes : Vec < u8 > ,
77- ek : EncapsulationKey < P > ,
78- _marker : PhantomData < P > ,
76+ pub ( crate ) bytes : Vec < u8 > ,
77+ pub ( crate ) ek : EncapsulationKey < P > ,
78+ pub ( crate ) _marker : PhantomData < P > ,
7979}
8080
8181/// HQC ciphertext.
8282#[ derive( Clone ) ]
8383pub struct Ciphertext < P : HqcParams > {
84- bytes : Vec < u8 > ,
85- _marker : PhantomData < P > ,
84+ pub ( crate ) bytes : Vec < u8 > ,
85+ pub ( crate ) _marker : PhantomData < P > ,
8686}
8787
8888/// HQC shared secret.
8989#[ derive( Clone ) ]
9090pub struct SharedSecret < P : HqcParams > {
91- bytes : Vec < u8 > ,
92- _marker : PhantomData < P > ,
91+ pub ( crate ) bytes : Vec < u8 > ,
92+ pub ( crate ) _marker : PhantomData < P > ,
9393}
9494
9595from_bytes ! ( EncapsulationKey , P :: PK_BYTES , InvalidPublicKeySize ) ;
9696from_bytes ! ( Ciphertext , P :: CT_BYTES , InvalidCiphertextSize ) ;
9797from_bytes ! ( SharedSecret , P :: SS_BYTES , InvalidSharedSecretSize ) ;
9898
99+ // ---------------------------------------------------------------------------
100+ // Internal constructors (crate-only)
101+ // ---------------------------------------------------------------------------
102+
103+ #[ cfg( any( feature = "kem" , feature = "pkcs8" ) ) ]
104+ impl < P : HqcParams > EncapsulationKey < P > {
105+ pub ( crate ) fn from_vec ( bytes : Vec < u8 > ) -> Self {
106+ debug_assert_eq ! ( bytes. len( ) , P :: PK_BYTES ) ;
107+ Self {
108+ bytes,
109+ _marker : PhantomData ,
110+ }
111+ }
112+ }
113+
114+ #[ cfg( any( feature = "kem" , feature = "pkcs8" ) ) ]
115+ impl < P : HqcParams > DecapsulationKey < P > {
116+ pub ( crate ) fn from_vec ( bytes : Vec < u8 > ) -> Self {
117+ debug_assert_eq ! ( bytes. len( ) , P :: SK_BYTES ) ;
118+ let ek = EncapsulationKey :: from_vec ( bytes[ ..P :: PK_BYTES ] . to_vec ( ) ) ;
119+ Self {
120+ bytes,
121+ ek,
122+ _marker : PhantomData ,
123+ }
124+ }
125+ }
126+
99127/// HQC Key Encapsulation Mechanism parameterized by security level.
100128///
101129/// Zero-sized marker type providing [`generate_key`](HqcKem::generate_key).
@@ -360,7 +388,7 @@ mod serde_impl {
360388 use super :: * ;
361389
362390 macro_rules! ser_impl {
363- ( $name: ident, ) => {
391+ ( $name: ident) => {
364392 impl <P : HqcParams > serde:: Serialize for $name<P > {
365393 fn serialize<S : serde:: Serializer >( & self , s: S ) -> Result <S :: Ok , S :: Error > {
366394 serdect:: slice:: serialize_hex_lower_or_bin( & self . bytes, s)
0 commit comments