Closed samuelgruetter closed 2 years ago
If I run About HmacHardware.Hmac.hmac., I get
About HmacHardware.Hmac.hmac.
hmac : forall {var : tvar}, Circuit ((Bit ** Vec (BitVec 32) hmac_register_count) ++ (((([] ++ [] ++ []) ++ [] ++ []) ++ [] ++ []) ++ ((([] ++ [] ++ []) ++ [] ++ []) ++ [] ++ []) ++ ((([] ++ [] ++ []) ++ [] ++ []) ++ [] ++ []) ++ ([] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ [] ++ (Bit ** Bit ** BitVec 32 ** BitVec 4 ** Bit ** Bit) ++ ((([] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ []) ++ [] ++ [] ++ ([] ++ ([] ++ []) ++ []) ++ (Bit ** BitVec 32 ** BitVec 4 ** BitVec 64 ** BitVec 4) ++ (([] ++ [] ++ [] ++ [] ++ []) ++ ([] ++ []) ++ ([] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ ([] ++ []) ++ []) ++ (([] ++ [] ++ [] ++ [] ++ (([] ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ []) ++ (([] ++ [] ++ []) ++ []) ++ [] ++ []) ++ [] ++ (([] ++ [] ++ []) ++ ([] ++ ([] ++ ([] ++ []) ++ []) ++ []) ++ ([] ++ ([] ++ ([] ++ []) ++ []) ++ []) ++ [] ++ ([] ++ ([] ++ []) ++ []) ++ []) ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ ([] ++ ([] ++ ([] ++ [] ++ []) ++ []) ++ []) ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ []) ++ ([] ++ [] ++ (([] ++ ([] ++ []) ++ []) ++ ([] ++ []) ++ []) ++ (Bit ** BitVec 32 ** Vec (BitVec 32) 256 ** BitVec (Nat.log2_up (256 + 1))) ++ (([] ++ ([] ++ [] ++ []) ++ []) ++ ([] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ [] ++ ([] ++ []) ++ ([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ([] ++ []) ++ ([] ++ []) ++ (([] ++ ([] ++ []) ++ []) ++ [] ++ []) ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ [] ++ [] ++ []) ++ (Bit ** BitVec 32 ** BitVec 4 ** Bit ** Bit ** BitVec 32 ** BitVec 4 ** Bit) ++ ((([] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ (Bit ** Bit ** Bit ** BitVec 6 ** BitVec 5 ** Vec (BitVec 32) 8 ** Bit) ++ ((([] ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ (([] ++ ([] ++ [] ++ []) ++ [] ++ []) ++ ([] ++ [] ++ [] ++ []) ++ ([] ++ ([] ++ [] ++ []) ++ [] ++ []) ++ ([] ++ [] ++ ([] ++ [] ++ []) ++ []) ++ [] ++ [] ++ [] ++ []) ++ ([] ++ []) ++ ([] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ [] ++ (Bit ** sha_block ** sha_digest ** BitVec 6 ** Bit) ++ (([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ [] ++ [] ++ (Bit ** sha_word ** Bit ** BitVec 4 ** BitVec 61 ** BitVec 4) ++ ([] ++ ([] ++ [] ++ [] ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ ([] ++ []) ++ ([] ++ []) ++ ([] ++ []) ++ []) ++ (([] ++ ([] ++ []) ++ []) ++ ([] ++ [] ++ []) ++ [] ++ []) ++ (([] ++ ([] ++ ([] ++ []) ++ []) ++ ([] ++ ([] ++ []) ++ []) ++ ([] ++ ([] ++ []) ++ []) ++ []) ++ [] ++ [] ++ (((([] ++ []) ++ []) ++ []) ++ (([] ++ []) ++ []) ++ []) ++ []) ++ ((([] ++ [] ++ []) ++ ([] ++ []) ++ []) ++ []) ++ ([] ++ [] ++ [] ++ []) ++ (([] ++ []) ++ ([] ++ (([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ []) ++ []) ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ [] ++ (sha_digest ** sha_block ** Bit ** sha_round) ++ (([] ++ []) ++ [] ++ ([] ++ []) ++ ([] ++ []) ++ ([] ++ [] ++ []) ++ (([] ++ [] ++ [] ++ [] ++ ((([] ++ ([] ++ []) ++ ([] ++ []) ++ []) ++ ([] ++ ([] ++ []) ++ ([] ++ []) ++ []) ++ []) ++ ([] ++ []) ++ []) ++ ((([] ++ ([] ++ []) ++ ([] ++ []) ++ []) ++ ([] ++ ([] ++ []) ++ ([] ++ []) ++ []) ++ []) ++ ([] ++ []) ++ []) ++ (([] ++ [] ++ []) ++ [] ++ []) ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ ((([] ++ []) ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ [] ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ [] ++ []) ++ [] ++ [] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ [] ++ []) ++ (([] ++ [] ++ []) ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ [] ++ [] ++ [] ++ [] ++ [] ++ ([] ++ [] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ []) ++ ([] ++ []) ++ ([] ++ [] ++ []) ++ (([] ++ []) ++ ([] ++ [] ++ []) ++ []) ++ (([] ++ []) ++ []) ++ [] ++ [] ++ [] ++ [] ++ [] ++ [] ++ []) ++ [] ++ [] ++ []) ++ ((([] ++ [] ++ [] ++ []) ++ []) ++ (([] ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ (([] ++ [] ++ []) ++ [] ++ [] ++ []) ++ []) ++ []) ++ [] ++ []) ++ []) [Bit; BitVec 32; BitVec 5; BitVec 4; Bit; Vec (BitVec 32) hmac_register_count] (Vec (BitVec 32) hmac_register_count) hmac is not universe polymorphic Arguments hmac {var} hmac is transparent Expands to: Constant HmacHardware.Hmac.hmac
That's a mouthful...
So let's try to simplify it:
Goal False. let t := type of HmacHardware.Hmac.hmac in let t' := eval cbn in t in idtac t'.
prints
(Circuit ((Bit ** Vec (BitVec 32) hmac_register_count) ** ((Bit ** Bit ** BitVec 32 ** BitVec 4 ** Bit ** Bit) ** (Bit ** BitVec 32 ** BitVec 4 ** BitVec 64 ** BitVec 4) ** Bit ** BitVec 32 ** Vec (BitVec 32) 256 ** BitVec 9) ** (Bit ** BitVec 32 ** BitVec 4 ** Bit ** Bit ** BitVec 32 ** BitVec 4 ** Bit) ** (Bit ** Bit ** Bit ** BitVec 6 ** BitVec 5 ** Vec (BitVec 32) 8 ** Bit) ** (Bit ** sha_block ** sha_digest ** BitVec 6 ** Bit) ** (Bit ** sha_word ** Bit ** BitVec 4 ** BitVec 61 ** BitVec 4) ** sha_digest ** sha_block ** Bit ** sha_round) [Bit; BitVec 32; BitVec 5; BitVec 4; Bit; Vec (BitVec 32) hmac_register_count] (Vec (BitVec 32) hmac_register_count))
That still doesn't look modular to me. Can we get hmac to have a type like, eg, the following?
hmac
(Circuit (state_added_by_tlul ** hmac_outer_state ** hmac_inner_state) [Bit; BitVec 32; BitVec 5; BitVec 4; Bit; Vec (BitVec 32) hmac_register_count] (Vec (BitVec 32) hmac_register_count))
Not sure how important this is right now, for the moment I'm trying not to worry about it, but just wanted to report this here.
If I run
About HmacHardware.Hmac.hmac.
, I getThat's a mouthful...
So let's try to simplify it:
prints
That still doesn't look modular to me. Can we get
hmac
to have a type like, eg, the following?Not sure how important this is right now, for the moment I'm trying not to worry about it, but just wanted to report this here.