Skip to content
Snippets Groups Projects
Commit f7607dc0 authored by jakobsbode's avatar jakobsbode
Browse files

See EnzevalosContact for usage of KeyManagement; not running because...

See EnzevalosContact for usage of KeyManagement;  not running because mail_address isn't the final variable and not given in constructors
parent d6259943
No related branches found
No related tags found
No related merge requests found
......@@ -70,42 +70,5 @@ extension CNContact {
return UIColor(hue: CGFloat(hash) / CGFloat(653), saturation: 1, brightness: 0.75, alpha: 1)
}
func hasKey() -> Bool {
let handler = KeyHandler.getHandler()
for mail in self.emailAddresses {
if handler.addrHasKey(mail.value as! String) {
return true
}
}
return false
}
//TODO check expiration date
//TODO add ability to choose different keys
func getKey() -> KeyWrapper? {
let handler = KeyHandler.getHandler()
for mail in self.emailAddresses {
if handler.addrHasKey(mail.value as! String) {
return handler.getKeyByAddr(mail.value as! String)
}
}
return nil
}
func getKey(mailaddress: String) -> KeyWrapper? {
let mail = mailaddress.lowercaseString
let handler = KeyHandler.getHandler()
return handler.getKeyByAddr(mail)
}
//TODO fertigmachen
func addKey(key: PGPKey, mailaddress: String){
let handler = KeyHandler.getHandler()
//handler.addKeyForMailaddress(mailaddress, key: key)
}
func addPGPKey(key: KeyWrapper, mailaddress: String){
let handler = KeyHandler.getHandler()
handler.addKeyForMailaddress(mailaddress, keyWrapper: key)
}
}
......@@ -11,28 +11,65 @@ import Contacts
class EnzevalosContact: Comparable {
let contact: CNContact
let isSecure: Bool
internal var isSecure: Bool{
get {
return self.key != nil
}
}
var mails: [Mail] {
didSet {
self.mails.sortInPlace()
}
}
var mail_address : String
var isVerified: Bool {
didSet {
if !isSecure { // only secure mails can be verified
isVerified = false
get {
if self.isSecure {
return self.key!.verified
}
return false
}
set(v){
if !self.isSecure {
//self.isVerified = false
return
} else {
//in key verified setzen
self.key!.verified = v
}
}
}
var key : KeyWrapper? {
get {
return KeyHandler.getHandler().getKeyByAddr(mail_address)
}
set(k) {
if k == nil {
KeyHandler.getHandler().reset(mail_address)
}
if k!.address == mail_address {
KeyHandler.getHandler().addKeyForMailaddress(mail_address, keyWrapper: k!, completion: nil)
}
}
}
init(contact: CNContact, mails: [Mail], isSecure: Bool) {
init(contact: CNContact, mails: [Mail], mail_address: String) {
self.contact = contact
self.mails = mails.sort()
self.isSecure = isSecure
self.mail_address = mail_address
self.isVerified = false
//self.isSecure = KeyHandler.getHandler().addrHasKey(mail_address)
}
//TODO check expiration date
//TODO fertigmachen
func addPGPKey(key: PGPKey, completion: ((success: Bool) -> Void)?){
let handler = KeyHandler.getHandler()
handler.addKeyForMailaddress(mail_address, key: key, completion: completion)
}
}
func ==(lhs: EnzevalosContact, rhs: EnzevalosContact) -> Bool {
......
......@@ -17,6 +17,7 @@ class InitViewController : UIViewController {
}
func getDefaultSettings(){
//let manager2 = MCOMailProvidersManager.
let manager = MCOMailProvidersManager.init() //sharedManager()
print(manager)
let path = NSBundle.mainBundle().pathForResource("providers", ofType: "json")
......
......@@ -27,6 +27,23 @@ class KeyHandler {
return KeyHandler.handler!
}
static func addressInKey(address: String, key: PGPKey) -> Bool {
for user in key.users {
if user.userID != nil {
var mail: String = user.userID!
if user.userID!.containsString("<") {
mail = String(mail.characters.split("<")[1])
}
mail = mail.stringByReplacingOccurrencesOfString(">", withString: "")
mail = mail.lowercaseString
if address.lowercaseString == mail {
return true
}
}
}
return false
}
/*return the latest key added to the handler*/
func getKeyByAddr(addr: String) -> KeyWrapper? {
let mail = addr.lowercaseString
......@@ -53,40 +70,32 @@ class KeyHandler {
}
*/
//Only for internal use; DO NOT CALL
func updateKeyForAddrs(keyWrapper: KeyWrapper, addr: [String]){
//key.key.primaryKeyPacket.bodyData
// for mail in key.addresses {
// if let index = kchain.myObjectForKey(mail+"-index").integerValue{
// if index >= 1 {
// kchain.mySetObject(key, forKey: mail+"-"+String(index))
// kchain.writeToKeychain()
// }
// }
// }
}
//Only for internal use; DO NOT CALL
func updateKey(keyWrapper: KeyWrapper){
/*if let index = kchain.myObjectForKey(keyWrapper.address+"-index").integerValue{
if index >= 1 {
if let key = kchain.myObjectForKey(keyWrapper.address+"-"+String(index)) {
if (key as! KeyWrapper).key.primaryKeyPacket.bodyData == keyWrapper.key.primaryKeyPacket.bodyData {
kchain.mySetObject(keyWrapper, forKey: keyWrapper.address)
kchain.writeToKeychain()
var index : Int16 = 0
if (try? keychain.getData(keyWrapper.address+"-index")) != nil {
if let indexData = (try? keychain.getData(keyWrapper.address+"-index"))!{
indexData.getBytes(&index, length: sizeof(Int16))
}
}
if index == 0 {
return
}
}*/
keychain[data: keyWrapper.address+"-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(keyWrapper)
}
/*only the PGPKey will be used to compare*/
func getAddrsByKey(key : KeyWrapper) -> [String] {
/*func getAddrsByKey(key : KeyWrapper) -> [String] {
/*let addrs = kchain.myObjectForKey(key.key.primaryKeyPacket.bodyData!) as? [String]
if addrs != nil {
return addrs!
}*/
return []
}
}*/
/*for now only the last key added to the handler will be shown*/
func getKeysByAddr(addr: String) -> [KeyWrapper] {
......@@ -106,7 +115,7 @@ class KeyHandler {
//TODO add entry with PGPKey as searchKey -done
func addKey(key: PGPKey) {
func addKey(key: PGPKey, completion : ((success: Bool) -> Void)?) {
var users : [String]? = []
for user in key.users {
if user.userID != nil {
......@@ -118,6 +127,15 @@ class KeyHandler {
mail = mail.lowercaseString
users!.append(mail)
let kW = KeyWrapper(key: key, mailaddress: mail)
if kW == nil{
if completion != nil {
completion!(success: false)
}
return
}
let keyWrapper = kW!
var index : Int16 = 0
if (try? keychain.getData(mail+"-index")) != nil {
......@@ -125,25 +143,31 @@ class KeyHandler {
indexData.getBytes(&index, length: sizeof(Int16))
}
}
/*if kchain.myObjectForKey(mail+"-index") != nil && kchain.myObjectForKey(mail+"-index").integerValue >= 1{
index = kchain.myObjectForKey(mail+"-index").integerValue
}*/
index += 1
keychain[data: mail+"-index"] = NSData(bytes: &index, length: sizeof(Int16))//NSKeyedArchiver.archivedDataWithRootObject(index)
keychain[data: mail+"-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(KeyWrapper(key: key, mailaddress: mail))
//kchain.mySetObject(index, forKey: mail+"-index")
//kchain.mySetObject(KeyWrapper(key: key, mailaddress: mail), forKey: mail+"-"+String(index))
//kchain.writeToKeychain()
keychain[data: mail+"-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(keyWrapper)
}
}
keychain[data: String(key.primaryKeyPacket.bodyData)] = NSKeyedArchiver.archivedDataWithRootObject(users!)
if completion != nil {
completion!(success: true)
}
//kchain.mySetObject(users, forKey: key.primaryKeyPacket.bodyData!)
//kchain.writeToKeychain()
}
func addPrivateKey(key: PGPKey) {
func addPrivateKey(key: PGPKey, completion : ((success: Bool) -> Void)?) {
let mail = (UserManager.loadUserValue(Attribute.UserAddr) as! String).lowercaseString
let kW = KeyWrapper(key: key, mailaddress: mail)
if kW == nil {
if completion != nil {
completion!(success: false)
}
return
}
let keyWrapper = kW!
var index : Int16 = 0
if (try? keychain.getData(mail+"-private-index")) != nil {
......@@ -158,7 +182,11 @@ class KeyHandler {
index += 1
keychain[data: mail+"-private-index"] = NSData(bytes: &index, length: sizeof(Int16))
keychain[data: mail+"-private-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(KeyWrapper(key: key, mailaddress: mail))
keychain[data: mail+"-private-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(keyWrapper)
if completion != nil {
completion!(success: true)
}
}
func getPrivateKey() -> KeyWrapper? {
......@@ -214,26 +242,59 @@ class KeyHandler {
}
}
//TODO convert to use of keychain instead of kchain
func addKeyForMailaddress(address: String, keyWrapper: KeyWrapper) {
/*let mail = address.lowercaseString
var index = 0
if kchain.myObjectForKey(mail+"-index") != nil && kchain.myObjectForKey(mail+"-index").integerValue >= 1{
index = kchain.myObjectForKey(mail+"-index").integerValue
func addKeyForMailaddress(address: String, key: PGPKey, completion : ((success: Bool) -> Void)?){
let mail: String = address.lowercaseString
//prüfen, ob adresse in Key steht
let kW = KeyWrapper(key: key, mailaddress: mail)
if kW == nil {
if completion != nil {
completion!(success: false)
}
return
}
let keyWrapper = kW!
var index : Int16 = 0
if (try? keychain.getData(mail+"-index")) != nil {
if let indexData = (try? keychain.getData(mail+"-index"))!{
indexData.getBytes(&index, length: sizeof(Int16))
}
}
index += 1
keychain[data: mail+"-index"] = NSData(bytes: &index, length: sizeof(Int16))
keychain[data: mail+"-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(keyWrapper)
//keychain[data: String(key.primaryKeyPacket.bodyData)] = NSKeyedArchiver.archivedDataWithRootObject([mail])
}
var addrsByKey : [String]? = []
addrsByKey = kchain.myObjectForKey(keyWrapper.key.primaryKeyPacket.bodyData!) as? [String]
if addrsByKey == nil {
addrsByKey = Optional([mail])
func addKeyForMailaddress(address: String, keyWrapper: KeyWrapper, completion : ((success: Bool) -> Void)?){
let mail: String = address.lowercaseString
//prüfen, ob adresse in Key steht
if keyWrapper.address == mail {
if completion != nil {
completion!(success: false)
}
return
}
var index : Int16 = 0
if (try? keychain.getData(mail+"-index")) != nil {
if let indexData = (try? keychain.getData(mail+"-index"))!{
indexData.getBytes(&index, length: sizeof(Int16))
}
}
kchain.mySetObject(index, forKey: mail+"-index")
kchain.mySetObject(keyWrapper, forKey: mail+"-"+String(index))
kchain.mySetObject(addrsByKey, forKey: keyWrapper.key.primaryKeyPacket.bodyData!)
kchain.writeToKeychain()*/
index += 1
keychain[data: mail+"-index"] = NSData(bytes: &index, length: sizeof(Int16))
keychain[data: mail+"-"+String(index)] = NSKeyedArchiver.archivedDataWithRootObject(keyWrapper)
//keychain[data: String(key.primaryKeyPacket.bodyData)] = NSKeyedArchiver.archivedDataWithRootObject([mail])
}
func addrHasKey(address: String) -> Bool {
......
......@@ -47,32 +47,19 @@ class KeyWrapper : NSObject {
handler.updateKey(self)
}
}
let address: String /*[String]{
set (newAddrs) {
let handler = KeyHandler.createHandler()
//oldKey = self.copy()
/*for addr in newAddrs {
if handler.getKeyByMailaddress(addr) != nil && {
}
}*/
//let handler = KeyHandler.createHandler()
handler.updateKey(self)
}
get {
return self.addresses
}
}*/
let address: String
let timestamp: NSDate
init(key: PGPKey, mailaddress: String){
init?(key: PGPKey, mailaddress: String){
if !KeyHandler.addressInKey(mailaddress, key: key) {
return nil
}
self.key = key
//self.oldKey = nil
revoked = false
trustlevel = 0
verified = false
self.address = mailaddress
self.address = mailaddress.lowercaseString
self.timestamp = NSDate.init()
/*let handler = KeyHandler.createHandler()
......
......@@ -315,23 +315,6 @@ class MailHandler {
}
}
/*Jakob prototypeänderung anfang*/
/*ursprünglicher Code :
let mail = Mail(uid: message.uid, sender: header.from, receivers: rec, cc: cc, time: header.date, received: true, subject: header.subject, body: body, isEncrypted: false, isVerified: false, trouble: false, isUnread: !messageRead, flags: message.flags)
*/
/*CryptoHandler.getHandler().pgp.keys.append((KeyHandler.createHandler().getPrivateKey()?.key)!)
let content = try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil)
print(content)
var signed : ObjCBool = false
var valid : ObjCBool = false
var integrityProtected : ObjCBool = false
print(try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: KeyHandler.createHandler().getKeyByAddr(header.from.mailbox)?.key, signed: &signed, valid: &valid, integrityProtected: &integrityProtected))*/
var enc = false
let ver = false
......@@ -344,56 +327,9 @@ class MailHandler {
enc = true
}
/*if enc {
if !CryptoHandler.getHandler().pgp.keys.contains((KeyHandler.createHandler().getPrivateKey()?.key)!) {
CryptoHandler.getHandler().pgp.keys.append((KeyHandler.createHandler().getPrivateKey()?.key)!)
}
do {
var signed : ObjCBool = false
var valid : ObjCBool = false
var integrityProtected : ObjCBool = false
//verifyWithPublicKey: KeyHandler.createHandler().getKeyByAddr(header.from.mailbox)?.key
if (try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: nil, signed: &signed, valid: &valid, integrityProtected: &integrityProtected) as NSData?) != nil && ((try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: nil, signed: &signed, valid: &valid, integrityProtected: &integrityProtected))! as NSData?) != nil{
decBody = String(data: (try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: nil, signed: &signed, valid: &valid, integrityProtected: &integrityProtected))! as NSData, encoding: NSUTF8StringEncoding)
//print(String(data: (try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: nil, signed: &signed, valid: &valid, integrityProtected: &integrityProtected), encoding: NSUTF8StringEncoding)))
}
//print(try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil, verifyWithPublicKey: nil, signed: &signed, valid: &valid, integrityProtected: &integrityProtected))
//let content = try? CryptoHandler.getHandler().pgp.decryptData(body.dataUsingEncoding(NSUTF8StringEncoding)!, passphrase: nil)
//print(content)
} catch _ {
troub = true
print("error while decrypting")
}
}*/ //now done in the MailObject itself
/*if header.subject != nil {
if header.subject == "Schlüssel" {
enc = true
}
if header.subject == "Re: Prüfung"{
enc = true
troub = true
}
if header.subject == "Test4" {
ver = true
enc = true
}
if header.subject == "Multiple"{
enc = true
}
if header.subject == "Noch ein Test"{
enc = true
ver = true
}
if header.subject == "jetzt du"{
enc = true
}
}*/
let mail = Mail(uid: message.uid, sender: header.from, receivers: rec, cc: cc, time: header.date, received: true, subject: header.subject, body: body, decryptedBody: decBody, isEncrypted: enc, isVerified: ver, trouble: troub, isUnread: !messageRead, flags: message.flags)
mail.decryptIfPossible()
/*Jakob prototypeänderung Ende*/
self.delegate?.addNewMail(mail)
......
......@@ -39,7 +39,7 @@ class Mail: Comparable {
var isSecure: Bool {
get {
return isVerified && isEncrypted && !trouble
return isVerified && isEncrypted && !unableToDecrypt && !trouble
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment