]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - include/crypto/poly1305.h
Merge tag 'platform-drivers-x86-v5.5-1' of git://git.infradead.org/linux-platform...
[linux.git] / include / crypto / poly1305.h
index f5a4319c2a1f37858cd8d9bea1932832b61f90c0..74c6e1cd73eee15321baf92fa96bb78c10a779ff 100644 (file)
@@ -22,20 +22,56 @@ struct poly1305_state {
 };
 
 struct poly1305_desc_ctx {
-       /* key */
-       struct poly1305_key r;
-       /* finalize key */
-       u32 s[4];
-       /* accumulator */
-       struct poly1305_state h;
        /* partial buffer */
        u8 buf[POLY1305_BLOCK_SIZE];
        /* bytes used in partial buffer */
        unsigned int buflen;
-       /* r key has been set */
-       bool rset;
-       /* s key has been set */
+       /* how many keys have been set in r[] */
+       unsigned short rset;
+       /* whether s[] has been set */
        bool sset;
+       /* finalize key */
+       u32 s[4];
+       /* accumulator */
+       struct poly1305_state h;
+       /* key */
+       struct poly1305_key r[CONFIG_CRYPTO_LIB_POLY1305_RSIZE];
 };
 
+void poly1305_init_arch(struct poly1305_desc_ctx *desc, const u8 *key);
+void poly1305_init_generic(struct poly1305_desc_ctx *desc, const u8 *key);
+
+static inline void poly1305_init(struct poly1305_desc_ctx *desc, const u8 *key)
+{
+       if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+               poly1305_init_arch(desc, key);
+       else
+               poly1305_init_generic(desc, key);
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *desc, const u8 *src,
+                         unsigned int nbytes);
+void poly1305_update_generic(struct poly1305_desc_ctx *desc, const u8 *src,
+                            unsigned int nbytes);
+
+static inline void poly1305_update(struct poly1305_desc_ctx *desc,
+                                  const u8 *src, unsigned int nbytes)
+{
+       if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+               poly1305_update_arch(desc, src, nbytes);
+       else
+               poly1305_update_generic(desc, src, nbytes);
+}
+
+void poly1305_final_arch(struct poly1305_desc_ctx *desc, u8 *digest);
+void poly1305_final_generic(struct poly1305_desc_ctx *desc, u8 *digest);
+
+static inline void poly1305_final(struct poly1305_desc_ctx *desc, u8 *digest)
+{
+       if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+               poly1305_final_arch(desc, digest);
+       else
+               poly1305_final_generic(desc, digest);
+}
+
 #endif