|
@@ -146,6 +146,99 @@ int blake2bmac_file(const char *fname, const unsigned char *key, unsigned long k
|
|
|
int blake2bmac_test(void);
|
|
|
#endif /* LTC_BLAKE2BMAC */
|
|
|
|
|
|
+#ifdef LTC_PELICAN
|
|
|
+
|
|
|
+typedef struct pelican_state
|
|
|
+{
|
|
|
+ symmetric_key K;
|
|
|
+ unsigned char state[16];
|
|
|
+ int buflen;
|
|
|
+} pelican_state;
|
|
|
+
|
|
|
+int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen);
|
|
|
+int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen);
|
|
|
+int pelican_done(pelican_state *pelmac, unsigned char *out);
|
|
|
+int pelican_test(void);
|
|
|
+
|
|
|
+int pelican_memory(const unsigned char *key, unsigned long keylen,
|
|
|
+ const unsigned char *in, unsigned long inlen,
|
|
|
+ unsigned char *out);
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef LTC_XCBC
|
|
|
+
|
|
|
+/* add this to "keylen" to xcbc_init to use a pure three-key XCBC MAC */
|
|
|
+#define LTC_XCBC_PURE 0x8000UL
|
|
|
+
|
|
|
+typedef struct {
|
|
|
+ unsigned char K[3][MAXBLOCKSIZE],
|
|
|
+ IV[MAXBLOCKSIZE];
|
|
|
+
|
|
|
+ symmetric_key key;
|
|
|
+
|
|
|
+ int cipher,
|
|
|
+ buflen,
|
|
|
+ blocksize;
|
|
|
+} xcbc_state;
|
|
|
+
|
|
|
+int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen);
|
|
|
+int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen);
|
|
|
+int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen);
|
|
|
+int xcbc_memory(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ const unsigned char *in, unsigned long inlen,
|
|
|
+ unsigned char *out, unsigned long *outlen);
|
|
|
+int xcbc_memory_multi(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ unsigned char *out, unsigned long *outlen,
|
|
|
+ const unsigned char *in, unsigned long inlen, ...);
|
|
|
+int xcbc_file(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ const char *filename,
|
|
|
+ unsigned char *out, unsigned long *outlen);
|
|
|
+int xcbc_test(void);
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef LTC_F9_MODE
|
|
|
+
|
|
|
+typedef struct {
|
|
|
+ unsigned char akey[MAXBLOCKSIZE],
|
|
|
+ ACC[MAXBLOCKSIZE],
|
|
|
+ IV[MAXBLOCKSIZE];
|
|
|
+
|
|
|
+ symmetric_key key;
|
|
|
+
|
|
|
+ int cipher,
|
|
|
+ buflen,
|
|
|
+ keylen,
|
|
|
+ blocksize;
|
|
|
+} f9_state;
|
|
|
+
|
|
|
+int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen);
|
|
|
+int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen);
|
|
|
+int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen);
|
|
|
+int f9_memory(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ const unsigned char *in, unsigned long inlen,
|
|
|
+ unsigned char *out, unsigned long *outlen);
|
|
|
+int f9_memory_multi(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ unsigned char *out, unsigned long *outlen,
|
|
|
+ const unsigned char *in, unsigned long inlen, ...);
|
|
|
+int f9_file(int cipher,
|
|
|
+ const unsigned char *key, unsigned long keylen,
|
|
|
+ const char *filename,
|
|
|
+ unsigned char *out, unsigned long *outlen);
|
|
|
+int f9_test(void);
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * ENC+AUTH modes
|
|
|
+ */
|
|
|
+
|
|
|
#ifdef LTC_EAX_MODE
|
|
|
|
|
|
#if !(defined(LTC_OMAC) && defined(LTC_CTR_MODE))
|
|
@@ -440,95 +533,6 @@ int gcm_test(void);
|
|
|
|
|
|
#endif /* LTC_GCM_MODE */
|
|
|
|
|
|
-#ifdef LTC_PELICAN
|
|
|
-
|
|
|
-typedef struct pelican_state
|
|
|
-{
|
|
|
- symmetric_key K;
|
|
|
- unsigned char state[16];
|
|
|
- int buflen;
|
|
|
-} pelican_state;
|
|
|
-
|
|
|
-int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen);
|
|
|
-int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen);
|
|
|
-int pelican_done(pelican_state *pelmac, unsigned char *out);
|
|
|
-int pelican_test(void);
|
|
|
-
|
|
|
-int pelican_memory(const unsigned char *key, unsigned long keylen,
|
|
|
- const unsigned char *in, unsigned long inlen,
|
|
|
- unsigned char *out);
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifdef LTC_XCBC
|
|
|
-
|
|
|
-/* add this to "keylen" to xcbc_init to use a pure three-key XCBC MAC */
|
|
|
-#define LTC_XCBC_PURE 0x8000UL
|
|
|
-
|
|
|
-typedef struct {
|
|
|
- unsigned char K[3][MAXBLOCKSIZE],
|
|
|
- IV[MAXBLOCKSIZE];
|
|
|
-
|
|
|
- symmetric_key key;
|
|
|
-
|
|
|
- int cipher,
|
|
|
- buflen,
|
|
|
- blocksize;
|
|
|
-} xcbc_state;
|
|
|
-
|
|
|
-int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen);
|
|
|
-int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen);
|
|
|
-int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen);
|
|
|
-int xcbc_memory(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- const unsigned char *in, unsigned long inlen,
|
|
|
- unsigned char *out, unsigned long *outlen);
|
|
|
-int xcbc_memory_multi(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- unsigned char *out, unsigned long *outlen,
|
|
|
- const unsigned char *in, unsigned long inlen, ...);
|
|
|
-int xcbc_file(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- const char *filename,
|
|
|
- unsigned char *out, unsigned long *outlen);
|
|
|
-int xcbc_test(void);
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifdef LTC_F9_MODE
|
|
|
-
|
|
|
-typedef struct {
|
|
|
- unsigned char akey[MAXBLOCKSIZE],
|
|
|
- ACC[MAXBLOCKSIZE],
|
|
|
- IV[MAXBLOCKSIZE];
|
|
|
-
|
|
|
- symmetric_key key;
|
|
|
-
|
|
|
- int cipher,
|
|
|
- buflen,
|
|
|
- keylen,
|
|
|
- blocksize;
|
|
|
-} f9_state;
|
|
|
-
|
|
|
-int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen);
|
|
|
-int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen);
|
|
|
-int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen);
|
|
|
-int f9_memory(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- const unsigned char *in, unsigned long inlen,
|
|
|
- unsigned char *out, unsigned long *outlen);
|
|
|
-int f9_memory_multi(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- unsigned char *out, unsigned long *outlen,
|
|
|
- const unsigned char *in, unsigned long inlen, ...);
|
|
|
-int f9_file(int cipher,
|
|
|
- const unsigned char *key, unsigned long keylen,
|
|
|
- const char *filename,
|
|
|
- unsigned char *out, unsigned long *outlen);
|
|
|
-int f9_test(void);
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
#ifdef LTC_CHACHA20POLY1305_MODE
|
|
|
|
|
|
typedef struct {
|