** Make consecutive calls to the SHA3Update function to add new content ** to the hash */
| 1824 | ** to the hash |
| 1825 | */ |
| 1826 | static void SHA3Update( |
| 1827 | SHA3Context *p, |
| 1828 | const unsigned char *aData, |
| 1829 | unsigned int nData |
| 1830 | ){ |
| 1831 | unsigned int i = 0; |
| 1832 | #if SHA3_BYTEORDER==1234 |
| 1833 | if( (p->nLoaded % 8)==0 && ((aData - (const unsigned char*)0)&7)==0 ){ |
| 1834 | for(; i+7<nData; i+=8){ |
| 1835 | p->u.s[p->nLoaded/8] ^= *(u64*)&aData[i]; |
| 1836 | p->nLoaded += 8; |
| 1837 | if( p->nLoaded>=p->nRate ){ |
| 1838 | KeccakF1600Step(p); |
| 1839 | p->nLoaded = 0; |
| 1840 | } |
| 1841 | } |
| 1842 | } |
| 1843 | #endif |
| 1844 | for(; i<nData; i++){ |
| 1845 | #if SHA3_BYTEORDER==1234 |
| 1846 | p->u.x[p->nLoaded] ^= aData[i]; |
| 1847 | #elif SHA3_BYTEORDER==4321 |
| 1848 | p->u.x[p->nLoaded^0x07] ^= aData[i]; |
| 1849 | #else |
| 1850 | p->u.x[p->nLoaded^p->ixMask] ^= aData[i]; |
| 1851 | #endif |
| 1852 | p->nLoaded++; |
| 1853 | if( p->nLoaded==p->nRate ){ |
| 1854 | KeccakF1600Step(p); |
| 1855 | p->nLoaded = 0; |
| 1856 | } |
| 1857 | } |
| 1858 | } |
| 1859 | |
| 1860 | /* |
| 1861 | ** After all content has been added, invoke SHA3Final() to compute |
no test coverage detected