Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions Sources/CryptoKitten/MD5.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ fileprivate let k: [UInt32] = [ 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
fileprivate let chunkSize = 64

public final class MD5 : Hash {
public static let littleEndian = true
#if arch(s390x)
public static let littleEndian = false
#else
public static let littleEndian = true
#endif
public static let chunkSize = 64
public static let digestSize = 16

Expand Down Expand Up @@ -76,7 +80,11 @@ public final class MD5 : Hash {
buffer.reserveCapacity(16)

func convert(_ int: UInt32) -> [UInt8] {
let int = int.littleEndian
#if arch(s390x)
let int = int.bigEndian
#else
let int = int.littleEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand Down Expand Up @@ -115,7 +123,11 @@ public final class MD5 : Hash {
g = (7 &* i) % 16
}

Mg = pointer.advanced(by: g << 2).withMemoryRebound(to: UInt32.self, capacity: 1, { $0.pointee })
#if arch(s390x)
Mg = UInt32(littleEndian: pointer.advanced(by: g << 2).withMemoryRebound(to: UInt32.self, capacity: 1, { $0.pointee }))
#else
Mg = pointer.advanced(by: g << 2).withMemoryRebound(to: UInt32.self, capacity: 1, { $0.pointee })
#endif

F = F &+ a1 &+ k[i] &+ Mg
a1 = d1
Expand Down
36 changes: 26 additions & 10 deletions Sources/CryptoKitten/SHA1.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
public final class SHA1 : Hash {
public static let digestSize = 20
public static let chunkSize = 64
public static let littleEndian = false
#if arch(s390x)
public static let littleEndian = true
#else
public static let littleEndian = false
#endif

var h0: UInt32 = 0x67452301
var h1: UInt32 = 0xEFCDAB89
Expand Down Expand Up @@ -40,7 +44,11 @@ public final class SHA1 : Hash {
buffer.reserveCapacity(20)

func convert(_ int: UInt32) -> [UInt8] {
let int = int.bigEndian
#if arch(s390x)
let int = int.littleEndian
#else
let int = int.bigEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand All @@ -61,14 +69,22 @@ public final class SHA1 : Hash {
public init() {}

public func update(pointer: UnsafePointer<UInt8>) {
var w = pointer.withMemoryRebound(to: UInt32.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#if arch(s390x)
var w : [UInt32] = []
w.reserveCapacity(16)
for index in stride(from: 0, to: 64, by: 4) {
w.append(UInt32(bigEndian: pointer.advanced(by: index).withMemoryRebound(to: UInt32.self, capacity: 1, { $0.pointee })))
}
#else
var w = pointer.withMemoryRebound(to: UInt32.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#endif

w.reserveCapacity(80)

Expand Down
24 changes: 16 additions & 8 deletions Sources/CryptoKitten/SHA2_32Base.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,22 @@ internal protocol SHA2_32 : Hash {

extension SHA2_32 {
public func update(pointer: UnsafePointer<UInt8>) {
var w = pointer.withMemoryRebound(to: UInt32.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#if arch(s390x)
var w : [UInt32] = []
w.reserveCapacity(16)
for index in stride(from: 0, to: 64, by: 4) {
w.append(UInt32(bigEndian: pointer.advanced(by: index).withMemoryRebound(to: UInt32.self, capacity: 1, { $0.pointee })))
}
#else
var w = pointer.withMemoryRebound(to: UInt32.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#endif

w.reserveCapacity(64)

Expand Down
24 changes: 20 additions & 4 deletions Sources/CryptoKitten/SHA2_32Implementations.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
public final class SHA256 : SHA2_32 {
public static let littleEndian = false
#if arch(s390x)
public static let littleEndian = true
#else
public static let littleEndian = false
#endif
public static let digestSize = 32
public static let chunkSize = 64

Expand All @@ -16,7 +20,11 @@ public final class SHA256 : SHA2_32 {
buffer.reserveCapacity(32)

func convert(_ int: UInt32) -> [UInt8] {
let int = int.bigEndian
#if arch(s390x)
let int = int.littleEndian
#else
let int = int.bigEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand Down Expand Up @@ -70,7 +78,11 @@ public final class SHA256 : SHA2_32 {
}

public final class SHA224 : SHA2_32 {
public static let littleEndian = false
#if arch(s390x)
public static let littleEndian = true
#else
public static let littleEndian = false
#endif
public static let digestSize = 28
public static let chunkSize = 64

Expand Down Expand Up @@ -98,7 +110,11 @@ public final class SHA224 : SHA2_32 {
buffer.reserveCapacity(28)

func convert(_ int: UInt32) -> [UInt8] {
let int = int.bigEndian
#if arch(s390x)
let int = int.littleEndian
#else
let int = int.bigEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand Down
24 changes: 16 additions & 8 deletions Sources/CryptoKitten/SHA2_64Base.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,22 @@ internal protocol SHA2_64 : Hash {

extension SHA2_64 {
public func update(pointer: UnsafePointer<UInt8>) {
var w = pointer.withMemoryRebound(to: UInt64.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#if arch(s390x)
var w : [UInt64] = []
w.reserveCapacity(16)
for index in stride(from: 0, to: 128, by: 8) {
w.append(UInt64(bigEndian: pointer.advanced(by: index).withMemoryRebound(to: UInt64.self, capacity: 1, { $0.pointee })))
}
#else
var w = pointer.withMemoryRebound(to: UInt64.self, capacity: 16, { pointer in
return [
pointer[0].bigEndian, pointer[1].bigEndian, pointer[2].bigEndian, pointer[3].bigEndian,
pointer[4].bigEndian, pointer[5].bigEndian, pointer[6].bigEndian, pointer[7].bigEndian,
pointer[8].bigEndian, pointer[9].bigEndian, pointer[10].bigEndian, pointer[11].bigEndian,
pointer[12].bigEndian, pointer[13].bigEndian, pointer[14].bigEndian, pointer[15].bigEndian,
]
})
#endif

w.reserveCapacity(64)

Expand Down
24 changes: 20 additions & 4 deletions Sources/CryptoKitten/SHA2_64Implementations.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
public final class SHA512 : SHA2_64 {
public static let littleEndian = false
#if arch(s390x)
public static let littleEndian = true
#else
public static let littleEndian = false
#endif
public static let digestSize = 64
public static let chunkSize = 128

Expand All @@ -16,7 +20,11 @@ public final class SHA512 : SHA2_64 {
buffer.reserveCapacity(32)

func convert(_ int: UInt64) -> [UInt8] {
let int = int.bigEndian
#if arch(s390x)
let int = int.littleEndian
#else
let int = int.bigEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand Down Expand Up @@ -75,7 +83,11 @@ public final class SHA512 : SHA2_64 {


public final class SHA384: SHA2_64 {
public static let littleEndian = false
#if arch(s390x)
public static let littleEndian = true
#else
public static let littleEndian = false
#endif
public static let digestSize = 48
public static let chunkSize = 128

Expand All @@ -92,7 +104,11 @@ public final class SHA384: SHA2_64 {
buffer.reserveCapacity(32)

func convert(_ int: UInt64) -> [UInt8] {
let int = int.bigEndian
#if arch(s390x)
let int = int.littleEndian
#else
let int = int.bigEndian
#endif
return [
UInt8(int & 0xff),
UInt8((int >> 8) & 0xff),
Expand Down