diff --git a/mock-db-connection.cs b/mock-db-connection.cs
new file mode 100644
index 0000000..ba1fcc2
--- /dev/null
+++ b/mock-db-connection.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Data.SqlClient;
+namespace TestConnectionString
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ using (SqlConnection conn = new SqlConnection("Server=localhost;Database=SQLShackDemo;User Id=SuperHero;Password=1pass;"))
+ {
+ conn.Open();
+ Console.WriteLine("Connection is just opened");
+ System.Threading.Thread.Sleep(10000);
+ conn.Close();
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/mock-environment-variables.env b/mock-environment-variables.env
new file mode 100644
index 0000000..ad404ef
--- /dev/null
+++ b/mock-environment-variables.env
@@ -0,0 +1,32 @@
+# Environment varialbes and secrets
+# NOTE: You can reference secrets from a cloud secret manager by
+# following this pattern: secret://[provider]/[resource]
+
+# Google Cloud
+# https://console.cloud.google.com/
+GOOGLE_CLOUD_PROJECT=example
+GOOGLE_CLOUD_REGION=us-central1
+
+# Cloud Identity Platform (a.k.a. Firebase Auth)
+# https://console.cloud.google.com/customer-identity
+FIREBASE_APP_ID=1:674174690042:web:bb8d27dcc9e48fc0a7690d
+FIREBASE_API_KEY=BIzbEyGBAlkrEIvlYgZeub9LBCkYJM6ySIMF2Je
+FIREBASE_AUTH_DOMAIN=example.com
+
+# Cloudflare
+# https://dash.cloudflare.com/
+CLOUDFLARE_ACCOUNT_ID=a8b47b39ab92525b2653229b28a1fc31
+CLOUDFLARE_ZONE_ID=f3206a12cd93f45de116318496037c9f
+CLOUDFLARE_API_TOKEN=secret://google/projects/example/secrets/cloudflare-api-token/versions/latest
+
+# PostgreSQL Database
+# https://www.postgresql.org/docs/current/libpq-envars.htm
+PGHOST=34.172.75.101
+PGPORT=5432
+PGUSER=secret://google/projects/example/secrets/db-user/versions/latest
+PGPASSWORD=secret://google/projects/example/secrets/db-password/versions/latest
+
+# SendGrid
+# https://app.sendgrid.com/settings/api_keys
+EMAIL_FROM=hello@example.com
+SENDGRID_API_KEY=secrets://google/projects/example/secrets/sendgrid-api-key/versions/latest
\ No newline at end of file
diff --git a/mock-google-api.js b/mock-google-api.js
new file mode 100644
index 0000000..f06b19c
--- /dev/null
+++ b/mock-google-api.js
@@ -0,0 +1,26 @@
+
+
\ No newline at end of file
diff --git a/mock-google-oauth.json b/mock-google-oauth.json
new file mode 100644
index 0000000..c51377d
--- /dev/null
+++ b/mock-google-oauth.json
@@ -0,0 +1,11 @@
+{
+ "installed": {
+ "client_id": "c151f93feb034ed7da85",
+ "project_id": "my-mock-project",
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://oauth2.googleapis.com/token",
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+ "client_secret": "0fd3f9942d1e65a267a5541ee1fc31d78d8aefda",
+ "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"]
+ }
+}
diff --git a/mock-jwt b/mock-jwt
new file mode 100644
index 0000000..8d58226
--- /dev/null
+++ b/mock-jwt
@@ -0,0 +1 @@
+eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzNDU2Nzg5LCJuYW1lIjoiSm9zZXBoIn0.OpOSSw7e485LOP5PrzScxHb7SR6sAOMRckfFwi4rp7o
\ No newline at end of file
diff --git a/mock-jwt-2 b/mock-jwt-2
new file mode 100644
index 0000000..2407e6f
--- /dev/null
+++ b/mock-jwt-2
@@ -0,0 +1,12 @@
+eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
+eyJjbGllbnRfaWQiOiJZekV6TUdkb01ISm5PSEJpT0cxaWJEaHlOVEE9IiwicmVzcG9uc2Vf
+dHlwZSI6ImNvZGUiLCJzY29wZSI6ImludHJvc2NwZWN0X3Rva2VucywgcmV2b2tlX3Rva2Vu
+cyIsImlzcyI6ImJqaElSak0xY1hwYWEyMXpkV3RJU25wNmVqbE1iazQ0YlRsTlpqazNkWEU9
+Iiwic3ViIjoiWXpFek1HZG9NSEpuT0hCaU9HMWliRGh5TlRBPSIsImF1ZCI6Imh0dHBzOi8v
+bG9jYWxob3N0Ojg0NDMve3RpZH0ve2FpZH0vb2F1dGgyL2F1dGhvcml6ZSIsImp0aSI6IjE1
+MTYyMzkwMjIiLCJleHAiOiIyMDIxLTA1LTE3VDA3OjA5OjQ4LjAwMCswNTQ1In0.
+IxvaN4ER-PlPgLYzfRhk_JiY4VAow3GNjaK5rYCINFsEPa7VaYnRsaCmQVq8CTgddihEPPXe
+t2laH8_c3WqxY4AeZO5eljwSCobCHzxYdOoFKbpNXIm7dqHg_5xpQz-YBJMiDM1ILOEsER8A
+DyF4NC2sN0K_0t6xZLSAQIRrHvpGOrtYr5E-SllTWHWPmqCkX2BUZxoYNK2FWgQZpuUOD55H
+fsvFXNVQa_5TFRDibi9LsT7Sd_az0iGB0TfAb0v3ZR0qnmgyp5pTeIeU5UqhtbgU9RnUCVmG
+IK-SZYNvrlXgv9hiKAZGhLgeI8hO40utfT2YTYHgD2Aiufqo3RIbJA
\ No newline at end of file
diff --git a/mock-rsa.pem b/mock-rsa.pem
new file mode 100644
index 0000000..8587990
--- /dev/null
+++ b/mock-rsa.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA0pj32LapDxsvsOdgVWzkZMdp/k7R+KJhuXLUxFTuRQFlBDcc
+mIPbkKzcJZO8pTXlRrqa4TiOLmdSM1AAW4cIX6xNYjO6V6Xx7wsXntg2YlYlN59e
+lbaj08VY59XRwTDNqBnINUVGdJKy2qxe/NUf0+vtp9Fbms4aKYyoP6G6zVUtVjLi
+vZzG8+3zEJlHJzTu5TTurqYLxPSIJCSxCFWuqcmiO7wFr/IdtzbygmI3D4dlCP51
+azZ4PnXYVXBb6TeB0FYEC7kAlSMFbKVRkuRAyrLQbxJWJNQOMFRO4XRyaCEbZKtO
+5ig6zt8An8ncfcNLgYAsvLOgpByq+kU/Ny98CwIDAQABAoIBAQDDQokqKdH965sA
+TscG7Xul5S7lV3dfLE+nfky/7G8vE+fxTJf64ObG8T78qEoUdDAsr//CKonJhIq2
+gMqUElM1QbBOCOARPA9hL8uqv5VM/8pqFB3CeiDTzPptmdZtZS6JWb5DhgOZOhsS
+nRdFHOXxu6ISIw7oLYgcVgn5VZ65mTzN6yB7pKsYkbm0NcJcmLnfuGbpQEP3WmC9
+X4wO7galKdHXuSxRdcJxCag2k0W7S4UAbp1tPmRAeDdOXqbGL7hu14rUZYtkiuRP
+546GDvOv+meHpDJve1hZ20CH2kRVq4DC64prPNfRJ1exSd94vlhokWL6SzTXItwm
+L8TUnHeBAoGBAPTi6WqbVcL9Uy2qJA8fJg7oN4yQ/goOh+mlW3Fsdig0VsQjxWWI
+ftb/tDv6UyHw50Ms66gT+h4dWepFVFDPb38HAhoU/RvmNCHWd33Nmhd1qf2jOQiR
+Q9q2qJ0gFgKFlrbJNTOkaFni2UdJ7ySS937C2rdOm5GTOaCODl6M4UjRAoGBANwn
+sFdT/HeY2lx84+jMxrzVOeNUpelye9G+VYk5poIMBSXX4Qm0V4EhmBOA4dEGwfhR
+yW/p1TG0uzvOu2igUVx2YcaxUZMLBSny++awUcnAbIoN175vqS0zhGKfKgsK1ak3
+/8P32zMm1vSz3ZR/+tzgcayWmOE8O1Cfw+Zks24bAoGBAIekjKAVTIrGIOWhYXnS
+yhTlwaclxOEzLUtY4W7RIh2g6BKascNMuN1EI8Q5IwUg2ChYYGvoLNmzblOadVqR
+m/OjoSFrUMu8VlIL5oITeW/XKAKq/3Nka05hcMIfvLFG57V1e/eP8JEhWzLmnAUJ
+NvfK3LU+YGNhRkFNjl4G8N6RAoGBAJMmA/uaqzjU9b6zyzGjDYLRkiucPHjYiGIc
+sddSrTRnDFnK/SMbYxFwftEqZ8Tqm2N6ZwViaZkbj7nd5+16mmcOyTOg+UErMHxl
+aHE8kK4k62cq8XTb9Vu8/1NbxyIyT7UXNOCrHdwGrc5JGmVTVT2k1tXgoraJJ6wv
+3SR1UmjZAoGARV26w6VMQKV0Y4ntnSIoGYWO9/15gSe2H3De+IPs4LyOP714Isi+
+2JcO4QPvgRfd5I5FY6FTi7T0Gz2/DXHggv9DXM9Q2yXMhV+3tkTuNFeDwBw7qRGy
+mCwOcAwHJ6GtCNvBDlpot6SauHEKKpzQobtq7giIEU3aSYR2unNg4wA=
+-----END RSA PRIVATE KEY-----
\ No newline at end of file
diff --git a/mock-session-cookie b/mock-session-cookie
new file mode 100644
index 0000000..c748d63
--- /dev/null
+++ b/mock-session-cookie
@@ -0,0 +1 @@
+[com.ibm.commerce.catalog.businesscontext.CatalogContext|null%26null%26false%26false%26false][com.ibm.commerce.context.base.BaseContext|10601%26%2d1002%26%2d1002%26%2d1][com.ibm.commerce.context.experiment.ExperimentContext|null]
\ No newline at end of file
diff --git a/mock-session-key.js b/mock-session-key.js
new file mode 100644
index 0000000..32f0fa4
--- /dev/null
+++ b/mock-session-key.js
@@ -0,0 +1,122 @@
+var sessionKeys = require('../')
+var test = require('tape')
+var base64 = require('base64-js')
+
+// ##########################################################################
+// # WARNING : WARNING : WARNING : WARNING : WARNING : WARNING : WARNING
+// # DO NOT CHANGE THE RESULT VALUES. THEY ARE USED BY MORE THAN ONE LIBRARY
+// # AND THE OUTPUTS MUST BE CONSTANT TO ENSURE INTEROPERABILITY!
+// #
+// # IF THESE TESTS NO LONGER PASS THEN INTEROPERABILITY IS BROKEN!
+// ##########################################################################
+
+// INTERACTIVE
+
+test('interactive test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(7)
+
+ t.notOk(err, 'interactive no error')
+
+ t.equal(key.byteKeys.length, 8, 'interactive byteKeys length')
+ t.equal(key.hexKeys.length, 8, 'interactive hexKeys length')
+ t.equal(key.naclEncryptionKeyPairs.length, 8, 'interactive naclEncryptionKeyPairs length')
+ t.equal(key.naclEncryptionKeyPairsBase64.length, 8, 'interactive naclEncryptionKeyPairsBase64 length')
+ t.equal(key.naclSigningKeyPairs.length, 8, 'interactive naclSigningKeyPairs length')
+ t.equal(key.naclSigningKeyPairsBase64.length, 8, 'interactive naclSigningKeyPairsBase64 length')
+ })
+})
+
+test('interactive id test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(2)
+
+ t.notOk(err, 'interactive id no error')
+
+ t.equals(key.id, 'b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514', 'interactive id')
+ })
+})
+
+test('interactive byteKeys test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(2)
+
+ t.notOk(err, 'interactive byteKeys no error')
+
+ t.deepEqual(key.byteKeys,
+ [
+ new Uint8Array([227, 213, 226, 155, 22, 212, 112, 32, 60, 247, 86, 101, 125, 154, 151, 234, 71, 59, 82, 79, 8, 52, 188, 100, 91, 28, 165, 216, 183, 137, 157, 17]),
+ new Uint8Array([1, 37, 254, 86, 67, 74, 79, 174, 191, 132, 239, 255, 168, 102, 235, 106, 29, 219, 45, 47, 237, 108, 62, 205, 151, 27, 163, 160, 14, 0, 166, 54]),
+ new Uint8Array([81, 64, 179, 222, 199, 221, 82, 29, 93, 162, 162, 48, 44, 38, 209, 199, 21, 244, 64, 92, 47, 201, 177, 111, 93, 89, 82, 130, 203, 120, 135, 187]),
+ new Uint8Array([128, 57, 78, 134, 230, 191, 121, 88, 50, 177, 118, 75, 63, 231, 21, 168, 106, 103, 187, 78, 254, 58, 140, 198, 237, 3, 109, 126, 68, 60, 204, 216]),
+ new Uint8Array([125, 57, 175, 89, 168, 203, 202, 97, 200, 211, 78, 174, 118, 117, 162, 77, 206, 120, 124, 239, 76, 158, 219, 104, 27, 72, 253, 129, 100, 216, 68, 122]),
+ new Uint8Array([244, 123, 137, 212, 254, 81, 59, 36, 159, 247, 79, 163, 24, 189, 249, 58, 104, 13, 58, 174, 84, 236, 166, 53, 158, 251, 235, 160, 188, 44, 17, 35]),
+ new Uint8Array([70, 41, 248, 98, 4, 156, 146, 253, 236, 23, 38, 177, 1, 91, 139, 123, 15, 96, 53, 41, 168, 60, 244, 52, 89, 16, 219, 60, 29, 183, 32, 110]),
+ new Uint8Array([61, 52, 141, 115, 90, 229, 18, 231, 253, 192, 39, 20, 196, 222, 98, 126, 178, 56, 26, 30, 100, 75, 225, 191, 81, 74, 155, 41, 78, 19, 53, 97])
+ ]
+ , 'interactive byteKeys')
+ })
+})
+
+test('interactive hexKeys test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(2)
+
+ t.notOk(err, 'interactive hexKeys no error')
+
+ t.deepEqual(key.hexKeys,
+ [
+ 'e3d5e29b16d470203cf756657d9a97ea473b524f0834bc645b1ca5d8b7899d11',
+ '0125fe56434a4faebf84efffa866eb6a1ddb2d2fed6c3ecd971ba3a00e00a636',
+ '5140b3dec7dd521d5da2a2302c26d1c715f4405c2fc9b16f5d595282cb7887bb',
+ '80394e86e6bf795832b1764b3fe715a86a67bb4efe3a8cc6ed036d7e443cccd8',
+ '7d39af59a8cbca61c8d34eae7675a24dce787cef4c9edb681b48fd8164d8447a',
+ 'f47b89d4fe513b249ff74fa318bdf93a680d3aae54eca6359efbeba0bc2c1123',
+ '4629f862049c92fdec1726b1015b8b7b0f603529a83cf4345910db3c1db7206e',
+ '3d348d735ae512e7fdc02714c4de627eb2381a1e644be1bf514a9b294e133561'
+ ]
+ , 'interactive hexKeys')
+ })
+})
+
+test('interactive naclEncryptionKeyPairsBase64 test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(2)
+
+ t.notOk(err, 'interactive naclEncryptionKeyPairsBase64 no error')
+
+ t.deepEqual(key.naclEncryptionKeyPairsBase64,
+ [
+ {secretKey: '49XimxbUcCA891ZlfZqX6kc7Uk8INLxkWxyl2LeJnRE=', publicKey: '9G8XJgiIXj32stQmxtUa8vmmvLGTssTrEwd9tIYpVkA='},
+ {secretKey: 'ASX+VkNKT66/hO//qGbrah3bLS/tbD7NlxujoA4ApjY=', publicKey: 'JH73SmhYv43j25rpC8q797XHQi4hx/DrAcQCb5i143k='},
+ {secretKey: 'UUCz3sfdUh1doqIwLCbRxxX0QFwvybFvXVlSgst4h7s=', publicKey: 'HmpoJqIjMnHYqvQheiCc8HXymyiGHX3ell8A+2WE330='},
+ {secretKey: 'gDlOhua/eVgysXZLP+cVqGpnu07+OozG7QNtfkQ8zNg=', publicKey: 'otEJhqs+cpZ1x4OHva30k4T8ye7x5eUBc2UR5IcZkhc='},
+ {secretKey: 'fTmvWajLymHI006udnWiTc54fO9MnttoG0j9gWTYRHo=', publicKey: 'AHHyBuknbD8/2sOe5fUWY7y9zVkOD1SrjaLdBRglVDM='},
+ {secretKey: '9HuJ1P5ROySf90+jGL35OmgNOq5U7KY1nvvroLwsESM=', publicKey: 'uFKZeT1VgkltnczCmljitEQswPFjQT2mS6nRKAJ4YnE='},
+ {secretKey: 'Rin4YgSckv3sFyaxAVuLew9gNSmoPPQ0WRDbPB23IG4=', publicKey: 'W/VA/NmgV4idPxVtzuGE8Uo5bs2fQU0L2cxhoZJFgyU='},
+ {secretKey: 'PTSNc1rlEuf9wCcUxN5ifrI4Gh5kS+G/UUqbKU4TNWE=', publicKey: 'zyQcH+swlgDiBwzDAtFnTMKWR//DdNPyFYNLLMOLsjc='}
+ ]
+ , 'interactive naclEncryptionKeyPairsBase64')
+ })
+})
+
+test('interactive naclSigningKeyPairsBase64 test', function (t) {
+ sessionKeys.generate('user@example.com', 'pet sprain our trial patch bg', function (err, key) {
+ t.plan(9)
+
+ t.notOk(err, 'interactive naclSigningKeyPairsBase64 no error')
+
+ // NOTE : Test only the public (verify) key against the Ruby gem output.
+ // RbNaCl and tweetnacl-js somehow have different private key values,
+ // but the same public key values. This is OK, since the private
+ // key is never shared.
+ t.equals(key.naclSigningKeyPairsBase64[0]['publicKey'], '9mc6TmR6fw+OfPZA+TI4pDMeensYo3vHjCAWwNJr5Sg=', 'public key 0')
+ t.equals(key.naclSigningKeyPairsBase64[1]['publicKey'], 'IA4yoeU/2xv2elvmJWFLP3Hiy2Hp5FdGpdrJjkf+5FU=', 'public key 1')
+ t.equals(key.naclSigningKeyPairsBase64[2]['publicKey'], '/orhEpXoWrbHQcWlg/IEnNiJvW+2j0lS7+/gvOFlppc=', 'public key 2')
+ t.equals(key.naclSigningKeyPairsBase64[3]['publicKey'], 'JAr8Pcij0HTvraNF9UeZ3vx0rvtixv4aIIMuDXrq+xc=', 'public key 3')
+ t.equals(key.naclSigningKeyPairsBase64[4]['publicKey'], 'j9v+uOiZ2iVYwIiSMEeh8LVtFVagKkQ0n8lM6g7NIEY=', 'public key 4')
+ t.equals(key.naclSigningKeyPairsBase64[5]['publicKey'], 'SJF1MvZ0Ggb1UQWHKkn9NHAkHU9A/ofV159fCsB6Pbo=', 'public key 5')
+ t.equals(key.naclSigningKeyPairsBase64[6]['publicKey'], 'KlYHO13rFU3vlWxHvMo0s7nILVH6rzsgDAblSz3yVaw=', 'public key 6')
+ t.equals(key.naclSigningKeyPairsBase64[7]['publicKey'], 'HllzWBHwzXC4XnQU0xSzGDYN5aUhD2lbSQJVF3f2mQA=', 'public key 7')
+ })
+})
diff --git a/mock-ssh-key b/mock-ssh-key
new file mode 100644
index 0000000..3291156
--- /dev/null
+++ b/mock-ssh-key
@@ -0,0 +1,38 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+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
+-----END OPENSSH PRIVATE KEY-----
diff --git a/mock-ssh-key.pub b/mock-ssh-key.pub
new file mode 100644
index 0000000..9f6a33a
--- /dev/null
+++ b/mock-ssh-key.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCvpkgemaJV0fgXysO0wfokZfBOgKcdVNd9H+vPMtuYq9+wX4b4jBstQ2U147jmI5KWDppiA5UR3yH4BsIKJIW/EBvn9eWx4YANriDae8qM2rF87O8nJ6sJjXChobPcte4CDTlHlqPPVIews6uUvuqP1Lh93E8HbLjeP2W5tiigRysOu/wDyP3AB3Mc8futkMNjt/INIQD6PWGvP2Esc7M/LJQj1nB1qp2Mx5HIIVbOCvKcvu9+7VqP5kvbXvF4tH323VbHy+L0I4qgIzHoCP51JS4YlDgkMe+ttX7Mb8sTqJNKpmdn3+Om7lSZdbJIztMGunDoQQQ/0qJb0ZpGrQn00CxaNRixBhRGMmFBqh5tQZCc+3+vJRAJkKinCI2qyPvxl9xQS9a3EO/FHtF62uP/dcuSndvymsdKWEzXMqoB9y64bAdH6NMfpFPNfXJ6i9DudJRCvypJz8uyjUr2WN3cnXPq63JM+VUn3DDXMhDvGZDMZHuZ2PLU+QQEBujJa/0= jgarriss@MM289243-PC
diff --git a/mock-username-password.c b/mock-username-password.c
new file mode 100644
index 0000000..9a202cf
--- /dev/null
+++ b/mock-username-password.c
@@ -0,0 +1,31 @@
+#include
+#include
+
+using namespace std; //introduces namespace std
+int main( void )
+{
+ int password;
+ password = 1234;
+
+ string username;
+ username = 'Raymond';
+ string userinput;
+
+ do
+ {
+ cout << "Enter username:";
+ cin >> userinput;
+ if (userinput == username);
+ {
+ cout <<"\n";
+ cout << "Enter password:";
+ cin >> password;
+ }
+ }
+ while (userinput == username);
+ if (password == 1234)
+ cout << "Access Granted...";
+ if (password != 1234)
+ cout << "Access Denied.....Invalid Username/Password:";
+ return 0;
+}
\ No newline at end of file
diff --git a/mock-username-password.py b/mock-username-password.py
new file mode 100644
index 0000000..f814af3
--- /dev/null
+++ b/mock-username-password.py
@@ -0,0 +1,33 @@
+from hashlib import md5
+from getpass import getpass
+import sys
+
+print("Hello! Welcome to FaceSnap!")
+
+attempts = 0
+check_username = "5945261a168e06a5b763cc5f4908b6b2"
+check_password = "48d6215903dff56238e52e8891380c8f"
+# These hashes have been generated earlier on.
+# This is not how you would go about storing usernames and passwords,
+# but for the sake of simplicity, we'll do it like this.
+
+while True:
+ username = input("Username: ")
+ password = getpass("Password: ")
+ # Getpass will not echo input to the screen, so your password remains
+ # invisible
+ print()
+
+ if attempts == 3:
+ sys.exit("Too many failed attempts.")
+
+ if md5(username.encode().hexdigest()) == check_username:
+ if md5(password.encode().hexdigest()) == check_password:
+ print("Username and password entered correctly.")
+ # Username and password match - do something here
+ else:
+ print("Password entered incorrectly.")
+ attempts += 1
+ else:
+ print("Username entered incorrectly.")
+ attempts += 1
\ No newline at end of file