| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // CompositeKey.swift
- // This file is part of KeePass.swift
- //
- // Copyright © 2021 Maxime Epain. All rights reserved.
- //
- // KeePass.swift is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // KeePass.swift is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with KeePass.swift. If not, see <https://www.gnu.org/licenses/>.
- import Binary
- import Crypto
- public protocol CompositeKey {
- var password: String { get }
- var key: Bytes { get }
- }
- extension CompositeKey {
- func serialize() throws -> Bytes {
- guard let password = Bytes(string: password, using: .isoLatin1) else {
- throw KDBError.invalidPassword
- }
- if password.isEmpty, key.isEmpty {
- throw KDBError.emptyCompositeKey
- }
- if key.isEmpty {
- return SHA256.hash(password)
- }
- if password.isEmpty {
- return key
- }
- return SHA256.hash(SHA256.hash(password) + key)
- }
- }
|