Lines Matching refs:gcm
22 @param gcm The GCM state
27 int gcm_add_aad(gcm_state *gcm,
36 LTC_ARGCHK(gcm != NULL);
41 if (gcm->buflen > 16 || gcm->buflen < 0) {
45 if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
50 if (gcm->mode == GCM_MODE_IV) {
52 if (gcm->ivmode || gcm->buflen != 12) {
53 for (x = 0; x < (unsigned long)gcm->buflen; x++) {
54 gcm->X[x] ^= gcm->buf[x];
56 if (gcm->buflen) {
57 gcm->totlen += gcm->buflen * CONST64(8);
58 gcm_mult_h(gcm, gcm->X);
62 zeromem(gcm->buf, 8);
63 STORE64H(gcm->totlen, gcm->buf+8);
65 gcm->X[x] ^= gcm->buf[x];
67 gcm_mult_h(gcm, gcm->X);
70 XMEMCPY(gcm->Y, gcm->X, 16);
71 zeromem(gcm->X, 16);
73 XMEMCPY(gcm->Y, gcm->buf, 12);
74 gcm->Y[12] = 0;
75 gcm->Y[13] = 0;
76 gcm->Y[14] = 0;
77 gcm->Y[15] = 1;
79 XMEMCPY(gcm->Y_0, gcm->Y, 16);
80 zeromem(gcm->buf, 16);
81 gcm->buflen = 0;
82 gcm->totlen = 0;
83 gcm->mode = GCM_MODE_AAD;
86 if (gcm->mode != GCM_MODE_AAD || gcm->buflen >= 16) {
92 if (gcm->buflen == 0) {
95 *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&adata[x + y]));
97 gcm_mult_h(gcm, gcm->X);
98 gcm->totlen += 128;
107 gcm->X[gcm->buflen++] ^= *adata++;
109 if (gcm->buflen == 16) {
111 gcm_mult_h(gcm, gcm->X);
112 gcm->buflen = 0;
113 gcm->totlen += 128;
122 /* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_add_aad.c,v $ */