Browse Source

mnemonic lib

Marino Faggiana 7 years ago
parent
commit
5e74d0d01f

+ 0 - 122
Libraries external/CKMnemonic/CKMnemonic.swift

@@ -1,122 +0,0 @@
-//
-//  CKMnemonic.swift
-//  Pods
-//
-//  Created by 仇弘扬 on 2017/7/24.
-//
-//
-
-import UIKit
-import CryptoSwift
-import Security
-
-public enum CKMnemonicLanguageType {
-	case english
-	
-	case chinese
-	
-	func words() -> [String] {
-		switch self {
-		case .english:
-			return String.englishMnemonics
-		case .chinese:
-			return String.chineseMnemonics
-		}
-	}
-}
-
-enum CKMnemonicError: Error
-{
-	case invalidStrength
-	case unableToGetRandomData
-	case unableToCreateSeedData
-}
-
-public class CKMnemonic: NSObject {
-	public static func mnemonicString(from hexString: String, language: CKMnemonicLanguageType) throws -> String {
-		let seedData = hexString.ck_mnemonicData()
-		// print("\(hexString.characters.count)\t\(seedData.count)")
-		let hashData = seedData.sha256()
-		// print(hashData.toHexString())
-		let checkSum = hashData.ck_toBitArray()
-		// print(checkSum)
-		var seedBits = seedData.ck_toBitArray()
-		
-		for i in 0..<seedBits.count / 32 {
-			seedBits.append(checkSum[i])
-		}
-		
-		let words = language.words()
-		
-		let mnemonicCount = seedBits.count / 11
-		var mnemonic = [String]()
-		for i in 0..<mnemonicCount {
-			let length = 11
-			let startIndex = i * length
-			let subArray = seedBits[startIndex..<startIndex + length]
-			let subString = subArray.joined(separator: "")
-			// print(subString)
-			
-			let index = Int(strtoul(subString, nil, 2))
-			mnemonic.append(words[index])
-		}
-		return mnemonic.joined(separator: " ")
-	}
-	
-	public static func deterministicSeedString(from mnemonic: String, passphrase: String = "", language: CKMnemonicLanguageType) throws -> String {
-		
-		func normalized(string: String) -> Data? {
-			guard let data = string.data(using: .utf8, allowLossyConversion: true) else {
-				return nil
-			}
-			
-			guard let dataString = String(data: data, encoding: .utf8) else {
-				return nil
-			}
-			
-			guard let normalizedData = dataString.data(using: .utf8, allowLossyConversion: false) else {
-				return nil
-			}
-			return normalizedData
-		}
-		
-		guard let normalizedData = normalized(string: mnemonic) else {
-			return ""
-		}
-		
-		guard let saltData = normalized(string: "mnemonic" + passphrase) else {
-			return ""
-		}
-		
-		let password = normalizedData.bytes
-		let salt = saltData.bytes
-		
-		do {
-			let bytes = try PKCS5.PBKDF2(password: password, salt: salt, iterations: 2048, variant: .sha512).calculate()
-			
-			return bytes.toHexString()
-		} catch {
-			// print(error)
-			throw error
-		}
-	}
-	
-	public static func generateMnemonic(strength: Int, language: CKMnemonicLanguageType) throws -> String {
-		guard strength % 32 == 0 else {
-			throw CKMnemonicError.invalidStrength
-		}
-		
-		let count = strength / 8
-		let bytes = Array<UInt8>(repeating: 0, count: count)
-		let status = SecRandomCopyBytes(kSecRandomDefault, count, UnsafeMutablePointer<UInt8>(mutating: bytes))
-		// print(status)
-		if status != -1 {
-			let data = Data(bytes: bytes)
-			let hexString = data.toHexString()
-			// print(hexString)
-			
-			return try mnemonicString(from: hexString, language: language)
-		}
-		throw CKMnemonicError.unableToGetRandomData
-	}
-}

+ 0 - 39
Libraries external/CKMnemonic/Data+CKBitArray.swift

@@ -1,39 +0,0 @@
-//
-//  Data+CKBitArray.swift
-//  CKMnemonic
-//
-//  Created by 仇弘扬 on 2017/7/25.
-//  Copyright © 2017年 askcoin. All rights reserved.
-//
-
-import Foundation
-import CryptoSwift
-
-public extension UInt8 {
-	public func ck_bits() -> [String] {
-		let totalBitsCount = MemoryLayout<UInt8>.size * 8
-		
-		var bitsArray = [String](repeating: "0", count: totalBitsCount)
-		
-		for j in 0 ..< totalBitsCount {
-			let bitVal: UInt8 = 1 << UInt8(totalBitsCount - 1 - j)
-			let check = self & bitVal
-			
-			if (check != 0) {
-				bitsArray[j] = "1"
-			}
-		}
-		return bitsArray
-	}
-}
-
-public extension Data {
-	public func ck_toBitArray() -> [String] {
-		var toReturn = [String]()
-		for num: UInt8 in bytes {
-			
-			toReturn.append(contentsOf: num.ck_bits())
-		}
-		return toReturn
-	}
-}

File diff suppressed because it is too large
+ 0 - 10
Libraries external/CKMnemonic/Language/Chinese.swift


File diff suppressed because it is too large
+ 0 - 10
Libraries external/CKMnemonic/Language/English.swift


+ 0 - 32
Libraries external/CKMnemonic/String+MnemonicData.swift

