Use keychain into message filter extension

Hi guys,

I am working on a message filter extension and I want to save some sensitive data to keychain, but I am facing some problems. This is a piece of code that I found on the internet.

import UIKit

class KeyChain {

    class func save(key: String, data: Data) -> OSStatus {

        let query = [

            kSecClass as String       : kSecClassGenericPassword as String,

            kSecAttrAccount as String : key,

            kSecValueData as String   : data ] as [String : Any]

        SecItemDelete(query as CFDictionary)

        return SecItemAdd(query as CFDictionary, nil)

    }

    class func load(key: String) -> Data? {

        let query = [

            kSecClass as String       : kSecClassGenericPassword,

            kSecAttrAccount as String : key,

            kSecReturnData as String  : kCFBooleanTrue!,

            kSecMatchLimit as String  : kSecMatchLimitOne ] as [String : Any]

        var dataTypeRef: AnyObject? = nil

        let status: OSStatus = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)

        if status == noErr {

            return dataTypeRef as! Data?

        } else {

            return nil

        }

    }

    class func createUniqueID() -> String {

        let uuid: CFUUID = CFUUIDCreate(nil)

        let cfStr: CFString = CFUUIDCreateString(nil, uuid)

        let swiftString: String = cfStr as String

        return swiftString

    }
}

extension Data {
    init<T>(from value: T) {
        var value = value
        self.init(buffer: UnsafeBufferPointer(start: &value, count: 1))
    }
    func to<T>(type: T.Type) -> T {
        return self.withUnsafeBytes { $0.load(as: T.self) }

    }
}

It works in the ViewController of the containing app, but when I try it in extension I get no results. Is it possible to use keychain into message filter extension? Or should I find another way of storing sensitive data?

Thanks.

Use keychain into message filter extension
 
 
Q