Escrow Agent Verification
  1. Verify Termination Event.   
Escrow Agent Key Release
  1. verify termination event.   if unable to verify, do nothing.
  2. once verified, search email account for 'Pracplay Glean Lease Escrow Decryption Keys'
  3. find the most recent email with this subject
  4. this email contains a two column CSV file (csv = comma seperated values)
    1. column 1 is called LeaseUser and contains the email address of the user who should receive their escrow key under this procedure
    2. column 2 is called UserLeaseEscrowDecryptionKey and contains the private decryption key for each user
  5. you will email the user their column two information, so they can access the information already in their own storage.     Please do not share column 2 information between users.
  6. Please email each user (col1) their respective Escrow Decrypt Key (col2), along with these instructions on how to access this web page. 
  7. Don't email users anything outside of their specific row in the csv.
  8. If after you have followed the above procedures, people have an issue please feel free to provide them the decryptor source links or code below.
Escrow Key Release Email Template

Subject: Glean Lease Escrow Termination Event

Dear Client,

A termination event has occured and Pracplay is no longer able to provide Glean Lease service.

You can continue to access your glean designs via their raw code.

To do this simply follow the escrow decryption instructions at http://www.pracplay.com/products/glean/escrow

You will need your escrow key to start the decryption.  Your escrow key is is 

<insert user's escrow key here>

For more information on the termination event, reply to this email.

Thank you,

Pracplay Lease Escrow Agent





DECRYPTOR SOURCE CODE 
(optional, but maybe useful for a user who experiences problems running included escrow decryptor)

Source for Lease Escrow Decryptor :

Source for the Lease Escrow Termination Event Decryptor is included with every Glean install.

Here is the program source :

decryptor code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace LeaseEscrowTerminationEventDecryptor
{
public partial class LETEDMain : Form
{
public LETEDMain()
{
InitializeComponent();
}


void debug(string msg)
{
debugControl1.GotDebug(msg);
}


string decryptkey { get { return encrypkey.Text; } }


private void button1_Click(object sender, EventArgs e)
{
// verify key
if (string.IsNullOrWhiteSpace(decryptkey))
{
debug("Must provide a valid escrow key before starting decryption.");
return;
}


OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.Filter = "Encrypted Leases (*.cs)|*.cs|All Files (*.*)|*.*";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
int ok = 0;
debug("starting decryption of " + ofd.FileNames.Length + " escrowed files.");
foreach (var f in ofd.FileNames)
if (decrypt(f))
ok++;
debug("decrypted " + ok + "/" + ofd.FileNames.Length + " successfully.");
}
}


bool decrypt(string file)
{
// open file
var fd = PracCore.Common.Util.getfile(file,debug);
if (string.IsNullOrWhiteSpace(fd))
{
debug("Skipped as no content found in file: "+fd);
return false;
}
var code = PracCore.Common.EncDec.Decrypt(fd, decryptkey);
var shortname = System.IO.Path.GetFileNameWithoutExtension(file);
var path = System.IO.Path.GetDirectoryName(file);
var newpath = path + "\\" + shortname+ "_decrypted.cs";
var ok = PracCore.Common.Util.setfile(newpath, code);
if (ok)
debug("decrypted: " + shortname + " to: " + newpath);
else
debug("error decrypting: " + file);
return ok;
}
}
}