SPB Git

spb/os-vault Public

Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.

Swift 96% Shell 3.4% Makefile 0.6%
3.8 KB · 123 lines swift
Raw Blame History
1import WalletCoreC2import Foundation3// SPDX-License-Identifier: Apache-2.04//5// Copyright © 2017 Trust Wallet.6//7// This is a GENERATED FILE, changes made here WILL BE LOST.8//910import Foundation1112/// AES encryption/decryption methods.13public struct AES {1415    /// Encrypts a block of Data using AES in Cipher Block Chaining (CBC) mode.16    ///17    /// - Parameter key: encryption key Data, must be 16, 24, or 32 bytes long.18    /// - Parameter data: Data to encrypt.19    /// - Parameter iv: initialization vector.20    /// - Parameter mode: padding mode.21    /// - Returns: encrypted Data.22    public static func encryptCBC(key: Data, data: Data, iv: Data, mode: AESPaddingMode) -> Data? {23        let keyData = TWDataCreateWithNSData(key)24        defer {25            TWDataDelete(keyData)26        }27        let dataData = TWDataCreateWithNSData(data)28        defer {29            TWDataDelete(dataData)30        }31        let ivData = TWDataCreateWithNSData(iv)32        defer {33            TWDataDelete(ivData)34        }35        guard let result = TWAESEncryptCBC(keyData, dataData, ivData, TWAESPaddingMode(rawValue: mode.rawValue)) else {36            return nil37        }38        return TWDataNSData(result)39    }4041    /// Decrypts a block of data using AES in Cipher Block Chaining (CBC) mode.42    ///43    /// - Parameter key: decryption key Data, must be 16, 24, or 32 bytes long.44    /// - Parameter data: Data to decrypt.45    /// - Parameter iv: initialization vector Data.46    /// - Parameter mode: padding mode.47    /// - Returns: decrypted Data.48    public static func decryptCBC(key: Data, data: Data, iv: Data, mode: AESPaddingMode) -> Data? {49        let keyData = TWDataCreateWithNSData(key)50        defer {51            TWDataDelete(keyData)52        }53        let dataData = TWDataCreateWithNSData(data)54        defer {55            TWDataDelete(dataData)56        }57        let ivData = TWDataCreateWithNSData(iv)58        defer {59            TWDataDelete(ivData)60        }61        guard let result = TWAESDecryptCBC(keyData, dataData, ivData, TWAESPaddingMode(rawValue: mode.rawValue)) else {62            return nil63        }64        return TWDataNSData(result)65    }6667    /// Encrypts a block of data using AES in Counter (CTR) mode.68    ///69    /// - Parameter key: encryption key Data, must be 16, 24, or 32 bytes long.70    /// - Parameter data: Data to encrypt.71    /// - Parameter iv: initialization vector Data.72    /// - Returns: encrypted Data.73    public static func encryptCTR(key: Data, data: Data, iv: Data) -> Data? {74        let keyData = TWDataCreateWithNSData(key)75        defer {76            TWDataDelete(keyData)77        }78        let dataData = TWDataCreateWithNSData(data)79        defer {80            TWDataDelete(dataData)81        }82        let ivData = TWDataCreateWithNSData(iv)83        defer {84            TWDataDelete(ivData)85        }86        guard let result = TWAESEncryptCTR(keyData, dataData, ivData) else {87            return nil88        }89        return TWDataNSData(result)90    }9192    /// Decrypts a block of data using AES in Counter (CTR) mode.93    ///94    /// - Parameter key: decryption key Data, must be 16, 24, or 32 bytes long.95    /// - Parameter data: Data to decrypt.96    /// - Parameter iv: initialization vector Data.97    /// - Returns: decrypted Data.98    public static func decryptCTR(key: Data, data: Data, iv: Data) -> Data? {99        let keyData = TWDataCreateWithNSData(key)100        defer {101            TWDataDelete(keyData)102        }103        let dataData = TWDataCreateWithNSData(data)104        defer {105            TWDataDelete(dataData)106        }107        let ivData = TWDataCreateWithNSData(iv)108        defer {109            TWDataDelete(ivData)110        }111        guard let result = TWAESDecryptCTR(keyData, dataData, ivData) else {112            return nil113        }114        return TWDataNSData(result)115    }116117118    init() {119    }120121122}123