|
|
@@ -10,21 +10,24 @@
|
|
|
|
|
|
public final class SHA2: DigestType {
|
|
|
let variant: Variant
|
|
|
- var size: Int { return variant.rawValue }
|
|
|
- var blockSize: Int { return variant.blockSize }
|
|
|
- var digestLength: Int { return variant.digestLength }
|
|
|
+ let size: Int
|
|
|
+ let blockSize: Int
|
|
|
+ let digestLength: Int
|
|
|
+ private let k:Array<UInt64>
|
|
|
|
|
|
fileprivate var accumulated = Array<UInt8>()
|
|
|
fileprivate var accumulatedLength: Int = 0
|
|
|
fileprivate var accumulatedHash32 = Array<UInt32>()
|
|
|
fileprivate var accumulatedHash64 = Array<UInt64>()
|
|
|
- fileprivate let k:Array<UInt64>
|
|
|
|
|
|
public init(variant: SHA2.Variant) {
|
|
|
self.variant = variant
|
|
|
switch self.variant {
|
|
|
case .sha224, .sha256:
|
|
|
self.accumulatedHash32 = variant.h.map { UInt32($0) } //FIXME: UInt64 for process64
|
|
|
+ self.blockSize = variant.blockSize
|
|
|
+ self.size = variant.rawValue
|
|
|
+ self.digestLength = variant.digestLength
|
|
|
self.k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
|
|
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
|
|
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
|
@@ -35,6 +38,9 @@ public final class SHA2: DigestType {
|
|
|
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]
|
|
|
case .sha384, .sha512:
|
|
|
self.accumulatedHash64 = variant.h
|
|
|
+ self.blockSize = variant.blockSize
|
|
|
+ self.size = variant.rawValue
|
|
|
+ self.digestLength = variant.digestLength
|
|
|
self.k = [0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538,
|
|
|
0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe,
|
|
|
0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,
|