use thayes encryption routines

This commit is contained in:
morse%netscape.com 2000-04-25 01:48:35 +00:00
Родитель cf392312f9
Коммит aa4dffcef8
7 изменённых файлов: 88 добавлений и 20 удалений

Просмотреть файл

@ -24,6 +24,7 @@
/* universal global variables */
var walleteditor = null; // walleteditor interface
var walletservice = null; // walletservices interface
var walletList = []; // input stream
var bundle = null; // string bundle
var JS_STRINGS_FILE = "chrome://communicator/locale/wallet/WalletEditor.properties";
@ -49,13 +50,49 @@ function ViewSynonymsFromXul(){
/*** =================== STARTING AND STOPPING =================== ***/
/* decrypt a value */
function Decrypt(crypt) {
try {
return walletservice.WALLET_Decrypt(crypt);
} catch (ex) {
return bundle.GetStringFromName("EncryptionFailure");
}
}
/* encrypt a value */
function Encrypt(text) {
try {
return walletservice.WALLET_Encrypt(text);
} catch (ex) {
alert(bundle.GetStringFromName("UnableToUnlockDatabase"));
return "";
}
}
/* see if user was able to unlock the database */
function EncryptionTest() {
try {
walletservice.WALLET_Encrypt("dummy");
} catch (ex) {
alert(bundle.GetStringFromName("UnableToUnlockDatabase"));
window.close();
}
}
/* initializes the wallet editor dialog */
function Startup()
{
walleteditor = Components.classes["component://netscape/walleteditor/walleteditor-world"].createInstance();
walleteditor = walleteditor.QueryInterface(Components.interfaces.nsIWalletEditor);
walletservice = Components.classes['component://netscape/wallet'];
walletservice = walletservice.getService();
walletservice = walletservice.QueryInterface(Components.interfaces.nsIWalletService);
bundle = srGetStrBundle(JS_STRINGS_FILE); /* initialize string bundle */
EncryptionTest(); /* abort if user failed to unlock the database */
if (!FetchInput()) {
return; /* user failed to unlock the database */
}
@ -121,7 +158,7 @@ function FetchInput()
}
}
}
entries[j] = stringsLength;
entries[j] = stringsLength-1;
j = 0;
for (i=0; i<entriesLength; i++) {
if (i == 0 || (strings[entries[i]] != strings[entries[i-1]])) {
@ -381,7 +418,8 @@ function ViewEntries()
var lastPlusOne = schemas[FirstSelectedSchema()+1];
for (i=first; i<lastPlusOne; i++) {
if (strings[entries[i]+1] != "") {
AddItem("entrieslist", [strings[entries[i]+1]], "tree_", i-first);
var text = Decrypt(strings[entries[i]+1]);
AddItem("entrieslist", [text], "tree_", i-first);
}
}
SchemaSelected();
@ -401,7 +439,8 @@ function ViewSynonyms()
var first = entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+2;
var lastPlusOne = entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()+1]-1;
for (i=first; i<lastPlusOne; i++) {
AddItem("synonymslist", [strings[i]], "tree_", i-first);
var text = Decrypt(strings[i]);
AddItem("synonymslist", [text], "tree_", i-first);
}
EntrySelected();
}
@ -532,14 +571,19 @@ function AddEntry0() {
if (text == "") {
return;
}
var crypt = Encrypt(text);
if (crypt == "") {
/* user failed to unlock the database */
return;
}
stringIndex = entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()];
if(strings[entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+1]=="") {
addString(entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+1, text);
addString(entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+1, crypt);
return;
}
addString(stringIndex, strings[entries[schemas[FirstSelectedSchema()]]]);
addString(stringIndex+1, text);
addString(stringIndex+1, crypt);
addString(stringIndex+2, "");
entriesLength++;
@ -559,7 +603,12 @@ function AddSynonym0() {
if (text == "") {
return;
}
addString(entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+2, text);
var crypt = Encrypt(text);
if (crypt == "") {
/* user failed to unlock the database */
return;
}
addString(entries[schemas[FirstSelectedSchema()]+FirstSelectedEntry()]+2, crypt);
}
function deleteString(stringToDelete) {

Просмотреть файл

@ -21,3 +21,5 @@
EnterNewSchema=Enter a new field name
EnterNewEntry=Enter a new value for the field
EnterNewSynonym=Enter another value that means the same thing
EncryptionFailure=Encryption Failure
UnableToUnlockDatabase=Unable to unlock database

Просмотреть файл

@ -70,4 +70,7 @@ interface nsIWalletService : nsISupports {
[noscript] void SI_GetSignonListForViewer(in nsAutoStringRef aSignonList);
[noscript] void SI_GetRejectListForViewer(in nsAutoStringRef aRejectList);
[noscript] void SI_SignonViewerReturn(in nsAutoString results);
string WALLET_Encrypt(in wstring text);
wstring WALLET_Decrypt(in string crypt);
};

Просмотреть файл

@ -25,19 +25,15 @@
#include "nsIModule.h"
#include "nsIGenericFactory.h"
#include "nsWalletService.h"
#include "nsBasicStreamGenerator.h"
// Define the constructor function for the nsWalletlibService
NS_GENERIC_FACTORY_CONSTRUCTOR(nsWalletlibService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsBasicStreamGenerator)
// The list of components we register
static nsModuleComponentInfo components[] = {
{ NS_WALLETSERVICE_CLASSNAME, NS_WALLETSERVICE_CID,
NS_WALLETSERVICE_PROGID, nsWalletlibServiceConstructor },
{ NS_BASIC_STREAM_GENERATOR_CLASSNAME, NS_BASIC_STREAM_GENERATOR_CID,
NS_BASIC_STREAM_GENERATOR_PROGID, nsBasicStreamGeneratorConstructor },
};
NS_IMPL_NSGETMODULE("nsWalletModule", components)

Просмотреть файл

@ -43,9 +43,6 @@
static NS_DEFINE_IID(kDocLoaderServiceCID, NS_DOCUMENTLOADER_SERVICE_CID);
// Defined and used in wallet.cpp
extern nsIKeyedStreamGenerator *gKeyedStreamGenerator;
nsWalletlibService::nsWalletlibService()
{
NS_INIT_REFCNT();
@ -59,16 +56,13 @@ nsWalletlibService::~nsWalletlibService()
#ifdef DEBUG_dp
printf("Wallet Service destroyed successfully.\n");
#endif /* DEBUG_dp */
// Release the keyed stream generator that we might have acquired
NS_IF_RELEASE(gKeyedStreamGenerator);
}
NS_IMPL_THREADSAFE_ISUPPORTS6(nsWalletlibService,
NS_IMPL_THREADSAFE_ISUPPORTS5(nsWalletlibService,
nsIWalletService,
nsIObserver,
nsIFormSubmitObserver,
nsIDocumentLoaderObserver,
nsIPasswordSink,
nsISupportsWeakReference)
NS_IMETHODIMP nsWalletlibService::WALLET_PreEdit(nsAutoString& walletList) {
@ -391,7 +385,7 @@ nsWalletlibService::OnEndURLLoad
NS_IMETHODIMP
nsWalletlibService::GetPassword(PRUnichar **password)
{
return Wallet_GetMasterPassword(password);
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
@ -399,3 +393,21 @@ nsWalletlibService::HaveData(const char *url, const PRUnichar *userName, PRBool
{
return ::SINGSIGN_HaveData(url, userName, stripUrl, _retval);
}
NS_IMETHODIMP
nsWalletlibService::WALLET_Encrypt (const PRUnichar *text, char **crypt) {
nsAutoString textAutoString = text;
nsAutoString cryptAutoString;
PRBool rv = ::Wallet_Encrypt(textAutoString, cryptAutoString);
*crypt = cryptAutoString.ToNewCString();
return rv;
}
NS_IMETHODIMP
nsWalletlibService::WALLET_Decrypt (const char *crypt, PRUnichar **text) {
nsAutoString cryptAutoString = crypt;
nsAutoString textAutoString;
PRBool rv = ::Wallet_Decrypt(cryptAutoString, textAutoString);
*text = textAutoString.ToNewUnicode();
return rv;
}

Просмотреть файл

@ -75,6 +75,9 @@ public:
NS_IMETHOD SI_GetRejectListForViewer(nsAutoString& aRejectList);
NS_IMETHOD SI_SignonViewerReturn(nsAutoString results);
NS_IMETHOD WALLET_Encrypt (const PRUnichar *text, char **crypt);
NS_IMETHOD WALLET_Decrypt (const char *crypt, PRUnichar **text);
// nsIObserver
NS_DECL_NSIOBSERVER
NS_IMETHOD Notify(nsIContent* formNode, nsIDOMWindow* window, nsIURI* actionURL);

Просмотреть файл

@ -73,8 +73,11 @@ WLLT_FetchFromNetCenter();
extern void
WLLT_ExpirePassword();
extern NS_METHOD
Wallet_GetMasterPassword(PRUnichar **password);
extern nsresult
Wallet_Encrypt (nsAutoString text, nsAutoString& crypt);
extern nsresult
Wallet_Decrypt (nsAutoString crypt, nsAutoString& text);
XP_END_PROTOS