27 lines
935 B
Swift
27 lines
935 B
Swift
import Foundation
|
|
import CryptoKit
|
|
|
|
extension Message {
|
|
|
|
/**
|
|
Calculate an authentication code for the message content.
|
|
- Parameter key: The key to use to sign the content.
|
|
- Returns: The new message signed with the key.
|
|
*/
|
|
func authenticate(using key: SymmetricKey) -> SignedMessage {
|
|
let mac = HMAC<SHA256>.authenticationCode(for: encoded, using: key)
|
|
return .init(mac: Data(mac.map { $0 }), message: self)
|
|
}
|
|
|
|
/**
|
|
Calculate an authentication code for the message content and convert everything to data.
|
|
- Parameter key: The key to use to sign the content.
|
|
- Returns: The new message signed with the key, serialized to bytes.
|
|
*/
|
|
func authenticateAndSerialize(using key: SymmetricKey) -> Data {
|
|
let encoded = self.encoded
|
|
let mac = HMAC<SHA256>.authenticationCode(for: encoded, using: key)
|
|
return Data(mac.map { $0 }) + encoded
|
|
}
|
|
}
|