1*f6dc9357SAndroid Build Coastguard Worker // Sha1Reg.cpp 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h" 4*f6dc9357SAndroid Build Coastguard Worker 5*f6dc9357SAndroid Build Coastguard Worker #include "../../C/Sha1.h" 6*f6dc9357SAndroid Build Coastguard Worker 7*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyBuffer2.h" 8*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyCom.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../7zip/Common/RegisterCodec.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_2( 13*f6dc9357SAndroid Build Coastguard Worker CSha1Hasher 14*f6dc9357SAndroid Build Coastguard Worker , IHasher 15*f6dc9357SAndroid Build Coastguard Worker , ICompressSetCoderProperties 16*f6dc9357SAndroid Build Coastguard Worker ) 17*f6dc9357SAndroid Build Coastguard Worker CAlignedBuffer1 _buf; 18*f6dc9357SAndroid Build Coastguard Worker public: 19*f6dc9357SAndroid Build Coastguard Worker Byte _mtDummy[1 << 7]; 20*f6dc9357SAndroid Build Coastguard Worker 21*f6dc9357SAndroid Build Coastguard Worker CSha1 *Sha() { return (CSha1 *)(void *)(Byte *)_buf; } 22*f6dc9357SAndroid Build Coastguard Worker public: 23*f6dc9357SAndroid Build Coastguard Worker CSha1Hasher(): 24*f6dc9357SAndroid Build Coastguard Worker _buf(sizeof(CSha1)) 25*f6dc9357SAndroid Build Coastguard Worker { 26*f6dc9357SAndroid Build Coastguard Worker Sha1_SetFunction(Sha(), 0); 27*f6dc9357SAndroid Build Coastguard Worker Sha1_InitState(Sha()); 28*f6dc9357SAndroid Build Coastguard Worker } 29*f6dc9357SAndroid Build Coastguard Worker }; 30*f6dc9357SAndroid Build Coastguard Worker 31*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CSha1Hasher::Init()) 32*f6dc9357SAndroid Build Coastguard Worker { 33*f6dc9357SAndroid Build Coastguard Worker Sha1_InitState(Sha()); 34*f6dc9357SAndroid Build Coastguard Worker } 35*f6dc9357SAndroid Build Coastguard Worker 36*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CSha1Hasher::Update(const void *data, UInt32 size)) 37*f6dc9357SAndroid Build Coastguard Worker { 38*f6dc9357SAndroid Build Coastguard Worker Sha1_Update(Sha(), (const Byte *)data, size); 39*f6dc9357SAndroid Build Coastguard Worker } 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CSha1Hasher::Final(Byte *digest)) 42*f6dc9357SAndroid Build Coastguard Worker { 43*f6dc9357SAndroid Build Coastguard Worker Sha1_Final(Sha(), digest); 44*f6dc9357SAndroid Build Coastguard Worker } 45*f6dc9357SAndroid Build Coastguard Worker 46*f6dc9357SAndroid Build Coastguard Worker 47*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CSha1Hasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps)) 48*f6dc9357SAndroid Build Coastguard Worker { 49*f6dc9357SAndroid Build Coastguard Worker unsigned algo = 0; 50*f6dc9357SAndroid Build Coastguard Worker for (UInt32 i = 0; i < numProps; i++) 51*f6dc9357SAndroid Build Coastguard Worker { 52*f6dc9357SAndroid Build Coastguard Worker if (propIDs[i] == NCoderPropID::kDefaultProp) 53*f6dc9357SAndroid Build Coastguard Worker { 54*f6dc9357SAndroid Build Coastguard Worker const PROPVARIANT &prop = coderProps[i]; 55*f6dc9357SAndroid Build Coastguard Worker if (prop.vt != VT_UI4) 56*f6dc9357SAndroid Build Coastguard Worker return E_INVALIDARG; 57*f6dc9357SAndroid Build Coastguard Worker if (prop.ulVal > 2) 58*f6dc9357SAndroid Build Coastguard Worker return E_NOTIMPL; 59*f6dc9357SAndroid Build Coastguard Worker algo = (unsigned)prop.ulVal; 60*f6dc9357SAndroid Build Coastguard Worker } 61*f6dc9357SAndroid Build Coastguard Worker } 62*f6dc9357SAndroid Build Coastguard Worker if (!Sha1_SetFunction(Sha(), algo)) 63*f6dc9357SAndroid Build Coastguard Worker return E_NOTIMPL; 64*f6dc9357SAndroid Build Coastguard Worker return S_OK; 65*f6dc9357SAndroid Build Coastguard Worker } 66*f6dc9357SAndroid Build Coastguard Worker 67*f6dc9357SAndroid Build Coastguard Worker REGISTER_HASHER(CSha1Hasher, 0x201, "SHA1", SHA1_DIGEST_SIZE) 68