Skip to content

Commit

Permalink
Fix Windows CI (#289)
Browse files Browse the repository at this point in the history
Co-authored-by: Cory Benfield <[email protected]>
  • Loading branch information
ptoffy and Lukasa authored Oct 29, 2024
1 parent e9d46e7 commit 62958ed
Showing 1 changed file with 18 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,20 @@ import Foundation
import Android
#endif

#if os(Windows)
import WinSDK

private func getPageSize() -> Int {
var info = SYSTEM_INFO()
GetSystemInfo(&info)
return Int(info.dwPageSize)
}
#else
private func getPageSize() -> Int {
return Int(sysconf(Int32(_SC_PAGESIZE)))
}
#endif

internal struct BoringSSLScrypt {
/// Derives a secure key using the provided passphrase and salt.
///
Expand All @@ -39,9 +53,11 @@ internal struct BoringSSLScrypt {
static func deriveKey<Passphrase: DataProtocol, Salt: DataProtocol>(from password: Passphrase, salt: Salt, outputByteCount: Int, rounds: Int, blockSize: Int, parallelism: Int, maxMemory: Int? = nil) throws -> SymmetricKey {
// This should be SecureBytes, but we can't use that here.
var derivedKeyData = Data(count: outputByteCount)


// This computes the maximum amount of memory that will be used by the scrypt algorithm with an additional memory page to spare. This value will be used by the BoringSSL as the memory limit for the algorithm. An additional memory page is added to the computed value (using POSIX specification) to ensure that the memory limit is not too tight.
let maxMemory = maxMemory ?? (128 * rounds * blockSize * parallelism + Int(sysconf(Int32(_SC_PAGESIZE))))
// This computes the maximum amount of memory that will be used by the scrypt algorithm with an additional memory page to spare. This value will be used by the BoringSSL as the memory limit for the algorithm.
// An additional memory page is added to the computed value (using POSIX specification) to ensure that the memory limit is not too tight.
let maxMemory = maxMemory ?? (128 * rounds * blockSize * parallelism + getPageSize())

let result = derivedKeyData.withUnsafeMutableBytes { derivedKeyBytes -> Int32 in
let saltBytes: ContiguousBytes = salt.regions.count == 1 ? salt.regions.first! : Array(salt)
Expand Down

0 comments on commit 62958ed

Please sign in to comment.