Merge branch 'master' into windows
This commit is contained in:
commit
af36fa0f74
@ -2,5 +2,6 @@ language: objective-c
|
||||
xcode_project: MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj
|
||||
xcode_scheme: MasterPassword iOS (Development)
|
||||
xcode_sdk: iphonesimulator
|
||||
env: TERM=dumb
|
||||
git:
|
||||
submodules: true
|
||||
|
Binary file not shown.
BIN
External/iOS/Crashlytics.framework/submit
vendored
BIN
External/iOS/Crashlytics.framework/submit
vendored
Binary file not shown.
@ -2,6 +2,9 @@
|
||||
#
|
||||
# TROUBLESHOOTING
|
||||
# - To enable verbose algorithm/implementation debugging, use ./build -DDEBUG
|
||||
# - If you see 'undefined reference to `AES_encrypt'',
|
||||
# make sure you have openssl installed.
|
||||
# If libcrypto.a is in a non-standard directory, try ./build -L[your-lib-dir]
|
||||
# - If you see 'undefined reference to `clock_gettime'',
|
||||
# try ./build -lrt instead.
|
||||
# - If you see 'x86.S:202: Error: junk at end of line, first unrecognized character is `,'',
|
||||
@ -189,7 +192,7 @@ mpw() {
|
||||
# library paths
|
||||
-L"." -L"lib/scrypt"
|
||||
# link libraries
|
||||
-l"crypto"
|
||||
-l"crypto" -l"curses"
|
||||
# scrypt
|
||||
"lib/scrypt/scrypt-crypto_aesctr.o"
|
||||
"lib/scrypt/scrypt-sha256.o"
|
||||
@ -245,6 +248,9 @@ mpw-bench() {
|
||||
|
||||
### TARGETS
|
||||
|
||||
haslib() {
|
||||
! LC_ALL=C cc -l"$1" 2>&1 | grep -q 'library not found'
|
||||
}
|
||||
cc() {
|
||||
if hash llvm-gcc 2>/dev/null; then
|
||||
llvm-gcc "$@"
|
||||
|
@ -95,13 +95,24 @@ char *homedir(const char *filename) {
|
||||
return homefile;
|
||||
}
|
||||
|
||||
char *getlinep(const char *prompt) {
|
||||
char *buf = NULL;
|
||||
size_t bufSize = 0;
|
||||
ssize_t lineSize;
|
||||
fprintf(stderr, "%s", prompt);
|
||||
fprintf(stderr, " ");
|
||||
if ((lineSize = getline(&buf, &bufSize, stdin)) < 0) {
|
||||
free(buf);
|
||||
return NULL;
|
||||
}
|
||||
buf[lineSize - 1]=0;
|
||||
return buf;
|
||||
}
|
||||
|
||||
int main(int argc, char *const argv[]) {
|
||||
|
||||
if (argc < 2)
|
||||
usage();
|
||||
|
||||
// Read the environment.
|
||||
const char *userName = getenv( MP_env_username );
|
||||
char *userName = getenv( MP_env_username );
|
||||
const char *masterPassword = NULL;
|
||||
const char *siteName = NULL;
|
||||
MPElementType siteType = MPElementTypeGeneratedLong;
|
||||
@ -156,13 +167,17 @@ int main(int argc, char *const argv[]) {
|
||||
|
||||
// Convert and validate input.
|
||||
if (!userName) {
|
||||
fprintf(stderr, "Missing user name.\n");
|
||||
return 1;
|
||||
if (!(userName = getlinep("Your user name:"))) {
|
||||
fprintf(stderr, "Missing user name.\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
trc("userName: %s\n", userName);
|
||||
if (!siteName) {
|
||||
fprintf(stderr, "Missing site name.\n");
|
||||
return 1;
|
||||
if (!(siteName = getlinep("Site name:"))) {
|
||||
fprintf(stderr, "Missing site name.\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
trc("siteName: %s\n", siteName);
|
||||
if (siteCounterString)
|
||||
@ -206,6 +221,9 @@ int main(int argc, char *const argv[]) {
|
||||
masterPassword = getpass( "Your master password: " );
|
||||
trc("masterPassword: %s\n", masterPassword);
|
||||
|
||||
// Summarize operation.
|
||||
fprintf(stderr, "%s's password for %s:\n[ %s ]: ", userName, siteName, Identicon( userName, masterPassword ));
|
||||
|
||||
// Calculate the master key salt.
|
||||
const char *mpKeyScope = ScopeForVariant(MPElementVariantPassword);
|
||||
trc("key scope: %s\n", mpKeyScope);
|
||||
|
@ -10,9 +10,13 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <alg/sha256.h>
|
||||
|
||||
#include <curses.h>
|
||||
#include <term.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
const MPElementType TypeWithName(const char *typeName) {
|
||||
@ -171,6 +175,7 @@ const char CharacterFromClass(char characterClass, uint8_t seedByte) {
|
||||
|
||||
return classCharacters[seedByte % strlen(classCharacters)];
|
||||
}
|
||||
|
||||
const char *IDForBuf(const void *buf, size_t length) {
|
||||
uint8_t hash[32];
|
||||
SHA256_Buf(buf, length, hash);
|
||||
@ -186,5 +191,48 @@ const char *Hex(const void *buf, size_t length) {
|
||||
char *id = (char *)calloc(length*2+1, sizeof(char));
|
||||
for (int kH = 0; kH < length; kH++)
|
||||
sprintf(&(id[kH * 2]), "%02X", ((const uint8_t*)buf)[kH]);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
int putvari;
|
||||
char *putvarc = NULL;
|
||||
static void initputvar() {
|
||||
if (putvarc)
|
||||
free(putvarc);
|
||||
putvari=0;
|
||||
putvarc=(char *)calloc(256, sizeof(char));
|
||||
}
|
||||
static int putvar(int c) {
|
||||
putvarc[putvari++]=c;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *Identicon(const char *userName, const char *masterPassword) {
|
||||
const char *left[] = { "╔", "╚", "╰", "═" };
|
||||
const char *right[] = { "╗", "╝", "╯", "═" };
|
||||
const char *body[] = { "█", "░", "▒", "▓", "☺", "☻" };
|
||||
const char *accessory[] = { "◈", "◎", "◐", "◑", "◒", "◓", "☀", "☁", "☂", "☃", "☄", "★", "☆", "☎", "☏", "⎈", "⌂", "☘", "☢", "☣", "☕", "⌚", "⌛", "⏰", "⚡", "⛄", "⛅", "☔", "♔", "♕", "♖", "♗", "♘", "♙", "♚", "♛", "♜", "♝", "♞", "♟", "♨", "♩", "♪", "♫", "⚐", "⚑", "⚔", "⚖", "⚙", "⚠", "⌘", "⏎", "✄", "✆", "✈", "✉", "✌" };
|
||||
|
||||
uint8_t identiconSeed[32];
|
||||
HMAC_SHA256_Buf(masterPassword, strlen(masterPassword), userName, strlen(userName), identiconSeed);
|
||||
|
||||
char *identicon = (char *)calloc(20, sizeof(char));
|
||||
setupterm(NULL, 2, NULL);
|
||||
initputvar();
|
||||
tputs(tparm(tgetstr("AF", NULL), identiconSeed[4] % 7 + 1), 1, putvar);
|
||||
char red[strlen(putvarc)];
|
||||
strcpy(red, putvarc);
|
||||
tputs(tgetstr("me", NULL), 1, putvar);
|
||||
char reset[strlen(putvarc)];
|
||||
strcpy(reset, putvarc);
|
||||
sprintf(identicon, "%s%s%s%s%s%s",
|
||||
red,
|
||||
left[identiconSeed[0] % (sizeof(left) / sizeof(left[0]))],
|
||||
body[identiconSeed[1] % (sizeof(body) / sizeof(body[0]))],
|
||||
right[identiconSeed[2] % (sizeof(right) / sizeof(right[0]))],
|
||||
accessory[identiconSeed[3] % (sizeof(accessory) / sizeof(accessory[0]))],
|
||||
reset);
|
||||
|
||||
return identicon;
|
||||
}
|
||||
|
@ -56,4 +56,5 @@ const char *CipherForType(MPElementType type, uint8_t seedByte);
|
||||
const char CharacterFromClass(char characterClass, uint8_t seedByte);
|
||||
const char *IDForBuf(const void *buf, size_t length);
|
||||
const char *Hex(const void *buf, size_t length);
|
||||
const char *Identicon(const char *userName, const char *masterPassword);
|
||||
|
||||
|
@ -109,8 +109,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
// Global hotkey.
|
||||
EventHotKeyRef hotKeyRef;
|
||||
EventTypeSpec hotKeyEvents[1] = { { .eventClass = kEventClassKeyboard, .eventKind = kEventHotKeyPressed } };
|
||||
OSStatus status = InstallApplicationEventHandler( NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ),
|
||||
hotKeyEvents, (__bridge void *)self, NULL );
|
||||
OSStatus status = InstallApplicationEventHandler( NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ), hotKeyEvents, (__bridge void *)self, NULL );
|
||||
if (status != noErr)
|
||||
err( @"Error installing application event handler: %i", (int)status );
|
||||
status = RegisterEventHotKey( 35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
|
||||
|
@ -682,8 +682,10 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
||||
} );
|
||||
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, [MPiOSAppDelegate get].storeCoordinator, nil,
|
||||
^(MPUsersViewController *self, NSNotification *note) {
|
||||
[self registerObservers];
|
||||
[self reloadUsers];
|
||||
PearlMainQueue( ^{
|
||||
[self registerObservers];
|
||||
[self reloadUsers];
|
||||
} );
|
||||
} );
|
||||
}
|
||||
|
||||
|
@ -3492,6 +3492,7 @@
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = "/bin/sh -e";
|
||||
shellScript = "exec ../../../Scripts/updatePlist";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DA8D88E019DA412A00B189D0 /* Run Script: genassets */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
# ______________________________________________________________________
|
||||
# | |
|
||||
# | .:: TABLE OF CONTENTS ::. |
|
||||
# | .: TABLE OF CONTENTS :. |
|
||||
# |______________________________________________________________________|
|
||||
#
|
||||
# chr decimal
|
||||
@ -132,7 +132,7 @@ _tocHash=71e13f42e1ea82c1c7019b27a3bc71f3
|
||||
|
||||
# ______________________________________________________________________
|
||||
# | |
|
||||
# | .:: GLOBAL CONFIGURATION ::. |
|
||||
# | .: GLOBAL CONFIGURATION :. |
|
||||
# |______________________________________________________________________|
|
||||
|
||||
# Unset all exported functions. Exported functions are evil.
|
||||
@ -177,7 +177,7 @@ genToc() {
|
||||
|
||||
# ______________________________________________________________________
|
||||
# | |
|
||||
# | .:: GLOBAL DECLARATIONS ::. |
|
||||
# | .: GLOBAL DECLARATIONS :. |
|
||||
# |______________________________________________________________________|
|
||||
|
||||
# Variables for convenience sequences.
|
||||
@ -230,7 +230,7 @@ runner=( '> >' \
|
||||
tput eA; tput as;
|
||||
tput ac; tput ae; } ) # Drawing characters
|
||||
back=$'\b'
|
||||
} 2>/dev/null ||:
|
||||
} ||:
|
||||
|
||||
|
||||
|
||||
@ -238,7 +238,7 @@ runner=( '> >' \
|
||||
|
||||
# ______________________________________________________________________
|
||||
# | |
|
||||
# | .:: FUNCTION DECLARATIONS ::. |
|
||||
# | .: FUNCTION DECLARATIONS :. |
|
||||
# |______________________________________________________________________|
|
||||
|
||||
|
||||
@ -1549,7 +1549,7 @@ stackTrace() {
|
||||
|
||||
# ______________________________________________________________________
|
||||
# | |
|
||||
# | .:: ENTRY POINT ::. |
|
||||
# | .: ENTRY POINT :. |
|
||||
# |______________________________________________________________________|
|
||||
|
||||
# Make sure this file is sourced and not executed.
|
||||
@ -1569,6 +1569,6 @@ stackTrace() {
|
||||
}
|
||||
|
||||
:
|
||||
: .:: END SOURCING ::.
|
||||
: .: END SOURCING :.
|
||||
: ______________________________________________________________________
|
||||
:
|
||||
|
@ -1,7 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
cd "${BASH_SOURCE%/*}"
|
||||
source bashlib
|
||||
set -e
|
||||
source ./bashlib
|
||||
cd ..
|
||||
export PATH+=:/usr/libexec
|
||||
|
||||
|
@ -151,7 +151,7 @@
|
||||
<script>
|
||||
var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
|
||||
</script>
|
||||
<script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
|
||||
<script src="://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="algorithm">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="algorithm">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
@ -55,13 +55,6 @@
|
||||
<img class="background" src="img/mp-process-angled.png" data-stellar-ratio="2.5" />
|
||||
<div class="container">
|
||||
|
||||
<!-- <div class="box effect-8">
|
||||
iframe id="ytplayer" type="text/html" width="640" height="360" frameborder="0"
|
||||
src="http://www.youtube.com/embed/QTfA0O7YnHQ?origin=http://masterpassword.lyndir.com&autohide=1&autoplay=0&rel=0&showinfo=0&theme=light&color=white"></iframe
|
||||
<iframe width="640" height="360" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen
|
||||
src="http://player.vimeo.com/video/45803664?title=0&byline=0&portrait=0&color=ffffff"></iframe>
|
||||
</div> -->
|
||||
|
||||
<div class="content">
|
||||
<h2>The Master Password Algorithm</h2>
|
||||
</div>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="trouble">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="trouble">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
@ -54,13 +54,6 @@
|
||||
<header>
|
||||
<img class="background" src="img/mp-process-angled.png" data-stellar-ratio="2.5" />
|
||||
<div class="container">
|
||||
|
||||
<!-- <div class="box effect-8">
|
||||
iframe id="ytplayer" type="text/html" width="640" height="360" frameborder="0"
|
||||
src="http://www.youtube.com/embed/QTfA0O7YnHQ?origin=http://masterpassword.lyndir.com&autohide=1&autoplay=0&rel=0&showinfo=0&theme=light&color=white"></iframe
|
||||
<iframe width="640" height="360" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen
|
||||
src="http://player.vimeo.com/video/45803664?title=0&byline=0&portrait=0&color=ffffff"></iframe>
|
||||
</div> -->
|
||||
|
||||
<div class="content">
|
||||
<h2>Security Overview</h2>
|
||||
@ -94,7 +87,7 @@
|
||||
|
||||
<h1 id="surrender">Can an officer force me to divulge my master password?</h1>
|
||||
<p>Cryptography only provides technical security. It does not protect you from situations where you are legally required or forced by peers to surrender your key.</p>
|
||||
<img class="block" src="http://imgs.xkcd.com/comics/security.png" />
|
||||
<img class="block" src="https://sslimgs.xkcd.com/comics/security.png" />
|
||||
<p>In fact, many countries provide their officers with a legal grounds for forcing you to divulge your encryption keys to any encrypted information they've recovered during a warranted search.</p>
|
||||
<p>Again, unlike ordinary password managers, Master Password might have an edge here. If you make no use of stored passwords, Master Password doesn't actually encrypt anything with your master password. That means, when your devices are seized, these legal grounds may no longer apply. Note however that this does not constitute legal advice and that this theory has never been tested in practice.</p>
|
||||
<p>For your safety, we recommend that in preparation of travelling, you change the master password for your user on the device. That way, if your device is seized by a foreign entity and they force you to divulge your master password, you'll likely be fully compliant by simply giving up the new master password even though it will cause the app to generate invalid passwords for all your sites. Later, you can always change the master password back to the real one.</p>
|
||||
@ -102,7 +95,7 @@
|
||||
<h1 id="masterpassword">What should my master password be?</h1>
|
||||
<p>The simple answer to that question is: First and foremost, memorable and unrelated to you. What that means is that the most important thing about your master password is that you need to be able to recall it any time and yet it should not be derived from anything personal.</p>
|
||||
<p>That advice usually doesn't help very much with actually picking a good master password. <strong>The goal of a good password is that it'll take an attacker a lot of guesses before he'll find it</strong>. That is the core idea behind good passwords.</p>
|
||||
<img class="block" src="http://imgs.xkcd.com/comics/password_strength.png" />
|
||||
<img class="block" src="https://sslimgs.xkcd.com/comics/password_strength.png" />
|
||||
<p>There are a few strategies of getting good passwords. The speed with which an attacker can guess your password depends a lot on whether he knows what kind of password you're using or not. So we'll compare a few password strategies, their strength and how memorable they are.</p>
|
||||
<p>The simplest strategy for picking good passwords is by just picking a bunch of random letters, digits and symbols and mixing them up. This is a great strategy for strong passwords but those passwords are usually not very memorable.</p>
|
||||
<p>Another strategy is by "encoding" something you already know. This can seem like a good way to make memorable passwords, but recalling the "encoding" you used two years later can be tricky. This also makes it much easier for attackers that know you to find your password.</p>
|
||||
@ -151,7 +144,7 @@
|
||||
<td>Difficult</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="4">Encoding a word, <a href="http://xkcd.com/936/" onclick="_gaq.push(['_trackPageview', '/outbound/xkcd/troubador']);">Tr0ub4dor</a> style</th>
|
||||
<th colspan="4">Encoding a word, <a href="https://xkcd.com/936/" onclick="_gaq.push(['_trackPageview', '/outbound/xkcd/troubador']);">Tr0ub4dor</a> style</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Tr0ub4dor</code></td>
|
||||
@ -169,7 +162,7 @@
|
||||
<td>Moderate</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="4">Nonsense sentence, <a href="http://xkcd.com/936/" onclick="_gaq.push(['_trackPageview', '/outbound/xkcd/correct-horse']);">correct horse</a> style</th>
|
||||
<th colspan="4">Nonsense sentence, <a href="https://xkcd.com/936/" onclick="_gaq.push(['_trackPageview', '/outbound/xkcd/correct-horse']);">correct horse</a> style</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>correct horse battery staple</code></td>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/about.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="app">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="app">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
|
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
body, html {
|
||||
color: white;
|
||||
font-family: 'Copperplate', sans-serif;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
}
|
||||
*:link, *:visited {
|
||||
color: inherit;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p></p>
|
||||
</body>
|
||||
</html>
|
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
body, html {
|
||||
color: white;
|
||||
font-family: 'Copperplate', sans-serif;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
}
|
||||
*:link, *:visited {
|
||||
color: inherit;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p><a href="http://masterpasswordapp.com/support.html">Open support</a> if you have any issues.</p>
|
||||
</body>
|
||||
</html>
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="privacy">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="privacy">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
@ -55,13 +55,6 @@
|
||||
<img class="background" src="img/mp-process-angled.png" data-stellar-ratio="2.5" />
|
||||
<div class="container">
|
||||
|
||||
<!-- <div class="box effect-8">
|
||||
iframe id="ytplayer" type="text/html" width="640" height="360" frameborder="0"
|
||||
src="http://www.youtube.com/embed/QTfA0O7YnHQ?origin=http://masterpassword.lyndir.com&autohide=1&autoplay=0&rel=0&showinfo=0&theme=light&color=white"></iframe
|
||||
<iframe width="640" height="360" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen
|
||||
src="http://player.vimeo.com/video/45803664?title=0&byline=0&portrait=0&color=ffffff"></iframe>
|
||||
</div> -->
|
||||
|
||||
<div class="content">
|
||||
<h2>Privacy Policy</h2>
|
||||
</div>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="security">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="security">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="support">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="support">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
@ -55,13 +55,6 @@
|
||||
<img class="background" src="img/mp-process-angled.png" data-stellar-ratio="2.5" />
|
||||
<div class="container">
|
||||
|
||||
<!-- <div class="box effect-8">
|
||||
iframe id="ytplayer" type="text/html" width="640" height="360" frameborder="0"
|
||||
src="http://www.youtube.com/embed/QTfA0O7YnHQ?origin=http://masterpassword.lyndir.com&autohide=1&autoplay=0&rel=0&showinfo=0&theme=light&color=white"></iframe
|
||||
<iframe width="640" height="360" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen
|
||||
src="http://player.vimeo.com/video/45803664?title=0&byline=0&portrait=0&color=ffffff"></iframe>
|
||||
</div> -->
|
||||
|
||||
<div class="content">
|
||||
<h2>Support</h2>
|
||||
</div>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="trouble">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="trouble">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js" itemscope itemtype="http://schema.org/Product">
|
||||
<html class="no-js" itemscope itemtype="://schema.org/Product">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title itemprop="name">Master Password — Secure your life, forget your passwords.</title>
|
||||
<meta itemprop="description" content="Master Password is an ingenious password solution that makes your passwords truly impossible to lose." />
|
||||
<meta itemprop="image" content="http://masterpassword.lyndir.com/img/iTunesArtwork-Rounded.png" />
|
||||
<meta itemprop="image" content="img/about.png" />
|
||||
<meta name="apple-itunes-app" content="app-id=510296984" />
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
<script src="js/vendor/prefixfree.min.js"></script>
|
||||
</head>
|
||||
<body itemscope itemtype="http://schema.org/MobileSoftwareApplication" id="what">
|
||||
<body itemscope itemtype="://schema.org/MobileSoftwareApplication" id="what">
|
||||
<!--[if lt IE 7]>
|
||||
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
|
@ -1,4 +1,4 @@
|
||||
@import url(http://fonts.googleapis.com/css?family=Flamenco:300|Exo+2:400,100,900);
|
||||
@import url(://fonts.googleapis.com/css?family=Flamenco:300|Exo+2:400,100,900);
|
||||
|
||||
/**** BASE STYLE ****/
|
||||
html {
|
||||
|
@ -37,7 +37,7 @@ try {
|
||||
ES6 || document.write("<script src=js/mpw-js/traceur-runtime.js><\/script>");
|
||||
|
||||
// If setImmediate is not implemented we include the polyfill
|
||||
window.setImmediate || document.write("<script src=js/" + esdir + "setImmediate-polyfill.js><\/script>");
|
||||
window.setImmediate || document.write("<script src=js/mpw-js/" + esdir + "setImmediate-polyfill.js><\/script>");
|
||||
|
||||
// Include the scrypt implementation
|
||||
var SCRYPTASM_PATH = (window.location + '').replace(/[^/]*(#[^#]*)?$/, 'js/mpw-js/scrypt-asm.js');
|
||||
|
Loading…
Reference in New Issue
Block a user