@@ -1,32 +0,0 @@
-//
-//  String+MnemonicData.swift
-//  CKMnemonic
-//
-//  Created by 仇弘扬 on 2017/7/25.
-//  Copyright © 2017年 askcoin. All rights reserved.
-//
-
-import Foundation
-
-public extension String
-{
-	public func ck_mnemonicData() -> Data {
-		let length = characters.count
-		let dataLength = length / 2
-		var dataToReturn = Data(capacity: dataLength)
-		
-		var index = 0
-		var chars = ""
-		for char in characters {
-			chars += String(char)
-			if index % 2 == 1 {
-				let i: UInt8 = UInt8(strtoul(chars, nil, 16))
-				dataToReturn.append(i)
-				chars = ""
-			}
-			index += 1
-		}
-		
-		return dataToReturn
-	}
-}

+ 83 - 0
Libraries external/NYMnemonic/NYMnemonic.h

@@ -0,0 +1,83 @@
+// NYMnemonic.h
+//
+// Copyright (c) 2014 Nybex, Inc. (https://nybex.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <Foundation/Foundation.h>
+#import <CommonCrypto/CommonHMAC.h>
+#import <CommonCrypto/CommonKeyDerivation.h>
+
+/**
+ `NYMnemonic` is an objective-c implimentation of BIP-39 style mnemonic codes
+ for use with generating deterministic keys.
+ */
+@interface NYMnemonic : NSObject
+
+/**
+ Creates a mnemonic code from a hex encoded seed.
+
+ @param seed The hex encoded random seed. Should be between 128-256 bits
+ @param language The language file to use. Currently the only value is 'english'
+
+ @return a string containing the mnemonic code
+ */
++ (NSString *)mnemonicStringFromRandomHexString:(NSString *)seed
+                                       language:(NSString *)language;
+/**
+ Creates a mnemonic code from a hex encoded seed.
+
+ @param mnemonic The mnemonic phrase to use as the deterministic seed
+ @param passphrase A passphrase to be applied when creating the seed
+ @param language The language file to use. Currently the only value is 'english'
+
+ @return a string containing the deterministic seed
+ */
++ (NSString *)deterministicSeedStringFromMnemonicString:(NSString *)mnemonic
+                                             passphrase:(NSString *)passphrase
+                                               language:(NSString *)language;
+
+/**
+ Creates a mnemonic code from a hex encoded seed.
+
+ @param strength The strength of code, should be >=128 & <=256 & divisible by 32
+ @param language The language file to use. Currently the only value is 'english'
+
+ @return a string containing the mnemonic code
+ */
++ (NSString *)generateMnemonicString:(NSNumber *)strength
+                            language:(NSString *)language;
+@end
+
+/**
+ Category on NSData that helps with conversion to bit arrays and to hex
+ strings.
+ */
+@interface NSData (NYMnemonic)
+- (NSString *)ny_hexString;
+- (NSArray *)ny_hexToBitArray;
+@end
+
+/**
+ Category on NSString to convert a hex string to NSData
+ @return NSData
+ */
+@interface NSString (NYMnemonic)
+- (NSData *)ny_dataFromHexString;
+@end

+ 199 - 0
Libraries external/NYMnemonic/NYMnemonic.m

