@@ -205,6 +205,7 @@ int ocb3_test(void)
205205 int err , x , idx , res ;
206206 unsigned long len ;
207207 unsigned char outct [MAXBLOCKSIZE ], outtag [MAXBLOCKSIZE ];
208+ ocb3_state ocb ;
208209
209210 /* AES can be under rijndael or aes... try to find it */
210211 if ((idx = find_cipher ("aes" )) == -1 ) {
@@ -244,6 +245,8 @@ int ocb3_test(void)
244245 return CRYPT_FAIL_TESTVECTOR ;
245246 }
246247 }
248+
249+ /* RFC 7253 - test vector with a tag length of 96 bits - part 1 */
247250 x = 99 ;
248251 len = 12 ;
249252 if ((err = ocb3_encrypt_authenticate_memory (idx ,
@@ -274,6 +277,26 @@ int ocb3_test(void)
274277#endif
275278 return CRYPT_FAIL_TESTVECTOR ;
276279 }
280+
281+ /* RFC 7253 - test vector with a tag length of 96 bits - part 2 */
282+ x = 100 ;
283+ if ((err = ocb3_init (& ocb , idx , K , sizeof (K ), N , sizeof (N ), 12 )) != CRYPT_OK ) return err ;
284+ if ((err = ocb3_add_aad (& ocb , A , sizeof (A ))) != CRYPT_OK ) return err ;
285+ if ((err = ocb3_encrypt (& ocb , P , 32 , outct )) != CRYPT_OK ) return err ;
286+ if ((err = ocb3_encrypt_last (& ocb , P + 32 , sizeof (P )- 32 , outct + 32 )) != CRYPT_OK ) return err ;
287+ len = sizeof (outtag ); /* intentionally more than 12 */
288+ if ((err = ocb3_done (& ocb , outtag , & len )) != CRYPT_OK ) return err ;
289+ if (compare_testvector (outct , sizeof (P ), C , sizeof (C ), "OCB3 CT" , x )) return CRYPT_FAIL_TESTVECTOR ;
290+ if (compare_testvector (outtag , len , T , sizeof (T ), "OCB3 Tag.enc" , x )) return CRYPT_FAIL_TESTVECTOR ;
291+ if ((err = ocb3_init (& ocb , idx , K , sizeof (K ), N , sizeof (N ), 12 )) != CRYPT_OK ) return err ;
292+ if ((err = ocb3_add_aad (& ocb , A , sizeof (A ))) != CRYPT_OK ) return err ;
293+ if ((err = ocb3_decrypt (& ocb , C , 32 , outct )) != CRYPT_OK ) return err ;
294+ if ((err = ocb3_decrypt_last (& ocb , C + 32 , sizeof (C )- 32 , outct + 32 )) != CRYPT_OK ) return err ;
295+ len = sizeof (outtag ); /* intentionally more than 12 */
296+ if ((err = ocb3_done (& ocb , outtag , & len )) != CRYPT_OK ) return err ;
297+ if (compare_testvector (outct , sizeof (C ), P , sizeof (P ), "OCB3 PT" , x )) return CRYPT_FAIL_TESTVECTOR ;
298+ if (compare_testvector (outtag , len , T , sizeof (T ), "OCB3 Tag.dec" , x )) return CRYPT_FAIL_TESTVECTOR ;
299+
277300 return CRYPT_OK ;
278301#endif /* LTC_TEST */
279302}
0 commit comments