~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to eax.cpp

  • Committer: weidai
  • Date: 2010-06-18 01:52:34 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:485
avoid SecBlock of arrays

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// eax.cpp - written and placed in the public domain by Wei Dai
 
2
 
 
3
#include "pch.h"
 
4
#include "eax.h"
 
5
 
 
6
NAMESPACE_BEGIN(CryptoPP)
 
7
 
 
8
void EAX_Base::SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs &params)
 
9
{
 
10
        AccessMAC().SetKey(userKey, keylength, params);
 
11
        m_buffer.New(2*AccessMAC().TagSize());
 
12
}
 
13
 
 
14
void EAX_Base::Resync(const byte *iv, size_t len)
 
15
{
 
16
        MessageAuthenticationCode &mac = AccessMAC();
 
17
        unsigned int blockSize = mac.TagSize();
 
18
 
 
19
        memset(m_buffer, 0, blockSize);
 
20
        mac.Update(m_buffer, blockSize);
 
21
        mac.CalculateDigest(m_buffer+blockSize, iv, len);
 
22
 
 
23
        m_buffer[blockSize-1] = 1;
 
24
        mac.Update(m_buffer, blockSize);
 
25
 
 
26
        m_ctr.SetCipherWithIV(AccessMAC().AccessCipher(), m_buffer+blockSize, blockSize);
 
27
}
 
28
 
 
29
size_t EAX_Base::AuthenticateBlocks(const byte *data, size_t len)
 
30
{
 
31
        AccessMAC().Update(data, len);
 
32
        return 0;
 
33
}
 
34
 
 
35
void EAX_Base::AuthenticateLastHeaderBlock()
 
36
{
 
37
        assert(m_bufferedDataLength == 0);
 
38
        MessageAuthenticationCode &mac = AccessMAC();
 
39
        unsigned int blockSize = mac.TagSize();
 
40
 
 
41
        mac.Final(m_buffer);
 
42
        xorbuf(m_buffer+blockSize, m_buffer, blockSize);
 
43
 
 
44
        memset(m_buffer, 0, blockSize);
 
45
        m_buffer[blockSize-1] = 2;
 
46
        mac.Update(m_buffer, blockSize);
 
47
}
 
48
 
 
49
void EAX_Base::AuthenticateLastFooterBlock(byte *tag, size_t macSize)
 
50
{
 
51
        assert(m_bufferedDataLength == 0);
 
52
        MessageAuthenticationCode &mac = AccessMAC();
 
53
        unsigned int blockSize = mac.TagSize();
 
54
 
 
55
        mac.TruncatedFinal(m_buffer, macSize);
 
56
        xorbuf(tag, m_buffer, m_buffer+blockSize, macSize);
 
57
}
 
58
 
 
59
NAMESPACE_END