@@ -0,0 +1,199 @@
+// NYMnemonic.m
+//
+// Copyright (c) 2014 Nybex, Inc. (https://nybex.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+#import "NYMnemonic.h"
+
+@implementation NYMnemonic
++ (NSString *)mnemonicStringFromRandomHexString:(NSString *)seed language:(NSString *)language {
+
+    // Convert our hex string to NSData
+    NSData *seedData = [seed ny_dataFromHexString];
+
+    // Calculate the sha256 hash to use with a checksum
+    NSMutableData *hash = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
+    CC_SHA256(seedData.bytes, (int)seedData.length, hash.mutableBytes);
+
+    NSMutableArray *checksumBits = [NSMutableArray
+      arrayWithArray:[[NSData dataWithData:hash] ny_hexToBitArray]];
+    NSMutableArray *seedBits =
+      [NSMutableArray arrayWithArray:[seedData ny_hexToBitArray]];
+
+    // Append the appropriate checksum bits to the seed
+    for (int i = 0; i < (int)seedBits.count / 32; i++) {
+        [seedBits addObject: checksumBits[i]];
+    }
+    NSString *path = [NSString stringWithFormat:@"%@/%@.txt", [[NSBundle mainBundle] bundlePath], language];
+    NSString *fileText = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
+    NSArray *lines = [fileText componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
+
+    // Split into groups of 11, and change to numbers
+    NSMutableArray *words = [NSMutableArray arrayWithCapacity:(int)seedBits.count / 11];
+    for (int i = 0; i < (int)seedBits.count / 11; i++) {
+        NSUInteger wordNumber =
+            strtol(
+                [[[seedBits subarrayWithRange: NSMakeRange(i * 11, 11)] componentsJoinedByString: @""] UTF8String],
+                NULL,
+                2);
+
+        [words addObject: lines[wordNumber]];
+    }
+
+    return [words componentsJoinedByString:@" "];
+}
+
++ (NSString *)deterministicSeedStringFromMnemonicString:(NSString *)mnemonic
+                                             passphrase:(NSString *)passphrase
+                                               language:(NSString *)language {
+
+    NSData *data = [mnemonic dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
+    NSString *dataString = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];
+    NSData *normalized = [dataString dataUsingEncoding: NSASCIIStringEncoding allowLossyConversion: NO];
+
+    NSData *saltData =
+      [[@"mnemonic" stringByAppendingString: [[NSString alloc] initWithData:[passphrase dataUsingEncoding: NSASCIIStringEncoding
+                                                       allowLossyConversion:YES]
+                                     encoding:NSASCIIStringEncoding]]
+       dataUsingEncoding: NSASCIIStringEncoding
+       allowLossyConversion: NO];
+
+    NSMutableData *hashKeyData =
+      [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
+
+    CCKeyDerivationPBKDF(kCCPBKDF2, normalized.bytes, normalized.length,
+                       saltData.bytes, saltData.length, kCCPRFHmacAlgSHA512,
+                       2048, hashKeyData.mutableBytes, hashKeyData.length);
+
+    return [[NSData dataWithData:hashKeyData] ny_hexString];
+}
+
++ (NSString *)generateMnemonicString:(NSNumber *)strength
+                            language:(NSString *)language {
+
+    // Check that the strength is divisible by 32
+    if ([strength intValue] % 32 != 0) {
+        [NSException raise:@"Strength must be divisible by 32"
+                    format:@"Strength Was: %@", strength];
+    }
+
+    // Create an array of bytes
+    NSMutableData *bytes = [NSMutableData dataWithLength: ([strength integerValue]/8)];
+    // Generate the random data
+    int status = SecRandomCopyBytes(kSecRandomDefault, bytes.length, bytes.mutableBytes);
+    // Make sure we were successful
+    if (status != -1) {
+        return [self mnemonicStringFromRandomHexString:[bytes ny_hexString] language:language];
+    } else {
+        [NSException raise:@"Unable to get random data!"
+                    format:@"Unable to get random data!"];
+    }
+    return nil;
+}
+@end
+
+@implementation NSData (NYMnemonic)
+- (NSString *)ny_hexString {
+    const unsigned char *dataBuffer = (const unsigned char *)[self bytes];
+
+    if (!dataBuffer) {
+        return [NSString string];
+    }
+
+    NSUInteger dataLength = [self length];
+    NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
+    for (int i = 0; i < dataLength; ++i) {
+        [hexString appendString:[NSString stringWithFormat:@"%02lx", (unsigned long)dataBuffer[i]]];
+    }
+
+    return [NSString stringWithString:hexString];
+}
+
+- (NSArray *)ny_hexToBitArray {
+    NSMutableArray *bitArray = [NSMutableArray arrayWithCapacity:(int)self.length * 8];
+    NSString *hexStr = [self ny_hexString];
+    // Loop over the string and convert each char
+    for (NSUInteger i = 0; i < [hexStr length]; i++) {
+        NSString *bin = [self _hexToBinary:[hexStr characterAtIndex:i]];
+        // Each character will return a string representation of the binary
+        // Create NSNumbers from each and append to the array.
+        for (NSInteger j = 0; j < bin.length; j++) {
+            [bitArray addObject:
+                @([[NSString stringWithFormat: @"%C", [bin characterAtIndex: j]] intValue])];
+        }
+    }
+    return [NSArray arrayWithArray:bitArray];
+}
+
+- (NSString *)_hexToBinary:(unichar)value {
+    switch (value) {
+        case '0': return @"0000";
+        case '1': return @"0001";
+        case '2': return @"0010";
+        case '3': return @"0011";
+        case '4': return @"0100";
+        case '5': return @"0101";
+        case '6': return @"0110";
+        case '7': return @"0111";
+        case '8': return @"1000";
+        case '9': return @"1001";
+
+        case 'a':
+        case 'A': return @"1010";
+
+        case 'b':
+        case 'B': return @"1011";
+
+        case 'c':
+        case 'C': return @"1100";
+
+        case 'd':
+        case 'D': return @"1101";
+
+        case 'e':
+        case 'E': return @"1110";
+
+        case 'f':
+        case 'F': return @"1111";
+    }
+    return @"-1";
+}
+
+@end
+
+@implementation NSString (NYMnemonic)
+- (NSData *)ny_dataFromHexString {
+    const char *chars = [self UTF8String];
+    int i = 0, len = (int)self.length;
+
+    NSMutableData *data = [NSMutableData dataWithCapacity:len / 2];
+    char byteChars[3] = { '\0', '\0', '\0' };
+    unsigned long wholeByte;
+
+    while (i < len) {
+        byteChars[0] = chars[i++];
+        byteChars[1] = chars[i++];
+        wholeByte = strtoul(byteChars, NULL, 16);
+        [data appendBytes:&wholeByte length:1];
+    }
+
+    return data;
+}
+
+@end

+ 2048 - 0
Libraries external/NYMnemonic/languages/english.txt

@@ -0,0 +1,2048 @@
+abandon
+ability
+able
+about
+above
+absent
+absorb
+abstract
+absurd
+abuse
+access
+accident
+account
+accuse
+achieve
+acid
+acoustic
+acquire
+across
+act
+action
+actor
+actress
+actual
+adapt
+add
+addict
+address
+adjust
+admit
+adult
+advance
+advice
+aerobic
+affair
+afford
+afraid
+again
+age
+agent
+agree
+ahead
+aim
+air
+airport
+aisle
+alarm
+album
+alcohol
+alert
+alien
+all
+alley
+allow
+almost
+alone
+alpha
+already
+also
+alter
+always
+amateur
+amazing
+among
+amount
+amused
+analyst
+anchor
+ancient
+anger
+angle
+angry
+animal
+ankle
+announce
+annual
+another
+answer
+antenna
+antique
+anxiety
+any
+apart
+apology
+appear
+apple
+approve
+april
+arch
+arctic
+area
+arena
+argue
+arm
+armed
+armor
+army
+around
+arrange
+arrest
+arrive
+arrow
+art
+artefact
+artist
+artwork
+ask
+aspect
+assault
+asset
+assist
+assume
+asthma
+athlete
+atom
+attack
+attend
+attitude
+attract
+auction
+audit
+august
+aunt
+author
+auto
+autumn
+average
+avocado
+avoid
+awake
+aware
+away
+awesome
+awful
+awkward
+axis
+baby
+bachelor
+bacon
+badge
+bag
+balance
+balcony
+ball
+bamboo
+banana
+banner
+bar
+barely
+bargain
+barrel
+base
+basic
+basket
+battle
+beach
+bean
+beauty
+because
+become
+beef
+before
+begin
+behave
+behind
+believe
+below
+belt
+bench
+benefit
+best
+betray
+better
+between
+beyond
+bicycle
+bid
+bike
+bind
+biology
+bird
+birth
+bitter
+black
+blade
+blame
+blanket
+blast
+bleak
+bless
+blind
+blood
+blossom
+blouse
+blue
+blur
+blush
+board
+boat
+body
+boil
+bomb
+bone
+bonus
+book
+boost
+border
+boring
+borrow
+boss
+bottom
+bounce
+box
+boy
+bracket
+brain
+brand
+brass
+brave
+bread
+breeze
+brick
+bridge
+brief
+bright
+bring
+brisk
+broccoli
+broken
+bronze
+broom
+brother
+brown
+brush
+bubble
+buddy
+budget
+buffalo
+build
+bulb
+bulk
+bullet
+bundle
+bunker
+burden
+burger
+burst
+bus
+business
+busy
+butter
+buyer
+buzz
+cabbage
+cabin
+cable
+cactus
+cage
+cake
+call
+calm
+camera
+camp
+can
+canal
+cancel
+candy
+cannon
+canoe
+canvas
+canyon
+capable
+capital
+captain
+car
+carbon
+card
+cargo
+carpet
+carry
+cart
+case
+cash
+casino
+castle
+casual
+cat
+catalog
+catch
+category
+cattle
+caught
+cause
+caution
+cave
+ceiling
+celery
+cement
+census
+century
+cereal
+certain
+chair
+chalk
+champion
+change
+chaos
+chapter
+charge
+chase
+chat
+cheap
+check
+cheese
+chef
+cherry
+chest
+chicken
+chief
+child
+chimney
+choice
+choose
+chronic
+chuckle
+chunk
+churn
+cigar
+cinnamon
+circle
+citizen
+city
+civil
+claim
+clap
+clarify
+claw
+clay
+clean
+clerk
+clever
+click
+client
+cliff
+climb
+clinic
+clip
+clock
+clog
+close
+cloth
+cloud
+clown
+club
+clump
+cluster
+clutch
+coach
+coast
+coconut
+code
+coffee
+coil
+coin
+collect
+color
+column
+combine
+come
+comfort
+comic
+common
+company
+concert
+conduct
+confirm
+congress
+connect
+consider
+control
+convince
+cook
+cool
+copper
+copy
+coral
+core
+corn
+correct
+cost
+cotton
+couch
+country
+couple
+course
+cousin
+cover
+coyote
+crack
+cradle
+craft
+cram
+crane
+crash
+crater
+crawl
+crazy
+cream
+credit
+creek
+crew
+cricket
+crime
+crisp
+critic
+crop
+cross
+crouch
+crowd
+crucial
+cruel
+cruise
+crumble
+crunch
+crush
+cry
+crystal
+cube
+culture
+cup
+cupboard
+curious
+current
+curtain
+curve
+cushion
+custom
+cute
+cycle
+dad
+damage
+damp
+dance
+danger
+daring
+dash
+daughter
+dawn
+day
+deal
+debate
+debris
+decade
+december
+decide
+decline
+decorate
+decrease
+deer
+defense
+define
+defy
+degree
+delay
+deliver
+demand
+demise
+denial
+dentist
+deny
+depart
+depend
+deposit
+depth
+deputy
+derive
+describe
+desert
+design
+desk
+despair
+destroy
+detail
+detect
+develop
+device
+devote
+diagram
+dial
+diamond
+diary
+dice
+diesel
+diet
+differ
+digital
+dignity
+dilemma
+dinner
+dinosaur
+direct
+dirt
+disagree
+discover
+disease
+dish
+dismiss
+disorder
+display
+distance
+divert
+divide
+divorce
+dizzy
+doctor
+document
+dog
+doll
+dolphin
+domain
+donate
+donkey
+donor
+door
+dose
+double
+dove
+draft
+dragon
+drama
+drastic
+draw
+dream
+dress
+drift
+drill
+drink
+drip
+drive
+drop
+drum
+dry
+duck
+dumb
+dune
+during
+dust
+dutch
+duty
+dwarf
+dynamic
+eager
+eagle
+early
+earn
+earth
+easily
+east
+easy
+echo
+ecology
+economy
+edge
+edit
+educate
+effort
+egg
+eight
+either
+elbow
+elder
+electric
+elegant
+element
+elephant
+elevator
+elite
+else
+embark
+embody
+embrace
+emerge
+emotion
+employ
+empower
+empty
+enable
+enact
+end
+endless
+endorse
+enemy
+energy
+enforce
+engage
+engine
+enhance
+enjoy
+enlist
+enough
+enrich
+enroll
+ensure
+enter
+entire
+entry
+envelope
+episode
+equal
+equip
+era
+erase
+erode
+erosion
+error
+erupt
+escape
+essay
+essence
+estate
+eternal
+ethics
+evidence
+evil
+evoke
+evolve
+exact
+example
+excess
+exchange
+excite
+exclude
+excuse
+execute
+exercise
+exhaust
+exhibit
+exile
+exist
+exit
+exotic
+expand
+expect
+expire
+explain
+expose
+express
+extend
+extra
+eye
+eyebrow
+fabric
+face
+faculty
+fade
+faint
+faith
+fall
+false
+fame
+family
+famous
+fan
+fancy
+fantasy
+farm
+fashion
+fat
+fatal
+father
+fatigue
+fault
+favorite
+feature
+february
+federal
+fee
+feed
+feel
+female
+fence
+festival
+fetch
+fever
+few
+fiber
+fiction
+field
+figure
+file
+film
+filter
+final
+find
+fine
+finger
+finish
+fire
+firm
+first
+fiscal
+fish
+fit
+fitness
+fix
+flag
+flame
+flash
+flat
+flavor
+flee
+flight
+flip
+float
+flock
+floor
+flower
+fluid
+flush
+fly
+foam
+focus
+fog
+foil
+fold
+follow
+food
+foot
+force
+forest
+forget
+fork
+fortune
+forum
+forward
+fossil
+foster
+found
+fox
+fragile
+frame
+frequent
+fresh
+friend
+fringe
+frog
+front
+frost
+frown
+frozen
+fruit
+fuel
+fun
+funny
+furnace
+fury
+future
+gadget
+gain
+galaxy
+gallery
+game
+gap
+garage
+garbage
+garden
+garlic
+garment
+gas
+gasp
+gate
+gather
+gauge
+gaze
+general
+genius
+genre
+gentle
+genuine
+gesture
+ghost
+giant
+gift
+giggle
+ginger
+giraffe
+girl
+give
+glad
+glance
+glare
+glass
+glide
+glimpse
+globe
+gloom
+glory
+glove
+glow
+glue
+goat
+goddess
+gold
+good
+goose
+gorilla
+gospel
+gossip
+govern
+gown
+grab
+grace
+grain
+grant
+grape
+grass
+gravity
+great
+green
+grid
+grief
+grit
+grocery
+group
+grow
+grunt
+guard
+guess
+guide
+guilt
+guitar
+gun
+gym
+habit
+hair
+half
+hammer
+hamster
+hand
+happy
+harbor
+hard
+harsh
+harvest
+hat
+have
+hawk
+hazard
+head
+health
+heart
+heavy
+hedgehog
+height
+hello
+helmet
+help
+hen
+hero
+hidden
+high
+hill
+hint
+hip
+hire
+history
+hobby
+hockey
+hold
+hole
+holiday
+hollow
+home
+honey
+hood
+hope
+horn
+horror
+horse
+hospital
+host
+hotel
+hour
+hover
+hub
+huge
+human
+humble
+humor
+hundred
+hungry
+hunt
+hurdle
+hurry
+hurt
+husband
+hybrid
+ice
+icon
+idea
+identify
+idle
+ignore
+ill
+illegal
+illness
+image
+imitate
+immense
+immune
+impact
+impose
+improve
+impulse
+inch
+include
+income
+increase
+index
+indicate
+indoor
+industry
+infant
+inflict
+inform
+inhale
+inherit
+initial
+inject
+injury
+inmate
+inner
+innocent
+input
+inquiry
+insane
+insect
+inside
+inspire
+install
+intact
+interest
+into
+invest
+invite
+involve
+iron
+island
+isolate
+issue
+item
+ivory
+jacket
+jaguar
+jar
+jazz
+jealous
+jeans
+jelly
+jewel
+job
+join
+joke
+journey
+joy
+judge
+juice
+jump
+jungle
+junior
+junk
+just
+kangaroo
+keen
+keep
+ketchup
+key
+kick
+kid
+kidney
+kind
+kingdom
+kiss
+kit
+kitchen
+kite
+kitten
+kiwi
+knee
+knife
+knock
+know
+lab
+label
+labor
+ladder
+lady
+lake
+lamp
+language
+laptop
+large
+later
+latin
+laugh
+laundry
+lava
+law
+lawn
+lawsuit
+layer
+lazy
+leader
+leaf
+learn
+leave
+lecture
+left
+leg
+legal
+legend
+leisure
+lemon
+lend
+length
+lens
+leopard
+lesson
+letter
+level
+liar
+liberty
+library
+license
+life
+lift
+light
+like
+limb
+limit
+link
+lion
+liquid
+list
+little
+live
+lizard
+load
+loan
+lobster
+local
+lock
+logic
+lonely
+long
+loop
+lottery
+loud
+lounge
+love
+loyal
+lucky
+luggage
+lumber
+lunar
+lunch
+luxury
+lyrics
+machine
+mad
+magic
+magnet
+maid
+mail
+main
+major
+make
+mammal
+man
+manage
+mandate
+mango
+mansion
+manual
+maple
+marble
+march
+margin
+marine
+market
+marriage
+mask
+mass
+master
+match
+material
+math
+matrix
+matter
+maximum
+maze
+meadow
+mean
+measure
+meat
+mechanic
+medal
+media
+melody
+melt
+member
+memory
+mention
+menu
+mercy
+merge
+merit
+merry
+mesh
+message
+metal
+method
+middle
+midnight
+milk
+million
+mimic
+mind
+minimum
+minor
+minute
+miracle
+mirror
+misery
+miss
+mistake
+mix
+mixed
+mixture
+mobile
+model
+modify
+mom
+moment
+monitor
+monkey
+monster
+month
+moon
+moral
+more
+morning
+mosquito
+mother
+motion
+motor
+mountain
+mouse
+move
+movie
+much
+muffin
+mule
+multiply
+muscle
+museum
+mushroom
+music
+must
+mutual
+myself
+mystery
+myth
+naive
+name
+napkin
+narrow
+nasty
+nation
+nature
+near
+neck
+need
+negative
+neglect
+neither
+nephew
+nerve
+nest
+net
+network
+neutral
+never
+news
+next
+nice
+night
+noble
+noise
+nominee
+noodle
+normal
+north
+nose
+notable
+note
+nothing
+notice
+novel
+now
+nuclear
+number
+nurse
+nut
+oak
+obey
+object
+oblige
+obscure
+observe
+obtain
+obvious
+occur
+ocean
+october
+odor
+off
+offer
+office
+often
+oil
+okay
+old
+olive
+olympic
+omit
+once
+one
+onion
+online
+only
+open
+opera
+opinion
+oppose
+option
+orange
+orbit
+orchard
+order
+ordinary
+organ
+orient
+original
+orphan
+ostrich
+other
+outdoor
+outer
+output
+outside
+oval
+oven
+over
+own
+owner
+oxygen
+oyster
+ozone
+pact
+paddle
+page
+pair
+palace
+palm
+panda
+panel
+panic
+panther
+paper
+parade
+parent
+park
+parrot
+party
+pass
+patch
+path
+patient
+patrol
+pattern
+pause
+pave
+payment
+peace
+peanut
+pear
+peasant
+pelican
+pen
+penalty
+pencil
+people
+pepper
+perfect
+permit
+person
+pet
+phone
+photo
+phrase
+physical
+piano
+picnic
+picture
+piece
+pig
+pigeon
+pill
+pilot
+pink
+pioneer
+pipe
+pistol
+pitch
+pizza
+place
+planet
+plastic
+plate
+play
+please
+pledge
+pluck
+plug
+plunge
+poem
+poet
+point
+polar
+pole
+police
+pond
+pony
+pool
+popular
+portion
+position
+possible
+post
+potato
+pottery
+poverty
+powder
+power
+practice
+praise
+predict
+prefer
+prepare
+present
+pretty
+prevent
+price
+pride
+primary
+print
+priority
+prison
+private
+prize
+problem
+process
+produce
+profit
+program
+project
+promote
+proof
+property
+prosper
+protect
+proud
+provide
+public
+pudding
+pull
+pulp
+pulse
+pumpkin
+punch
+pupil
+puppy
+purchase
+purity
+purpose
+purse
+push
+put
+puzzle
+pyramid
+quality
+quantum
+quarter
+question
+quick
+quit
+quiz
+quote
+rabbit
+raccoon
+race
+rack
+radar
+radio
+rail
+rain
+raise
+rally
+ramp
+ranch
+random
+range
+rapid
+rare
+rate
+rather
+raven
+raw
+razor
+ready
+real
+reason
+rebel
+rebuild
+recall
+receive
+recipe
+record
+recycle
+reduce
+reflect
+reform
+refuse
+region
+regret
+regular
+reject
+relax
+release
+relief
+rely
+remain
+remember
+remind
+remove
+render
+renew
+rent
+reopen
+repair
+repeat
+replace
+report
+require
+rescue
+resemble
+resist
+resource
+response
+result
+retire
+retreat
+return
+reunion
+reveal
+review
+reward
+rhythm
+rib
+ribbon
+rice
+rich
+ride
+ridge
+rifle
+right
+rigid
+ring
+riot
+ripple
+risk
+ritual
+rival
+river
+road
+roast
+robot
+robust
+rocket
+romance
+roof
+rookie
+room
+rose
+rotate
+rough
+round
+route
+royal
+rubber
+rude
+rug
+rule
+run
+runway
+rural
+sad
+saddle
+sadness
+safe
+sail
+salad
+salmon
+salon
+salt
+salute
+same
+sample
+sand
+satisfy
+satoshi
+sauce
+sausage
+save
+say
+scale
+scan
+scare
+scatter
+scene
+scheme
+school
+science
+scissors
+scorpion
+scout
+scrap
+screen
+script
+scrub
+sea
+search
+season
+seat
+second
+secret
+section
+security
+seed
+seek
+segment
+select
+sell
+seminar
+senior
+sense
+sentence
+series
+service
+session
+settle
+setup
+seven
+shadow
+shaft
+shallow
+share
+shed
+shell
+sheriff
+shield
+shift
+shine
+ship
+shiver
+shock
+shoe
+shoot
+shop
+short
+shoulder
+shove
+shrimp
+shrug
+shuffle
+shy
+sibling
+sick
+side
+siege
+sight
+sign
+silent
+silk
+silly
+silver
+similar
+simple
+since
+sing
+siren
+sister
+situate
+six
+size
+skate
+sketch
+ski
+skill
+skin
+skirt
+skull
+slab
+slam
+sleep
+slender
+slice
+slide
+slight
+slim
+slogan
+slot
+slow
+slush
+small
+smart
+smile
+smoke
+smooth
+snack
+snake
+snap
+sniff
+snow
+soap
+soccer
+social
+sock
+soda
+soft
+solar
+soldier
+solid
+solution
+solve
+someone
+song
+soon
+sorry
+sort
+soul
+sound
+soup
+source
+south
+space
+spare
+spatial
+spawn
+speak
+special
+speed
+spell
+spend
+sphere
+spice
+spider
+spike
+spin
+spirit
+split
+spoil
+sponsor
+spoon
+sport
+spot
+spray
+spread
+spring
+spy
+square
+squeeze
+squirrel
+stable
+stadium
+staff
+stage
+stairs
+stamp
+stand
+start
+state
+stay
+steak
+steel
+stem
+step
+stereo
+stick
+still
+sting
+stock
+stomach
+stone
+stool
+story
+stove
+strategy
+street
+strike
+strong
+struggle
+student
+stuff
+stumble
+style
+subject
+submit
+subway
+success
+such
+sudden
+suffer
+sugar
+suggest
+suit
+summer
+sun
+sunny
+sunset
+super
+supply
+supreme
+sure
+surface
+surge
+surprise
+surround
+survey
+suspect
+sustain
+swallow
+swamp
+swap
+swarm
+swear
+sweet
+swift
+swim
+swing
+switch
+sword
+symbol
+symptom
+syrup
+system
+table
+tackle
+tag
+tail
+talent
+talk
+tank
+tape
+target
+task
+taste
+tattoo
+taxi
+teach
+team
+tell
+ten
+tenant
+tennis
+tent
+term
+test
+text
+thank
+that
+theme
+then
+theory
+there
+they
+thing
+this
+thought
+three
+thrive
+throw
+thumb
+thunder
+ticket
+tide
+tiger
+tilt
+timber
+time
+tiny
+tip
+tired
+tissue
+title
+toast
+tobacco
+today
+toddler
+toe
+together
+toilet
+token
+tomato
+tomorrow
+tone
+tongue
+tonight
+tool
+tooth
+top
+topic
+topple
+torch
+tornado
+tortoise
+toss
+total
+tourist
+toward
+tower
+town
+toy
+track
+trade
+traffic
+tragic
+train
+transfer
+trap
+trash
+travel
+tray
+treat
+tree
+trend
+trial
+tribe
+trick
+trigger
+trim
+trip
+trophy
+trouble
+truck
+true
+truly
+trumpet
+trust
+truth
+try
+tube
+tuition
+tumble
+tuna
+tunnel
+turkey
+turn
+turtle
+twelve
+twenty
+twice
+twin
+twist
+two
+type
+typical
+ugly
+umbrella
+unable
+unaware
+uncle
+uncover
+under
+undo
+unfair
+unfold
+unhappy
+uniform
+unique
+unit
+universe
+unknown
+unlock
+until
+unusual
+unveil
+update
+upgrade
+uphold
+upon
+upper
+upset
+urban
+urge
+usage
+use
+used
+useful
+useless
+usual
+utility
+vacant
+vacuum
+vague
+valid
+valley
+valve
+van
+vanish
+vapor
+various
+vast
+vault
+vehicle
+velvet
+vendor
+venture
+venue
+verb
+verify
+version
+very
+vessel
+veteran
+viable
+vibrant
+vicious
+victory
+video
+view
+village
+vintage
+violin
+virtual
+virus
+visa
+visit
+visual
+vital
+vivid
+vocal
+voice
+void
+volcano
+volume
+vote
+voyage
+wage
+wagon
+wait
+walk
+wall
+walnut
+want
+warfare
+warm
+warrior
+wash
+wasp
+waste
+water
+wave
+way
+wealth
+weapon
+wear
+weasel
+weather
+web
+wedding
+weekend
+weird
+welcome
+west
+wet
+whale
+what
+wheat
+wheel
+when
+where
+whip
+whisper
+wide
+width
+wife
+wild
+will
+win
+window
+wine
+wing
+wink
+winner
+winter
+wire
+wisdom
+wise
+wish
+witness
+wolf
+woman
+wonder
+wood
+wool
+word
+work
+world
+worry
+worth
+wrap
+wreck
+wrestle
+wrist
+write
+wrong
+yard
+year
+yellow
+you
+young
+youth
+zebra
+zero
+zone
+zoo

+ 16 - 16
Nextcloud.xcodeproj/project.pbxproj

@@ -382,6 +382,8 @@
 		F7B1FBC81E72E3D1001781FE /* SwiftWebVCActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B1FBC11E72E3D1001781FE /* SwiftWebVCActivity.swift */; };
 		F7B1FBC91E72E3D1001781FE /* SwiftWebVCActivityChrome.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B1FBC21E72E3D1001781FE /* SwiftWebVCActivityChrome.swift */; };
 		F7B1FBCA1E72E3D1001781FE /* SwiftWebVCActivitySafari.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B1FBC31E72E3D1001781FE /* SwiftWebVCActivitySafari.swift */; };
