Overview
Comment: | OFHMAC: Make use of the new OFSecureData |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
0e57691b226145c078fa4bc4a14f9516 |
User & Date: | js on 2018-04-07 20:18:39 |
Other Links: | manifest | tags |
Context
2018-04-07
| ||
20:48 | Add +[OFSecureData isSecure] check-in: edbb1ff5f4 user: js tags: trunk | |
20:18 | OFHMAC: Make use of the new OFSecureData check-in: 0e57691b22 user: js tags: trunk | |
20:05 | OF*Hash: Make use of the new OFSecureData check-in: a5006f1d31 user: js tags: trunk | |
Changes
Modified src/OFHMAC.m from [a56ad44126] to [8b7b7e738d].
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFHMAC.h" #import "OFHashAlreadyCalculatedException.h" #import "OFInvalidArgumentException.h" @implementation OFHMAC @synthesize hashClass = _hashClass; | > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFHMAC.h" #import "OFSecureData.h" #import "OFHashAlreadyCalculatedException.h" #import "OFInvalidArgumentException.h" @implementation OFHMAC @synthesize hashClass = _hashClass; |
︙ | ︙ | |||
55 56 57 58 59 60 61 | } - (void)setKey: (const void *)key length: (size_t)length { void *pool = objc_autoreleasePoolPush(); size_t blockSize = [_hashClass blockSize]; | > > | > > | | | | | | | | | | > > > > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | } - (void)setKey: (const void *)key length: (size_t)length { void *pool = objc_autoreleasePoolPush(); size_t blockSize = [_hashClass blockSize]; OFSecureData *outerKeyPad = [OFSecureData dataWithCount: blockSize]; OFSecureData *innerKeyPad = [OFSecureData dataWithCount: blockSize]; unsigned char *outerKeyPadItems = [outerKeyPad items]; unsigned char *innerKeyPadItems = [innerKeyPad items]; [_outerHash release]; [_innerHash release]; [_outerHashCopy release]; [_innerHashCopy release]; _outerHash = _innerHash = _outerHashCopy = _innerHashCopy = nil; @try { if (length > blockSize) { id <OFCryptoHash> hash = [_hashClass cryptoHash]; [hash updateWithBuffer: key length: length]; length = [_hashClass digestSize]; if OF_UNLIKELY (length > blockSize) length = blockSize; memcpy(outerKeyPadItems, [hash digest], length); memcpy(innerKeyPadItems, [hash digest], length); } else { memcpy(outerKeyPadItems, key, length); memcpy(innerKeyPadItems, key, length); } memset(outerKeyPadItems + length, 0, blockSize - length); memset(innerKeyPadItems + length, 0, blockSize - length); for (size_t i = 0; i < blockSize; i++) { outerKeyPadItems[i] ^= 0x5C; innerKeyPadItems[i] ^= 0x36; } _outerHash = [[_hashClass cryptoHash] retain]; _innerHash = [[_hashClass cryptoHash] retain]; [_outerHash updateWithBuffer: outerKeyPadItems length: blockSize]; [_innerHash updateWithBuffer: innerKeyPadItems length: blockSize]; } @catch (id e) { [outerKeyPad zero]; [innerKeyPad zero]; } objc_autoreleasePoolPop(pool); _outerHashCopy = [_outerHash copy]; _innerHashCopy = [_innerHash copy]; _calculated = false; |
︙ | ︙ |