aboutsummaryrefslogtreecommitdiff
path: root/crypto/modes/modes_lcl.h
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2014-12-06 20:53:35 +0000
committerMatt Caswell <matt@openssl.org>2014-12-08 10:27:56 +0000
commitc857a80c9dccf82de94137410c754b18e893a55d (patch)
tree9bde8561d625b8da61e598bed2e30a5f7fe68150 /crypto/modes/modes_lcl.h
parent376e2ca3e3525290619602dc6013c97c9653c037 (diff)
downloadopenssl-c857a80c9dccf82de94137410c754b18e893a55d.zip
openssl-c857a80c9dccf82de94137410c754b18e893a55d.tar.gz
openssl-c857a80c9dccf82de94137410c754b18e893a55d.tar.bz2
Add support for OCB mode as per RFC7253
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'crypto/modes/modes_lcl.h')
-rw-r--r--crypto/modes/modes_lcl.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/crypto/modes/modes_lcl.h b/crypto/modes/modes_lcl.h
index 2d7015a..1813825 100644
--- a/crypto/modes/modes_lcl.h
+++ b/crypto/modes/modes_lcl.h
@@ -136,3 +136,42 @@ struct ccm128_context {
void *key;
};
+#ifdef STRICT_ALIGNMENT
+typedef struct {
+ unsigned char a[16];
+} OCB_BLOCK;
+# define ocb_block16_xor(in1,in2,out) \
+ ocb_block_xor((in1)->a,(in2)->a,16,(out)->a)
+#else
+typedef struct {
+ u64 a;
+ u64 b;
+} OCB_BLOCK;
+# define ocb_block16_xor(in1,in2,out) \
+ (out)->a=(in1)->a^(in2)->a; (out)->b=(in1)->b^(in2)->b;
+#endif
+
+struct ocb128_context {
+ /* Need both encrypt and decrypt key schedules for decryption */
+ block128_f encrypt;
+ block128_f decrypt;
+ void *keyenc;
+ void *keydec;
+
+ /* Key dependent variables. Can be reused if key remains the same */
+ size_t l_index;
+ size_t max_l_index;
+ OCB_BLOCK l_star;
+ OCB_BLOCK l_dollar;
+ OCB_BLOCK *l;
+
+ /* Must be reset for each session */
+ u64 blocks_hashed;
+ u64 blocks_processed;
+ OCB_BLOCK tag;
+ OCB_BLOCK offset_aad;
+ OCB_BLOCK sum;
+ OCB_BLOCK offset;
+ OCB_BLOCK checksum;
+
+};