+		F7B2DEF01F976854007CF4D2 /* NYMnemonic.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B2DEEF1F976785007CF4D2 /* NYMnemonic.m */; };
+		F7B2DEF11F976859007CF4D2 /* english.txt in Resources */ = {isa = PBXBuildFile; fileRef = F7B2DEED1F976785007CF4D2 /* english.txt */; };
 		F7B3A4EE1E97818A000DACE8 /* CCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B3A4ED1E97818A000DACE8 /* CCLoginWeb.swift */; };
 		F7B4F1CB1F44356F00B53B42 /* NCUchardet.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B4F1C81F44356F00B53B42 /* NCUchardet.m */; };
 		F7BAADC81ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
@@ -1219,11 +1221,9 @@
 		F7B1FBC11E72E3D1001781FE /* SwiftWebVCActivity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftWebVCActivity.swift; sourceTree = "<group>"; };
 		F7B1FBC21E72E3D1001781FE /* SwiftWebVCActivityChrome.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftWebVCActivityChrome.swift; sourceTree = "<group>"; };
 		F7B1FBC31E72E3D1001781FE /* SwiftWebVCActivitySafari.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftWebVCActivitySafari.swift; sourceTree = "<group>"; };
-		F7B2DEDE1F97464E007CF4D2 /* CKMnemonic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CKMnemonic.swift; sourceTree = "<group>"; };
-		F7B2DEDF1F97464E007CF4D2 /* Data+CKBitArray.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Data+CKBitArray.swift"; sourceTree = "<group>"; };
-		F7B2DEE11F97464E007CF4D2 /* Chinese.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Chinese.swift; sourceTree = "<group>"; };
-		F7B2DEE21F97464E007CF4D2 /* English.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = English.swift; sourceTree = "<group>"; };
-		F7B2DEE31F97464E007CF4D2 /* String+MnemonicData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+MnemonicData.swift"; sourceTree = "<group>"; };
+		F7B2DEED1F976785007CF4D2 /* english.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = english.txt; sourceTree = "<group>"; };
+		F7B2DEEE1F976785007CF4D2 /* NYMnemonic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYMnemonic.h; sourceTree = "<group>"; };
+		F7B2DEEF1F976785007CF4D2 /* NYMnemonic.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NYMnemonic.m; sourceTree = "<group>"; };
 		F7B3A4ED1E97818A000DACE8 /* CCLoginWeb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CCLoginWeb.swift; sourceTree = "<group>"; };
 		F7B4F1C71F44356F00B53B42 /* NCUchardet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCUchardet.h; sourceTree = "<group>"; };
 		F7B4F1C81F44356F00B53B42 /* NCUchardet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NCUchardet.m; sourceTree = "<group>"; };
@@ -1725,7 +1725,6 @@
 			isa = PBXGroup;
 			children = (
 				F70F02B21C889183008DAB36 /* AFViewShaker */,
-				F7B2DEDD1F97464E007CF4D2 /* CKMnemonic */,
 				F73CCE221DC13788007E38D8 /* DZNEmptyDataSet */,
 				F7659A211DC0B726004860C4 /* EAIntroView */,
 				F7659A2A1DC0B72F004860C4 /* EARestrictedScrollView */,
@@ -1733,6 +1732,7 @@
 				F7659A2F1DC0B737004860C4 /* iRate */,
 				F70F04821C889183008DAB36 /* MBProgressHUD */,
 				F7DC5FD31F00F98B00A903C7 /* MGSwipeTableCell */,
+				F7B2DEEB1F976785007CF4D2 /* NYMnemonic */,
 				F7540EE11D5B238600C3FFA8 /* openssl */,
 				F75037421DBFA91A008FB480 /* PureLayout */,
 				F70F05241C889184008DAB36 /* Reachability */,
@@ -2481,24 +2481,22 @@
 			path = Resources;
 			sourceTree = "<group>";
 		};
-		F7B2DEDD1F97464E007CF4D2 /* CKMnemonic */ = {
+		F7B2DEEB1F976785007CF4D2 /* NYMnemonic */ = {
 			isa = PBXGroup;
 			children = (
-				F7B2DEDE1F97464E007CF4D2 /* CKMnemonic.swift */,
-				F7B2DEDF1F97464E007CF4D2 /* Data+CKBitArray.swift */,
-				F7B2DEE01F97464E007CF4D2 /* Language */,
-				F7B2DEE31F97464E007CF4D2 /* String+MnemonicData.swift */,
+				F7B2DEEC1F976785007CF4D2 /* languages */,
+				F7B2DEEE1F976785007CF4D2 /* NYMnemonic.h */,
+				F7B2DEEF1F976785007CF4D2 /* NYMnemonic.m */,
 			);
-			path = CKMnemonic;
+			path = NYMnemonic;
 			sourceTree = "<group>";
 		};
-		F7B2DEE01F97464E007CF4D2 /* Language */ = {
+		F7B2DEEC1F976785007CF4D2 /* languages */ = {
 			isa = PBXGroup;
 			children = (
-				F7B2DEE11F97464E007CF4D2 /* Chinese.swift */,
-				F7B2DEE21F97464E007CF4D2 /* English.swift */,
+				F7B2DEED1F976785007CF4D2 /* english.txt */,
 			);
-			path = Language;
+			path = languages;
 			sourceTree = "<group>";
 		};
 		F7B4F1C51F44356F00B53B42 /* NCUchardet */ = {
@@ -3319,6 +3317,7 @@
 				F77B0F571D118A16002130FE /* synchronizedcrypto.gif in Resources */,
 				F7F54CEE1E5B14C700E19C62 /* ImageSelectedSmallOff.png in Resources */,
 				F73B4EF31F470D9100BBEE4B /* GB2312Freq.tab in Resources */,
+				F7B2DEF11F976859007CF4D2 /* english.txt in Resources */,
 				F7F54D051E5B14C800E19C62 /* VideoOverlay@3x.png in Resources */,
 				F7F54D011E5B14C700E19C62 /* UIBarButtonItemGrid@2x.png in Resources */,
 				F7F54CE71E5B14C700E19C62 /* ImageError@3x.png in Resources */,
@@ -3827,6 +3826,7 @@
 				F73B4F0C1F470D9100BBEE4B /* nsHebrewProber.cpp in Sources */,
 				F762CAFB1EACB66200B38484 /* XLFormDatePickerCell.m in Sources */,
 				F762CB0F1EACB66200B38484 /* NSObject+XLFormAdditions.m in Sources */,
+				F7B2DEF01F976854007CF4D2 /* NYMnemonic.m in Sources */,
 				F762CB891EACB81000B38484 /* REMenuItem.m in Sources */,
 				F7D423791F0596C6009C9782 /* CGPDFDocument.m in Sources */,
 				F73B4EFF1F470D9100BBEE4B /* LangRussianModel.cpp in Sources */,

+ 3 - 1
iOSClient/Settings/NCManageEndToEndEncryption.m

@@ -24,6 +24,7 @@
 #import "NCManageEndToEndEncryption.h"
 #import "AppDelegate.h"
 #import "CCNetworking.h"
+#import "NYMnemonic.h"
 #import "NCBridgeSwift.h"
 
 @implementation NCManageEndToEndEncryption
@@ -113,7 +114,8 @@
     [self deselectFormRow:sender];
 
     // select Passphrase
-    app.e2ePassphrase = k_passphrase_test;
+    //app.e2ePassphrase = k_passphrase_test;
+    app.e2ePassphrase = [NYMnemonic generateMnemonicString:@128 language:@"english"];
     
     if ([CCUtility isEndToEndEnabled:app.activeAccount]) {
         

Some files were not shown because too many files changed in this diff